Repository: mpostol/OPC-UA-OOI Branch: master Commit: fb227e938ce1 Files: 1068 Total size: 13.2 MB Directory structure: gitextract_6xajbiz7/ ├── .gitattributes ├── .github/ │ ├── FUNDING.yml │ └── ISSUE_TEMPLATE/ │ ├── ISSUE_TEMPLATE.md │ ├── PrepareReleaseTask.md │ ├── bug_report.md │ ├── custom.md │ └── feature_request.md ├── .gitignore ├── .nuget/ │ ├── NuGet.Config │ └── NuGet.targets ├── .vscode/ │ └── settings.json ├── CONTRIBUTING.md ├── COVERPAGE.md ├── Common/ │ ├── Infrastructure/ │ │ ├── Common.Infrastructure.csproj │ │ ├── Common.Infrastructure.nuspec.nuspec │ │ ├── Common.Infrastructure.nuspec.tt │ │ ├── Diagnostic/ │ │ │ ├── IEventSourceProvider.cs │ │ │ ├── ITraceSource.cs │ │ │ └── TraceSourceBase.cs │ │ ├── OPCUAOOIKey.snk │ │ ├── README.md │ │ └── Serializers/ │ │ ├── INamespaces.cs │ │ ├── IStylesheetNameProvider.cs │ │ └── XmlFile.cs │ ├── README.md │ └── Tests/ │ └── InfrastructureUnitTest/ │ ├── App.config │ ├── Common.Infrastructure.UnitTest.csproj │ ├── Instrumentation/ │ │ └── Extensions.cs │ ├── Properties/ │ │ └── AssemblyInfo.cs │ ├── TraceSourceBaseUnitTest.cs │ └── packages.config ├── Common.playlist ├── CommonResources/ │ ├── Media/ │ │ ├── Figures.pptx │ │ └── Figures.wmf │ ├── ModelingProject/ │ │ ├── Configuration.dgml │ │ └── UANetworkingArchitecture/ │ │ ├── Configuration.classdiagram │ │ ├── Configuration.classdiagram.layout │ │ ├── ModelDefinition/ │ │ │ ├── Package_2319.uml │ │ │ ├── Package_2321.uml │ │ │ ├── Package_2322.uml │ │ │ └── UANetworkingArchitecture.uml │ │ ├── UANetworkingArchitecture.modelproj │ │ ├── UAOOI.UANetworkingReferenceApplication.dgml │ │ └── UAOOI.UANodesetValidation.dgml │ ├── README.MD │ └── T4Definitions/ │ ├── CodeHeader.snippet │ ├── Model.t4 │ ├── ReleaseNoteTemplate.md │ ├── ReleaseNoteTemplate.tt │ ├── ReleaseNoteTemplate5-0-2-Alpha.md │ ├── ReleaseNoteTemplate5-1.md │ ├── ReleaseTask.md │ ├── T4Definitions.csproj │ ├── Template.AssemblyInfo.cs │ ├── Template.AssemblyInfo.tt │ ├── Template.nuspec.nuspec │ └── Template.nuspec.tt ├── Configuration/ │ ├── Core/ │ │ ├── Configuration.Core.csproj │ │ ├── ConfigurationCore.nuspec │ │ ├── ConfigurationCore.tt │ │ ├── IConfiguration.cs │ │ ├── IInstanceConfiguration.cs │ │ ├── INodeDescriptor.cs │ │ ├── InstanceNodeClassesEnum.cs │ │ ├── OPCUAOOIKey.snk │ │ ├── README.md │ │ └── UAServerConfigurationEventArgs.cs │ ├── DataBindings/ │ │ ├── Configuration.DataBindings.csproj │ │ ├── Configuration.DataBindings.nuspec │ │ ├── Configuration.DataBindings.tt │ │ ├── ConfigurationBase.cs │ │ ├── IConfigurationEditor.cs │ │ ├── IInstanceConfigurationFactory.cs │ │ ├── InstanceConfigurationBase.cs │ │ ├── NodeDescriptorBase.cs │ │ ├── OPCUAOOIKey.snk │ │ ├── Properties/ │ │ │ └── AssemblyInfo.cs │ │ ├── README.MD │ │ ├── Settings.cs │ │ ├── UANetworkingConfigurationEditor.cs │ │ └── app.config │ ├── Networking/ │ │ ├── CommonDefinitions.cs │ │ ├── Configuration.Networking.csproj │ │ ├── Configuration.Networking.nuspec │ │ ├── Configuration.Networking.tt │ │ ├── ConfigurationDataFactoryIO.cs │ │ ├── ConfigurationFactoryBase.cs │ │ ├── IConfigurationDataFactory.cs │ │ ├── IConfigurationFactory.cs │ │ ├── OPCUAOOIKey.snk │ │ ├── Properties/ │ │ │ ├── AssemblyInfo.cs │ │ │ ├── Resources.Designer.cs │ │ │ └── Resources.resx │ │ ├── README.MD │ │ ├── Serialization/ │ │ │ ├── BuiltInType.cs │ │ │ ├── ConfigurationData.XsdDataContractExporter.xsd │ │ │ ├── ConfigurationData.cd │ │ │ ├── ConfigurationData.cs │ │ │ ├── ConfigurationData.xsd │ │ │ ├── ConfigurationData.xsd.cs │ │ │ ├── ConfigurationVersionDataType.cs │ │ │ ├── DataMemberConfiguration.cs │ │ │ ├── DataSetConfiguration.cs │ │ │ ├── FieldEncodingEnum.cs │ │ │ ├── GoCS.cmd │ │ │ ├── GoXSD.cmd │ │ │ ├── InstanceNodeClassesEnum.cs │ │ │ ├── MessageHandlerConfiguration.cs │ │ │ ├── MessageReaderConfiguration.cs │ │ │ ├── MessageWriterConfiguration.cs │ │ │ ├── NodeDescriptor.cs │ │ │ ├── TypeDictionary.cs │ │ │ ├── UATypeInfo.cs │ │ │ ├── ValueRanks.cs │ │ │ ├── schema.xsd │ │ │ ├── svcutil.hlp │ │ │ └── xsd.hlp │ │ ├── Serializers/ │ │ │ ├── JSONDataContractSerializers.cs │ │ │ ├── SerializerType.cs │ │ │ └── XmlDataContractSerializers.cs │ │ └── UANetworkingConfiguration.cs │ ├── NetworkingUpgrade/ │ │ ├── Configuration.Networking.Upgrade.csproj │ │ ├── ConfigurationManagement.cs │ │ ├── OPCUAOOIKey.snk │ │ ├── Properties/ │ │ │ └── AssemblyInfo.cs │ │ └── Re_l1_00_16/ │ │ ├── BuiltInType.cs │ │ ├── CommonDefinitions.cs │ │ ├── ConfigurationData.cs │ │ ├── ConfigurationData.xsd │ │ ├── ConfigurationData.xsd.cs │ │ ├── FieldEncodingEnum.cs │ │ ├── InstanceNodeClassesEnum.cs │ │ ├── NodeDescriptor.cs │ │ ├── UATypeInfo.cs │ │ └── ValueRanks.cs │ ├── README.md │ └── Tests/ │ ├── DataBindingsUnitTest/ │ │ ├── Configuration.DataBindings.UnitTest.csproj │ │ ├── ConfigurationBaseUnitTest.cs │ │ ├── Exports/ │ │ │ ├── ConfigurationEditor.cs │ │ │ ├── Container.cs │ │ │ ├── InstanceConfigurationFactory.cs │ │ │ └── Logger.cs │ │ ├── InstanceConfigurationBaseUnitTest.cs │ │ ├── NodeDescriptor.cs │ │ ├── NodeDescriptorBaseUnitTest.cs │ │ ├── OPCUAOOIKey.snk │ │ ├── Properties/ │ │ │ ├── AssemblyInfo.cs │ │ │ └── AssemblyInfo.tt │ │ ├── UANetworkingConfigurationEditorUnitTest.cs │ │ ├── app.config │ │ └── packages.config │ ├── NetworkingUnitTest/ │ │ ├── CSharpSelectedTypesEncoding.cs │ │ ├── Configuration.Networking.UnitTest.csproj │ │ ├── ConfigurationDataUnitTest.cs │ │ ├── ConfigurationFactoryBaseUnitTest.cs │ │ ├── DataSetConfigurationUnitTest.cs │ │ ├── Instrumentation/ │ │ │ ├── ConfigurationDataWrapper.cs │ │ │ ├── Container.cs │ │ │ ├── CustomConfigurationData.cs │ │ │ ├── GoXSD.cmd │ │ │ ├── Logger.cs │ │ │ └── ReferenceConfiguration.cs │ │ ├── JSONDataContractSerializersUnitTest.cs │ │ ├── NodeDescriptorUnitTest.cs │ │ ├── OPCUAOOIKey.snk │ │ ├── PrepareTests.cs │ │ ├── Properties/ │ │ │ └── AssemblyInfo.cs │ │ ├── TestData/ │ │ │ ├── ConfigurationDataConsumer.json │ │ │ ├── ConfigurationDataConsumer.xml │ │ │ ├── ConfigurationDataProducer.json │ │ │ ├── ConfigurationDataProducer.xml │ │ │ ├── ConsumerConfigurationDataWrapper.xml │ │ │ └── CustomConfigurationData.xml │ │ ├── UANetworkingConfigurationUnitTest.cs │ │ ├── UATypeInfoUnitTest.cs │ │ ├── XmlDataContractSerializersUnitTest.cs │ │ └── packages.config │ └── NetworkingUpgradeUnitTest/ │ ├── Configuration.Networking.Upgrade.UnitTest.csproj │ ├── InitializeTests.cs │ ├── OPCUAOOIKey.snk │ ├── Properties/ │ │ └── AssemblyInfo.cs │ ├── Re_l1_00_16UnitTest.cs │ ├── TestingData/ │ │ ├── ConfigurationDataConsumer.xml │ │ └── ConfigurationDataProducer.xml │ └── packages.config ├── Configuration.playlist ├── DataDiscovery/ │ ├── DiscoveryServices/ │ │ ├── DataDiscovery.DiscoveryServices.csproj │ │ ├── DataDiscoveryServices.cs │ │ ├── Models/ │ │ │ ├── DomainDescriptor.GoCS.cmd │ │ │ ├── DomainDescriptor.GoXSD.cmd │ │ │ ├── DomainDescriptor.cs │ │ │ ├── DomainDescriptor.xsd │ │ │ ├── DomainDescriptor.xsd.cs │ │ │ ├── DomainModel.GoCS.cmd │ │ │ ├── DomainModel.GoXSD.cmd │ │ │ ├── DomainModel.cs │ │ │ ├── DomainModel.xsd │ │ │ ├── DomainModel.xsd.cs │ │ │ └── SemanticsDataIndex.cs │ │ ├── OPCUAOOIKey.snk │ │ ├── Priority.cs │ │ ├── Properties/ │ │ │ ├── AssemblyInfo.cs │ │ │ └── UAOOI.DataDiscovery.DiscoveryServices.nuspec │ │ ├── ReadMe.old │ │ ├── ReadMe.tt │ │ ├── ReadMe.txt │ │ └── Readme.md │ ├── DomainModel.md │ ├── ProjectDescription.md │ ├── README.MD │ └── Tests/ │ └── DiscoveryServices.UnitTest/ │ ├── DataDiscovery.DiscoveryServices.UnitTest.csproj │ ├── DataDiscoveryServicesUnitTest.cs │ ├── DomainDescriptorUnitTest.cs │ ├── DomainModelUnitTest.cs │ ├── OPCUAOOIKey.snk │ ├── Properties/ │ │ ├── AssemblyInfo.cs │ │ └── AssemblyInfo.tt │ └── TestData/ │ ├── DomainDescriptor.xml │ ├── DomainDescriptorFactory.cs │ ├── DomainModel.xml │ ├── commsvr.com.UA.Examples.BoilersSet.DomainModel.cs │ └── root.zone/ │ ├── DomainDescriptor.xml │ └── commsvr.com/ │ ├── DomainDescriptor.xml │ └── UA/ │ └── Examples/ │ └── BoilersSet/ │ ├── Commsvr.UA.Examples.BoilersSet.NodeSet2.xml │ ├── DomainDescriptor.xml │ └── DomainModel.xml ├── DataDiscovery.playlist ├── InformationProcessing.md ├── Introduction2ComplexDataProcessing.md ├── Networking/ │ ├── Core/ │ │ ├── HandlerState.cs │ │ ├── IAssociationState.cs │ │ ├── IBinaryDataTransferGraphReceiver.cs │ │ ├── IBinaryDataTransferGraphSender.cs │ │ ├── IMessageHandlerFactory.cs │ │ ├── INetworkingEventSourceProvider.cs │ │ ├── Networking.Core.csproj │ │ ├── Networking.Core.nuspec.nuspec │ │ ├── Networking.Core.nuspec.tt │ │ ├── OPCUAOOIKey.snk │ │ └── UAOOI.Networking.Core.xml │ ├── DataRepository/ │ │ ├── AzureGateway/ │ │ │ ├── AzureInterconnection/ │ │ │ │ ├── AzureDeviceParameters.cs │ │ │ │ ├── CommunicationContext.cs │ │ │ │ └── IDTOProvider.cs │ │ │ ├── ConfigurationDataConsumer.BoilersSet.xml │ │ │ ├── Diagnostic/ │ │ │ │ ├── AzureGatewayDiagnosticExtension.cs │ │ │ │ ├── AzureGatewaySemanticEventSource.cs │ │ │ │ └── NetworkingEventSourceProvider.cs │ │ │ ├── Networking.DataRepository.AzureGateway.csproj │ │ │ ├── OPCUAOOIKey.snk │ │ │ ├── PartBindingFactory.cs │ │ │ ├── PartConfigurationFactory.cs │ │ │ ├── PartDataManagementSetup.cs │ │ │ ├── Properties/ │ │ │ │ ├── AssemblyInfo.cs │ │ │ │ └── UAOOI.Networking.DataRepository.AzureGateway.xml │ │ │ ├── README.md │ │ │ └── RepositoryGroup.cs │ │ ├── AzureGatewayUnitTest/ │ │ │ ├── AzureInterconnection/ │ │ │ │ ├── AzureDeviceParametersUnitTest.cs │ │ │ │ └── CommunicationContextUnitTest.cs │ │ │ ├── Diagnostic/ │ │ │ │ └── AzureGatewaySemanticEventSourceUnitTest.cs │ │ │ ├── Networking.DataRepository.AzureGatewayUnitTest.csproj │ │ │ ├── OPCUAOOIKey.snk │ │ │ ├── PartBindingFactoryUnit.cs │ │ │ ├── PartConfigurationFactoryUnitTest.cs │ │ │ ├── PartDataManagementSetupUnitTest.cs │ │ │ ├── Properties/ │ │ │ │ └── AssemblyInfo.cs │ │ │ ├── RepositoryGroupUnitTest.cs │ │ │ ├── TestingData/ │ │ │ │ └── ConfigurationDataConsumer.BoilersSet.xml │ │ │ ├── app.config │ │ │ └── packages.config │ │ ├── DataLogger/ │ │ │ ├── AssemblyInfo.cs │ │ │ ├── CompositionSettings.cs │ │ │ ├── ConfigurationDataConsumer.xml │ │ │ ├── ConfigurationFactory.cs │ │ │ ├── ConsumerViewModell.cs │ │ │ ├── Diagnostic/ │ │ │ │ ├── DataLoggerEventSource.cs │ │ │ │ ├── DataLoggerEventSourceExtensions.cs │ │ │ │ └── NetworkingEventSourceProvider.cs │ │ │ ├── LoggerManagementSetup.cs │ │ │ ├── Networking.DataLogger.csproj │ │ │ ├── OPCUAOOIKey.snk │ │ │ ├── PartIBindingFactory.cs │ │ │ └── README.md │ │ └── DataLogger.UnitTest/ │ │ ├── ConsumerConfigurationFactoryUnitTest.cs │ │ ├── ConsumerViewModelUnit.cs │ │ ├── DataConsumerUnitTest.cs │ │ ├── Diagnostic/ │ │ │ └── DataLoggerEventSourceUnitTest.cs │ │ ├── Instrumentation/ │ │ │ └── TestConsumerViewModel.cs │ │ ├── Networking.DataLogger.UnitTest.csproj │ │ ├── OPCUAOOIKey.snk │ │ ├── Properties/ │ │ │ └── AssemblyInfo.cs │ │ ├── app.config │ │ └── packages.config │ ├── Encoding/ │ │ ├── EncodingFactoryBinarySimple.cs │ │ ├── Networking.Encoding.csproj │ │ ├── Networking.Encoding.nuspec.nuspec │ │ ├── Networking.Encoding.nuspec.tt │ │ ├── OPCUAOOIKey.snk │ │ ├── README.md │ │ ├── README.nupkg.md │ │ ├── UABinaryDecoderImplementation.cs │ │ └── UABinaryEncoderImplementation.cs │ ├── NetworkingCodeMap.dgml │ ├── README.MD │ ├── README.MessageCentricCommunication.md │ ├── ReferenceApplication/ │ │ ├── App.BilersSet.xml │ │ ├── App.config │ │ ├── App.xaml │ │ ├── App.xaml.cs │ │ ├── AppBootstrapper.cs │ │ ├── ApplicationSettings.cs │ │ ├── ConfigurationEditor/ │ │ │ └── Readme.txt │ │ ├── Consumer/ │ │ │ └── DataLoggerViewModel.cs │ │ ├── Controls/ │ │ │ ├── ConfigurationEditorOpenCommand.cs │ │ │ ├── INotification.cs │ │ │ ├── InteractionRequestedEventArgs.cs │ │ │ └── OpenFileCommand.cs │ │ ├── MEF/ │ │ │ ├── BootstrapperBase.cs │ │ │ ├── DefaultServiceRegistrar.cs │ │ │ ├── EventSourceBootstrapper.cs │ │ │ ├── ExceptionExtensions.cs │ │ │ ├── MefBootstrapper.cs │ │ │ └── ServiceLocatorAdapter.cs │ │ ├── MainWindow.xaml │ │ ├── MainWindow.xaml.cs │ │ ├── MainWindowViewModel.cs │ │ ├── Networking.ReferenceApplication.csproj │ │ ├── OPCUAOOIKey.snk │ │ ├── Properties/ │ │ │ ├── AssemblyInfo.cs │ │ │ ├── AssemblyInfo.tt │ │ │ ├── Resources.Designer.cs │ │ │ ├── Resources.resx │ │ │ ├── Settings.Designer.cs │ │ │ ├── Settings.settings │ │ │ └── app.manifest │ │ ├── README.MD │ │ ├── ReadMe.old │ │ ├── ReadMe.tt │ │ ├── ReadMe.txt │ │ ├── SaveFileConfirmation.cs │ │ └── packages.config │ ├── ReferenceApplication.Core/ │ │ ├── CompositionSettings.cs │ │ ├── Diagnostic/ │ │ │ ├── NetworkingEventSourceProvider.cs │ │ │ ├── ReferenceApplicationEventSource.cs │ │ │ └── ReferenceApplicationEventSourceExtensions.cs │ │ ├── IDataRepositoryStartup.cs │ │ ├── MvvmLight/ │ │ │ ├── DelegateCommand.cs │ │ │ ├── DelegateCommandBase.cs │ │ │ ├── ObservableObject.cs │ │ │ └── PropertySupport.cs │ │ ├── Networking.ReferenceApplication.Core.csproj │ │ ├── OPCUAOOIKey.snk │ │ ├── ProducerViewModel.cs │ │ └── README.md │ ├── SemanticData/ │ │ ├── Association.cd │ │ ├── Association.cs │ │ ├── AssociationsCollection.cs │ │ ├── Common/ │ │ │ ├── AssociationStateChangedEventArgs.cs │ │ │ ├── IDataUniqueIdentifier.cs │ │ │ └── ISemanticData.cs │ │ ├── ConsumerAssociation.cs │ │ ├── DataManagementSetup.cs │ │ ├── DataMemberConfiguration.helpers.cs │ │ ├── DataRepository/ │ │ │ ├── Binding.cs │ │ │ ├── ConsumerBinding.cs │ │ │ ├── ConsumerBindingMonitoredValue.cs │ │ │ ├── Extensions.cs │ │ │ ├── IBinding.cs │ │ │ ├── IConsumerBinding.cs │ │ │ ├── IProducerBinding.cs │ │ │ ├── IValueConverter.cs │ │ │ ├── ProducerBinding.cs │ │ │ └── ProducerBindingMonitoredValue.cs │ │ ├── Diagnostics/ │ │ │ ├── NetworkingEventSourceProvider.cs │ │ │ ├── ReactiveNetworkingEventSource.cs │ │ │ └── ReactiveNetworkingEventSourceExtensions.cs │ │ ├── Encoding/ │ │ │ ├── CommonDefinitions.cs │ │ │ ├── IBinaryDecoder.cs │ │ │ ├── IBinaryEncoder.cs │ │ │ ├── IDataValue.cs │ │ │ ├── IDiagnosticInfo.cs │ │ │ ├── IExpandedNodeId.cs │ │ │ ├── IExtensionObject.cs │ │ │ ├── ILocalizedText.cs │ │ │ ├── INodeId.cs │ │ │ ├── IQualifiedName.cs │ │ │ ├── IStatusCode.cs │ │ │ ├── IUADecoder.cs │ │ │ ├── IUAEcoder.cs │ │ │ ├── IVariant.cs │ │ │ ├── UABinaryDecoder.cs │ │ │ ├── UABinaryEncoder.cs │ │ │ └── VariantEncodingMask.cs │ │ ├── IBindingFactory.cs │ │ ├── IEncodingFactory.cs │ │ ├── MessageHandlersCollection.cs │ │ ├── MessageHandling/ │ │ │ ├── BinaryDecoder.cs │ │ │ ├── BinaryEncoder.cs │ │ │ ├── BinaryMessageDecoder.cs │ │ │ ├── BinaryMessageEncoder.cs │ │ │ ├── BinaryPacketDecoder.cs │ │ │ ├── BinaryPacketEncoder.cs │ │ │ ├── CommonDefinition.cs │ │ │ ├── DataSelector.cs │ │ │ ├── HeaderWriter.cs │ │ │ ├── IBinaryHeaderWriter.cs │ │ │ ├── IMessageHandler.cs │ │ │ ├── IMessageReader.cs │ │ │ ├── IMessageWriter.cs │ │ │ ├── MessageEventArg.cs │ │ │ ├── MessageHandler.cs │ │ │ ├── MessageHandling.cd │ │ │ ├── MessageHeader.cs │ │ │ ├── MessageLengthEnum.cs │ │ │ ├── MessageReaderBase.cs │ │ │ ├── MessageTypeEnum.cs │ │ │ ├── MessageWriterBase.cs │ │ │ ├── NetworkMessage.abnf │ │ │ ├── NetworkMessageFlags.cs │ │ │ └── PacketHeader.cs │ │ ├── Networking.SemanticData.csproj │ │ ├── Networking.SemanticData.nuspec │ │ ├── Networking.SemanticData.tt │ │ ├── OPCUAOOIKey.snk │ │ ├── ProducerAssociation.cs │ │ ├── Properties/ │ │ │ └── AssemblyInfo.cs │ │ ├── README.MD │ │ ├── README.PubSubMTF.md │ │ ├── README.nupkg.md │ │ ├── READMEDataDiscoveryAndBinding.md │ │ ├── READMEGettingStartedTutorial.md │ │ ├── README_AMQPMapping.md │ │ ├── README_EthernetMapping.md │ │ ├── README_MQTTMapping.md │ │ └── app.config │ ├── Simulator.Boiler/ │ │ ├── AddressSpace/ │ │ │ ├── BaseDataVariableState.cs │ │ │ ├── BaseInstanceState.cs │ │ │ ├── BaseObjectState.cs │ │ │ ├── BaseVariableState.cs │ │ │ ├── FolderState.cs │ │ │ ├── ISemanticDataSetSource.cs │ │ │ ├── ISemanticDataSource.cs │ │ │ ├── ISystemContext.cs │ │ │ ├── IVariable.cs │ │ │ ├── ModelExtensions.cs │ │ │ ├── NodeState.cs │ │ │ ├── OOI.Opc.Ua.Classes.cs │ │ │ ├── PropertyState.cs │ │ │ └── SemanticDataSetSource.cs │ │ ├── ConfigurationDataConsumer.BoilersSet.xml │ │ ├── ConfigurationDataProducer.BoilersSet.xml │ │ ├── DataGenerator.cs │ │ ├── Model/ │ │ │ ├── BoilerState.cs │ │ │ ├── BoilersSet.cs │ │ │ ├── Commsvr.UA.Examples.BoilersSet.Classes.cs │ │ │ ├── CustomControllerState.cs │ │ │ ├── GenericControllerState.cs │ │ │ ├── LevelIndicatorState.cs │ │ │ └── tempuri.org.UA.Examples.BoilerType.Classes.cs │ │ ├── Networking.Simulator.Boiler.csproj │ │ ├── OPCUAOOIKey.snk │ │ ├── ProducerConfigurationFactory.cs │ │ ├── Properties/ │ │ │ └── AssemblyInfo.cs │ │ ├── README.md │ │ ├── SimulatorDataManagementSetup.cs │ │ └── UAInformationModel/ │ │ ├── BoilerExampleSolution.uamdsl │ │ └── DemoConfiguration/ │ │ ├── BoilerExample.oses │ │ ├── BoilerExample.uasconfig │ │ ├── BoilerType/ │ │ │ ├── tempuri.org.UA.Examples.BoilerType.Classes.cs │ │ │ ├── tempuri.org.UA.Examples.BoilerType.NodeSet.xml │ │ │ ├── tempuri.org.UA.Examples.BoilerType.NodeSet2.xml │ │ │ ├── tempuri.org.UA.Examples.BoilerType.PredefinedNodes.uanodes │ │ │ ├── tempuri.org.UA.Examples.BoilerType.PredefinedNodes.xml │ │ │ ├── tempuri.org.UA.Examples.BoilerType.Types.bsd │ │ │ └── tempuri.org.UA.Examples.BoilerType.Types.xsd │ │ ├── BoilerType.csv │ │ ├── BoilerType.xml │ │ ├── BoilersSet/ │ │ │ ├── Commsvr.UA.Examples.BoilersSet.Classes.cs │ │ │ ├── Commsvr.UA.Examples.BoilersSet.NodeSet.xml │ │ │ ├── Commsvr.UA.Examples.BoilersSet.NodeSet2.xml │ │ │ ├── Commsvr.UA.Examples.BoilersSet.PredefinedNodes.uanodes │ │ │ ├── Commsvr.UA.Examples.BoilersSet.PredefinedNodes.xml │ │ │ ├── Commsvr.UA.Examples.BoilersSet.Types.bsd │ │ │ └── Commsvr.UA.Examples.BoilersSet.Types.xsd │ │ ├── BoilersSet.csv │ │ ├── BoilersSet.xml │ │ └── DefaultConfig.xml │ ├── SimulatorInteroperabilityTest/ │ │ ├── AssemblyInfo.cs │ │ ├── ConfigurationDataProducer.xml │ │ ├── DataGenerator.cs │ │ ├── Networking.SimulatorInteroperabilityTest.csproj │ │ ├── OPCUAOOIKey.snk │ │ ├── ProducerConfigurationFactory.cs │ │ ├── README.md │ │ └── SimulatorDataManagementSetup.cs │ ├── Tests/ │ │ ├── Networking.Simulator.Boiler.Unit/ │ │ │ ├── AddressSpace/ │ │ │ │ ├── BaseInstanceStateUnitTest.cs │ │ │ │ ├── NodeStateUnitTest.cs │ │ │ │ ├── PropertyStateUnitTest.cs │ │ │ │ └── SemanticDataSetSourceUnitTest.cs │ │ │ ├── AssemblyCleanupFixture.cs │ │ │ ├── AssemblyInitializeFixture.cs │ │ │ ├── CommonServiceLocatorInstrumentation/ │ │ │ │ ├── ConfigurationDataProducer.xml │ │ │ │ ├── Container.cs │ │ │ │ └── Logger.cs │ │ │ ├── DataGeneratorUnitTest.cs │ │ │ ├── Deploy/ │ │ │ │ └── Producer.tml.xml │ │ │ ├── Model/ │ │ │ │ ├── AnalogItemStateUnitTest.cs │ │ │ │ ├── BoilerDrumStateUnitTest.cs │ │ │ │ ├── BoilerStateUnitTest.cs │ │ │ │ ├── BoilersSetUnitTest.cs │ │ │ │ ├── CustomControllerStateUnitTest.cs │ │ │ │ └── GenericControllerStateUnitTest.cs │ │ │ ├── Networking.Simulator.Boiler.UnitTest.csproj │ │ │ ├── OPCUAOOIKey.snk │ │ │ ├── ProducerConfigurationFactoryUnitTest.cs │ │ │ ├── Properties/ │ │ │ │ └── AssemblyInfo.cs │ │ │ ├── app.config │ │ │ └── packages.config │ │ ├── Networking.SimulatorInteroperabilityTest.UnitTest/ │ │ │ ├── DataGeneratorUnitTest.cs │ │ │ ├── Networking.SimulatorInteroperabilityTest.UnitTest.csproj │ │ │ ├── OPCUAOOIKey.snk │ │ │ ├── ProducerConfigurationFactoryUnitTest.cs │ │ │ ├── Properties/ │ │ │ │ └── AssemblyInfo.cs │ │ │ └── packages.config │ │ ├── ReferenceApplicationUnitTest/ │ │ │ ├── ApplicationSettingsUnitTest1.cs │ │ │ ├── Diagnostic/ │ │ │ │ └── ReferenceApplicationEventSourceUnitTest.cs │ │ │ ├── MEF/ │ │ │ │ ├── BootstrapperBaseUnitTest.cs │ │ │ │ ├── DefaultServiceRegistrarUnitTest.cs │ │ │ │ └── MefBootstrapperUnitTest.cs │ │ │ ├── MainWindowViewModelUnitTest.cs │ │ │ ├── Networking.ReferenceApplication.UnitTest.csproj │ │ │ ├── OPCUAOOIKey.snk │ │ │ ├── Properties/ │ │ │ │ └── AssemblyInfo.cs │ │ │ ├── app.config │ │ │ └── packages.config │ │ ├── SemanticDatalUnitTest/ │ │ │ ├── AssociationUnitTest.cs │ │ │ ├── BinaryDecoderUnitTest.cs │ │ │ ├── BinaryEncoderTest.cs │ │ │ ├── CommonDefinitions.cs │ │ │ ├── ConfigurationUnitTest.cs │ │ │ ├── ConsumerBindingMonitoredValueUnitTest.cs │ │ │ ├── ConsumerBindingUnitTest.cs │ │ │ ├── ConsumerDeviceSimulatorUnitTest.cs │ │ │ ├── DataManagementSetupUnitTest.cs │ │ │ ├── Diagnostics/ │ │ │ │ └── ReactiveNetworkingEventSourceUnitTest.cs │ │ │ ├── EncodingFactoryUnitTest.cs │ │ │ ├── ExtensionsUnitTest.cs │ │ │ ├── HeaderTestHelpers.cs │ │ │ ├── HeaderWriterUnitTest.cs │ │ │ ├── Helpers/ │ │ │ │ ├── MyState.cs │ │ │ │ ├── UABinaryDecoderImplementation.cs │ │ │ │ └── UABinaryEncoderImplementation.cs │ │ │ ├── MessageHandlerFactory/ │ │ │ │ ├── BinaryDataTransferGraphBaseFixture.cs │ │ │ │ ├── BinaryDataTransferGraphReceiverFixture.cs │ │ │ │ ├── BinaryDataTransferGraphSenderFixture.cs │ │ │ │ └── MessageHandlerFactoryFixture.cs │ │ │ ├── MessageHeaderUnitTest.cs │ │ │ ├── MessageWriterBaseTest.cs │ │ │ ├── Networking.SemanticData.UnitTest.csproj │ │ │ ├── OPCUAOOIKey.snk │ │ │ ├── OPCUAServerProducerSimulatorUnitTest.cs │ │ │ ├── PacketHeaderUnitTest.cs │ │ │ ├── PersistentConfigurationUnitTest.cs │ │ │ ├── ProducerAssociationUnitTest.cs │ │ │ ├── ProducerBindingMonitoredValueUnitTest.cs │ │ │ ├── ProducerBindingUnitTest.cs │ │ │ ├── Properties/ │ │ │ │ └── AssemblyInfo.cs │ │ │ ├── Simulator/ │ │ │ │ ├── ConsumerDeviceSimulator.cs │ │ │ │ ├── CustomNodeManager.cs │ │ │ │ ├── OPCUAServerSimulator.cs │ │ │ │ ├── PersistenConfiguration.cs │ │ │ │ └── ScreeViewModel.cs │ │ │ ├── UABinaryDecoderImplementationUnitTest.cs │ │ │ ├── UABinaryEncoderImplementationUnitTest.cs │ │ │ ├── Writers.cd │ │ │ ├── app.config │ │ │ └── packages.config │ │ └── UDPMessageHandler.UnitTest/ │ │ ├── BinaryUDPPackageReaderTestClass.cs │ │ ├── Configuration/ │ │ │ ├── IPAddressValidationRuleUnitTest.cs │ │ │ ├── UDPReaderConfigurationUnitTest.cs │ │ │ └── UDPWriterConfigurationUnitTest.cs │ │ ├── Diagnostic/ │ │ │ └── UDPMessageHandlerSemanticEventSourceUnitTest.cs │ │ ├── Networking.UDPMessageHandler.UnitTest.csproj │ │ ├── OPCUAOOIKey.snk │ │ ├── Properties/ │ │ │ ├── AssemblyInfo.cs │ │ │ └── AssemblyInfo.tt │ │ ├── app.config │ │ └── packages.config │ └── UDPMessageHandler/ │ ├── BinaryUDPPackageReader.cs │ ├── BinaryUDPPackageWriter.cs │ ├── Configuration/ │ │ ├── IPAddressValidationRule.cs │ │ ├── UDPReaderConfiguration.cs │ │ └── UDPWriterConfiguration.cs │ ├── Diagnostic/ │ │ ├── NetworkingEventSourceProvider.cs │ │ ├── UDPMessageHandlerDiagnosticExtension.cs │ │ └── UDPMessageHandlerSemanticEventSource.cs │ ├── MessageHandlerFactory.cs │ ├── Networking.UDPMessageHandler.csproj │ ├── Networking.UDPMessageHandler.nuspec.nuspec │ ├── Networking.UDPMessageHandler.nuspec.tt │ ├── OPCUAOOIKey.snk │ ├── Properties/ │ │ └── AssemblyInfo.cs │ ├── README.md │ ├── README.nupkg.md │ ├── UAOOI.Networking.UDPMessageHandler.xml │ └── app.config ├── Networking.playlist ├── OPCUAMainTechnologyFeatures.md ├── OPCUnifiedArchitecture.md ├── Preface.md ├── README.MD ├── REFERENCES.md ├── SUMMARY.md ├── SemanticData/ │ ├── ADIInformationModelAdoption.md │ ├── ADIModelDeployment.md │ ├── AddressSpaceAddressSpaceModel.md │ ├── AddressSpaceComplianceTestTool/ │ │ ├── App.config │ │ ├── CommandLineSyntax/ │ │ │ ├── Extensions.cs │ │ │ └── Options.cs │ │ ├── DoDisplayHelp.cmd │ │ ├── DoExport.cmd │ │ ├── DoExportXMLModels.cmd │ │ ├── DoValidate.cmd │ │ ├── OPCUAOOIKey.snk │ │ ├── Program.cs │ │ ├── Properties/ │ │ │ ├── AssemblyInfo.cs │ │ │ └── AssemblyInfo.tt │ │ ├── README.md │ │ ├── SemanticData.AddressSpaceComplianceTestTool.csproj │ │ ├── XMLModels/ │ │ │ ├── DataTypeTest.NodeSet2.xml │ │ │ ├── ObjectTypeTest.NodeSet2.xml │ │ │ ├── ReferenceTest.NodeSet2.xml │ │ │ └── VariableTypeTest.NodeSet2.xml │ │ └── packages.config │ ├── AdoptingCompanionStandardADI.md │ ├── BuildingErrorsHandling/ │ │ ├── BuildErrors.cs │ │ ├── BuildErrors.partial.cs │ │ ├── BuildErrors.tt │ │ ├── IIdentifierSyntax.md │ │ ├── OPCUAOOIKey.snk │ │ ├── Properties/ │ │ │ ├── SemanticData.BuildingErrorsHandling.nuspec │ │ │ └── SemanticData.BuildingErrorsHandling.tt │ │ ├── SemanticData.BuildingErrorsHandling.csproj │ │ ├── TraceMessage.cs │ │ └── XML/ │ │ ├── BuildErrorsCollection.xml │ │ └── BuildErrorsCollection.xsd │ ├── CompanionSpecificationInformationModelFforAnalyzers.md │ ├── DesignDeploymentSupport.md │ ├── InformationModelConcept.md │ ├── InformationModelFactory/ │ │ ├── DataTypePurpose.cs │ │ ├── IDataDescriptor.cs │ │ ├── IDataTypeDefinitionFactory.cs │ │ ├── IDataTypeFactory.cs │ │ ├── IDataTypeFieldFactory.cs │ │ ├── IInstanceFactory.cs │ │ ├── IMethodInstanceFactory.cs │ │ ├── IModelFactory.cs │ │ ├── INodeContainer.cs │ │ ├── INodeFactory.cs │ │ ├── IObjectInstanceFactory.cs │ │ ├── IObjectTypeFactory.cs │ │ ├── IPropertyInstanceFactory.cs │ │ ├── IReferenceFactory.cs │ │ ├── IReferenceTypeFactory.cs │ │ ├── ITypeFactory.cs │ │ ├── IVariableInstanceFactory.cs │ │ ├── IVariableTypeFactory.cs │ │ ├── IViewInstanceFactory.cs │ │ ├── ModelingRules.cs │ │ ├── OPCUAOOIKey.snk │ │ ├── Parameter.cs │ │ ├── Properties/ │ │ │ ├── AssemblyInfo.cs │ │ │ └── UAOOI.SemanticData.InformationModelFactory.5.1.0.nuspec │ │ ├── README.md │ │ ├── ReleaseStatus.cs │ │ ├── SemanticData.InformationModelFactory.csproj │ │ └── UAConstants/ │ │ ├── AccessLevels.cs │ │ ├── AccessRestrictions.cs │ │ ├── BrowseNames.cs │ │ └── Namespaces.cs │ ├── InformationModelLifecycle.md │ ├── InformationModelsDevelopment.md │ ├── README.MD │ ├── SemanticData.playlist │ ├── SolutionConfiguration/ │ │ ├── SemanticData..SolutionConfiguration.csproj │ │ └── Serialization/ │ │ ├── UAModelDesignerSolution.GoCS.cmd │ │ ├── UAModelDesignerSolution.GoXSD.cmd │ │ ├── UAModelDesignerSolution.cs │ │ ├── UAModelDesignerSolution.design.cs │ │ └── UAModelDesignerSolution.xsd │ ├── StandardInformationModel.md │ ├── Tests/ │ │ ├── AddressSpaceComplianceTestToolUnitTests/ │ │ │ ├── App.config │ │ │ ├── CommandLineSyntaxUnitTest.cs │ │ │ ├── DoDisplayHelp.cmd │ │ │ ├── DoExport Boiler.cmd │ │ │ ├── DoExport.cmd │ │ │ ├── DoValidate.cmd │ │ │ ├── DoValidateBoiler.cmd │ │ │ ├── Instrumentation/ │ │ │ │ └── Extensions.cs │ │ │ ├── OPCUAOOIKey.snk │ │ │ ├── ProgramUnitTest.cs │ │ │ ├── Properties/ │ │ │ │ ├── AssemblyInfo.cs │ │ │ │ └── AssemblyInfo.tt │ │ │ ├── SemanticData.AddressSpaceComplianceTestTool.UnitTests.csproj │ │ │ ├── TraceSourceBaseUnitTest.cs │ │ │ ├── XMLModels/ │ │ │ │ ├── Commsvr.UA.Examples.BoilersSet.NodeSet2.xml │ │ │ │ ├── DataTypeTest.ModelDesign.xml │ │ │ │ ├── DataTypeTest.NodeSet2.xml │ │ │ │ ├── ObjectTypeTest.NodeSet2.xml │ │ │ │ ├── ReferenceTest.NodeSet2.xml │ │ │ │ ├── VariableTypeTest.NodeSet2.xml │ │ │ │ └── tempuri.org.UA.Examples.BoilerType.NodeSet2.xml │ │ │ └── packages.config │ │ ├── DataMangement.playlist │ │ ├── README.MD │ │ └── USNodeSetValidationUnitTestProject/ │ │ ├── AddressSpaceContextUnitTest.cs │ │ ├── DataSerialization/ │ │ │ ├── ExtensionsUnitTest.cs │ │ │ ├── NodeIdUnitTest.cs │ │ │ └── QualifiedNameUnitTest.cs │ │ ├── ExtensionsUnitTest.cs │ │ ├── Helpers/ │ │ │ ├── TestData.cs │ │ │ ├── TraceDiagnosticFixture.cs │ │ │ └── TracedAddressSpaceContext.cs │ │ ├── InformationModelFactoryUnitTest.cs │ │ ├── ModelFactoryTestingFixture/ │ │ │ ├── DataTypeDefinitionFactoryBase.cs │ │ │ ├── DataTypeFactoryBase.cs │ │ │ ├── DataTypeFieldFactoryBase.cs │ │ │ ├── InformationModelFactoryBase.cs │ │ │ ├── InstanceFactoryBase.cs │ │ │ ├── MethodInstanceFactoryBase.cs │ │ │ ├── NodeFactoryBase.cs │ │ │ ├── NodesContainer.cs │ │ │ ├── ObjectInstanceFactoryBase.cs │ │ │ ├── ObjectTypeFactoryBase.cs │ │ │ ├── PropertyInstanceFactoryBase.cs │ │ │ ├── ReferenceFactoryBase.cs │ │ │ ├── ReferenceTypeFactoryBase.cs │ │ │ ├── TypeFactoryBase.cs │ │ │ ├── VariableInstanceFactoryBase.cs │ │ │ ├── VariableTypeFactoryBase.cs │ │ │ └── ViewInstanceFactoryBase.cs │ │ ├── NamespaceTableUnitTest.cs │ │ ├── OPCUAOOIKey.snk │ │ ├── Properties/ │ │ │ ├── AssemblyInfo.cs │ │ │ └── AssemblyInfo.tt │ │ ├── README.md │ │ ├── SemanticData.UANodeSetValidation.UnitTest.csproj │ │ ├── ServiceResultExceptionUnitTest.cs │ │ ├── UANodeContextUnitTest.cs │ │ ├── UAReferenceContextTestClass.cs │ │ ├── ValidatorUnitTest.cs │ │ ├── XML/ │ │ │ ├── UAModelContextUnitTest.cs │ │ │ ├── UANodeSetUnitTest.cs │ │ │ └── UANodeUnitTest.cs │ │ ├── XMLModels/ │ │ │ ├── CorrectModels/ │ │ │ │ ├── DataTypeTest/ │ │ │ │ │ ├── DataTypeTest.Classes.cs │ │ │ │ │ ├── DataTypeTest.Constants.cs │ │ │ │ │ ├── DataTypeTest.DataTypes.cs │ │ │ │ │ ├── DataTypeTest.NodeIds.csv │ │ │ │ │ ├── DataTypeTest.NodeSet.xml │ │ │ │ │ ├── DataTypeTest.NodeSet2.xml │ │ │ │ │ ├── DataTypeTest.PredefinedNodes.uanodes │ │ │ │ │ ├── DataTypeTest.PredefinedNodes.xml │ │ │ │ │ ├── DataTypeTest.Types.bsd │ │ │ │ │ └── DataTypeTest.Types.xsd │ │ │ │ ├── DataTypeTest.csv │ │ │ │ ├── DataTypeTest.xml │ │ │ │ ├── GoNodeSet.cmd │ │ │ │ ├── ObjectTypeTest/ │ │ │ │ │ ├── ObjectTypeTest.Classes.cs │ │ │ │ │ ├── ObjectTypeTest.Constants.cs │ │ │ │ │ ├── ObjectTypeTest.DataTypes.cs │ │ │ │ │ ├── ObjectTypeTest.NodeIds.csv │ │ │ │ │ ├── ObjectTypeTest.NodeSet.xml │ │ │ │ │ ├── ObjectTypeTest.NodeSet2.xml │ │ │ │ │ ├── ObjectTypeTest.PredefinedNodes.uanodes │ │ │ │ │ ├── ObjectTypeTest.PredefinedNodes.xml │ │ │ │ │ ├── ObjectTypeTest.Types.bsd │ │ │ │ │ └── ObjectTypeTest.Types.xsd │ │ │ │ ├── ObjectTypeTest.csv │ │ │ │ ├── ObjectTypeTest.xml │ │ │ │ ├── ReferenceTest/ │ │ │ │ │ ├── ReferenceTest.Classes.cs │ │ │ │ │ ├── ReferenceTest.Constants.cs │ │ │ │ │ ├── ReferenceTest.DataTypes.cs │ │ │ │ │ ├── ReferenceTest.NodeIds.csv │ │ │ │ │ ├── ReferenceTest.NodeSet.xml │ │ │ │ │ ├── ReferenceTest.NodeSet2.xml │ │ │ │ │ ├── ReferenceTest.PredefinedNodes.uanodes │ │ │ │ │ ├── ReferenceTest.PredefinedNodes.xml │ │ │ │ │ ├── ReferenceTest.Types.bsd │ │ │ │ │ └── ReferenceTest.Types.xsd │ │ │ │ ├── ReferenceTest.csv │ │ │ │ ├── ReferenceTest.xml │ │ │ │ ├── TestModels.uamdsl │ │ │ │ ├── VariableTypeTest/ │ │ │ │ │ ├── VariableTypeTest.Classes.cs │ │ │ │ │ ├── VariableTypeTest.Constants.cs │ │ │ │ │ ├── VariableTypeTest.DataTypes.cs │ │ │ │ │ ├── VariableTypeTest.NodeIds.csv │ │ │ │ │ ├── VariableTypeTest.NodeSet.xml │ │ │ │ │ ├── VariableTypeTest.NodeSet2.xml │ │ │ │ │ ├── VariableTypeTest.PredefinedNodes.uanodes │ │ │ │ │ ├── VariableTypeTest.PredefinedNodes.xml │ │ │ │ │ ├── VariableTypeTest.Types.bsd │ │ │ │ │ └── VariableTypeTest.Types.xsd │ │ │ │ ├── VariableTypeTest.csv │ │ │ │ └── VariableTypeTest.xml │ │ │ ├── ModelsWithErrors/ │ │ │ │ ├── DuplicatedNodeId.xml │ │ │ │ ├── NotSupportedFeature.xml │ │ │ │ ├── UndefinedHasChildren.xml │ │ │ │ ├── UndefinedHasSubtype.xml │ │ │ │ ├── UndefinedHasTypeDefinition.xml │ │ │ │ ├── WrongAccessLevel.xml │ │ │ │ ├── WrongBrowseName.xml │ │ │ │ ├── WrongDisplayNameLength.xml │ │ │ │ ├── WrongEventNotifier.xml │ │ │ │ ├── WrongInverseName.xml │ │ │ │ ├── WrongNodeId.xml │ │ │ │ ├── WrongReference2Property.xml │ │ │ │ ├── WrongValueRank.xml │ │ │ │ └── WrongWriteMask.xml │ │ │ └── ProblemsToReport/ │ │ │ ├── ADI#509/ │ │ │ │ └── Opc.Ua.Adi.NodeSet2.xml │ │ │ ├── BrowseNameInheritedFrom0/ │ │ │ │ └── BrowseNameInheritedFrom0.xml │ │ │ ├── HasOrderedComponent/ │ │ │ │ └── Opc.Ua.NodeSet2.TriCycleType_V1.1.xml │ │ │ ├── MachineVision/ │ │ │ │ └── Opc.Ua.MachineVision.NodeSet2.xml │ │ │ ├── eoursel510/ │ │ │ │ ├── DoRecoverModelDesign.cmd │ │ │ │ ├── Opc.Ua.NodeSet2.TriCycleType_V1.1.ModelDesign/ │ │ │ │ │ ├── Prefix2.Classes.cs │ │ │ │ │ ├── Prefix2.NodeSet.xml │ │ │ │ │ ├── Prefix2.NodeSet2.xml │ │ │ │ │ ├── Prefix2.PredefinedNodes.uanodes │ │ │ │ │ ├── Prefix2.PredefinedNodes.xml │ │ │ │ │ ├── Prefix2.Types.bsd │ │ │ │ │ └── Prefix2.Types.xsd │ │ │ │ ├── Opc.Ua.NodeSet2.TriCycleType_V1.1.ModelDesign.csv │ │ │ │ ├── Opc.Ua.NodeSet2.TriCycleType_V1.1.ModelDesign.xml │ │ │ │ ├── Opc.Ua.NodeSet2.TriCycleType_V1.1.xml │ │ │ │ └── UAModelDesignerSolution.uamdsl │ │ │ └── fgolra177/ │ │ │ ├── Opc.Ua.Semi.NodeSet2.xml │ │ │ └── OpcUaGemModel.xml │ │ ├── XMLModelsCorrectModelsUnitTest.cs │ │ ├── XMLModelsModelsWithErrorsUnitTest.cs │ │ ├── XMLModelsProblemsToReportUnitTest.cs │ │ ├── app.config │ │ └── packages.config │ ├── UAModelDesignExport/ │ │ ├── DataTypeDefinitionFactoryBase.cs │ │ ├── DataTypeFactoryBase.cs │ │ ├── DataTypeFieldFactoryBase.cs │ │ ├── Diagnostic/ │ │ │ └── AssemblyTraceSource.cs │ │ ├── Extensions.cs │ │ ├── IModelDesignExport.cs │ │ ├── InstanceFactoryBase.cs │ │ ├── MethodInstanceFactoryBase.cs │ │ ├── ModelDesignExport.cs │ │ ├── ModelFactory.cs │ │ ├── NodeFactoryBase.cs │ │ ├── NodesContainer.cs │ │ ├── OPCUAOOIKey.snk │ │ ├── ObjectInstanceFactoryBase.cs │ │ ├── ObjectTypeFactoryBase.cs │ │ ├── Properties/ │ │ │ ├── AssemblyInfo.cs │ │ │ ├── UAModelDesignExport.Nuget.nuspec │ │ │ └── UAModelDesignExport.Nuget.tt │ │ ├── PropertyInstanceFactoryBase.cs │ │ ├── README.md │ │ ├── ReferenceFactoryBase.cs │ │ ├── ReferenceTypeFactoryBase.cs │ │ ├── SemanticData.UAModelDesignExport.csproj │ │ ├── TypeFactoryBase.cs │ │ ├── VariableInstanceFactoryBase.cs │ │ ├── VariableTypeFactoryBase.cs │ │ ├── ViewInstanceFactoryBase.cs │ │ └── XML/ │ │ ├── Resource.cs │ │ ├── UA Defined Types.xml │ │ ├── UA Model Design.cs │ │ ├── UA Model Design.md │ │ ├── UA Model Design.xsd │ │ ├── UA Model Design.xsd.cs │ │ └── UA_Model_Design.GoCS.cmd │ ├── UAModelDesignExport.UnitTest/ │ │ ├── DataTypeDefinitionFactoryBaseUnitTest.cs │ │ ├── ExtensionsUnitTest.cs │ │ ├── Instrumentation/ │ │ │ ├── Extensions.cs │ │ │ ├── IStylesheetNameProvider.cs │ │ │ ├── TracedAddressSpaceContext.cs │ │ │ └── UnitTestsExtensions.cs │ │ ├── ModelDesignExportUnitTest.cs │ │ ├── ModelDesignUnitTest.cs │ │ ├── ModelFactoryUnitTest.cs │ │ ├── Models/ │ │ │ ├── DataTypeTest/ │ │ │ │ ├── DataTypeTest.Classes.cs │ │ │ │ ├── DataTypeTest.Constants.cs │ │ │ │ ├── DataTypeTest.DataTypes.cs │ │ │ │ ├── DataTypeTest.NodeIds.csv │ │ │ │ ├── DataTypeTest.NodeSet.xml │ │ │ │ ├── DataTypeTest.NodeSet2.xml │ │ │ │ ├── DataTypeTest.PredefinedNodes.uanodes │ │ │ │ ├── DataTypeTest.PredefinedNodes.xml │ │ │ │ ├── DataTypeTest.Types.bsd │ │ │ │ └── DataTypeTest.Types.xsd │ │ │ ├── DataTypeTest.asp.xml │ │ │ ├── DataTypeTest.csv │ │ │ ├── DataTypeTest.xml │ │ │ ├── DoRecoverModelDesign.cmd │ │ │ ├── GoNodeSet.cmd │ │ │ ├── ObjectTypeTest/ │ │ │ │ ├── ObjectTypeTest.Classes.cs │ │ │ │ ├── ObjectTypeTest.Constants.cs │ │ │ │ ├── ObjectTypeTest.DataTypes.cs │ │ │ │ ├── ObjectTypeTest.NodeIds.csv │ │ │ │ ├── ObjectTypeTest.NodeSet.xml │ │ │ │ ├── ObjectTypeTest.NodeSet2.xml │ │ │ │ ├── ObjectTypeTest.PredefinedNodes.uanodes │ │ │ │ ├── ObjectTypeTest.PredefinedNodes.xml │ │ │ │ ├── ObjectTypeTest.Types.bsd │ │ │ │ └── ObjectTypeTest.Types.xsd │ │ │ ├── ObjectTypeTest.asp.xml │ │ │ ├── ObjectTypeTest.csv │ │ │ ├── ObjectTypeTest.xml │ │ │ ├── ReadMe.txt │ │ │ ├── ReferenceTest/ │ │ │ │ ├── ReferenceTest.Classes.cs │ │ │ │ ├── ReferenceTest.Constants.cs │ │ │ │ ├── ReferenceTest.DataTypes.cs │ │ │ │ ├── ReferenceTest.NodeIds.csv │ │ │ │ ├── ReferenceTest.NodeSet.xml │ │ │ │ ├── ReferenceTest.NodeSet2.xml │ │ │ │ ├── ReferenceTest.PredefinedNodes.uanodes │ │ │ │ ├── ReferenceTest.PredefinedNodes.xml │ │ │ │ ├── ReferenceTest.Types.bsd │ │ │ │ └── ReferenceTest.Types.xsd │ │ │ ├── ReferenceTest.asp.xml │ │ │ ├── ReferenceTest.csv │ │ │ ├── ReferenceTest.xml │ │ │ ├── TestModels.uamdsl │ │ │ ├── VariableTypeTest/ │ │ │ │ ├── VariableTypeTest.Classes.cs │ │ │ │ ├── VariableTypeTest.Constants.cs │ │ │ │ ├── VariableTypeTest.DataTypes.cs │ │ │ │ ├── VariableTypeTest.NodeIds.csv │ │ │ │ ├── VariableTypeTest.NodeSet.xml │ │ │ │ ├── VariableTypeTest.NodeSet2.xml │ │ │ │ ├── VariableTypeTest.PredefinedNodes.uanodes │ │ │ │ ├── VariableTypeTest.PredefinedNodes.xml │ │ │ │ ├── VariableTypeTest.Types.bsd │ │ │ │ └── VariableTypeTest.Types.xsd │ │ │ ├── VariableTypeTest.asp.xml │ │ │ ├── VariableTypeTest.csv │ │ │ └── VariableTypeTest.xml │ │ ├── NodeFactoryBaseUnitTest.cs │ │ ├── NodeSetUnitTest.cs │ │ ├── OPCUAOOIKey.snk │ │ ├── Properties/ │ │ │ └── AssemblyInfo.cs │ │ ├── SemanticData.UAModelDesignExport.UnitTest.csproj │ │ ├── UAResourcesUnitTestUnitTest.cs │ │ ├── UAResourcesUnitTestUnitTest.cs.md │ │ ├── app.config │ │ └── packages.config │ └── UANodeSetValidation/ │ ├── AddressSpace.Abstractions/ │ │ ├── AttributeWriteMask.cs │ │ ├── IAddressSpaceContext.cs │ │ ├── IDataTypeDefinition.cs │ │ ├── IModelTableEntry.cs │ │ ├── INamespaceTable.cs │ │ ├── IReference.cs │ │ ├── IRolePermission.cs │ │ ├── IUADataType.cs │ │ ├── IUAMethod.cs │ │ ├── IUANode.cs │ │ ├── IUANodeSet.cs │ │ ├── IUAObject.cs │ │ ├── IUAObjectType.cs │ │ ├── IUAReferenceType.cs │ │ ├── IUAType.cs │ │ ├── IUAVariable.cs │ │ ├── IUAVariableType.cs │ │ ├── IUAView.cs │ │ └── NodeClassEnum.cs │ ├── AddressSpaceContext.cs │ ├── AddressSpaceFactory.cs │ ├── DataSerialization/ │ │ ├── AttributeValues.cs │ │ ├── ExpandedNodeId.cs │ │ ├── Extensions.cs │ │ ├── NodeId.cs │ │ ├── Opc.Ua.Types.xsd │ │ ├── Opc_Ua_Types.cs │ │ ├── QualifiedName.cs │ │ └── ServiceResultException.cs │ ├── Diagnostic/ │ │ ├── AssemblyTraceSource.cs │ │ └── IBuildErrorsHandling.cs │ ├── Extensions.cs │ ├── IAddressSpaceBuildContext.cs │ ├── IUANodeBase.cs │ ├── IUANodeContext.cs │ ├── IValidator.cs │ ├── InformationModelFactory/ │ │ ├── DataTypeDefinitionFactoryBase.cs │ │ ├── DataTypeFactoryBase.cs │ │ ├── DataTypeFieldFactoryBase.cs │ │ ├── InformationModelFactoryBase.cs │ │ ├── InstanceFactoryBase.cs │ │ ├── MethodInstanceFactoryBase.cs │ │ ├── NodeFactoryBase.cs │ │ ├── NodesContainer.cs │ │ ├── ObjectInstanceFactoryBase.cs │ │ ├── ObjectTypeFactoryBase.cs │ │ ├── PropertyInstanceFactoryBase.cs │ │ ├── ReferenceFactoryBase.cs │ │ ├── ReferenceTypeFactoryBase.cs │ │ ├── TypeFactoryBase.cs │ │ ├── VariableInstanceFactoryBase.cs │ │ ├── VariableTypeFactoryBase.cs │ │ └── ViewInstanceFactoryBase.cs │ ├── NamespaceTable.cs │ ├── NodesCollection.cs │ ├── OPCUAOOIKey.snk │ ├── Properties/ │ │ ├── AssemblyInfo.cs │ │ ├── UANodeSetValidation.Nuget.nuspec │ │ └── UANodeSetValidation.Nuget.tt │ ├── README.MD │ ├── ReferenceKindEnum.cs │ ├── SemanticData.UANodeSetValidation.csproj │ ├── UAInformationModel/ │ │ └── Opc.Ua.Constants.cs │ ├── UANodeContext.cs │ ├── UAReferenceContext.cs │ ├── Validator.cs │ ├── XML/ │ │ ├── ClassDiagram.cd │ │ ├── Conversions.cs │ │ ├── DataTypeDefinition.cs │ │ ├── DataTypeField.cs │ │ ├── IUAModelContext.cs │ │ ├── IUANodeSetModelHeader.cs │ │ ├── ModelTableEntry.cs │ │ ├── NodeIdAlias.cs │ │ ├── NodeToDelete.cs │ │ ├── OPCBinarySchema.GoCS.cmd │ │ ├── OPCBinarySchema.cs │ │ ├── OPCBinarySchema.xsd │ │ ├── OPCFCTTInformationModelling.Svcutil.cmd │ │ ├── OPCFCTTInformationModelling.cs │ │ ├── OPCFCTTInformationModelling.xltm │ │ ├── OPCFCTTInformationModelling.xml │ │ ├── OPCFCTTInformationModelling.xsd │ │ ├── Opc.Ua.NodeSet2.xml │ │ ├── P-150101E02-AddressSpaceInterchangeXML.docx │ │ ├── README.MD │ │ ├── Reference.cs │ │ ├── ReferenceChange.cs │ │ ├── RolePermission.cs │ │ ├── UADataType.cs │ │ ├── UAInstance.cs │ │ ├── UAMethod.cs │ │ ├── UAModelContext.cs │ │ ├── UANode.cs │ │ ├── UANodeSet.CustomPart.cs │ │ ├── UANodeSet.GoCS.cmd │ │ ├── UANodeSet.cs │ │ ├── UANodeSet.xsd │ │ ├── UANodeSetChanges.cs │ │ ├── UAObject.cs │ │ ├── UAObjectType.cs │ │ ├── UAReferenceType.cs │ │ ├── UAType.cs │ │ ├── UAVariable.cs │ │ ├── UAVariableType.cs │ │ └── UAView.cs │ └── docs/ │ ├── .vscode/ │ │ └── settings.json │ └── ObjectModelSpecyficatio.md ├── SemanticData.playlist ├── TableOfContent.md ├── UAObjectOrientedInternet.sln ├── UAObjectOrientedInternet.sln.GhostDoc.user.dic ├── docs/ │ ├── AboutPartnershipProgram.md.html │ ├── Projects/ │ │ └── Networking.ProcessObserverProducer.md.html │ ├── README.md │ ├── Tiers.md.html │ ├── _config.yml │ └── style.css ├── gitignoreTemplate.txt └── license.md ================================================ FILE CONTENTS ================================================ ================================================ FILE: .gitattributes ================================================ ############################################################################### # Set default behavior to automatically normalize line endings. ############################################################################### * text=auto ############################################################################### # Set default behavior for command prompt diff. # # This is need for earlier builds of msysgit that does not have it on by # default for csharp files. # Note: This is only used by command line ############################################################################### #*.cs diff=csharp ############################################################################### # Set the merge driver for project and solution files # # Merging from the command prompt will add diff markers to the files if there # are conflicts (Merging from VS is not affected by the settings below, in VS # the diff markers are never inserted). Diff markers may cause the following # file extensions to fail to load in VS. An alternative would be to treat # these files as binary and thus will always conflict and require user # intervention with every merge. To do so, just uncomment the entries below ############################################################################### #*.sln merge=binary #*.csproj merge=binary #*.vbproj merge=binary #*.vcxproj merge=binary #*.vcproj merge=binary #*.dbproj merge=binary #*.fsproj merge=binary #*.lsproj merge=binary #*.wixproj merge=binary #*.modelproj merge=binary #*.sqlproj merge=binary #*.wwaproj merge=binary ############################################################################### # behavior for image files # # image files are treated as binary by default. ############################################################################### #*.jpg binary #*.png binary #*.gif binary ############################################################################### # diff behavior for common document formats # # Convert binary document formats to text before diffing them. This feature # is only available from the command line. Turn it on by uncommenting the # entries below. ############################################################################### #*.doc diff=astextplain #*.DOC diff=astextplain #*.docx diff=astextplain #*.DOCX diff=astextplain #*.dot diff=astextplain #*.DOT diff=astextplain #*.pdf diff=astextplain #*.PDF diff=astextplain #*.rtf diff=astextplain #*.RTF diff=astextplain ================================================ FILE: .github/FUNDING.yml ================================================ # These are supported funding model platforms github: mpostol # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] patreon: mpostol # Replace with a single Patreon username open_collective: # Replace with a single Open Collective username ko_fi: # Replace with a single Ko-fi username tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry liberapay: # Replace with a single Liberapay username issuehunt: # Replace with a single IssueHunt username otechie: # Replace with a single Otechie username custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] ================================================ FILE: .github/ISSUE_TEMPLATE/ISSUE_TEMPLATE.md ================================================ ## Issue ### Expected behavior ### Actual behavior ### Steps to reproduce the behavior ## Feature request Description ================================================ FILE: .github/ISSUE_TEMPLATE/PrepareReleaseTask.md ================================================ --- name: Relese about: Release new version tasks list title: 'Release new version' labels: 'Feature request' assignees: 'mpostol' --- - [ ] Update version information for all published assemblies (Model.t4), - [ ] Prepare an example if applicable - [ ] Update Readme files - [ ] Prepare and publish NuGet packages if applicable. - [ ] Replace project references by packages. - [ ] Create release front page - [ ] Getting Started - [ ] Version information - [ ] Build solution to create deliverable and publish the installation package - [ ] Update and publish the code help documentation - [ ] Publish release - [ ] Update the repository front page - [ ] Update the GitHub pages documentation - [ ] Close this issue and the parent milestone ================================================ FILE: .github/ISSUE_TEMPLATE/bug_report.md ================================================ --- name: Bug report about: Create a report to help us improve title: '' labels: 'Bug' assignees: '' --- ## Describe the bug A clear and concise description of what the bug is. ## To Reproduce Steps to reproduce the behavior: 1. Go to '...' 2. Click on '....' 3. Scroll down to '....' 4. See error ## Expected behavior A clear and concise description of what you expected to happen. ## Screenshots If applicable, add screenshots to help explain your problem. ## Additional context Add any other context about the problem here. ================================================ FILE: .github/ISSUE_TEMPLATE/custom.md ================================================ --- name: Custom issue template about: Describe this issue template's purpose here. --- ================================================ FILE: .github/ISSUE_TEMPLATE/feature_request.md ================================================ --- name: Feature request about: Suggest an idea for this project title: 'Enhance/Improve ' labels: 'Feature request' assignees: '' --- ### Describe problem A clear and concise description of what the problem is. ### Describe the solution you'd like A clear and concise description of what you want to happen. ### Describe alternatives you've considered A clear and concise description of any alternative solutions or features you've considered. ### List of tasks to be accomplished - [ ] Task 1 - [ ] Task 2 - [ ] TBD ### Notes Add any other context or screenshots about the feature request here. ================================================ FILE: .gitignore ================================================ ## Ignore Visual Studio temporary files, build results, and ## files generated by popular Visual Studio add-ons. ## ## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore # VS Code workspace *.code-workspace # User-specific files *.suo *.user *.userosscache *.sln.docstates # User-specific files (MonoDevelop/Xamarin Studio) *.userprefs # Build results [Dd]ebug/ [Dd]ebugPublic/ [Rr]elease/ [Rr]eleases/ x64/ x86/ bld/ [Bb]in/ [Oo]bj/ [Ll]og/ # Visual Studio 2015 cache/options directory .vs/ # Uncomment if you have tasks that create the project's static files in wwwroot #wwwroot/ # MSTest test Results [Tt]est[Rr]esult*/ [Bb]uild[Ll]og.* # NUNIT *.VisualState.xml TestResult.xml # Build Results of an ATL Project [Dd]ebugPS/ [Rr]eleasePS/ dlldata.c # .NET Core project.lock.json project.fragment.lock.json artifacts/ **/Properties/launchSettings.json *_i.c *_p.c *_i.h *.ilk *.meta *.obj *.pch *.pdb *.pgc *.pgd *.rsp *.sbr *.tlb *.tli *.tlh *.tmp *.tmp_proj *.log *.vspscc *.vssscc .builds *.pidb *.svclog *.scc # Chutzpah Test files _Chutzpah* # Visual C++ cache files ipch/ *.aps *.ncb *.opendb *.opensdf *.sdf *.cachefile *.VC.db *.VC.VC.opendb # Visual Studio profiler *.psess *.vsp *.vspx *.sap # TFS 2012 Local Workspace $tf/ # Guidance Automation Toolkit *.gpState # ReSharper is a .NET coding add-in _ReSharper*/ *.[Rr]e[Ss]harper *.DotSettings.user # JustCode is a .NET coding add-in .JustCode # TeamCity is a build add-in _TeamCity* # DotCover is a Code Coverage Tool *.dotCover # Visual Studio code coverage results *.coverage *.coveragexml # NCrunch _NCrunch_* .*crunch*.local.xml nCrunchTemp_* # MightyMoose *.mm.* AutoTest.Net/ # Web workbench (sass) .sass-cache/ # Installshield output folder [Ee]xpress/ # DocProject is a documentation generator add-in DocProject/buildhelp/ DocProject/Help/*.HxT DocProject/Help/*.HxC DocProject/Help/*.hhc DocProject/Help/*.hhk DocProject/Help/*.hhp DocProject/Help/Html2 DocProject/Help/html # Click-Once directory publish/ # Publish Web Output *.[Pp]ublish.xml *.azurePubxml # TODO: Comment the next line if you want to checkin your web deploy settings # but database connection strings (with potential passwords) will be unencrypted *.pubxml *.publishproj # Microsoft Azure Web App publish settings. Comment the next line if you want to # checkin your Azure Web App publish settings, but sensitive information contained # in these scripts will be unencrypted PublishScripts/ # NuGet Packages *.nupkg # The packages folder can be ignored because of Package Restore **/packages/* # except build/, which is used as an MSBuild target. !**/packages/build/ # Uncomment if necessary however generally it will be regenerated when needed #!**/packages/repositories.config # NuGet v3's project.json files produces more ignorable files *.nuget.props *.nuget.targets # Microsoft Azure Build Output csx/ *.build.csdef # Microsoft Azure Emulator ecf/ rcf/ # Windows Store app package directories and files AppPackages/ BundleArtifacts/ Package.StoreAssociation.xml _pkginfo.txt # Visual Studio cache files # files ending in .cache can be ignored *.[Cc]ache # but keep track of directories ending in .cache !*.[Cc]ache/ # Others ClientBin/ ~$* *~ *.dbmdl *.dbproj.schemaview *.jfm *.pfx *.publishsettings orleans.codegen.cs # Since there are multiple workflows, uncomment next line to ignore bower_components # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) #bower_components/ # RIA/Silverlight projects Generated_Code/ # Backup & report files from converting an old project file # to a newer Visual Studio version. Backup files are not needed, # because we have git ;-) _UpgradeReport_Files/ Backup*/ UpgradeLog*.XML UpgradeLog*.htm # SQL Server files *.mdf *.ldf *.ndf # Business Intelligence projects *.rdl.data *.bim.layout *.bim_*.settings # Microsoft Fakes FakesAssemblies/ # GhostDoc plugin setting file *.GhostDoc.xml # Node.js Tools for Visual Studio .ntvs_analysis.dat node_modules/ # Typescript v1 declaration files typings/ # Visual Studio 6 build log *.plg # Visual Studio 6 workspace options file *.opt # Visual Studio 6 auto-generated workspace file (contains which files were open etc.) *.vbw # Visual Studio LightSwitch build output **/*.HTMLClient/GeneratedArtifacts **/*.DesktopClient/GeneratedArtifacts **/*.DesktopClient/ModelManifest.xml **/*.Server/GeneratedArtifacts **/*.Server/ModelManifest.xml _Pvt_Extensions # Paket dependency manager .paket/paket.exe paket-files/ # FAKE - F# Make .fake/ # JetBrains Rider .idea/ *.sln.iml # CodeRush .cr/ # Python Tools for Visual Studio (PTVS) __pycache__/ *.pyc # Cake - Uncomment if you are using it # tools/** # !tools/packages.config # Telerik's JustMock configuration file *.jmconfig # BizTalk build output *.btp.cs *.btm.cs *.odx.cs ================================================ FILE: .nuget/NuGet.Config ================================================  ================================================ FILE: .nuget/NuGet.targets ================================================ $(MSBuildProjectDirectory)\..\ false false true true $([System.IO.Path]::Combine($(SolutionDir), ".nuget")) $(SolutionDir).nuget $(MSBuildProjectDirectory)\packages.$(MSBuildProjectName.Replace(' ', '_')).config $(MSBuildProjectDirectory)\packages.$(MSBuildProjectName).config $(MSBuildProjectDirectory)\packages.config $(PackagesProjectConfig) $(NuGetToolsPath)\NuGet.exe @(PackageSource) "$(NuGetExePath)" mono --runtime=v4.0.30319 "$(NuGetExePath)" $(TargetDir.Trim('\\')) -RequireConsent -NonInteractive "$(SolutionDir) " "$(SolutionDir)" $(NuGetCommand) install "$(PackagesConfig)" -source "$(PackageSources)" $(NonInteractiveSwitch) $(RequireConsentSwitch) -solutionDir $(PaddedSolutionDir) $(NuGetCommand) pack "$(ProjectPath)" -Properties "Configuration=$(Configuration);Platform=$(Platform)" $(NonInteractiveSwitch) -OutputDirectory "$(PackageOutputDir)" -symbols RestorePackages; $(BuildDependsOn); $(BuildDependsOn); BuildPackage; ================================================ FILE: .vscode/settings.json ================================================ { "cSpell.words": [ "IANA", "Xplore" ] } ================================================ FILE: CONTRIBUTING.md ================================================ # Contributing I strongly encourage community participation and contribution to this project. First, please fork the repository and commit your changes there. Once happy with your changes you can generate a 'pull request'. You must agree to the contributor license agreement before I can accept your changes. You can preview CLA [here](https://github.com/mpostol/OPC-UA-OOI/blob/master/license.md). ================================================ FILE: COVERPAGE.md ================================================ ## Object Oriented Internet > 5.0.2-Alpha ================================================ FILE: Common/Infrastructure/Common.Infrastructure.csproj ================================================ netstandard2.0 40 E:\GitHub\OPC-UA-OOI.400\Backup\ 2.0 {8817A671-ABB8-463A-A8A3-DDCFE781A6B6} publish\ true Disk false Foreground 7 Days false false true 0 1.0.0.%2a false false true true OPCUAOOIKey.snk UAOOI.Common.Infrastructure647 UAOOI.Common.Infrastructure UAOOI.Common.Infrastructure 6.4.6 Common Infrastructure Management Functionality Aimed at Object Oriented Internet MPostol cas.eu; commsvr.com https://github.com/mpostol/OPC-UA-OOI/tree/master/Networking false false This library provides API for common infrastructure management functionality aimed at Object Oriented Internet application deployment. This library provides API for common infrastructure management functionality aimed at Object Oriented Internet application deployment including but not limited to: - Common definitions - Tracking - Bootstrapper Copyright MPostol (c) 2018 Object Oriented Internet, IoT, OPC UA, CommServer. https://commsvr.gitbook.io/ooi https://github.com/mpostol/OPC-UA-OOI Object Oriented Internet, IoT, OPC UA, CommServer GitHub commsvr.com false true snupkg 6.4.6.0 6.3.6.0 True MinimumRecommendedRules.ruleset 1701;1702; IDE0001 MinimumRecommendedRules.ruleset .\bin\UAOOI.Common.Infrastructure.xml TRACE;DEBUG True True Common.Infrastructure.nuspec.tt TextTemplatingFileGenerator Common.Infrastructure.nuspec.nuspec ================================================ FILE: Common/Infrastructure/Common.Infrastructure.nuspec.nuspec ================================================  UAOOI.Common.Infrastructure 6.4.9 Object Oriented Internet Common Infrastructure Mariusz Postol Mariusz Postol false MIT https://github.com/mpostol/OPC-UA-OOI/tree/master/Networking/Core Logo64.PNG This library provides API for common infrastructure management functionality aimed at Object Oriented Internet application deployment including but not limited to: - Common definitions - Tracking - Bootstrapper The core functionality of SemanticData Reactive Networking library based on OPC UA Part 14 Pub/Sub. Copyright (C) 2022 Mariusz Postol LODZ POLAND Object Oriented Internet, OPC UA, PubSub, Information Model, IoT, M2M, DOA, Maintenance release - unimportant changes. Copyright (C) 2022 Mariusz Postol LODZ POLAND ================================================ FILE: Common/Infrastructure/Common.Infrastructure.nuspec.tt ================================================ <#@ template debug="false" hostspecific="false" language="C#" #> <#@ output extension=".nuspec" #> UAOOI.Common.Infrastructure <#=CommonVersion#><#= CommonPrerelease#> <#=NetworkingDataProduct#> Common Infrastructure <#=AssemblyCompany#> <#=Owner#> false MIT https://github.com/mpostol/OPC-UA-OOI/tree/master/Networking/Core Logo64.PNG This library provides API for common infrastructure management functionality aimed at Object Oriented Internet application deployment including but not limited to: - Common definitions - Tracking - Bootstrapper The core functionality of SemanticData Reactive Networking library based on OPC UA Part 14 Pub/Sub. <#=AssemblyCopyright#> Object Oriented Internet, OPC UA, PubSub, Information Model, IoT, M2M, DOA, Maintenance release - unimportant changes. <#=AssemblyCopyright#> <#@ include file = "..\..\CommonResources\T4Definitions\Model.t4" #> ================================================ FILE: Common/Infrastructure/Diagnostic/IEventSourceProvider.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2021, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ using System.Diagnostics.Tracing; namespace UAOOI.Common.Infrastructure.Diagnostic { /// /// Interface IEventSourceProvider - if implemented returns an instance of to be registered by the logging infrastructure. /// public interface IEventSourceProvider { /// /// Gets the part event source. /// /// Returns an instance of . EventSource GetPartEventSource(); } } ================================================ FILE: Common/Infrastructure/Diagnostic/ITraceSource.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2021, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ using System.Diagnostics; namespace UAOOI.Common.Infrastructure.Diagnostic { /// /// Interface ITraceSource - defines trace source. /// public interface ITraceSource { /// /// Writes trace data to the trace listeners in the collection using the specified , /// event identifier , and trace . /// /// One of the enumeration values that specifies the event type of the trace data. /// A numeric identifier for the event. /// The trace data. /// /// An attempt was made to trace an event during finalization. /// void TraceData(TraceEventType eventType, int id, object data); } } ================================================ FILE: Common/Infrastructure/Diagnostic/TraceSourceBase.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2021, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ using System; using System.Diagnostics; namespace UAOOI.Common.Infrastructure.Diagnostic { /// /// Class TraceSourceBase - default implementation of the /// public class TraceSourceBase : ITraceSource { /// /// Initializes a new instance of the class provider of a named . /// /// Name of the . public TraceSourceBase(string TraceSourceName) { m_TraceEventInternal = new Lazy(() => new TraceSource(TraceSourceName)); } /// /// Initializes a new instance of the class provider of a default . /// public TraceSourceBase() : this("UAOOI.Common") { } /// /// Writes trace data to the trace listeners in the collection using the specified , /// event identifier , and trace . /// /// One of the enumeration values that specifies the event type of the trace data. /// A numeric identifier for the event. /// The trace data. public virtual void TraceData(TraceEventType eventType, int id, object data) { m_TraceEventInternal.Value.TraceData(eventType, id, data); } /// /// Gets the trace source instance. /// /// The trace source instance of type . public TraceSource TraceSource => m_TraceEventInternal.Value; private Lazy m_TraceEventInternal = null; } } ================================================ FILE: Common/Infrastructure/README.md ================================================ # Common Infrastructure > NOTE The rest of document is just hidden template. ================================================ FILE: Common/Infrastructure/Serializers/INamespaces.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2021, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ using System.Collections.Generic; using System.Xml; namespace UAOOI.Common.Infrastructure.Serializers { /// /// Interface INamespaces - define functionality necessary to manage namespaces for the XML serialization /// public interface INamespaces { /// /// Gets the namespaces that is to be used to parametrize XML document. /// /// An instance of IEnumerable[XmlQualifiedName] containing the XML namespaces and prefixes that a serializer uses to generate qualified names in an XML-document instance. IEnumerable GetNamespaces(); } } ================================================ FILE: Common/Infrastructure/Serializers/IStylesheetNameProvider.cs ================================================ //____________________________________________________________________________ // // Copyright (C) 2021, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/TP //____________________________________________________________________________ namespace UAOOI.Common.Infrastructure.Serializers { /// /// Represents XML file style sheet name provider /// public interface IStylesheetNameProvider { /// /// The style sheet name /// string StylesheetName { get; } } } ================================================ FILE: Common/Infrastructure/Serializers/XmlFile.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2021, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ using System; using System.IO; using System.Linq; using System.Xml; using System.Xml.Serialization; namespace UAOOI.Common.Infrastructure.Serializers { /// /// Provides static methods for serialization objects into XML documents and writing the XML document to a file. /// public static class XmlFile { #region public /// /// Serializes the specified and writes the XML document to a file. /// /// The type of the root object to be serialized and saved in the file. /// The object containing working data to be serialized and saved in the file. /// A relative or absolute path for the file containing the serialized object. /// Specifies how the operating system should open a file . /// Name of the stylesheet document. /// /// path /// or /// dataObject /// or /// stylesheetName /// public static void WriteXmlFile(type dataObject, string path, FileMode mode, string stylesheetName) where type : INamespaces { if (string.IsNullOrEmpty(path)) throw new ArgumentNullException(nameof(path)); if (dataObject == null) throw new ArgumentNullException(nameof(dataObject)); XmlSerializer _xmlSerializer = new XmlSerializer(typeof(type)); XmlSerializerNamespaces namespaces = new XmlSerializerNamespaces(dataObject.GetNamespaces().ToArray()); XmlWriterSettings _setting = new XmlWriterSettings() { Indent = true, IndentChars = " ", NewLineChars = "\r\n" }; using (FileStream _docStream = new FileStream(path, mode, FileAccess.Write)) { XmlWriter _writer = XmlWriter.Create(_docStream, _setting); if (!string.IsNullOrEmpty(stylesheetName)) _writer.WriteProcessingInstruction("xml-stylesheet", "type=\"text/xsl\" " + string.Format("href=\"{0}\"", stylesheetName)); _xmlSerializer.Serialize(_writer, dataObject, namespaces); } } /// /// Serializes the specified and writes the XML document to a file. /// /// The type of the object to be serialized and saved in the file. /// The object containing working data to be serialized and saved in the file. /// A relative or absolute path for the file containing the serialized object. /// Specifies how the operating system should open a file. public static void WriteXmlFile(type dataObject, string path, FileMode mode) where type : IStylesheetNameProvider, INamespaces { WriteXmlFile(dataObject, path, mode, dataObject.StylesheetName); } /// /// Reads an XML document from the file and deserializes its content to returned object. /// /// The type of the object to be deserialized. /// A relative or absolute path for the file containing the serialized object. /// An object containing working data retrieved from an XML file. /// path is null or empty public static type ReadXmlFile(string path) { if (string.IsNullOrEmpty(path)) throw new ArgumentNullException(nameof(path)); using (FileStream _docStream = new FileStream(path, FileMode.Open)) return ReadXmlFile(_docStream); } /// /// Reads an XML document from the and deserializes its content to returned object. /// /// The type of the object to be deserialized. /// The source of the stream to be deserialized. /// An object of type containing working data retrieved from an XML stream.. public static type ReadXmlFile(Stream reader) { type _content = default(type); XmlSerializer _xmlSerializer = new XmlSerializer(typeof(type)); using (XmlReader xmlReader = XmlReader.Create(reader)) _content = (type)_xmlSerializer.Deserialize(xmlReader); return _content; } #endregion public } } ================================================ FILE: Common/README.md ================================================ # Content This workspace provides API for common infrastructure management functionality aimed at Object Oriented Internet application deployment. ================================================ FILE: Common/Tests/InfrastructureUnitTest/App.config ================================================ ================================================ FILE: Common/Tests/InfrastructureUnitTest/Common.Infrastructure.UnitTest.csproj ================================================  Debug AnyCPU {C5F00673-1BDE-45A7-826B-C7E8F517398C} Library Properties UAOOI.Common.Infrastructure.UnitTest UAOOI.Common.Infrastructure.UnitTest v4.7.2 512 {3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} 10.0 $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) $(ProgramFiles)\Common Files\microsoft shared\VSTT\$(VisualStudioVersion)\UITestExtensionPackages False UnitTest true full false bin\Debug\ DEBUG;TRACE prompt 4 pdbonly true bin\Release\ TRACE prompt 4 true ..\..\..\packages\System.Diagnostics.TraceSource.4.3.0\lib\net46\System.Diagnostics.TraceSource.dll False {8817a671-abb8-463a-a8a3-ddcfe781a6b6} Common.Infrastructure False False False False ================================================ FILE: Common/Tests/InfrastructureUnitTest/Instrumentation/Extensions.cs ================================================  using Microsoft.VisualStudio.TestTools.UnitTesting; using System.Diagnostics; using System.Reflection; namespace UAOOI.Common.Infrastructure.UnitTest.Instrumentation { internal static class Extensions { internal static string GetFileName(this DelimitedListTraceListener _listener) { FieldInfo fi = typeof(TextWriterTraceListener).GetField("fileName", BindingFlags.NonPublic | BindingFlags.Instance); Assert.IsNotNull(fi); return (string)fi.GetValue(_listener); } } } ================================================ FILE: Common/Tests/InfrastructureUnitTest/Properties/AssemblyInfo.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; [assembly: AssemblyTitle("Infrastructure Unit Test")] [assembly: AssemblyDescription("Infrastructure Unit Test")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("commsvr.com")] [assembly: AssemblyProduct("InfrastructureUnitTest")] [assembly: AssemblyCopyright("Copyright © 2016")] [assembly: AssemblyTrademark("UA Object Oriented Internet")] [assembly: AssemblyCulture("")] [assembly: ComVisible(false)] [assembly: Guid("c5f00673-1bde-45a7-826b-c7e8f517398c")] [assembly: AssemblyVersion("4.0.1.*")] [assembly: AssemblyFileVersion("4.0.1.0")] ================================================ FILE: Common/Tests/InfrastructureUnitTest/TraceSourceBaseUnitTest.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2021, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ using Microsoft.VisualStudio.TestTools.UnitTesting; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using UAOOI.Common.Infrastructure.Diagnostic; using UAOOI.Common.Infrastructure.UnitTest.Instrumentation; namespace UAOOI.Common.Infrastructure.UnitTest { [TestClass] public class TraceSourceBaseUnitTest { [TestMethod] public void ConstructorStateTestMethod() { TraceSourceBase _trace = new TraceSourceBase(); _trace.TraceData(TraceEventType.Critical, 0, "Message"); } [TestMethod] public void AssemblyTraceEventTestMethod() { TraceSourceBase _tracer = new TraceSourceBase(); Assert.AreEqual("UAOOI.Common", _tracer.TraceSource.Name, $"Actual tracer name: {_tracer.TraceSource.Name}"); Assert.AreEqual(1, _tracer.TraceSource.Listeners.Count); Dictionary _listeners = _tracer.TraceSource.Listeners.Cast().ToDictionary(x => x.Name); Assert.IsTrue(_listeners.ContainsKey("LogFile")); TraceListener _listener = _listeners["LogFile"]; Assert.IsNotNull(_listener); Assert.IsInstanceOfType(_listener, typeof(DelimitedListTraceListener)); DelimitedListTraceListener _advancedListener = _listener as DelimitedListTraceListener; Assert.IsNotNull(_advancedListener.Filter); Assert.IsInstanceOfType(_advancedListener.Filter, typeof(EventTypeFilter)); EventTypeFilter _eventTypeFilter = _advancedListener.Filter as EventTypeFilter; Assert.AreEqual(SourceLevels.All, _eventTypeFilter.EventType); string _testPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); Assert.AreEqual(Path.Combine(_testPath, @"UAOOI.Common.log"), _advancedListener.GetFileName()); } [TestMethod] public void LogFileExistsTest() { TraceSourceBase _tracer = new TraceSourceBase(); TraceListener _listener = _tracer.TraceSource.Listeners.Cast().Where(x => x.Name == "LogFile").First(); Assert.IsNotNull(_listener); DelimitedListTraceListener _advancedListener = _listener as DelimitedListTraceListener; Assert.IsNotNull(_advancedListener); Assert.IsFalse(string.IsNullOrEmpty(_advancedListener.GetFileName())); FileInfo _logFileInfo = new FileInfo(_advancedListener.GetFileName()); long _startLength = _logFileInfo.Exists ? _logFileInfo.Length : 0; _tracer.TraceSource.TraceEvent(TraceEventType.Information, 0, "LogFileExistsTest is executed"); Assert.IsFalse(string.IsNullOrEmpty(_advancedListener.GetFileName())); _logFileInfo.Refresh(); Assert.IsTrue(_logFileInfo.Exists); Assert.IsTrue(_logFileInfo.Length > _startLength); } } } ================================================ FILE: Common/Tests/InfrastructureUnitTest/packages.config ================================================  ================================================ FILE: Common.playlist ================================================ ================================================ FILE: CommonResources/ModelingProject/Configuration.dgml ================================================  ================================================ FILE: CommonResources/ModelingProject/UANetworkingArchitecture/Configuration.classdiagram ================================================  ================================================ FILE: CommonResources/ModelingProject/UANetworkingArchitecture/Configuration.classdiagram.layout ================================================  ================================================ FILE: CommonResources/ModelingProject/UANetworkingArchitecture/ModelDefinition/Package_2319.uml ================================================  ================================================ FILE: CommonResources/ModelingProject/UANetworkingArchitecture/ModelDefinition/Package_2321.uml ================================================  ================================================ FILE: CommonResources/ModelingProject/UANetworkingArchitecture/ModelDefinition/Package_2322.uml ================================================  ================================================ FILE: CommonResources/ModelingProject/UANetworkingArchitecture/ModelDefinition/UANetworkingArchitecture.uml ================================================  ================================================ FILE: CommonResources/ModelingProject/UANetworkingArchitecture/UANetworkingArchitecture.modelproj ================================================  Debug AnyCPU 2.0 {90e262b4-c902-468b-9fca-0d694b0bbf76} 2.0.0.0 UANetworkingArchitecture UANetworkingArchitecture bin\Debug\ bin\Release\ 10.0 $(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion) Content Content Content Content Content Content Content Configuration.classdiagram Content ================================================ FILE: CommonResources/ModelingProject/UANetworkingArchitecture/UAOOI.UANetworkingReferenceApplication.dgml ================================================  ================================================ FILE: CommonResources/ModelingProject/UANetworkingArchitecture/UAOOI.UANodesetValidation.dgml ================================================  ================================================ FILE: CommonResources/README.MD ================================================ # Content Description ## ModelingProject Contains models at different levels of detail throughout the application life-cycle as part of your development process. Main aim is to track requirements, tasks, test cases, bugs, and other work associated with your models by linking model elements to development plan. ## T4Definitions This folder contains T4 text template that are used to generate a text file. The control logic is written as fragments of program code in Visual C#. The transformations are applied to generate text of any kind, such as a MD, CS, TXT. ## Media This folder contains files referred to by the documentation. ================================================ FILE: CommonResources/T4Definitions/CodeHeader.snippet ================================================
Code Header MPostol Add file header. tphd Expansion
Year Year of Copyright
================================================ FILE: CommonResources/T4Definitions/Model.t4 ================================================ <#+ //Template string DefaultProductName ="DefaultProductName"; string DefaultProductVersion = "0.00.00"; //Solution common string ProductTrademark = "Object Oriented Internet"; string AssemblyCopyright = "Copyright (C) 2022 Mariusz Postol LODZ POLAND"; string AssemblyCompany = "Mariusz Postol"; string Url = "https://github.com/mpostol/OPC-UA-OOI"; string Email = "mpostol@cas.eu"; string Phone = "+48 608 619 899"; string Owner = "Mariusz Postol"; string RepositoryVersion = "6.5.6"; //increment on the same position as the group version string RepositoryVersionPrerelease = "-Oscar"; //increment on the same position as the group version string Authors = "Mariusz Postol"; string IconURLTag = "https://github.com/mpostol/OPC-UA-OOI/blob/master/CommonResources/Media/Logo64.PNG?raw=true"; //UAOOI.Common string CommonVersion = "6.4.9"; string CommonPrerelease = ""; //UAOOI.DataDiscovery string DataDiscoveryTitle = "UAOOI.DataDiscovery"; string DataDiscoveryVersion = "4.0.3"; string DataDiscoveryPrerelease = ""; string DataDiscoveryProduct = "Object Oriented Internet"; //UAOOI.SemanticData string SemanticDataVersion = "6.5.6"; string SemanticDataPrerelease = "-Oscar"; string SemanticDataProduct = "Object Oriented Internet"; //UAOOI.SemanticData.UANodeSetValidation string SemanticDataUANodeSetValidationVersion = "6.5.6"; string SemanticDataUANodeSetValidationPrerelease = "-Oscar"; //UAOOI.SemanticData.UAModelDesignExport string SemanticDataUAModelDesignExportVersion = "6.5.6"; string SemanticDataUAModelDesignExportPrerelease = "-Oscar"; //UAOOI.Configuration string ConfigurationVersion = "6.4.9"; string ConfigurationPrerelease = ""; string ConfigurationProduct = "Object Oriented Internet"; //UAOOI.Networking string NetworkingDataVersion = "4.0.2"; string NetworkingDataPrerelease = ""; string NetworkingDataProduct = "Object Oriented Internet"; //Note: //Alpha, Bravo, Charlie, Delta, Hotel, India, Juliet, //Kilo, Lima, Mike, November, Oscar, Papa, Quebec, Romeo, Sierra, Tango, //Uniform, Victor, Whiskey, X-Ray, Yankee, Zulu #> ================================================ FILE: CommonResources/T4Definitions/ReleaseNoteTemplate.md ================================================ # ![Logo](https://github.com/mpostol/OPC-UA-OOI/blob/master/CommonResources/Media/Logo64.PNG?raw=true) Azure Gateway 1.0 ## Code and Documentation This release comprises the following code and documentation changes: * `Common` * Unimportant changes * `Configuration` * Unimportant changes * `DataDiscovery` * No changes at all * `Networking` * Azure Gateway DataRepository Implementation *NEW* 1.0 * Refactored folders structure * `SemanticData` * no changes at all ## Packages and tools This release comprises the following packages and tools changes: ### Common * *NuGet packages*: * UAOOI.Common.Infrastructure 4.0.2 * *Tools*: not published ### Configuration * *NuGet packages*: not published * *Tools*: not published ### Networking * *NuGet packages*: * UAOOI.Networking.Core 4.0.2 * UAOOI.Networking.Encoding 4.0.2 * UAOOI.Networking.SemanticData 4.0.2 * UAOOI.Networking.UDPMessageHandler 4.0.2 * *Tools*: not published ### SemanticData * *NuGet packages*: not published * *Tools*: not published ## Contact For assistance, contact: Mariusz Postol * [GitHub profile](https://github.com/mpostol) * [http://www.commsvr.com/](http://www.commsvr.com/) * [linkedin](https://linkedin.com/in/mpostol) * [twitter](https://twitter.com/mpostol) * [orcid](https://orcid.org/0000-0002-9669-0565) ## See also * [Object Oriented Internet eBook](https://commsvr.gitbook.io/ooi) * [API Browser is available for sponsors - consider joining](https://github.commsvr.com/AboutPartnershipProgram.md.html) Copyright (c) 2020 Mariusz Postol ================================================ FILE: CommonResources/T4Definitions/ReleaseNoteTemplate.tt ================================================ <#@ template debug="false" hostspecific="false" language="C#" #> <#@ assembly name="System.Core" #> <#@ import namespace="System.Linq" #> <#@ import namespace="System.Text" #> <#@ import namespace="System.Collections.Generic" #> <#@ output extension=".md" #> # Semantic-Data ModelDesign Export **<#=RepositoryVersion#><#=RepositoryVersionPrerelease#>** ## This release: * [API Browser](http://www.commsvr.com/download/OPC-UA-OOI/index.html) * [Object Oriented Internet eBook](https://commsvr.gitbook.io/ooi) - *This update comprises the following changes:* - Semantic-Data - updated against OPC UA Specification 1.04; new API (Details in section **SemanticData**) - Documentation improved - New code help documentation available > **Note**: It is pre-release. I will appreciate reporting all problems directly to me (see section `Contact`) or in issue #350. ## Packages ### Common - *Version*: **<#=CommonVersion#><#=CommonPrerelease#>** - *Changes*: no changes - *NuGet packages*: not published - *Tools*: not published ### Configuration - *Version*: **<#=ConfigurationVersion#><#=ConfigurationPrerelease#>** - *Changes*: no changes - *NuGet packages*: not published - *Tools*: not published ### SemanticData - *Version*: **<#=SemanticDataVersion#><#=SemanticDataPrerelease#>** - *Changes*: - Updated the UA Address Space process against OPC UA Specification 1.04 - Updated UANodeSet schema - Added export to ModelDesign [OPC UA Address Space Prototyping](https://commsvr.gitbook.io/ooi/semanticdata-processing/uanodesetvalidation/addressspacecompliancetesttool) - *NuGet packages*: not published - *Tools*: - OPC UA Address Space Prototyping Tool (`asp.exe`) > **Getting Started**: Download and run the file to unzip the content to the selected folder. Now you may run the application file `asp.exe`. The section > [OPC UA Address Space Prototyping](https://commsvr.gitbook.io/ooi/semanticdata-processing/uanodesetvalidation/addressspacecompliancetesttool) of the online ebook covers details on how to get started using attached examples. > This section has bee also added to the installation package as pdf document `OPC UA Address Space Prototyping.md.pdf`. ### Networking - *Version*: **<#=NetworkingDataVersion#><#=NetworkingDataPrerelease#>** - *Changes*: no changes - *NuGet packages*: not published - *Tools*: not published ## Contact For assistance, contact: Mariusz Postol - [GitHub profile](https://github.com/mpostol) - http://www.commsvr.com/ - linkedin.com/in/mpostol - https://twitter.com/mpostol <#=AssemblyCopyright#> <#@ include file = "Model.t4" #> <#+ string m_AssemblyTitle = "UAOOI.UANetworkingReferenceApplication"; string m_Date = System.DateTime.Today.ToShortDateString(); #> ================================================ FILE: CommonResources/T4Definitions/ReleaseNoteTemplate5-0-2-Alpha.md ================================================ # SemanticData ModelDesign Export **5.0.2-Alpha** ## This release * [API Browser is available for sponsors* consider joining](https://github.commsvr.com/AboutPartnershipProgram.md.html) * [Object Oriented Internet eBook](https://commsvr.gitbook.io/ooi) * *This update comprises the following changes:* * SemanticData * updated against OPC UA Specification 1.04; new API (Details in section **SemanticData**) * Documentation improved * New code help documentation available > **Note**: It is pre-release. I will appreciate reporting all problems directly to me (see section `Contact`) or in issue #350. ## Packages ### Common * *Version*: **4.0.1** * *Changes*: no changes * *NuGet packages*: not published * *Tools*: not published ### Configuration * *Version*: **4.0.1** * *Changes*: no changes * *NuGet packages*: not published * *Tools*: not published ### SemanticData * *Version*: **5.0.2-Alpha** * *Changes*: * Updated the UA Address Space process against OPC UA Specification 1.04 * Updated UANodeSet schema * Added export to ModelDesign [OPC UA Address Space Prototyping](https://commsvr.gitbook.io/ooi/semanticdata-processing/uanodesetvalidation/addressspacecompliancetesttool) * *NuGet packages*: not published * *Tools*: * OPC UA Address Space Prototyping Tool (`asp.exe`) > **Getting Started**: Download and run the file to unzip the content to the selected folder. Now you may run the application file `asp.exe`. The section > [OPC UA Address Space Prototyping](https://commsvr.gitbook.io/ooi/semanticdata-processing/uanodesetvalidation/addressspacecompliancetesttool) of the online ebook covers details on how to get started using attached examples. > This section has bee also added to the installation package as pdf document `OPC UA Address Space Prototyping.md.pdf`. ### Networking * *Version*: **4.0.1** * *Changes*: no changes * *NuGet packages*: not published * *Tools*: not published ## Contact For assistance, contact: Mariusz Postol * [GitHub profile](https://github.com/mpostol) * http://www.commsvr.com/ * linkedin.com/in/mpostol * https://twitter.com/mpostol Copyright (c) 2019 Mariusz Postol ================================================ FILE: CommonResources/T4Definitions/ReleaseNoteTemplate5-1.md ================================================ # ![Logo](https://github.com/mpostol/OPC-UA-OOI/blob/master/CommonResources/Media/Logo64.PNG?raw=true) Semantic-Data ModelDesign Export **5.1.0** ## This release * [API Browser is available for sponsors - consider joining](https://github.commsvr.com/AboutPartnershipProgram.md.html) * [Object Oriented Internet eBook](https://commsvr.gitbook.io/ooi) * *This update comprises the following changes:* * Semantic-Data (Details in section **SemanticData**) * updated against OPC UA Specification 1.04; new API * added export to UAModelDesign * Documentation improved * New code help documentation available ## Packages ### Common * *Version*: **4.0.1** * *Changes*: no changes * *NuGet packages*: not published * *Tools*: not published ### Configuration * *Version*: **4.0.1** * *Changes*: no changes * *NuGet packages*: not published * *Tools*: not published ### SemanticData * *Version*: **5.1.0** * *Changes*: * Updated the UA Address Space process against OPC UA Specification 1.04 * Updated UANodeSet schema * Added export to ModelDesign [OPC UA Address Space Prototyping](https://commsvr.gitbook.io/ooi/semantic-data-processing/addressspacecompliancetesttool) * *NuGet packages* * [UAOOI.SemanticData.BuildingErrorsHandling](https://www.nuget.org/packages/UAOOI.SemanticData.BuildingErrorsHandling/) * [UAOOI.SemanticData.InformationModelFactory](https://www.nuget.org/packages/UAOOI.SemanticData.InformationModelFactory/) * [UAOOI.SemanticData.UAModelDesignExport](https://www.nuget.org/packages/UAOOI.SemanticData.UAModelDesignExport/) * [UAOOI.SemanticData.UANodeSetValidation](https://www.nuget.org/packages/UAOOI.SemanticData.UANodeSetValidation/) * *Tools* * OPC UA Address Space Prototyping Tool (`asp.exe`) > **Getting Started**: Download and run the file to unzip the content to the selected folder. Now you may run the application file `asp.exe`. The section > [OPC UA Address Space Prototyping](https://commsvr.gitbook.io/ooi/semantic-data-processing/addressspacecompliancetesttool) of the online ebook covers details on how to get started using attached examples. ### Networking * *Version*: **4.0.1** * *Changes*: no changes * *NuGet packages*: not published * *Tools*: not published ## Contact For assistance, contact: Mariusz Postol * [GitHub profile](https://github.com/mpostol) * [http://www.commsvr.com/](http://www.commsvr.com/) * [linkedin](https://linkedin.com/in/mpostol) * [twitter](https://twitter.com/mpostol) Copyright (c) 2019 Mariusz Postol ================================================ FILE: CommonResources/T4Definitions/ReleaseTask.md ================================================ # Release new version Gist ## Packages to be released - [ ] `Common` - [ ] `Configuration` - [ ] `DataDiscovery` - [ ] `Networking` - [ ] `SemanticData` ## Tasks to be done - [ ] Update version information for all published assemblies (Model.t4), - [ ] Prepare an example if applicable - [ ] Update Readme files - [ ] Prepare and publish NuGet packages if applicable. Replace project references by packages. - [ ] Create release front page - [ ] Getting Started - [ ] Version information - [ ] Prepare binary deliverables and publish the installation package - [ ] Update and publish the code help documentation - [ ] Publish release - [ ] Update the repository front page ================================================ FILE: CommonResources/T4Definitions/T4Definitions.csproj ================================================  Debug AnyCPU {DDE02168-1EAD-41D9-B5E6-FB101F98AC24} Library Properties T4Definitions T4Definitions v4.7.2 512 true AnyCPU true full false bin\Debug\ DEBUG;TRACE prompt 4 false AnyCPU pdbonly true bin\Release\ TRACE prompt 4 TextTemplatingFileGenerator Template.AssemblyInfo.cs True True Template.nuspec.tt True True Template.AssemblyInfo.tt TextTemplatingFileGenerator Template.nuspec.nuspec ================================================ FILE: CommonResources/T4Definitions/Template.AssemblyInfo.cs ================================================ //_______________________________________________________________ // Title : Assembly info for: // System : Microsoft VisualStudio 2015 / C# // // Copyright (C) 2022 Mariusz Postol LODZ POLAND // +48 608 619 899 // mpostol@cas.eu // https://github.com/mpostol/OPC-UA-OOI //_______________________________________________________________ using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; [assembly: AssemblyTitle("")] [assembly: AssemblyDescription("DefaultProductName: ")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("Mariusz Postol")] [assembly: AssemblyProduct("DefaultProductName")] [assembly: AssemblyCopyright("Copyright (C) 2022 Mariusz Postol LODZ POLAND")] [assembly: AssemblyTrademark("Object Oriented Internet")] [assembly: AssemblyCulture("")] [assembly: Guid("")] [assembly: AssemblyVersion("0.00.00.*")] [assembly: AssemblyFileVersion("0.00.00")] ================================================ FILE: CommonResources/T4Definitions/Template.AssemblyInfo.tt ================================================ <#@ template debug="false" hostspecific="false" language="C#" #> <#@ output extension=".cs" #> //_______________________________________________________________ // Title : Assembly info for: <#=m_AssemblyTitle#> // System : Microsoft VisualStudio 2015 / C# // // <#=AssemblyCopyright#> // <#=Phone#> // <#=Email#> // <#=Url#> //_______________________________________________________________ using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; [assembly: AssemblyTitle("<#=m_AssemblyTitle#>")] [assembly: AssemblyDescription("<#=DefaultProductName#>: <#=m_AssemblyTitle#>")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("<#=AssemblyCompany#>")] [assembly: AssemblyProduct("<#=DefaultProductName#>")] [assembly: AssemblyCopyright("<#=AssemblyCopyright#>")] [assembly: AssemblyTrademark("<#=ProductTrademark#>")] [assembly: AssemblyCulture("")] [assembly: Guid("")] [assembly: AssemblyVersion("<#= DefaultProductVersion #>.*")] [assembly: AssemblyFileVersion("<#= DefaultProductVersion #>")] <#@ include file = ".\Model.t4" #> <#+ string m_AssemblyTitle = ""; #> ================================================ FILE: CommonResources/T4Definitions/Template.nuspec.nuspec ================================================  Define.Assembly.Title 0.00.00 DefaultProductName Mariusz Postol Mariusz Postol false MIT https://github.com/mpostol/OPC-UA-OOI logo.png description must be added summary must be added. Copyright (C) 2022 Mariusz Postol LODZ POLAND Object Oriented Internet, OPC UA, Information Model, IoT, M2M, DOA, Add releaseNotes if needed. Copyright (C) 2022 Mariusz Postol LODZ POLAND ================================================ FILE: CommonResources/T4Definitions/Template.nuspec.tt ================================================ <#@ template debug="false" hostspecific="false" language="C#" #> <#@ output extension=".nuspec" #> <#=m_AssemblyTitle#> <#= DefaultProductVersion #> <#=DefaultProductName#> <#=AssemblyCompany#> <#=Owner#> false MIT <#=Url#> logo.png description must be added summary must be added. <#=AssemblyCopyright#> Object Oriented Internet, OPC UA, Information Model, IoT, M2M, DOA, Add releaseNotes if needed. <#=AssemblyCopyright#> <#@ include file = ".\Model.t4" #> <#+ string m_AssemblyTitle = "Define.Assembly.Title"; #> ================================================ FILE: Configuration/Core/Configuration.Core.csproj ================================================ netstandard2.0 UAOOI.Configuration.Core UAOOI.Configuration.Core The library contains a shared interfaces for server configuration which OPC UA applications can reference. The library provides an abstraction over any OPC UA Server configuration plug-in. Using the library allows an application to indirectly access the server configuration attributes without relying on hard references. The hope is that using this library, third-party applications and frameworks can begin to leverage server configuration management without tying themselves down to a specific implementation. 6.4.8 MPostol commsvr.com Object Oriented Internet Copyright MPostol (c) 2018 https://commsvr.gitbook.io/ooi https://github.com/mpostol/OPC-UA-OOI GitHub Object Oriented Internet, OPC UA, CommServer, Reactive Networking. false true OPCUAOOIKey.snk false 6.4.7.1 Logo64.PNG MIT VS2022 compatibility 1701;1702;1705;IDE0001;IDE0002;IDE0003 bin\Release\UAOOI.Configuration.Core.xml bin\Release\ True True ConfigurationCore.tt TextTemplatingFileGenerator ConfigurationCore.nuspec True ================================================ FILE: Configuration/Core/ConfigurationCore.nuspec ================================================  UAOOI.Configuration.Core 6.4.9 Object Oriented Internet Common Infrastructure Mariusz Postol Mariusz Postol false MIT https://commsvr.gitbook.io/ooi/ Logo64.PNG The library contains a shared interfaces for server configuration which OPC UA applications can reference. The library provides an abstraction over any OPC UA Server configuration plug-in. Using the library allows an application to indirectly access the server configuration attributes without relying on hard references. The hope is that using this library, third-party applications and frameworks can begin to leverage server configuration management without tying themselves down to a specific implementation. The library contains a shared interfaces for server configuration which OPC UA applications can reference. Copyright (C) 2022 Mariusz Postol LODZ POLAND Object Oriented Internet, OPC UA, PubSub, Information Model, IoT, M2M, DOA, VS 2022 compatibility. Copyright (C) 2022 Mariusz Postol LODZ POLAND ================================================ FILE: Configuration/Core/ConfigurationCore.tt ================================================ <#@ template debug="false" hostspecific="false" language="C#" #> <#@ output extension=".nuspec" #> UAOOI.Configuration.Core <#=CommonVersion#><#= CommonPrerelease#> <#=NetworkingDataProduct#> Common Infrastructure <#=AssemblyCompany#> <#=Owner#> false MIT https://commsvr.gitbook.io/ooi/ Logo64.PNG The library contains a shared interfaces for server configuration which OPC UA applications can reference. The library provides an abstraction over any OPC UA Server configuration plug-in. Using the library allows an application to indirectly access the server configuration attributes without relying on hard references. The hope is that using this library, third-party applications and frameworks can begin to leverage server configuration management without tying themselves down to a specific implementation. The library contains a shared interfaces for server configuration which OPC UA applications can reference. <#=AssemblyCopyright#> Object Oriented Internet, OPC UA, PubSub, Information Model, IoT, M2M, DOA, VS 2022 compatibility. <#=AssemblyCopyright#> <#@ include file = "..\..\CommonResources\T4Definitions\Model.t4" #> ================================================ FILE: Configuration/Core/IConfiguration.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System; using System.IO; namespace UAOOI.Configuration.Core { /// /// Gets access to the server configuration file editor. /// public interface IConfiguration: IDisposable { /// /// Creates the default configuration. /// void CreateDefaultConfiguration(); /// /// Reads the configuration. /// /// The configuration file. void ReadConfiguration( FileInfo configurationFile ); /// /// Gets the configuration editor - user interface to edit the plug-in configuration file. /// /// /// Represents a window or dialog box that makes up an application's user interface to be used to edit configuration file. /// void EditConfiguration(); /// /// Saves the configuration file to a specified location. /// /// The solution file path. /// The configuration file. /// is to be used to create relative file path to configuration files used by the plug-in. void SaveConfiguration( string solutionFilePath, FileInfo configurationFile ); /// /// Gets the instance to be used by a user to configure the selected node. /// /// Provides identifying description of the node to be configured. /// /// Returned object provides access to the instance node configuration edition functionality. /// IInstanceConfiguration GetInstanceConfiguration( INodeDescriptor descriptor ); /// /// Creates automatically the instance configurations on the best effort basis. /// /// The descriptors of nodes. /// if set to true skip opening configuration file. /// if set to true cancel was pressed. void CreateInstanceConfigurations( INodeDescriptor[] descriptors, bool SkipOpeningConfigurationFile, out bool CancelWasPressed ); /// /// Occurs any time the configuration is modified. /// event EventHandler OnModified; /// /// Gets the default name of the file. /// /// The default name of the file. string DefaultFileName { get; } } } ================================================ FILE: Configuration/Core/IInstanceConfiguration.cs ================================================  namespace UAOOI.Configuration.Core { /// /// Provides access to the instance node configuration editor /// public interface IInstanceConfiguration { /// /// Edits this instance. /// void Edit(); /// /// Create new empty data bindings configuration for this instance node to store proprietary information of the UA server. /// void ClearConfiguration(); } } ================================================ FILE: Configuration/Core/INodeDescriptor.cs ================================================  using System.Xml; namespace UAOOI.Configuration.Core { /// /// Provides description of the node to be configured. /// public interface INodeDescriptor { /// /// Gets the node unique identifier, i.e. the browse path. /// /// The node identifier. XmlQualifiedName NodeIdentifier { get; } /// /// Gets the type of the node of of the Variable NodeClass /// /// The type of the data. XmlQualifiedName DataType { get; } /// /// Gets the node class. /// /// The node class. InstanceNodeClassesEnum NodeClass { get; } /// /// Gets a value indicating whether it is instance declaration - may have many instances in the created address space. /// /// true if the node is instance declaration; otherwise, false. bool InstanceDeclaration { get; } /// /// Gets the binding description that allows the editor to create automatically bindings. /// /// The binding description. string BindingDescription { get; } } } ================================================ FILE: Configuration/Core/InstanceNodeClassesEnum.cs ================================================  namespace UAOOI.Configuration.Core { /// /// Enumeration of the node classes that can be a source of process data. /// public enum InstanceNodeClassesEnum { /// /// Object NodeClasses /// Object, /// /// Variable NodeClasses /// Variable, /// /// Method NodeClasses /// Method, /// /// View NodeClasses /// View, /// /// Not defined or nor relevant /// NotDefined } } ================================================ FILE: Configuration/Core/README.md ================================================ # Core definitions Configuration core definitions ================================================ FILE: Configuration/Core/UAServerConfigurationEventArgs.cs ================================================  using System; namespace UAOOI.Configuration.Core { /// /// Instance of this class provides more information on the type of the changes made in the server configuration. /// public class UAServerConfigurationEventArgs: EventArgs { /// /// Gets or sets a value indicating whether the configuration file has been changed. /// /// /// true if the configuration file has benn changed; otherwise, false. /// public bool ConfigurationFileChanged { get; private set; } /// /// Initializes a new instance of the class. /// /// /// if set to true indicated that the configuration file has been changed /// and user interface must be regenerated. /// public UAServerConfigurationEventArgs( bool fileChanged ) { ConfigurationFileChanged = fileChanged; } } } ================================================ FILE: Configuration/DataBindings/Configuration.DataBindings.csproj ================================================  netstandard2.0 UAOOI.Configuration.DataBindings UAOOI.Configuration.DataBindings 6.4.8 Mariusz Postol Object Oriented Internet OPC UA Object Oriented Internet (UAOOI) DataBindings library is dedicated to create a plug-in aimed at editing of the configuration of any application based on OPC UA Information Model. It allows also to add data binding to the configuration. It is part of the project supporting OPC UA Object Oriented Internet paradigm. Copyright MPostol (c) 2021 https://commsvr.gitbook.io/ooi https://github.com/mpostol/OPC-UA-OOI GitHub Object Oriented Internet, OPC UA, CommServer, Reactive Networking. true OPCUAOOIKey.snk 6.4.8.1 false Mariusz Postol MIT 2022 compatibility Logo64.PNG bin\Release\ bin\Release\UAOOI.Configuration.DataBindings.xml True True True Configuration.DataBindings.tt TextTemplatingFileGenerator Configuration.DataBindings.nuspec ================================================ FILE: Configuration/DataBindings/Configuration.DataBindings.nuspec ================================================  UAOOI.Configuration.DataBindings 6.4.9 Object Oriented Internet Common Infrastructure Mariusz Postol Mariusz Postol false MIT https://commsvr.gitbook.io/ooi/ Logo64.PNG OPC UA Object Oriented Internet (UAOOI) DataBindings library is dedicated to create a plug-in aimed at editing of the configuration of any application based on OPC UA Information Model. It allows also to add data binding to the configuration. It is part of the project supporting OPC UA Object Oriented Internet paradigm. DataBindings library is dedicated to create a plug-in aimed at editing of the configuration of any application based on OPC UA Information Model Copyright (C) 2022 Mariusz Postol LODZ POLAND Object Oriented Internet, OPC UA, PubSub, Information Model, IoT, M2M, DOA, VS 2022 compatibility. Copyright (C) 2022 Mariusz Postol LODZ POLAND ================================================ FILE: Configuration/DataBindings/Configuration.DataBindings.tt ================================================ <#@ template debug="false" hostspecific="false" language="C#" #> <#@ output extension=".nuspec" #> UAOOI.Configuration.DataBindings <#=CommonVersion#><#= CommonPrerelease#> <#=NetworkingDataProduct#> Common Infrastructure <#=AssemblyCompany#> <#=Owner#> false MIT https://commsvr.gitbook.io/ooi/ Logo64.PNG OPC UA Object Oriented Internet (UAOOI) DataBindings library is dedicated to create a plug-in aimed at editing of the configuration of any application based on OPC UA Information Model. It allows also to add data binding to the configuration. It is part of the project supporting OPC UA Object Oriented Internet paradigm. DataBindings library is dedicated to create a plug-in aimed at editing of the configuration of any application based on OPC UA Information Model <#=AssemblyCopyright#> Object Oriented Internet, OPC UA, PubSub, Information Model, IoT, M2M, DOA, VS 2022 compatibility. <#=AssemblyCopyright#> <#@ include file = "..\..\CommonResources\T4Definitions\Model.t4" #> ================================================ FILE: Configuration/DataBindings/ConfigurationBase.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System; using System.IO; using UAOOI.Configuration.Core; using UAOOI.Configuration.Networking; namespace UAOOI.Configuration.DataBindings { /// /// Class ConfigurationBase - Provides basic implementation of the . /// public abstract class ConfigurationBase : UANetworkingConfiguration, IConfiguration where ConfigurationDataType : class, IConfigurationDataFactory, new() { /// /// Initializes a new instance of the class. /// public ConfigurationBase() { base.OnModified += (x, y) => { OnModified?.Invoke(x, new UAServerConfigurationEventArgs(true)); }; } /// /// Occurs any time the configuration is modified. /// /// /// public new event EventHandler OnModified; /// /// Gets the default name of the file. /// /// The default name of the file. public abstract string DefaultFileName { get; } /// /// Creates the default configuration. /// public abstract void CreateDefaultConfiguration(); /// /// Creates automatically the instance configurations on the best effort basis. /// /// The descriptors of nodes. /// if set to true skip opening configuration file. /// if set to true cancel was pressed. public abstract void CreateInstanceConfigurations(INodeDescriptor[] descriptors, bool SkipOpeningConfigurationFile, out bool CancelWasPressed); /// /// Gets the configuration editor - user interface to edit the plug-in configuration file. /// /// Represents a window or dialog box that makes up an application's user interface to be used to edit configuration file. public abstract void EditConfiguration(); /// /// Gets the instance to be used by a user to configure the selected node. /// /// Provides identifying description of the node to be configured. /// Returned object provides access to the instance node configuration edition functionality. public abstract IInstanceConfiguration GetInstanceConfiguration(INodeDescriptor descriptor); /// /// Saves the configuration file to a specified location. /// /// The solution file path. /// The configuration file. /// is to be used to create relative file path to configuration files used by the plug-in. public abstract void SaveConfiguration(string solutionFilePath, FileInfo configurationFile); #region IDisposable Support /// /// Releases unmanaged and - optionally - managed resources. /// /// true to release both managed and unmanaged resources; false to release only unmanaged resources. protected virtual void Dispose(bool disposing) { } /// /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. /// public void Dispose() { Dispose(true); } #endregion } } ================================================ FILE: Configuration/DataBindings/IConfigurationEditor.cs ================================================  using System; using UAOOI.Configuration.Core; using UAOOI.Configuration.Networking.Serialization; namespace UAOOI.Configuration.DataBindings { /// /// Interface IConfigurationEditor - describes an injection point to be used to compose en external editor. /// public interface IConfigurationEditor { /// /// Creates the instance configurations. /// /// The descriptors. /// if set to true if the opening configuration file should be skipped. /// The cancel was pressed. void CreateInstanceConfigurations(INodeDescriptor[] descriptors, bool SkipOpeningConfigurationFile, Action CancelWasPressed); /// /// Edits the configuration. /// /// The configuration. void EditConfiguration(ConfigurationData configuration); } } ================================================ FILE: Configuration/DataBindings/IInstanceConfigurationFactory.cs ================================================  using System; using System.Collections.ObjectModel; using System.Diagnostics; using UAOOI.Configuration.Core; using UAOOI.Configuration.Networking.Serialization; namespace UAOOI.Configuration.DataBindings { /// /// Delegate TraceAction - encapsulates operation writing a trace event message to the trace using the specified event type, event identifier, and message. /// /// One of the enumeration values that specifies the event type of the trace data. /// A numeric identifier for the event. /// The trace message to write. public delegate void TraceEvent(TraceEventType eventType, int id, string data); /// /// Interface IInstanceConfigurationFactory - object implementing this interface should provide the user interface /// public interface IInstanceConfigurationFactory { /// /// Gets an object providing interface which is to be displayed in the main editor window. /// /// The object to be edited. /// The available handlers that can be associated with the . /// The delegate encapsulating the trace operation. /// The delegate encapsulating operation used to notify the caller about data modification. /// IInstanceConfiguration. IInstanceConfiguration GetIInstanceConfiguration(DataSetConfiguration dataSet, ObservableCollection availableHandlers, TraceEvent trace, Action onModification ); } } ================================================ FILE: Configuration/DataBindings/InstanceConfigurationBase.cs ================================================  using System; using UAOOI.Configuration.Core; namespace UAOOI.Configuration.DataBindings { /// /// Class InstanceConfigurationBase - provide basic configuration of the /// public class InstanceConfigurationBase : IInstanceConfiguration { /// /// Create new empty data bindings configuration for this instance node to store proprietary information of the UA server. /// /// public void ClearConfiguration() { throw new NotImplementedException(); } /// /// Edits this instance. /// /// public void Edit() { throw new NotImplementedException(); } } } ================================================ FILE: Configuration/DataBindings/NodeDescriptorBase.cs ================================================ using System; using System.Collections.Generic; using UAOOI.Configuration.Core; namespace UAOOI.Configuration.DataBindings { /// /// Class NodeDescriptorBase - provides description of the node to be configured. /// [Serializable] public class NodeDescriptorBase : Networking.Serialization.NodeDescriptor, INodeDescriptor, IComparable, IEqualityComparer { #region INodeDescriptor /// /// Gets the node class. /// /// The node class. public new InstanceNodeClassesEnum NodeClass { get { InstanceNodeClassesEnum _ret = InstanceNodeClassesEnum.NotDefined; switch (base.NodeClass) { case Configuration.Networking.Serialization.InstanceNodeClassesEnum.Object: _ret = InstanceNodeClassesEnum.Object; break; case Configuration.Networking.Serialization.InstanceNodeClassesEnum.Variable: _ret = InstanceNodeClassesEnum.Variable; break; case Configuration.Networking.Serialization.InstanceNodeClassesEnum.Method: _ret = InstanceNodeClassesEnum.Method; break; case Configuration.Networking.Serialization.InstanceNodeClassesEnum.View: _ret = InstanceNodeClassesEnum.View; break; case Configuration.Networking.Serialization.InstanceNodeClassesEnum.NotDefined: _ret = InstanceNodeClassesEnum.NotDefined; break; } return _ret; } set { Configuration.Networking.Serialization.InstanceNodeClassesEnum _ret = Configuration.Networking.Serialization.InstanceNodeClassesEnum.NotDefined; switch (value) { case InstanceNodeClassesEnum.Object: _ret = Configuration.Networking.Serialization.InstanceNodeClassesEnum.Object; break; case InstanceNodeClassesEnum.Variable: _ret = Configuration.Networking.Serialization.InstanceNodeClassesEnum.Variable; break; case InstanceNodeClassesEnum.Method: _ret = Configuration.Networking.Serialization.InstanceNodeClassesEnum.Method; break; case InstanceNodeClassesEnum.View: _ret = Configuration.Networking.Serialization.InstanceNodeClassesEnum.View; break; case InstanceNodeClassesEnum.NotDefined: _ret = Configuration.Networking.Serialization.InstanceNodeClassesEnum.NotDefined; break; } base.NodeClass = _ret; } } #endregion internal static NodeDescriptorBase Clone(INodeDescriptor descriptor) { NodeDescriptorBase _ret = new NodeDescriptorBase() { BindingDescription = descriptor.BindingDescription, DataType = descriptor.DataType, InstanceDeclaration = descriptor.InstanceDeclaration, NodeClass = descriptor.NodeClass, NodeIdentifier = descriptor.NodeIdentifier }; return _ret; } #region operators /// /// Implements the == operator. /// /// The first object of type to compare. /// The second object of type to compare. /// true if the specified objects are equal; otherwise, false. public static bool operator ==(NodeDescriptorBase x, NodeDescriptorBase y) { if (Object.Equals(x, null) && Object.Equals(y, null)) return true; if (Object.Equals(x, null) || Object.Equals(y, null)) return false; return x.CompareTo(y) == 0; } /// /// Implements the !=. /// /// The first object of type to compare. /// The second object of type to compare. /// true if the specified objects are not equal; otherwise, false. public static bool operator !=(NodeDescriptorBase x, NodeDescriptorBase y) { if (x.Equals(null) && y.Equals(null)) return false; if (Object.Equals(x, null) || Object.Equals(y, null)) return true; return x.CompareTo(y) != 0; } #endregion #region IComparable /// /// Compares the current instance with another and returns an integer that indicates whether the current instance precedes, /// follows, or occurs in the same position in the sort order as the other object. /// /// An instance of to compare with this instance. /// /// A signed integer that indicates the relative order of the objects being compared. The return value has these meanings: /// Value, Meaning /// Less than zero: This instance is less than . /// Zero: This instance is equal to . /// Greater than zero: This instance is greater than . /// /// /// is not the same type as this instance. /// public int CompareTo(INodeDescriptor other) { if (other == null) throw new ArgumentNullException(nameof(other), "Parameter cannot be null"); if (this.NodeIdentifier == null || other.NodeIdentifier == null) throw new ArgumentNullException("NodeIdentifier cannot be null."); if (this.NodeIdentifier.IsEmpty || other.NodeIdentifier.IsEmpty) throw new ArgumentNullException("NodeIdentifier cannot be empty."); if (String.IsNullOrEmpty(this.NodeIdentifier.Namespace) || String.IsNullOrEmpty(other.NodeIdentifier.Namespace)) throw new ArgumentNullException("NodeIdentifier Namespace cannot be null."); int ret = NodeIdentifier.Namespace.CompareTo(other.NodeIdentifier.Namespace); if (ret != 0) return ret; if (String.IsNullOrEmpty(this.NodeIdentifier.Name) || String.IsNullOrEmpty(other.NodeIdentifier.Namespace)) throw new ArgumentNullException("NodeIdentifier Name cannot be null."); return NodeIdentifier.Name.CompareTo(other.NodeIdentifier.Name); } #endregion #region IEqualityComparer /// /// Determines whether the specified objects are equal. /// /// The first object of type to compare. /// The second object of type to compare. /// true if the specified objects are equal; otherwise, false. public bool Equals(NodeDescriptorBase x, NodeDescriptorBase y) { return x.CompareTo(y) == 0; } /// /// Returns a hash code for this instance. /// /// The object. /// A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. /// if is null public int GetHashCode(NodeDescriptorBase obj) { if (obj == null) throw new ArgumentNullException(nameof(obj)); return obj.GetHashCode(); } #endregion #region object /// /// Returns a hash code for this instance. /// /// A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. public override int GetHashCode() { int _hash = NodeIdentifier.ToString().GetHashCode(); return _hash; } /// /// Returns a that represents this instance. /// /// A that represents this instance. public override string ToString() { return NodeIdentifier.ToString(); } /// /// Determines whether the specified is equal to this instance. /// /// The object to compare with the current object. /// true if the specified is equal to this instance; otherwise, false. /// public override bool Equals(object obj) { if (Object.Equals(obj, null)) return false; NodeDescriptorBase _other = obj as NodeDescriptorBase; if (Object.Equals(_other, null)) return false; return CompareTo(_other) == 0; } #endregion } } ================================================ FILE: Configuration/DataBindings/Properties/AssemblyInfo.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2021, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ using System.Reflection; using System.Runtime.InteropServices; [assembly: AssemblyTrademark("Object Oriented Internet")] [assembly: Guid("bc6960f9-d096-49a0-a8d1-c5d194e54370")] ================================================ FILE: Configuration/DataBindings/README.MD ================================================ # OPC UA DataBinding library ## Introduction This project is aimed at implementing an editor of the `OOI Reactive Application` configuration file. For more extensive examples, see the [Semantic-Data Message Centric Communication](https://commsvr.gitbook.io/ooi/internet-of-things-iot-archetype/readme.messagecentriccommunication). The schema of the configuration files is available at: [ConfigurationData.xsd](../../Configuration/Networking/Serialization/ConfigurationData.xsd) and detailed description of the configuration is captured in the document [UA Data Networking Configuration](../../Configuration/Networking/README.MD#ua-data-networking-configuration). The code help documentation is [available for sponsors - consider joining](https://github.commsvr.com/AboutPartnershipProgram.md.html) The NuGet package is available here: [OPC UA DataBindings Library](https://www.nuget.org/packages/UAOOI.Configuration.DataBindings). To install OPC UA DataBindings Library, run the following command in the Package Manager Console > `PM> Install-Package UAOOI.DataBindings` ## Getting Started Tutorial The topics contained in this section are intended to give you quick exposure to the `OOI Reactive Application` network based data exchange programming experience. Working through this tutorial gives you an introductory understanding of the steps required to create `OOI Reactive Application` configuration custom editor. The editor is to be used by an universal tool supporting OPC UA Information Model design process. For more information on deploying OPC UA Information Model read the document: [Information Models Development](../../SemanticData/InformationModelsDevelopment.md) The configuration files are managed using the `UAOOI.Configuration.Networking` component. For assistance, contact: Mariusz Postol Copyright (C) 2021 Mariusz Postol LODZ POLAND ================================================ FILE: Configuration/DataBindings/Settings.cs ================================================  namespace UAOOI.Configuration.DataBindings { /// /// Class Settings - This class provides global project settings. /// internal static class Settings { internal const string DefaultConfigurationFileNametExtension = "uasconfig"; internal const string DefaultConfigurationFileName = "UANetworkingConfiguration"; } } ================================================ FILE: Configuration/DataBindings/UANetworkingConfigurationEditor.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using CommonServiceLocator; using System; using System.ComponentModel.Composition; using System.IO; using UAOOI.Configuration.Core; using UAOOI.Configuration.Networking.Serialization; namespace UAOOI.Configuration.DataBindings { /// /// Class UANetworkingConfigurationEditor - /// [Export(typeof(IConfiguration))] public sealed class UANetworkingConfigurationEditor : ConfigurationBase { #region API /// /// Initializes a new instance of the class. /// public UANetworkingConfigurationEditor() { ComposeParts(); DefaultConfigurationLoader = NewConfigurationData; CreateDefaultConfiguration(); } #region ConfigurationBase /// /// Creates the default configuration. /// public override void CreateDefaultConfiguration() { CurrentConfiguration = DefaultConfigurationLoader(); } /// /// Gets the instance to be used by a user to configure the selected node. /// /// Provides identifying description of the node to be configured. /// Returned object provides access to the instance node configuration edition functionality. /// public override IInstanceConfiguration GetInstanceConfiguration(INodeDescriptor descriptor) { if (descriptor == null) throw new ArgumentNullException(nameof(descriptor)); if (CurrentConfiguration == null) return null; NodeDescriptorBase _nd = NodeDescriptorBase.Clone(descriptor); return InstanceConfigurationFactory.GetIInstanceConfiguration(CurrentConfiguration.GetInstanceConfiguration(_nd), CurrentConfiguration.GetMessageHandlers(), TraceSource.TraceData, () => this.RaiseOnChangeEvent()); } /// /// Gets the configuration editor - user interface to edit the plug-in configuration file. /// /// Represents a window or dialog box that makes up an application's user interface to be used to edit configuration file. /// Configuration Editor is unavailable. public override void EditConfiguration() { if (ConfigurationEditor == null) throw new ArgumentNullException(nameof(ConfigurationEditor), "Configuration Editor is unavailable."); ConfigurationEditor.EditConfiguration(CurrentConfiguration); } /// /// Gets the default name of the file created from the name provided the assembly configuration file. /// /// The default name of the file - UANetworkingConfiguration.uasconfig if not changed. public override string DefaultFileName { get { return String.Format("{0}.{1}", Settings.DefaultConfigurationFileName, Settings.DefaultConfigurationFileNametExtension); } } /// /// Creates automatically the instance configurations on the best effort basis. /// /// The descriptors of nodes. /// if set to true skip opening configuration file. /// if set to true cancel was pressed. /// Configuration Editor is unavailable. public override void CreateInstanceConfigurations(INodeDescriptor[] descriptors, bool SkipOpeningConfigurationFile, out bool CancelWasPressed) { CancelWasPressed = false; if (ConfigurationEditor == null) throw new ArgumentNullException(nameof(ConfigurationEditor), "Configuration Editor is unavailable."); bool _CancelWasPressed = false; ConfigurationEditor.CreateInstanceConfigurations(descriptors, SkipOpeningConfigurationFile, x => _CancelWasPressed = x); CancelWasPressed = _CancelWasPressed; } /// /// Saves the configuration. /// /// The solution file path. /// The configuration file. public override void SaveConfiguration(string solutionFilePath, FileInfo configurationFile) { base.SaveConfiguration(configurationFile); } #endregion #region MEF injection points /// /// Gets or sets the configuration editor - an access point to the external component. /// /// The configuration editor. public IConfigurationEditor ConfigurationEditor { get; private set; } /// /// Gets or sets the instance configuration factory. /// /// The instance configuration factory. public IInstanceConfigurationFactory InstanceConfigurationFactory { get; set; } #endregion /// /// Gets or sets the default configuration loader. /// /// The default configuration loader . public Func DefaultConfigurationLoader { private get; set; } #endregion #region private private void ComposeParts() { IServiceLocator _locator = ServiceLocator.Current; this.ConfigurationEditor = _locator.GetInstance(); this.InstanceConfigurationFactory = _locator.GetInstance(); } private static ConfigurationData NewConfigurationData() { return new ConfigurationData() { DataSets = new DataSetConfiguration[] { }, MessageHandlers = new MessageHandlerConfiguration[] { } }; } #endregion } } ================================================ FILE: Configuration/DataBindings/app.config ================================================ 
uasconfig UANetworkingConfiguration ================================================ FILE: Configuration/Networking/CommonDefinitions.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System; using System.ComponentModel; namespace UAOOI.Configuration.Networking { /// /// Class CommonDefinitions - contains common definition. /// internal static class CommonDefinitions { /// /// The namespace used for serialization of the configuration. /// internal const string Namespace = "http://commsvr.com/UAOOI/SemanticData/UANetworking/Configuration/Serialization.xsd"; internal const string Serializer = "XML"; /// /// Extension method that sets a new value in a variable and then executes the event handler if the new value /// differs from the old one. Used to easily implement . /// /// The type of values being handled (usually the type of the property). /// The event handler to execute in the event of actual value change. /// The new value to set. /// The old value to replace (and the value holder). /// The delegate used to update the property. /// The property's name. /// The object to be appointed as the executioner of the handler. /// A boolean value that indicates if the new value was truly different from the old value according to object.Equals(). internal static bool RaiseHandler(this PropertyChangedEventHandler handler, T newValue, T oldValue, Action update, string propertyName, object sender) { bool changed = !Object.Equals(oldValue, newValue); if (changed) { //Save the new value. update(newValue); //Raise the event handler?.Invoke(sender, new PropertyChangedEventArgs(propertyName)); } //Signal what happened. return changed; } } } ================================================ FILE: Configuration/Networking/Configuration.Networking.csproj ================================================  netstandard2.0 UAOOI.Configuration.Networking UAOOI.Configuration.Networking 6.4.7 UAOOI.Configuration.Networking UAOOI.Configuration.Networking - UA Data Application Configuration Mariusz Postol cas.eu https://github.com/mpostol/OPC-UA-OOI/tree/master/Configuration/Networking false false OPC UA Object Oriented Internet (UAOOI) UAOOI.Configuration.Networking library is dedicated to create a plug-in aimed at provisioning configuration of any application based on OPC UA Information Model. It is part of the project supporting OPC UA Object Oriented Internet paradigm. UAOOI Configuration Networking Library Copyright (C) 2021 Mariusz Postol LODZ POLAND Object Oriented Internet, OPC UA, CommServer, ASMD, Address Space Model Designer. commsvr.com false https://commsvr.gitbook.io/ooi https://github.com/mpostol/OPC-UA-OOI GitHub Object Oriented Internet, OPC UA, CommServer, Reactive Networking. true OPCUAOOIKey.snk Object Oriented Internet 6.4.7.1 MIT Logo64.PNG VS2022 compatibility 1701;1702;1705;IDE0001;IDE0002;IDE0003 bin\Release\ bin\Release\UAOOI.Configuration.Networking.xml True True Resources.resx ResXFileCodeGenerator Resources.Designer.cs True True True Configuration.Networking.tt TextTemplatingFileGenerator Configuration.Networking.nuspec ================================================ FILE: Configuration/Networking/Configuration.Networking.nuspec ================================================  UAOOI.Configuration.Networking 6.4.9 Object Oriented Internet UA Data Application Configuration Mariusz Postol Mariusz Postol false MIT https://commsvr.gitbook.io/ooi/ Logo64.PNG OPC UA Object Oriented Internet (UAOOI) UAOOI.Configuration.Networking library is dedicated to create a plug-in aimed at provisioning configuration of any application based on OPC UA Information Model. It is part of the project supporting OPC UA Object Oriented Internet paradigm. The library contains a shared interfaces for server configuration which OPC UA applications can reference. Copyright (C) 2022 Mariusz Postol LODZ POLAND Object Oriented Internet, OPC UA, PubSub, Information Model, IoT, M2M, DOA, VS2022 compatibility Copyright (C) 2022 Mariusz Postol LODZ POLAND ================================================ FILE: Configuration/Networking/Configuration.Networking.tt ================================================ <#@ template debug="false" hostspecific="false" language="C#" #> <#@ output extension=".nuspec" #> UAOOI.Configuration.Networking <#=CommonVersion#><#= CommonPrerelease#> <#=NetworkingDataProduct#> UA Data Application Configuration <#=AssemblyCompany#> <#=Owner#> false MIT https://commsvr.gitbook.io/ooi/ Logo64.PNG OPC UA Object Oriented Internet (UAOOI) UAOOI.Configuration.Networking library is dedicated to create a plug-in aimed at provisioning configuration of any application based on OPC UA Information Model. It is part of the project supporting OPC UA Object Oriented Internet paradigm. The library contains a shared interfaces for server configuration which OPC UA applications can reference. <#=AssemblyCopyright#> Object Oriented Internet, OPC UA, PubSub, Information Model, IoT, M2M, DOA, VS2022 compatibility <#=AssemblyCopyright#> <#@ include file = "..\..\CommonResources\T4Definitions\Model.t4" #> ================================================ FILE: Configuration/Networking/ConfigurationDataFactoryIO.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2018, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System; using System.Diagnostics; using System.IO; using UAOOI.Configuration.Networking.Serializers; namespace UAOOI.Configuration.Networking { /// /// Class ConfigurationDataFactoryIO - Input/Output helper operation to retrieve/save configuration data. /// public static class ConfigurationDataFactoryIO { /// /// Loads the instance using specified loader. /// /// The type of the configuration data type. /// The delegate capturing the loader functionality /// of the class derived from . /// A delegate encapsulating operation called when this instance is changed. /// An instance of derived from . public static ConfigurationDataType Load(Func loader, Action onChanged) where ConfigurationDataType : class, IConfigurationDataFactory, new() { ConfigurationDataType _configuration = loader(); _configuration.OnChanged = onChanged; _configuration.OnLoaded(); return _configuration; } /// /// Loads the instance using specified loader. /// /// The type of the configuration data type. /// The serializer. /// The configuration file. /// The trace. /// The on changed. /// ConfigurationDataType. public static ConfigurationDataType Load(SerializerType serializer, FileInfo configurationFile, Action trace, Action onChanged) where ConfigurationDataType : class, IConfigurationDataFactory, new() { Func, ConfigurationDataType> _loader = null; if (serializer == SerializerType.Xml) _loader = (file, tracer) => XmlDataContractSerializers.Load(file, tracer); else _loader = (conf, tracer) => JSONDataContractSerializers.Load(conf, tracer); ConfigurationDataType _configuration = _loader(configurationFile, (x, y, z) => trace?.Invoke(x, y, z)); _configuration.OnChanged = onChanged; _configuration.OnLoaded(); return _configuration; } internal static void Save(ConfigurationDataType configuration, Action saver) where ConfigurationDataType : class, IConfigurationDataFactory, new() { configuration.OnSaving(); saver(configuration); } internal static void Save(ConfigurationDataType configuration, SerializerType serializer, FileInfo configurationFile, Action trace) where ConfigurationDataType : class, IConfigurationDataFactory, new() { configuration?.OnSaving(); Action> _saver = null; if (serializer == SerializerType.Xml) _saver = (conf, file, tracer) => XmlDataContractSerializers.Save(conf, file, tracer); else _saver = (conf, file, tracer) => JSONDataContractSerializers.Save(conf, file, tracer); _saver(configurationFile, configuration, (x, y, z) => trace?.Invoke(x, y, z)); } } } ================================================ FILE: Configuration/Networking/ConfigurationFactoryBase.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2018, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System; using System.Diagnostics; using System.IO; using UAOOI.Configuration.Networking.Serialization; using UAOOI.Configuration.Networking.Serializers; namespace UAOOI.Configuration.Networking { /// /// Class ConfigurationFactory - provides basic implementation of the . /// /// /// It read configuration using custom or default function. /// public abstract class ConfigurationFactoryBase : IConfigurationFactory where ConfigurationType : class, IConfigurationDataFactory, new() { /// /// Initializes a new instance of the class. /// It loads the custom configuration using a default loader function. Using this overload should be overrioden. /// /// The file path of the configuration to read. /// filePath - Configuration file does not exist public ConfigurationFactoryBase(string filePath) { m_ConfigurationFileInformation = new FileInfo(filePath); if (!m_ConfigurationFileInformation.Exists) throw new ArgumentException(nameof(filePath), "Configuration file does not exist"); Loader = LoadConfig; } public ConfigurationFactoryBase() { } public ConfigurationType Configuration { get; private set; } #region IConfigurationFactory /// /// Gets the configuration. /// /// Am object of type capturing the communication configuration. public ConfigurationData GetConfiguration() { Configuration = ConfigurationDataFactoryIO.Load(Loader, RaiseEvents); return Configuration.GetConfigurationData(); } /// /// Occurs after the association configuration has been changed. /// public abstract event EventHandler OnAssociationConfigurationChange; /// /// Occurs after the communication configuration has been changed. /// public abstract event EventHandler OnMessageHandlerConfigurationChange; #endregion /// /// Gets or sets the loader of the configuration. /// /// Allows late binding - injection point of the configuration loader. /// The loader that is to be used to create or load new instance of . protected Func Loader { get; set; } = () => throw new NotImplementedException("Configuration loader must be assigned by the derived class"); /// /// Raises the events. /// protected abstract void RaiseEvents(); /// /// Writes trace data to the trace listeners in the collection using the specified , /// event identifier , and trace . /// /// One of the enumeration values that specifies the event type of the trace data. /// A numeric identifier for the event. /// The trace data. protected virtual void TraceData(TraceEventType eventType, int id, object data) { } private FileInfo m_ConfigurationFileInformation = null; private ConfigurationType LoadConfig() { return ConfigurationDataFactoryIO.Load(() => XmlDataContractSerializers.Load(m_ConfigurationFileInformation, TraceData), () => RaiseEvents()); } } } ================================================ FILE: Configuration/Networking/IConfigurationDataFactory.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2018, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System; using UAOOI.Configuration.Networking.Serialization; namespace UAOOI.Configuration.Networking { /// /// Interface IConfigurationDataFactory - creates an instance of /// public interface IConfigurationDataFactory { /// /// Gets and instance of . /// /// Returns an instance of . ConfigurationData GetConfigurationData(); /// /// Gets or sets the the delegate capturing functionality tha is executed when the configuration is changing. /// /// The m_ on changed. Action OnChanged { get; set; } /// /// Called when the configuration is loaded. /// void OnLoaded(); /// /// Called before the saving the configuration. /// void OnSaving(); } } ================================================ FILE: Configuration/Networking/IConfigurationFactory.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2018, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System; using UAOOI.Configuration.Networking.Serialization; namespace UAOOI.Configuration.Networking { /// /// Interface IConfigurationFactory provides functionality to provide the configuration. /// public interface IConfigurationFactory { /// /// Gets the configuration. /// /// Am object of type capturing the communication configuration. ConfigurationData GetConfiguration(); /// /// Occurs after the association configuration has been changed. /// event EventHandler OnAssociationConfigurationChange; /// /// Occurs after the communication configuration has been changed. /// event EventHandler OnMessageHandlerConfigurationChange; } } ================================================ FILE: Configuration/Networking/Properties/AssemblyInfo.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; [assembly: AssemblyTrademark("Object Oriented Internet")] [assembly: Guid("a5863757-f1fc-4f49-a984-a7d17ac3fb61")] #if DEBUG [assembly: InternalsVisibleTo( "UAOOI.Configuration.Networking.UnitTest, PublicKey=" + "00240000048000009400000006020000002400005253413100040000010001005b97a0972ff6b13a" + "8a9ff9c09503aea0e5e2fe29cb2275a0c0942182f4c3431814b6bc9a556d9fe0d7e7823439c1ba28" + "521f6318e4c936c4461604ef668e9686c2021571b093e1bfba071b373bc56a07a3afdc120c5313d3" + "9a935cda64b759f857ebb3db483641444a5347e1564f8ba6d4fad2f968d3caf9991a4fa6aa019ebe" )] #endif ================================================ FILE: Configuration/Networking/Properties/Resources.Designer.cs ================================================ //------------------------------------------------------------------------------ // // This code was generated by a tool. // Runtime Version:4.0.30319.42000 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. // //------------------------------------------------------------------------------ namespace UAOOI.Configuration.Networking.Properties { using System; /// /// A strongly-typed resource class, for looking up localized strings, etc. /// // This class was auto-generated by the StronglyTypedResourceBuilder // class via a tool like ResGen or Visual Studio. // To add or remove a member, edit your .ResX file then rerun ResGen // with the /str option, or rebuild your VS project. [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] internal class Resources { private static global::System.Resources.ResourceManager resourceMan; private static global::System.Globalization.CultureInfo resourceCulture; [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] internal Resources() { } /// /// Returns the cached ResourceManager instance used by this class. /// [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] internal static global::System.Resources.ResourceManager ResourceManager { get { if (object.ReferenceEquals(resourceMan, null)) { global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("UAOOI.Configuration.Networking.Properties.Resources", typeof(Resources).Assembly); resourceMan = temp; } return resourceMan; } } /// /// Overrides the current thread's CurrentUICulture property for all /// resource lookups using this strongly typed resource class. /// [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] internal static global::System.Globalization.CultureInfo Culture { get { return resourceCulture; } set { resourceCulture = value; } } /// /// Looks up a localized string similar to File: {0} has benn opened.. /// internal static string InformationFileOpened2 { get { return ResourceManager.GetString("InformationFileOpened2", resourceCulture); } } /// /// Looks up a localized string similar to File: {0} is saved.. /// internal static string InformationFileSaved2 { get { return ResourceManager.GetString("InformationFileSaved2", resourceCulture); } } } } ================================================ FILE: Configuration/Networking/Properties/Resources.resx ================================================  text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 File: {0} has benn opened. File: {0} is saved. ================================================ FILE: Configuration/Networking/README.MD ================================================ # Reactive Networking (RxNetworking) Configuration ## Introduction By design, this library is a plug-in or using modern terminology application composition part of the `RxNetworking` application described in [Reactive Networking (`RxNetworking`) of Semantic-Data Library][RxNetworkingLib]. At run time it can be used as the primary source of configuration for any standalone `OOI Reactive Application` and `UA Server` supporting PubSub role. It provides a basic implementation of the `IConfigurationDataFactory`. The idea behind this interface implementation is late binding - to allow the adoption of a new functionality against inevitable requirement changes after deploying a solution based on the `RxNetworking` application. In this case, the application configuration may: * be derived from the proposed one * be expanded by the proposed one The proposed solution supports also possibility to handle the configuration change event at run time, but this option is not tested and its implementation may change in new releases. I hope the interface is ready to fulfill the following design time scenarios allowing for configuration in context of selected OPC Information Model/Address Space: 1. Plug-in to a modeler (UA Information Model design tool) as the configuration editor tool (preferred for me) - now it is compatible with the [Address Space Model Designer][ASMD] 2. OPC UA Server as a local editor – using server local GUI, Address Space and the UANetworkingConfiguration plug-in (in this case OPC UA server is just modeler) 3. OPC UA Client as an editor - using client local GUI/UANetworkingConfiguration on the client-side, and remote access to the Address Space 4. OPC UA Server as a remote editor – using custom configuration Information Model/UANetworkingConfiguration plug-in on the server-side, and generic configuration OPC UA Client as the remote configuration tool, 5. OPC UA Server as a remote dedicated editor – using PubSub Information Model/UANetworkingConfiguration plug-in on the server-side, and dedicated (configuration editor GUI) PubSub configuration OPC UA Client as the remote configuration tool (let me stress it is the only scenario using PubSub Information Model) – it is rather run time approach. It is my opinion, but options 4 and 5 are only theoretically possible because in real installations OPC server is an untouchable artifact, but in a lab, it is just Modeler and cannot be used as the run-time configuration tool. It is a good opportunity to review your requirements (if you have any) against the proposed solution. ## Configuration content The detailed description of the configuration files content is captured in the code help documentation [API Browser][API Browser]. The XML schema of the configuration files is available at: [ConfigurationData.xsd](./Serialization/ConfigurationData.xsd). Intentionally data producers and consumers use the same schema for configuration files. It makes it easier to harmonize these roles configuration and supports two roles in one application. ## How to customize the configuration By design it is a plug-in or using modern terminology application composition part of the library described in [Reactive Networking (`RxNetworking`) of Semantic-Data Library][RxNetworkingLib] and at run time it can be used as the primary source of configuration for any standalone `OOI Reactive Application` and `UA Server` supporting PubSub role. In this case the application configuration may: * be derived from the proposed one * be expanded by the proposed one The `Configuration` library provides the required serialization functionality. This functionality must not be cloned in the custom extension. The proposed solution supports also possibility to handle the configuration change event at run time. ### Custom class wrapping `ConfigurationData` In this scenario, the custom class must implement `IConfigurationDataFactory` and contain a property with a public getter and setter of type `ConfigurationData`. The snippet below is an example illustrating this scenario. Complete code you may find in the Unit Test project. ```C# [DataContractAttribute(Name = "ConfigurationDataWrapper", Namespace = Definitions.m_Namespace)] [System.SerializableAttribute()] [XmlRoot(Namespace = CommonDefinitions.Namespace)] internal class ConfigurationDataWrapper : IConfigurationDataFactory { ... [DataMember(EmitDefaultValue = false, IsRequired = true)] public ConfigurationData ConfigurationData { get; set; } ... } ``` ### Custom class derived form `ConfigurationData` In this scenario, the custom class is derived from `ConfigurationData` and may contain a vast variety of custom properties decorated with `DataMemberAttribute` to be serialized. The snippet below is an example illustrating this scenario. Complete code you may find in the Unit Test project. ```C# [DataContractAttribute(Name = "CustomConfigurationData", Namespace = CommonDefinitions.Namespace)] [SerializableAttribute()] [XmlRoot(Namespace = CommonDefinitions.Namespace)] public class CustomConfigurationData : ConfigurationData { ... [DataMemberAttribute(EmitDefaultValue = true, IsRequired = true)] [XmlElementAttribute(IsNullable = false)] public string CustomProperty { get; set; } ... } ``` ## Prerequisites By design, the Configuration libraries depend on a logger functionality implementing the interface ```txt UAOOI.Common.Infrastructure.Diagnostic.ITraceSource ``` defined in the `UAOOI.Common.Infrastructure` package. It is used to trace the behavior of libraries at run-time. To get an instance implementing this interface the `CommonServiceLocator` is used. The functionality required by the `CommonServiceLocator` has to be provided by the hosting application. Usually, it is provided by the composition container that is built at the application bootstrap stage. To get more visit this library home page [Microsoft.Practices.ServiceLocation at GitHub](https://github.com/unitycontainer/commonservicelocator). > If the `CommonServiceLocator` is not available a default logger (do nothing) is used. ## See also * [Reactive Networking (`RxNetworking`) of Semantic-Data Library][RxNetworkingLib] * API Browser: the preliminary code help documentation is [available for sponsors- consider joining](https://github.commsvr.com/AboutPartnershipProgram.md.html) * [Address Space Model Designer][ASMD] [RxNetworkingLib]:../../Networking/SemanticData/README.MD [API Browser]: https://github.commsvr.com/AboutPartnershipProgram.md.htm [ASMD]:https://github.com/mpostol/ASMD ================================================ FILE: Configuration/Networking/Serialization/BuiltInType.cs ================================================  using System.Runtime.Serialization; namespace UAOOI.Configuration.Networking.Serialization { /// /// The set of built-in data types for UA type descriptions - see Part 6 5.1.2. /// /// /// An enumeration that lists all of the built-in data types for OPC UA Type Descriptions. /// [DataContractAttribute(Name = "BuiltInType", Namespace = CommonDefinitions.Namespace)] public enum BuiltInType : int { /// /// An invalid or unspecified value. /// [EnumMemberAttribute()] Null = 0, /// /// A boolean logic value (true or false) - A two-state logical value (true or false). /// [EnumMemberAttribute()] Boolean = 1, /// /// An 8 bit signed integer value. An integer value between −128 and 127. /// [EnumMemberAttribute()] SByte = 2, /// /// An 8 bit unsigned integer value. An integer value between 0 and 255. /// [EnumMemberAttribute()] Byte = 3, /// /// A 16 bit signed integer value. An integer value between 0 and 65 535. /// [EnumMemberAttribute()] Int16 = 4, /// /// A 16 bit unsigned integer value. An integer value between 0 and 65 535. /// [EnumMemberAttribute()] UInt16 = 5, /// /// A 32 bit signed integer value. An integer value between −2 147 483 648 and 2 147 483 647. /// [EnumMemberAttribute()] Int32 = 6, /// /// A 32 bit unsigned integer value. An integer value between 0 and 4 294 967 295. /// [EnumMemberAttribute()] UInt32 = 7, /// /// A 64 bit signed integer value. An integer value between −9 223 372 036 854 775 808 and 9 223 372 036 854 775 807 /// [EnumMemberAttribute()] Int64 = 8, /// /// A 64 bit unsigned integer value. An integer value between 0 and 18 446 744 073 709 551 615. /// [EnumMemberAttribute()] UInt64 = 9, /// /// An IEEE single precision (32 bit) floating point value. An IEEE single precision (32 bit) floating point value. /// [EnumMemberAttribute()] Float = 10, /// /// An IEEE double precision (64 bit) floating point value. An IEEE double precision (64 bit) floating point value. /// [EnumMemberAttribute()] Double = 11, /// /// A sequence of Unicode characters. /// [EnumMemberAttribute()] String = 12, /// /// An instance in time. /// [EnumMemberAttribute()] DateTime = 13, /// /// A 128-bit globally unique identifier. /// [EnumMemberAttribute()] Guid = 14, /// /// A sequence of bytes. /// [EnumMemberAttribute()] ByteString = 15, /// /// An XML element. /// [EnumMemberAttribute()] XmlElement = 16, /// /// An identifier for a node in the address space of an OPC UA Server. /// [EnumMemberAttribute()] NodeId = 17, /// /// A node id that stores the namespace URI instead of the namespace index. /// [EnumMemberAttribute()] ExpandedNodeId = 18, /// /// A structured result code. /// [EnumMemberAttribute()] StatusCode = 19, /// /// A string qualified with a namespace. /// [EnumMemberAttribute()] QualifiedName = 20, /// /// A localized text string with an locale identifier. /// [EnumMemberAttribute()] LocalizedText = 21, /// /// A structure that contains an application specific data type that may not be recognized by the receiver. /// [EnumMemberAttribute()] ExtensionObject = 22, /// /// A data value with an associated quality and time stamp. /// [EnumMemberAttribute()] DataValue = 23, /// /// Any of the other built-in types - a union of all of the types specified above. /// [EnumMemberAttribute()] Variant = 24, /// /// A diagnostic information associated with a result code. /// [EnumMemberAttribute()] DiagnosticInfo = 25, /// /// The enumeration /// [EnumMemberAttribute()] Enumeration = 26, } } ================================================ FILE: Configuration/Networking/Serialization/ConfigurationData.cd ================================================  AAABAABAGUAEAIAIQAAAAIIAEQgAAAEEgAAIAQIAAAA= Serialization\ConfigurationData.cs AqACAAAoAACAACAEAEAATgAAAEgABECMAAAAAgMABIQ= Serialization\ConfigurationData.xsd.cs ACAAAAAAAAAQgAAAAAAAAAQAAIAAAAAEgAAAEAIAABA= Serialization\ConfigurationData.xsd.cs Serialization\NodeDescriptor.cs AACQAQCAAAIAQAAAAAAAEAABBAAAAgAAAAAAAABAAAA= Serialization\NodeDescriptor.cs QAIAAAAAAABAAAgAAEAAAAAAAAAAAAAEAAAAAAIIAAA= Serialization\ConfigurationData.xsd.cs ACABAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAA= Serialization\ConfigurationData.xsd.cs ACAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAA= Serialization\ConfigurationData.xsd.cs AAAAAAAAAAAAAAAAAAACAAAAEAAAAAAAAAAAAAAAAAA= Serialization\ConfigurationData.xsd.cs AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= Serialization\ConfigurationData.xsd.cs AAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= Serialization\ConfigurationData.xsd.cs AAAAAACAAAAACAAAAAAAAAAAAAAAAAAAAAAAAgAQAAA= Serialization\TypeDictionary.cs AAAAAAAAAACAAAAAAQAAAAAAAQAAACAAQAAAAAAABAA= Serialization\ConfigurationData.xsd.cs AAAAAAAAAAAAAAAAAIAAAAQAAAAAAAAAAAAAAAAAAAA= Serialization\TypeDictionary.cs AAAEAAAAAACAIAQAAAAQAAAAAAAAABBAAAAAIAAAAAA= Serialization\UATypeInfo.cs ================================================ FILE: Configuration/Networking/Serialization/ConfigurationData.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2020, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Xml.Serialization; namespace UAOOI.Configuration.Networking.Serialization { /// /// Class ConfigurationData - contains configuration data of the UANetworking application. /// public partial class ConfigurationData : IConfigurationDataFactory { #region API public ObservableCollection GetMessageHandlers() { if (m_ObservableMessageHandlers == null) { m_ObservableMessageHandlers = new ObservableCollection(MessageHandlers); m_ObservableMessageHandlers.CollectionChanged += M_MessageHandlers_CollectionChanged; } return m_ObservableMessageHandlers; } /// /// Gets the instance configuration - collection of data sets represented as the . /// /// The descriptor. /// IEnumerable<IInstanceConfiguration>. public DataSetConfiguration GetInstanceConfiguration(NodeDescriptor descriptor) { DataSetConfiguration _node = DataSetsList.Where(x => x.Root.CreateWrapper().CompareTo(descriptor) == 0).FirstOrDefault(); if (_node == null) _node = DataSetConfiguration.Create(descriptor); return _node; } #endregion API #region IConfigurationDataFactory /// /// Gets and instance of . /// /// Returns an instance of . public ConfigurationData GetConfigurationData() { return this; } /// /// Gets or sets the delegate capturing functionality that is executed when the configuration is changing. /// /// The m_ on changed. [XmlIgnore] public Action OnChanged { get; set; } /// /// Called when the configuration is loaded. /// public virtual void OnLoaded() { } /// /// Called before saving the configuration. /// public virtual void OnSaving() { if (b_DataSetConfigurationList == null) return; if (m_PendingChanges) DataSets = b_DataSetConfigurationList.ToArray(); if (m_MessageHandlersCollectionChanged) MessageHandlers = m_ObservableMessageHandlers.Select(x => (MessageHandlerConfiguration)x.Clone()).ToArray(); } #endregion IConfigurationDataFactory #region private private bool m_PendingChanges = false; private bool m_MessageHandlersCollectionChanged = false; private List b_DataSetConfigurationList; private ObservableCollection m_ObservableMessageHandlers; private void PendingChanges() { m_PendingChanges = true; OnChanged(); } private void M_MessageHandlers_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e) { m_MessageHandlersCollectionChanged = true; OnChanged(); } private List DataSetsList { get { if (b_DataSetConfigurationList == null) b_DataSetConfigurationList = new List(DataSets); return b_DataSetConfigurationList; } } #endregion private } } ================================================ FILE: Configuration/Networking/Serialization/ConfigurationData.xsd ================================================  ================================================ FILE: Configuration/Networking/Serialization/ConfigurationData.xsd.cs ================================================  using System; using System.Runtime.Serialization; using System.Xml.Serialization; [assembly: ContractNamespaceAttribute("http://commsvr.com/UAOOI/SemanticData/UANetworking/Configuration/Serialization.xsd", ClrNamespace = "UAOOI.Configuration.Networking.Serialization")] namespace UAOOI.Configuration.Networking.Serialization { [DataContractAttribute(Name = "ConfigurationData", Namespace = CommonDefinitions.Namespace)] [SerializableAttribute()] [XmlRoot(Namespace = CommonDefinitions.Namespace)] //[XmlType(Namespace = CommonDefinitions.Namespace)] public partial class ConfigurationData : object, IExtensibleDataObject { [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2235:MarkAllNonSerializableFields")] private ExtensionDataObject extensionDataField; private DataSetConfiguration[] DataSetsField; private MessageHandlerConfiguration[] MessageHandlersField; private TypeDictionary[] TypeDictionariesField; public ExtensionDataObject ExtensionData { get { return this.extensionDataField; } set { this.extensionDataField = value; } } [DataMemberAttribute(EmitDefaultValue = true, IsRequired = true)] [XmlElementAttribute(IsNullable = false)] public DataSetConfiguration[] DataSets { get { return this.DataSetsField; } set { this.DataSetsField = value; } } [DataMemberAttribute(EmitDefaultValue = true, IsRequired = true)] [XmlArray(IsNullable = false)] [XmlArrayItem(Type = typeof(MessageWriterConfiguration), ElementName = "MessageWriterConfiguration")] [XmlArrayItem(Type = typeof(MessageReaderConfiguration), ElementName = "MessageReaderConfiguration")] public MessageHandlerConfiguration[] MessageHandlers { get { return this.MessageHandlersField; } set { this.MessageHandlersField = value; } } [DataMemberAttribute(EmitDefaultValue = true, IsRequired = false)] [XmlArray(IsNullable = true)] public TypeDictionary[] TypeDictionaries { get { return TypeDictionariesField; } set { TypeDictionariesField = value; } } } [DataContractAttribute(Name = "DataSetConfiguration", Namespace = CommonDefinitions.Namespace)] [SerializableAttribute()] public partial class DataSetConfiguration : object, IExtensibleDataObject { #region private [NonSerializedAttribute()] private ExtensionDataObject extensionDataField; private AssociationRole AssociationRoleField; [OptionalFieldAttribute()] private string AssociationNameField; [OptionalFieldAttribute()] private string RepositoryGroupField; [OptionalFieldAttribute()] private string InformationModelURIField; [OptionalFieldAttribute()] private string DataSymbolicNameField; [OptionalFieldAttribute()] private FieldMetaData[] DataSetField; [OptionalFieldAttribute()] private string GuidField; [OptionalFieldAttribute()] private NodeDescriptor RootField; [OptionalFieldAttribute()] private double PublishingIntervalField; [OptionalFieldAttribute()] private double MaxBufferTimeField; [OptionalFieldAttribute()] private Guid ConfigurationGuidField; [OptionalFieldAttribute()] private ConfigurationVersionDataType ConfigurationVersionField; #endregion #region public public ExtensionDataObject ExtensionData { get { return this.extensionDataField; } set { this.extensionDataField = value; } } [DataMemberAttribute(IsRequired = true)] public AssociationRole AssociationRole { get { return this.AssociationRoleField; } set { this.AssociationRoleField = value; } } [DataMemberAttribute(EmitDefaultValue = false, Order = 1, IsRequired = true)] public string AssociationName { get { return this.AssociationNameField; } set { this.AssociationNameField = value; } } [DataMemberAttribute(EmitDefaultValue = false, Order = 2)] public string RepositoryGroup { get { return this.RepositoryGroupField; } set { this.RepositoryGroupField = value; } } [DataMemberAttribute(EmitDefaultValue = false, Order = 3)] public string InformationModelURI { get { return this.InformationModelURIField; } set { this.InformationModelURIField = value; } } [DataMemberAttribute(EmitDefaultValue = false, Order = 4)] public string DataSymbolicName { get { return this.DataSymbolicNameField; } set { this.DataSymbolicNameField = value; } } [DataMemberAttribute(EmitDefaultValue = false, Order = 5, IsRequired = true)] public FieldMetaData[] DataSet { get { return this.DataSetField; } set { this.DataSetField = value; } } [DataMemberAttribute(EmitDefaultValue = false, Order = 6)] public string Guid { get { return this.GuidField; } set { this.GuidField = value; } } [DataMemberAttribute(EmitDefaultValue = false, Order = 7, IsRequired = true)] [XmlElementAttribute(IsNullable = false)] public NodeDescriptor Root { get { return RootField; } set { RootField = value; } } /// /// Gets or sets the publishing interval - The interval in milliseconds for sampling the Variables and publishing the Values in a DataSet by the related MessageWriter. /// The Duration DataType is a subtype of Double and allows configuration of intervals smaller than a millisecond. /// /// The publishing interval. [DataMemberAttribute(EmitDefaultValue = true, Order = 8, IsRequired = true)] [XmlElementAttribute(IsNullable = false)] public double PublishingInterval { get { return PublishingIntervalField; } set { PublishingIntervalField = value; } } /// /// Gets or sets the maximum buffer time. The MaxBufferTime defines the maximum time the delivery of the DataSet may be delayed by the /// MessageWriter, to allow for the collection of additional Messages. This parameter allows the Producer to reduce the number of network packets necessary to send the Messages. /// /// The maximum buffer time. [DataMemberAttribute(EmitDefaultValue = true, Order = 9, IsRequired = true)] [XmlElementAttribute(IsNullable = false)] public double MaxBufferTime { get { return MaxBufferTimeField; } set { MaxBufferTimeField = value; } } /// /// Gets or sets the configuration unique identifier. It provides a unique identifier for the current configuration of this object. /// Any change of the ConfigurationVersion Property triggers a creation of a new value. /// /// The configuration unique identifier. [DataMemberAttribute(EmitDefaultValue = true, Order = 10, IsRequired = true)] [XmlElementAttribute(IsNullable = false)] public Guid ConfigurationGuid { get { return ConfigurationGuidField; } set { ConfigurationGuidField = value; } } [DataMemberAttribute(EmitDefaultValue = true, Order = 11, IsRequired = true)] [XmlElementAttribute(IsNullable = false)] public ConfigurationVersionDataType ConfigurationVersion { get { return ConfigurationVersionField; } set { ConfigurationVersionField = value; } } #endregion } [Serializable] [DataContractAttribute(Name = "ConfigurationVersionDataType", Namespace = CommonDefinitions.Namespace)] public partial class ConfigurationVersionDataType { private byte MajorVersionField; private byte MinorVersionField; /// /// Gets or sets the major version. The major number reflects the primary format of the DataSet and must be equal in both Producer and Consumer. /// Removing fields from the DataSet, reordering fields, adding fields in between other fields or a DataType change in fields shall result in an update of the MajorVersion. /// The initial value for the MajorVersion is 0. If the MajorVersion is incremented, the MinorVersion shall be set to 0. /// An overflow of the MajorVersion is treated like any other major version change and requires a meta data exchange. /// /// The major version. [DataMemberAttribute(EmitDefaultValue = true, IsRequired = true)] public byte MajorVersion { get { return MajorVersionField; } set { MajorVersionField = value; } } /// /// Gets or sets the minor version. The minor number reflects backward compatible changes of the DataSet like adding a field at the end of the DataSet. /// The initial value for the MinorVersion is 0. The MajorVersion shall be incremented after an overflow of the MinorVersion. /// /// The minor version. [DataMemberAttribute(EmitDefaultValue = true, IsRequired = true)] public byte MinorVersion { get { return MinorVersionField; } set { MinorVersionField = value; } } } [DataContractAttribute(Name = "AssociationConfiguration", Namespace = CommonDefinitions.Namespace)] [KnownType(typeof(ProducerAssociationConfiguration))] [KnownType(typeof(ConsumerAssociationConfiguration))] [SerializableAttribute()] public partial class AssociationConfiguration { private string AssociationNameField; private UInt16 DataSetWriterIdField; private Guid PublisherIdField; [DataMemberAttribute(EmitDefaultValue = false, Order = 0)] public string AssociationName { get { return AssociationNameField; } set { AssociationNameField = value; } } [DataMemberAttribute(EmitDefaultValue = false, Order = 1)] public UInt16 DataSetWriterId { get { return DataSetWriterIdField; } set { DataSetWriterIdField = value; } } [DataMemberAttribute(EmitDefaultValue = false, Order = 2)] public Guid PublisherId { get { return PublisherIdField; } set { PublisherIdField = value; } } } [DataContractAttribute(Name = "ProducerAssociationConfiguration", Namespace = CommonDefinitions.Namespace)] [SerializableAttribute()] public partial class ProducerAssociationConfiguration : AssociationConfiguration { FieldEncodingEnum FieldEncodingField; [DataMemberAttribute(EmitDefaultValue = true, IsRequired = true, Order = 1)] public FieldEncodingEnum FieldEncoding { get { return FieldEncodingField; } set { FieldEncodingField = value; } } } [DataContractAttribute(Name = "ConsumerAssociationConfiguration", Namespace = CommonDefinitions.Namespace)] [SerializableAttribute()] public partial class ConsumerAssociationConfiguration : AssociationConfiguration { } [DataContractAttribute(Name = "MessageWriterConfiguration", Namespace = CommonDefinitions.Namespace)] [SerializableAttribute()] public partial class MessageWriterConfiguration : MessageHandlerConfiguration { private ProducerAssociationConfiguration[] ProducerAssociationConfigurationField; [DataMemberAttribute(EmitDefaultValue = false)] [XmlArray(ElementName = "ProducerAssociationConfigurations")] public ProducerAssociationConfiguration[] ProducerAssociationConfigurations { get { return ProducerAssociationConfigurationField; } set { ProducerAssociationConfigurationField = value; } } } [DataContractAttribute(Name = "MessageReaderConfiguration")] [SerializableAttribute()] public partial class MessageReaderConfiguration : MessageHandlerConfiguration { private ConsumerAssociationConfiguration[] ConsumerAssociationConfigurationsFields; [DataMemberAttribute(EmitDefaultValue = false)] [XmlArray(ElementName = "ConsumerAssociationConfigurations")] public ConsumerAssociationConfiguration[] ConsumerAssociationConfigurations { get { return ConsumerAssociationConfigurationsFields; } set { ConsumerAssociationConfigurationsFields = value; } } } //[DataContractAttribute(Name = "MessageHandlerConfiguration", Namespace = CommonDefinitions.Namespace)] [DataContractAttribute()] [KnownType(typeof(MessageReaderConfiguration))] [KnownType(typeof(MessageWriterConfiguration))] [SerializableAttribute()] public partial class MessageHandlerConfiguration : object, IExtensibleDataObject { [NonSerializedAttribute()] private ExtensionDataObject extensionDataField; private string NameField; private MessageChannelConfiguration ConfigurationField; private AssociationRole TransportRoleField; public ExtensionDataObject ExtensionData { get { return this.extensionDataField; } set { this.extensionDataField = value; } } [DataMemberAttribute(EmitDefaultValue = false)] public string Name { get { return this.NameField; } set { this.NameField = value; } } [DataMemberAttribute(EmitDefaultValue = true, IsRequired = true, Order = 2)] public MessageChannelConfiguration Configuration { get { return this.ConfigurationField; } set { this.ConfigurationField = value; } } [DataMemberAttribute(IsRequired = true, Order = 3)] public AssociationRole TransportRole { get { return this.TransportRoleField; } set { this.TransportRoleField = value; } } } [DataContractAttribute(Name = "MessageChannelConfiguration", Namespace = CommonDefinitions.Namespace)] [Serializable] public class MessageChannelConfiguration { [DataMemberAttribute(IsRequired = false, Order = 0)] public string ChannelConfiguration { get; set; } } [DataContractAttribute(Name = "AssociationRole", Namespace = CommonDefinitions.Namespace)] public enum AssociationRole : int { [EnumMemberAttribute()] Consumer = 0, [EnumMemberAttribute()] Producer = 1, } [DataContractAttribute(Name = "DataMemberConfiguration", Namespace = CommonDefinitions.Namespace)] [SerializableAttribute()] public partial class FieldMetaData : object, IExtensibleDataObject { #region private [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2235:MarkAllNonSerializableFields")] private ExtensionDataObject extensionDataField; private string SymbolicNameField; private string ProcessValueNameField; private UATypeInfo m_TypeInfo; #endregion #region public public ExtensionDataObject ExtensionData { get { return this.extensionDataField; } set { this.extensionDataField = value; } } /// /// Gets or sets the name of the field. /// /// The name of the field. [DataMemberAttribute(EmitDefaultValue = false, Order = 0)] public string SymbolicName { get { return this.SymbolicNameField; } set { this.SymbolicNameField = value; } } [DataMemberAttribute(EmitDefaultValue = false, Order = 1)] public string ProcessValueName { get { return this.ProcessValueNameField; } set { this.ProcessValueNameField = value; } } [DataMemberAttribute(EmitDefaultValue = false, IsRequired = true, Order = 2)] public UATypeInfo TypeInformation { get { return m_TypeInfo; } set { m_TypeInfo = value; } } #endregion } } ================================================ FILE: Configuration/Networking/Serialization/ConfigurationVersionDataType.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace UAOOI.Configuration.Networking.Serialization { public partial class ConfigurationVersionDataType { public override string ToString() { return $"{MajorVersion}.{MinorVersion}"; } } } ================================================ FILE: Configuration/Networking/Serialization/DataMemberConfiguration.cs ================================================ namespace UAOOI.Configuration.Networking.Serialization { /// /// Class DataMemberConfiguration - provides all necessary information to create binding between a local process value (PLC register, element on the screen, etc) with a Variable node exposed by an /// OPC UA Server. Adding both to the configuration make the same configuration reusable by the OPC UA Server, OPC UA Client and UA application. /// public partial class FieldMetaData { } } ================================================ FILE: Configuration/Networking/Serialization/DataSetConfiguration.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2020, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System; using System.Xml; using System.Xml.Serialization; namespace UAOOI.Configuration.Networking.Serialization { /// /// Class represent a data set as a collection of members to be used as a description to populate (encode) messages sent over the wire /// or analyze (decode) the message read from the wire to retrieve data items. For the senders it also provides criteria on when to forward the new message using the message /// writers associated with this set of data. All communication parties must use the same description to decode the message content. /// Current value can be loaded from the local configuration or obtained using meta-data exchange centric communication mechanism. /// For example it could be read from a file or discovered using OPC UA session from OPC UA server. /// public partial class DataSetConfiguration { #region API /// /// Gets or sets the identifier to/from the xml stream containing . /// /// The identifier. [XmlIgnore] public Guid Id { get => string.IsNullOrEmpty(this.Guid) ? System.Guid.Empty : XmlConvert.ToGuid(this.Guid); set => Guid = XmlConvert.ToString(value); } internal static DataSetConfiguration Create(NodeDescriptor descriptor) { if (descriptor == null) throw new ArgumentNullException(nameof(descriptor)); if (descriptor.NodeIdentifier == null || descriptor.NodeIdentifier.IsEmpty) throw new ArgumentNullException(nameof(descriptor.NodeIdentifier)); NodeDescriptor _newRoot = new NodeDescriptor() { BindingDescription = descriptor.BindingDescription, DataType = descriptor.DataType, InstanceDeclaration = descriptor.InstanceDeclaration, NodeClass = descriptor.NodeClass, NodeIdentifier = descriptor.NodeIdentifier }; DataSetConfiguration _new = new DataSetConfiguration() { AssociationName = descriptor.NodeIdentifier.ToString(), AssociationRole = AssociationRole.Producer, DataSet = new FieldMetaData[0], DataSymbolicName = descriptor.NodeIdentifier.ToString(), ExtensionData = null, Id = System.Guid.NewGuid(), RepositoryGroup = "[RepositoryGroup]", Root = _newRoot, }; return _new; } #endregion API #region Object /// /// Returns a that represents this instance. /// /// A that represents this instance. public override string ToString() { return $"{this.Root.NodeClass} : {this.DataSymbolicName}"; } #endregion Object } } ================================================ FILE: Configuration/Networking/Serialization/FieldEncodingEnum.cs ================================================  using System; using System.Runtime.Serialization; namespace UAOOI.Configuration.Networking.Serialization { /// /// Enum FieldEncodingEnum - /// [DataContractAttribute(Name = "FieldEncodingEnum", Namespace = CommonDefinitions.Namespace)] public enum FieldEncodingEnum : Byte { /// /// The variant encoding - The DataSetFields are encoded as Variant. The Variant can contain a StatusCode instead of the expected DataType if the /// status of the field is Bad. The Variant can contain a DataValue if the status of the field is Uncertain. /// [EnumMemberAttribute()] VariantFieldEncoding = 0x0, /// /// The compressed field encoding - The DataSet fields are encoded using the data types defined in the configuration. /// [EnumMemberAttribute()] CompressedFieldEncoding = 0x4, /// /// The data value field encoding - The DataSet fields are encoded as DataValue. This option is set if the DataSet is configured to send more than the Value. /// [EnumMemberAttribute()] DataValueFieldEncoding = 0x8 } } ================================================ FILE: Configuration/Networking/Serialization/GoCS.cmd ================================================  rem https://msdn.microsoft.com/en-us/library/aa347733(v=vs.110).aspx Svcutil ConfigurationData.xsd /N:http://commsvr.com/UAOOI/SemanticData/UANetworking/Configuration/Serialization.xsd,UAOOI.Configuration.Networking.Serialization /o:ConfigurationData.!.cs /dconly /s /serializer:DataContractSerializer /importXmlTypes ================================================ FILE: Configuration/Networking/Serialization/GoXSD.cmd ================================================ xsd.exe ..\bin\Debug\UAOOI.Configuration.Networking.dll /t:UAOOI.Configuration.Networking.Serialization.ConfigurationData rem https://msdn.microsoft.com/en-us/library/aa347733(v=vs.110).aspx rem Svcutil ..\bin\Debug\UAOOI.Configuration.Networking.dll /collectionType:UAOOI.Configuration.Networking.Serialization.ConfigurationData /N:http://commsvr.com/UAOOI/SemanticData/UANetworking/Configuration/Serialization.xsd,UAOOI.Configuration.Networking.Serialization /o:ConfigurationData.!.xsd /dconly /s /serializer:DataContractSerializer rem Svcutil ..\bin\Debug\UAOOI.Configuration.Networking.dll /t:metadata /dconly /d:xsd ================================================ FILE: Configuration/Networking/Serialization/InstanceNodeClassesEnum.cs ================================================  using System.Runtime.Serialization; namespace UAOOI.Configuration.Networking.Serialization { /// /// Enumeration of the node classes that can be a source of process data. /// [DataContractAttribute(Name = "InstanceNodeClassesEnum", Namespace = CommonDefinitions.Namespace)] public enum InstanceNodeClassesEnum { /// /// Object NodeClasses /// [EnumMemberAttribute()] Object, /// /// Variable NodeClasses /// [EnumMemberAttribute()] Variable, /// /// Method NodeClasses /// [EnumMemberAttribute()] Method, /// /// View NodeClasses /// [EnumMemberAttribute()] View, /// /// Not defined or nor relevant /// [EnumMemberAttribute()] NotDefined } } ================================================ FILE: Configuration/Networking/Serialization/MessageHandlerConfiguration.cs ================================================  using System; namespace UAOOI.Configuration.Networking.Serialization { /// /// Class MessageTransportConfiguration - provide configuration for transport used to transfer messages over the wire. /// public abstract partial class MessageHandlerConfiguration : ICloneable { /// /// Creates a new object that is a copy of the current instance. /// /// A new object that is a copy of this instance. /// It is intentionally not implemented. public virtual object Clone() { throw new NotImplementedException(); } /// /// Check if this instance of contains on the list of associated data sets.. /// /// Name of the association. /// true if XXXX, false otherwise. public abstract bool Associated(string associationName); } } ================================================ FILE: Configuration/Networking/Serialization/MessageReaderConfiguration.cs ================================================ using System.Linq; namespace UAOOI.Configuration.Networking.Serialization { public partial class MessageReaderConfiguration { public override bool Associated(string associationName) { return this.ConsumerAssociationConfigurations.Where(x => x.AssociationName == associationName).Any(); } } } ================================================ FILE: Configuration/Networking/Serialization/MessageWriterConfiguration.cs ================================================  using System.Linq; namespace UAOOI.Configuration.Networking.Serialization { public partial class MessageWriterConfiguration { public override bool Associated(string associationName) { return this.ProducerAssociationConfigurations.Where(x => x.AssociationName == associationName).Any(); } } } ================================================ FILE: Configuration/Networking/Serialization/NodeDescriptor.cs ================================================  using System; using System.ComponentModel; using System.Runtime.Serialization; using System.Xml; namespace UAOOI.Configuration.Networking.Serialization { [DataContractAttribute(Name = "NodeDescriptor", Namespace = CommonDefinitions.Namespace)] [SerializableAttribute()] public partial class NodeDescriptor { /// /// Creates the wrapper of this instance. /// /// An instance of . internal IComparable CreateWrapper() { return new NodeDescriptorWrapper(this); } #region INodeDescriptor /// /// Gets or sets the binding description. /// /// The binding description. [DataMemberAttribute(EmitDefaultValue = false, Order = 1)] public string BindingDescription { get { return m_BindingDescriptionField; } set { m_BindingDescriptionField = value; } } /// /// Gets or sets the type of the data. /// /// The type of the data. [DataMemberAttribute(EmitDefaultValue = false, Order = 2)] public XmlQualifiedName DataType { get { return m_DataTypeField; } set { m_DataTypeField = value; } } /// /// Gets or sets a value indicating whether [instance declaration]. /// /// true if [instance declaration]; otherwise, false. [DataMemberAttribute(EmitDefaultValue = false, Order = 3)] public bool InstanceDeclaration { get { return m_InstanceDeclarationField; } set { m_InstanceDeclarationField = value; } } /// /// Gets or sets the node class. /// /// The node class. [DataMemberAttribute(EmitDefaultValue = false, Order = 4)] public InstanceNodeClassesEnum NodeClass { get { return m_NodeClassField; } set { m_NodeClassField = value; } } /// /// Gets or sets the node identifier. /// /// The node identifier. [DataMemberAttribute(EmitDefaultValue = false, Order = 5)] public XmlQualifiedName NodeIdentifier { get { return m_NodeIdentifierField; } set { m_NodeIdentifierField = value; } } #endregion #region private /// /// Class NodeDescriptorWrapper - read only wrapper of the node descriptor /// private class NodeDescriptorWrapper : IComparable { public NodeDescriptorWrapper(NodeDescriptor repository) { m_repository = repository; } /// /// Gets or sets the binding description. /// /// The binding description. public string BindingDescription { get { return m_repository.BindingDescription; } } /// /// Gets or sets the type of the data. /// /// The type of the data. public XmlQualifiedName DataType { get { return m_repository.DataType; } } public bool InstanceDeclaration { get { return m_repository.InstanceDeclaration; } } public InstanceNodeClassesEnum NodeClass { get { return m_repository.NodeClass; } } [DisplayName("Name")] [Description("The node unique identifier.")] [Category("Node")] [ReadOnly(true)] public XmlQualifiedName NodeIdentifier { get { return m_repository.NodeIdentifier; } } /// /// Returns a that represents this instance. /// /// A that represents this instance. public override string ToString() { return $"{NodeClass}:{NodeIdentifier}"; } #region IComparable /// /// Compares the current instance with another object of the same type and returns an integer that indicates whether the current instance precedes, follows, or occurs in the same position in the sort order as the other object. /// /// An object to compare with this instance. /// A value that indicates the relative order of the objects being compared. The return value has these meanings: Value Meaning Less than zero This instance precedes in the sort order. Zero This instance occurs in the same position in the sort order as . Greater than zero This instance follows in the sort order. /// public int CompareTo(object obj) { return this.ToString().CompareTo(obj.ToString()); } #endregion private NodeDescriptor m_repository; } private string m_BindingDescriptionField; private XmlQualifiedName m_DataTypeField; private bool m_InstanceDeclarationField; private InstanceNodeClassesEnum m_NodeClassField; private XmlQualifiedName m_NodeIdentifierField; #endregion } } ================================================ FILE: Configuration/Networking/Serialization/TypeDictionary.cs ================================================  using System; using System.ComponentModel; using System.Runtime.Serialization; using System.Xml; using System.Xml.Serialization; namespace UAOOI.Configuration.Networking.Serialization { ///// //[SerializableAttribute()] //[XmlTypeAttribute(AnonymousType = true, Namespace = CommonDefinitions.Namespace)] //[DataContractAttribute(Name = "Documentation", Namespace = CommonDefinitions.Namespace)] //public partial class Documentation //{ // private XmlElement[] itemsField; // private string[] textField; // //private XmlAttribute[] anyAttrField; // /// // [XmlAnyElementAttribute()] // [DataMember] // public XmlElement[] Items // { // get // { // return this.itemsField; // } // set // { // this.itemsField = value; // } // } // /// // [XmlTextAttribute()] // [DataMember] // public string[] Text // { // get // { // return this.textField; // } // set // { // this.textField = value; // } // } /// [SerializableAttribute()] [XmlTypeAttribute(Namespace = CommonDefinitions.Namespace)] [DataContractAttribute(Name = "LocalizedText", Namespace = CommonDefinitions.Namespace)] public partial class LocalizedText { private string localeField; private string valueField; public LocalizedText() { this.localeField = ""; } /// [XmlAttributeAttribute()] [DefaultValueAttribute("")] [DataMember] public string Locale { get { return this.localeField; } set { this.localeField = value; } } /// [XmlTextAttribute()] [DataMember] public string Value { get { return this.valueField; } set { this.valueField = value; } } } ///// //[XmlAnyAttributeAttribute()] //[DataMember] //public XmlAttribute[] AnyAttr //{ // get // { // return this.anyAttrField; // } // set // { // this.anyAttrField = value; // } //} //} /// [SerializableAttribute()] [XmlTypeAttribute(Namespace = CommonDefinitions.Namespace)] [DataContractAttribute(Name = "FieldType", Namespace = CommonDefinitions.Namespace)] public partial class FieldType { //private Documentation documentationField; private string nameField; private XmlQualifiedName typeNameField; //private uint lengthField; //private bool lengthFieldSpecified; //private string lengthFieldField; //private bool isLengthInBytesField; private string switchFieldField; private uint switchValueField; private bool switchValueFieldSpecified; private SwitchOperand switchOperandField; private bool switchOperandFieldSpecified; //private byte[] terminatorField; //private XmlAttribute[] anyAttrField; public FieldType() { //this.isLengthInBytesField = false; } ///// //[DataMember] //public Documentation Documentation //{ // get // { // return this.documentationField; // } // set // { // this.documentationField = value; // } //} /// [XmlAttributeAttribute()] [DataMember] public string Name { get { return this.nameField; } set { this.nameField = value; } } /// [XmlAttributeAttribute()] [DataMember] public XmlQualifiedName TypeName { get { return this.typeNameField; } set { this.typeNameField = value; } } ///// //[XmlAttributeAttribute()] //[DataMember] //public uint Length //{ // get // { // return this.lengthField; // } // set // { // this.lengthField = value; // } //} ///// //[XmlIgnoreAttribute()] //[DataMember] //public bool LengthSpecified //{ // get // { // return this.lengthFieldSpecified; // } // set // { // this.lengthFieldSpecified = value; // } //} ///// //[XmlAttributeAttribute()] //[DataMember] //public string LengthField //{ // get // { // return this.lengthFieldField; // } // set // { // this.lengthFieldField = value; // } //} ///// //[XmlAttributeAttribute()] //[DefaultValueAttribute(false)] //[DataMember] //public bool IsLengthInBytes //{ // get // { // return this.isLengthInBytesField; // } // set // { // this.isLengthInBytesField = value; // } //} /// [XmlAttributeAttribute()] [DataMember] public string SwitchField { get { return this.switchFieldField; } set { this.switchFieldField = value; } } /// [XmlAttributeAttribute()] [DataMember] public uint SwitchValue { get { return this.switchValueField; } set { this.switchValueField = value; } } /// [XmlIgnoreAttribute()] [DataMember] public bool SwitchValueSpecified { get { return this.switchValueFieldSpecified; } set { this.switchValueFieldSpecified = value; } } /// [XmlAttributeAttribute()] [DataMember] public SwitchOperand SwitchOperand { get { return this.switchOperandField; } set { this.switchOperandField = value; } } /// [XmlIgnoreAttribute()] [DataMember] public bool SwitchOperandSpecified { get { return this.switchOperandFieldSpecified; } set { this.switchOperandFieldSpecified = value; } } ///// //[XmlAttributeAttribute(DataType = "hexBinary")] //[DataMember] //public byte[] Terminator //{ // get // { // return this.terminatorField; // } // set // { // this.terminatorField = value; // } //} ///// //[XmlAnyAttributeAttribute()] //[DataMember] //public XmlAttribute[] AnyAttr //{ // get // { // return this.anyAttrField; // } // set // { // this.anyAttrField = value; // } //} } /// [SerializableAttribute()] [XmlTypeAttribute(Namespace = CommonDefinitions.Namespace)] [DataContractAttribute(Name = "SwitchOperand", Namespace = CommonDefinitions.Namespace)] public enum SwitchOperand { /// [EnumMemberAttribute()] Equals, /// [EnumMemberAttribute()] GreaterThan, /// [EnumMemberAttribute()] LessThan, /// [EnumMemberAttribute()] GreaterThanOrEqual, /// [EnumMemberAttribute()] LessThanOrEqual, /// [EnumMemberAttribute()] NotEqual, } /// [SerializableAttribute()] [XmlTypeAttribute(Namespace = CommonDefinitions.Namespace)] [DataContractAttribute(Name = "EnumeratedValue", Namespace = CommonDefinitions.Namespace)] public partial class EnumeratedValue { private LocalizedText[] documentationField; private string nameField; private int valueField; //private bool valueFieldSpecified; /// [DataMember] public LocalizedText[] Documentation { get { return this.documentationField; } set { this.documentationField = value; } } /// [XmlAttributeAttribute()] [DataMember] public string Name { get { return this.nameField; } set { this.nameField = value; } } /// /// Gets or sets the value associated with the field. /// /// The value associated with the field. [XmlAttributeAttribute()] [DataMember] public int Value { get { return this.valueField; } set { this.valueField = value; } } ///// //[XmlIgnoreAttribute()] //[DataMember] //public bool ValueSpecified //{ // get // { // return this.valueFieldSpecified; // } // set // { // this.valueFieldSpecified = value; // } //} } /// [XmlIncludeAttribute(typeof(StructuredType))] //[XmlIncludeAttribute(typeof(OpaqueType))] [XmlIncludeAttribute(typeof(EnumeratedType))] [KnownType(typeof(StructuredType))] //[KnownType(typeof(OpaqueType))] [KnownType(typeof(EnumeratedType))] [SerializableAttribute()] [XmlTypeAttribute(Namespace = CommonDefinitions.Namespace)] [DataContractAttribute(Name = "TypeDescription", Namespace = CommonDefinitions.Namespace)] public partial class TypeDescription { //private Documentation documentationField; private string nameField; //private ByteOrder defaultByteOrderField; //private bool defaultByteOrderFieldSpecified; //private XmlAttribute[] anyAttrField; ///// //[DataMember] //public Documentation Documentation //{ // get // { // return this.documentationField; // } // set // { // this.documentationField = value; // } //} /// [XmlAttributeAttribute(DataType = "NCName")] [DataMember] public string Name { get { return this.nameField; } set { this.nameField = value; } } ///// //[XmlAttributeAttribute()] //[DataMember] //public ByteOrder DefaultByteOrder //{ // get // { // return this.defaultByteOrderField; // } // set // { // this.defaultByteOrderField = value; // } //} ///// //[XmlIgnoreAttribute()] //[DataMember] //public bool DefaultByteOrderSpecified //{ // get // { // return this.defaultByteOrderFieldSpecified; // } // set // { // this.defaultByteOrderFieldSpecified = value; // } //} ///// //[XmlAnyAttributeAttribute()] //[DataMember] //public XmlAttribute[] AnyAttr //{ // get // { // return this.anyAttrField; // } // set // { // this.anyAttrField = value; // } //} } ///// //[SerializableAttribute()] //[XmlTypeAttribute(Namespace = CommonDefinitions.Namespace)] //[DataContractAttribute(Name = "ByteOrder", Namespace = CommonDefinitions.Namespace)] //public enum ByteOrder //{ // /// // [EnumMemberAttribute()] // BigEndian, // /// // [EnumMemberAttribute()] // LittleEndian, //} /// [SerializableAttribute()] [XmlTypeAttribute(Namespace = CommonDefinitions.Namespace)] [DataContractAttribute(Name = "StructuredType", Namespace = CommonDefinitions.Namespace)] public partial class StructuredType : TypeDescription { private FieldType[] fieldField; private StructureKindEnum StructureKindField; /// [XmlElementAttribute("Field")] [DataMember] public FieldType[] Field { get { return this.fieldField; } set { this.fieldField = value; } } /// [XmlElementAttribute("StructureKind")] [DataMember(EmitDefaultValue = true, IsRequired = true)] public StructureKindEnum StructureKind { get { return StructureKindField; } set { StructureKindField = value; } } } /// /// Enum StructureKindEnum - An enumeration that specifies the structure kind. /// [SerializableAttribute()] [XmlTypeAttribute(Namespace = CommonDefinitions.Namespace)] [DataContractAttribute(Name = "StructureKindEnum", Namespace = CommonDefinitions.Namespace)] public enum StructureKindEnum { /// /// A regular structure without optional fields. /// [EnumMemberAttribute()] Structure, /// /// The structure with optional fields. /// [EnumMemberAttribute()] StructureWithOptionalFields, /// /// The union - one of the fields defined is encoded into a value. /// [EnumMemberAttribute()] Union } ///// //[XmlIncludeAttribute(typeof(EnumeratedType))] //[SerializableAttribute()] //[XmlTypeAttribute(Namespace = CommonDefinitions.Namespace)] //[DataContractAttribute(Name = "OpaqueType", Namespace = CommonDefinitions.Namespace)] //public partial class OpaqueType : TypeDescription //{ // private int lengthInBitsField; // private bool lengthInBitsFieldSpecified; // private bool byteOrderSignificantField; // public OpaqueType() // { // this.byteOrderSignificantField = false; // } // /// // [XmlAttributeAttribute()] // [DataMember] // public int LengthInBits // { // get // { // return this.lengthInBitsField; // } // set // { // this.lengthInBitsField = value; // } // } // /// // [XmlIgnoreAttribute()] // [DataMember] // public bool LengthInBitsSpecified // { // get // { // return this.lengthInBitsFieldSpecified; // } // set // { // this.lengthInBitsFieldSpecified = value; // } // } // /// // [XmlAttributeAttribute()] // [DefaultValueAttribute(false)] // [DataMember] // public bool ByteOrderSignificant // { // get // { // return this.byteOrderSignificantField; // } // set // { // this.byteOrderSignificantField = value; // } // } //} /// [SerializableAttribute()] [XmlTypeAttribute(Namespace = CommonDefinitions.Namespace)] [DataContractAttribute(Name = "EnumeratedType", Namespace = CommonDefinitions.Namespace)] public partial class EnumeratedType : TypeDescription { private EnumeratedValue[] enumeratedValueField; /// [XmlElementAttribute("EnumeratedValues")] [DataMember] public EnumeratedValue[] EnumeratedValues { get { return this.enumeratedValueField; } set { this.enumeratedValueField = value; } } } ///// //[SerializableAttribute()] //[XmlTypeAttribute(Namespace = CommonDefinitions.Namespace)] //[DataContractAttribute(Name = "ImportDirective", Namespace = CommonDefinitions.Namespace)] //public partial class ImportDirective //{ // private string namespaceField; // private string locationField; // /// // [XmlAttributeAttribute()] // public string Namespace // { // get // { // return this.namespaceField; // } // set // { // this.namespaceField = value; // } // } // /// // [XmlAttributeAttribute()] // public string Location // { // get // { // return this.locationField; // } // set // { // this.locationField = value; // } // } //} /// [SerializableAttribute()] [XmlTypeAttribute(AnonymousType = true, Namespace = CommonDefinitions.Namespace)] [XmlRootAttribute(Namespace = CommonDefinitions.Namespace, IsNullable = false)] [DataContractAttribute(Name = "TypeDictionary", Namespace = CommonDefinitions.Namespace)] public partial class TypeDictionary { //private Documentation documentationField; //private ImportDirective[] importField; private TypeDescription[] itemsField; private string targetNamespaceField; //private ByteOrder defaultByteOrderField; //private bool defaultByteOrderFieldSpecified; //private XmlAttribute[] anyAttrField; ///// //public Documentation Documentation //{ // get // { // return this.documentationField; // } // set // { // this.documentationField = value; // } //} ///// //[XmlElementAttribute("Import")] //[DataMember] //public ImportDirective[] Import //{ // get // { // return this.importField; // } // set // { // this.importField = value; // } //} /// //[XmlElementAttribute("EnumeratedType", typeof(EnumeratedType))] //[XmlElementAttribute("OpaqueType", typeof(OpaqueType))] [XmlElementAttribute("StructuredType", typeof(StructuredType))] [DataMember] public TypeDescription[] Items { get { return this.itemsField; } set { this.itemsField = value; } } /// [XmlAttributeAttribute()] [DataMember] public string TargetNamespace { get { return this.targetNamespaceField; } set { this.targetNamespaceField = value; } } ///// //[XmlAttributeAttribute()] //[DataMember (EmitDefaultValue = false, IsRequired = false )] //public ByteOrder DefaultByteOrder //{ // get // { // return this.defaultByteOrderField; // } // set // { // this.defaultByteOrderField = value; // } //} ///// //[XmlIgnoreAttribute()] //public bool DefaultByteOrderSpecified //{ // get // { // return this.defaultByteOrderFieldSpecified; // } // set // { // this.defaultByteOrderFieldSpecified = value; // } //} ///// //[XmlAnyAttributeAttribute()] //[DataMember] //public XmlAttribute[] AnyAttr //{ // get // { // return this.anyAttrField; // } // set // { // this.anyAttrField = value; // } //} } } ================================================ FILE: Configuration/Networking/Serialization/UATypeInfo.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2018, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System; using System.Runtime.Serialization; using System.Xml; namespace UAOOI.Configuration.Networking.Serialization { /// /// Class UATypeInfo - stores information about an OPC UA Type. /// [DataContractAttribute(Name = "UATypeInfo", Namespace = CommonDefinitions.Namespace)] [SerializableAttribute()] public class UATypeInfo { #region constructor /// /// Initializes a new instance of the class representing an unknown type. /// [Obsolete("Shall be used only by the serializer")] public UATypeInfo() { m_builtInType = BuiltInType.Null; m_valueRank = ValueRanks.Any; } /// /// Initializes a new instance of the class representing and value rank. /// /// Type of the an OPC UA entity. public UATypeInfo(BuiltInType builtInType) : this(builtInType, ValueRanks.Scalar) { } /// /// Initializes a new instance of the class representing and value rank. /// /// Type of the an OPC UA entity. /// The value rank. public UATypeInfo(BuiltInType builtInType, int valueRank) : this(builtInType, valueRank, null) { } /// /// Initializes a new instance of the class. /// /// Type of the built in. /// The value rank. /// The array dimensions. /// $for {nameof(valueRank)} == {valueRank} {nameof(ArrayDimensions)} must be provided. public UATypeInfo(BuiltInType builtInType, int valueRank, int[] arrayDimensions) { if ((valueRank == 0 || valueRank > 1) && (arrayDimensions == null || arrayDimensions.Length == 0)) throw new ArgumentOutOfRangeException(nameof(valueRank), $"for {nameof(valueRank)} == {valueRank} {nameof(ArrayDimensions)} must be provided."); m_builtInType = builtInType; m_valueRank = valueRank; m_ArrayDimensionsField = (arrayDimensions == null || arrayDimensions.Length == 0) ? null : (int[])arrayDimensions.Clone(); } #endregion #region properties /// /// The built-in type. /// /// The type of any value represented by this instance. [DataMemberAttribute(EmitDefaultValue = true, IsRequired = true)] public BuiltInType BuiltInType { get { return m_builtInType; } set { m_builtInType = value; } } /// /// Gets or sets the array range. Indicates whether the dataType is an array and how many dimensions the array has. /// It may have the following values: /// n > 1: the dataType is an array with the specified number of dimensions. /// OneDimension(1): The dataType is an array with one dimension. /// OneOrMoreDimensions (0): The dataType is an array with one or more dimensions. /// Scalar (−1): The dataType is not an array. /// Any (−2): The dataType can be a scalar or an array with any number of dimensions. /// ScalarOrOneDimension(−3): The dataType can be a scalar or a one dimensional array. /// /// /// /// NOTE All DataTypes are considered to be scalar, even if they have array-like semantics like ByteString and String. /// /// /// The array dimensions. [DataMemberAttribute(IsRequired = true)] public int ValueRank { get { return m_valueRank; } set { m_valueRank = value; } } /// /// Gets or sets the array dimensions - Specifies the length of each dimension for an array dataType. /// It is intended to describe the capability of the dataType, not the current size. /// The number of elements shall be equal to the value of the valueRank.Shall be null if valueRank ≤ 0. /// A value of 0 for an individual dimension indicates that the dimension has a variable length. /// /// The array dimensions. [DataMemberAttribute(EmitDefaultValue = false)] public int[] ArrayDimensions { get { return m_ArrayDimensionsField; } set { m_ArrayDimensionsField = value; } } /// /// Gets or sets the name of the type. /// /// The instance of representing globally unique name of the type. [DataMemberAttribute(EmitDefaultValue = true, IsRequired = false)] public XmlQualifiedName TypeName { get { return TypeNameField; } set { TypeNameField = value; } } #endregion #region private private BuiltInType m_builtInType; private int m_valueRank; private int[] m_ArrayDimensionsField; private System.Xml.XmlQualifiedName TypeNameField; #endregion } } ================================================ FILE: Configuration/Networking/Serialization/ValueRanks.cs ================================================  using System.Collections.Generic; namespace UAOOI.Configuration.Networking.Serialization { /// /// Class ValueRanks provides definition of constants defined for the ValueRank attribute. /// public static class ValueRanks { /// /// The variable may be a scalar or a one dimensional array. /// public const int ScalarOrOneDimension = -3; /// /// The variable may be a scalar or an array of any dimension. /// public const int Any = -2; /// /// The variable is always a scalar. /// public const int Scalar = -1; /// /// The variable is always an array with one or more dimensions. /// public const int OneOrMoreDimensions = 0; /// /// The variable is always one dimensional array. /// public const int OneDimension = 1; /// /// The variable is always an array with two or more dimensions. /// public const int TwoDimensions = 2; /// /// Checks if the actual value rank is compatible with the expected value rank. /// /// The actual value rank. /// The expected value rank. /// true if the specified actual value rank is valid; otherwise, false. public static bool IsValid(int actualValueRank, int expectedValueRank) { if (actualValueRank == expectedValueRank) return true; switch (expectedValueRank) { case Any: return true; case OneOrMoreDimensions: if (actualValueRank < 0) return false; break; case ScalarOrOneDimension: if (actualValueRank != Scalar && actualValueRank != OneDimension) return false; break; default: return false; } return true; } /// /// Checks if the actual array dimensions is compatible with the expected value rank and array dimensions. /// /// The actual array dimensions. /// The value rank. /// The expected array dimensions. /// true if the specified actual array dimensions is valid; otherwise, false. public static bool IsValid(IList actualArrayDimensions, int valueRank, IList expectedArrayDimensions) { // check if parameter omitted. if (actualArrayDimensions == null || actualArrayDimensions.Count == 0) return expectedArrayDimensions == null || expectedArrayDimensions.Count == 0; // no array dimensions allowed for scalars. if (valueRank == ValueRanks.Scalar) return false; // check if one dimension required. if ((valueRank == ValueRanks.OneDimension || valueRank == ValueRanks.ScalarOrOneDimension) && (actualArrayDimensions.Count != 1)) return false; // check number of dimensions. if ((valueRank != ValueRanks.OneOrMoreDimensions) && (actualArrayDimensions.Count != valueRank)) return false; // nothing more to do if expected dimensions omitted. if (expectedArrayDimensions == null || expectedArrayDimensions.Count == 0) return true; // check dimensions. if (expectedArrayDimensions.Count != actualArrayDimensions.Count) return false; // check length of each dimension. for (int ii = 0; ii < expectedArrayDimensions.Count; ii++) if (expectedArrayDimensions[ii] != actualArrayDimensions[ii] && expectedArrayDimensions[ii] != 0) return false; // everything ok. return true; } } } ================================================ FILE: Configuration/Networking/Serialization/svcutil.hlp ================================================ Microsoft (R) Service Model Metadata Tool [Microsoft (R) Windows (R) Communication Foundation, Version 4.6.81.0] Copyright (c) Microsoft Corporation. All rights reserved. USES: - Generate code from running services or static metadata documents. - Export metadata documents from compiled code. - Validate compiled service code. - Download metadata documents from running services. - Pre-generate serialization code. -= COMMON OPTIONS =- Options: /target: - The target output for the tool: code, metadata or xmlSerializer. /directory: - Directory to create files in (default: current directory) (Short Form: /d) /svcutilConfig: - Custom configuration file to use in place of the app config file. This can be used to register system.serviceModel extensions without altering the tool's config file. /noLogo - Suppress the copyright and banner message. /help - Display command syntax and options for the tool. (Short Form: /?) -= CODE GENERATION =- Description: svcutil.exe can generate code for service contracts, clients and data types from metadata documents. These metadata documents can be on disk or retrieved online. Online retrieval follows either the WS-Metadata Exchange protocol or the DISCO protocol. Syntax: svcutil.exe [/t:code] * | * | - The path to a metadata document (wsdl or xsd). Standard command-line wildcards can be used in the file path. - The URL to a service endpoint that provides metadata or to a metadata document hosted online. For more information on how these documents are retrieved see the Metadata Download section. - The path to an XML file that contains a WS-Addressing EndpointReference for a service endpoint that supports WS-Metadata Exchange. For more information see the Metadata Download section. Options: /out: - The filename for the generated code. Default: derived from the WSDL definition name, WSDL service name or targetNamespace of one of the schemas. (Short Form: /o) /config: - The filename for the generated config file. Default: output.config /mergeConfig - Merge the generated config into an existing file instead of overwriting the existing file. /noConfig - Do not generate config /dataContractOnly - Generate code for Data Contract types only. Service Contract types will not be generated. (Short Form: /dconly) /language: - The programming language to use for generating code. Provide either a language name registered in the machine.config file or provide the fully-qualified name of a class that inherits from System.CodeDom.Compiler.CodeDomProvider. Examples of language names to use are CS and VB. Default: C#. (Short Form: /l) /namespace: - A mapping from a WSDL or XML Schema targetNamespace to a CLR namespace. Using the '*' for the targetNamespace maps all targetNamespaces without an explicit mapping to that CLR namespace. Default: derived from the target namespace of the schema document for Data Contracts. The default namespace is used for all other generated types. (Short Form: /n) /messageContract - Generate Message Contract types. (Short Form: /mc) /enableDataBinding - Implement the System.ComponentModel.INotifyPropertyChanged interface on all Data Contract types to enable data binding. (Short Form: /edb) /serializable - Generate classes marked with the Serializable Attribute. (Short Form: /s) /async - Generate both synchronous and begin/end asynchronous method signatures. Default: generate synchronous and task-based asynchronous method signatures. (Short Form: /a) /internal - Generate classes that are marked as internal. Default: generate public classes. (Short Form: /i) /reference: - Reference types in the specified assembly. When generating clients, use this option to specify assemblies that might contain types representing the metadata being imported. (Short Form: /r) /collectionType: - A fully-qualified or assembly-qualified name of the type to use as a collection data type when code is generated from schemas. (Short Form: /ct) /excludeType: - A fully-qualified or assembly-qualified type name to exclude from referenced contract types. (Short Form: /et) /noStdLib - Do not reference standard libraries. By default mscorlib.dll and system.servicemodel.dll are referenced. /serializer:Auto - Automatically select the serializer. This tries to use the Data Contract serializer and uses the XmlSerializer if that fails. (Short Form: /ser) /serializer:DataContractSerializer - Generate data types that use the Data Contract Serializer for serialization and deserialization /serializer:XmlSerializer - Generate data types that use the XmlSerializer for serialization and deserialization /importXmlTypes - Configure the Data Contract serializer to import non-Data Contract types as IXmlSerializable types. /useSerializerForFaults - This option specifies whether the serializer specified in the 'serializer' switch is used for fault contract types. DataContractSerializer is used for faults if this switch is not specified. (Short Form: /fault) /targetClientVersion:Version30 - Generate code that references functionality in .NET Framework assemblies 3.0 and before. Use this switch if you are generating code for clients that use .NET Framework version 3.0.(Short Form: /tcv) /targetClientVersion:Version35 - Generate code that references functionality in .NET Framework assemblies 3.5 and before. Use this switch if you are generating code for clients that use .NET Framework version 3.5.(Short Form: /tcv) /wrapped - Generated code will not unwrap "parameters" member of document-wrapped-literal messages. /serviceContract - Generate code for Service Contracts. Client class and configuration will not be generated. (Short Form: /sc) /syncOnly - Generate only synchronous method signature. Default: generate synchronous and task-based asynchronous method signatures. -= METADATA EXPORT =- Description: svcutil.exe can export metadata for services, contracts and data types in compiled assemblies. To export metadata for a service, you must use the /serviceName option to indicate the service you would like to export. To export all Data Contract types within an assembly use the /dataContractOnly option. By default metadata is exported for all Service Contracts in the input assemblies. Syntax: svcutil.exe [/t:metadata] [/serviceName:] [/dataContractOnly] * - The path to an assembly that contains services, contracts or Data Contract types to be exported. Standard command-line wildcards can be used to provide multiple files as input. Options: /serviceName: - The config name of a service to export. If this option is used, an executable assembly with an associated config file must be passed as input. Svcutil will search through all associated config files for the service configuration. If the config files contain any extension types, the assemblies containing these types must either be in the GAC or explicitly provided using the /r option. /reference: - Add the specified assembly to the set of assemblies used for resolving type references. If you are exporting or validating a service that uses 3rd-party extensions (Behaviors, Bindings and BindingElements) registered in config use this option to locate extension assemblies that are not in the GAC. (Short Form: /r) /dataContractOnly - Operate on Data Contract types only. Service Contracts will not be processed. (Short Form: /dconly) /excludeType: - The fully-qualified or assembly-qualified name of a type to exclude from export. This option can be used when exporting metadata for a service or a set of service contracts to exclude types from being exported. This option cannot be used with the /dconly option. (Short Form: /et) -= SERVICE VALIDATION =- Description: Validation is useful to detect errors in service implementations without hosting the service. You must use the /serviceName option to indicate the service you would like to validate. Syntax: svcutil.exe /validate /serviceName: * - The path to an assembly containing service types to be validated. The assembly must have an associated config file to provide service configuration. Standard command-line wildcards can be used to provide multiple assemblies. Options: /validate - Validate a service implementation. To validate a service, you must use the /serviceName option to indicate the service you would like to validate. If this option is used, an executable assembly with an associated config file must be passed as input. (Short Form: /v) /serviceName: - The config name of a service to validate. To validate a service this option must be provided. Svcutil will search through the associated config files of all input assemblies for the service configuration. If the associated configuration file contain any extension types, the assemblies containing these types must either be in the GAC or explicitly provided using the /r option. /reference: - Add the specified assembly to the set of assemblies used for resolving type references. If you are exporting or validating a service that uses 3rd-party extensions (Behaviors, Bindings and BindingElements) registered in config use this option to locate extension assemblies that are not in the GAC. (Short Form: /r) /dataContractOnly - Operate on Data Contract types only. Service Contracts will not be processed. (Short Form: /dconly) /excludeType: - The fully-qualified or assembly-qualified name of a service type to exclude from validation. (Short Form: /et) -= METADATA DOWNLOAD =- Description: svcutil.exe can be used to download metadata from running services and save the metadata to local files. To download metadata, you must explicitly specify the /t:metadata option. Otherwise, client code will be generated. For http and https URL schemes svcutil.exe will try to retrieve metadata using WS-Metadata Exchange and DISCO. For all other URL schemes svcutil.exe will only try WS-Metadata Exchange. By default, svcutil.exe uses the bindings defined in the System.ServiceModel.Description.MetadataExchangeBindings class. To configure the binding used for WS-Metadata Exchange you must define a client endpoint in config that uses the IMetadataExchange contract. This can be defined either in svcutil.exe's config file or in another config file specified using the /svcutilConfig option. Syntax: svcutil.exe /t:metadata * | - The URL to a service endpoint that provides metadata or an URL that points to a metadata document hosted online. - The path to an XML file that contains a WS-Addressing EndpointReference for a service endpoint that supports WS-Metadata Exchange. -= XMLSERIALIZER TYPE GENERATION =- Description: svcutil.exe can pre-generate C# serialization code that is required for types that can be serialized using the XmlSerializer. svcutil.exe will only generate code for types used by Service Contracts found in the input assemblies. Syntax: svcutil.exe /t:xmlSerializer * - The path to an assembly containing Service Contract types. Serialization types will be generated for all Xml Serializable types in each contract Options: /reference: - Add the specified assembly to the set of assemblies used for resolving type references. (Short Form: /r) /excludeType: - Fully-qualified or assembly-qualified type name to exclude from export or validation. This option can be used when exporting metadata for a service or a set of service contracts to exclude types from being exported. This option cannot be used with the /dataContractOnly option. (Short Form: /et) /out: - Filename for the generated code. This option will be ignored when multiple assemblies are passed as input to the tool. Default: derived from the assembly name. (Short Form: /o) -= EXAMPLES =- svcutil http://service/metadataEndpoint - Generate client code from a running service or online metadata documents. svcutil *.wsdl *.xsd /language:C# - Generate client code from local metadata documents. svcutil /dconly *.xsd /language:VB - Generate Data Contract types in VisualBasic from local schema documents. svcutil /t:metadata http://service/metadataEndpoint - Download metadata documents from running services svcutil myAssembly.dll - Generate metadata documents for Service Contracts and associated types in an assembly svcutil myServiceHost.exe /serviceName:myServiceName - Generate metadata documents for a service, and all associated Service Contracts and data types in an assembly svcutil myServiceHost.exe /dconly - Generate metadata documents for data types in an assembly svcutil /validate /serviceName:myServiceName myServiceHost.exe - Verify service hosting svcutil /t:xmlserializer myContractLibrary.exe - Generate serialization types for XmlSerializer types used by any Service Contracts in the assembly ================================================ FILE: Configuration/Networking/Serialization/xsd.hlp ================================================ Microsoft (R) Xml Schemas/DataTypes support utility [Microsoft (R) .NET Framework, Version 4.6.81.0] Copyright (C) Microsoft Corporation. All rights reserved. xsd.exe - Utility to generate schema or class files from given source. xsd.exe .xsd /classes|dataset [/e:] [/l:] [/n:] [/o:] [/s] [/uri:] xsd.exe .dll|.exe [/outputdir:] [/type: [...]] xsd.exe .xml [/outputdir:] xsd.exe .xdr [/outputdir:] - OPTIONS - /classes Generate classes for this schema. Short form is '/c'. /dataset Generate sub-classed DataSet for this schema. Short form is '/d'. /enableLinqDataSet Generate LINQ-enabled sub-classed Dataset for the schemas provided. Short form is '/eld'. /element: Element from schema to process. Short form is '/e:'. /fields Generate fields instead of properties. Short form is '/f'. /order Generate explicit order identifiers on all particle members. /enableDataBinding Implement INotifyPropertyChanged interface on all generated types to enable data binding. Short form is '/edb'. /language: The language to use for the generated code. Choose from 'CS', 'VB', 'JS', 'VJS', 'CPP' or provide a fully-qualified name for a class implementing System.CodeDom.Compiler.CodeDomProvider. The default language is 'CS' (CSharp). Short form is '/l:'. /namespace: The namespace for generated class files. The default namespace is the global namespace. Short form is '/n:'. /nologo Suppresses the banner. /out: The output directory to create files in. The default is the current directory. Short form is '/o:'. /type: Type from assembly to generate schema for. Multiple types may be provided. If no types are provided, then schemas for all types in an assembly are generated. Short form is '/t:'. /uri: Uri of elements from schema to process. Short form is '/u:'. - ADVANCED - /parameters: Read command-line options from the specified xml file. Short form is '/p:'. - ARGUMENTS - .xsd Name of a schema containing elements to import. .dll|exe Name of an assembly containing types to generate schema for. .xml Name of an xml file to infer xsd schema from. .xdr Name of an xdr schema to convert to xsd. Multiple file arguments of the same type may be provided. ================================================ FILE: Configuration/Networking/Serializers/JSONDataContractSerializers.cs ================================================  using System; using System.Diagnostics; using System.IO; using System.Runtime.Serialization.Json; using System.Xml; using UAOOI.Configuration.Networking.Properties; namespace UAOOI.Configuration.Networking.Serializers { /// /// Class DataContractSerializers- helper function to serialize or deserialize an object of the specified type using . /// public static class JSONDataContractSerializers { /// /// Reads the XML stream from with an and returns the deserialized object /// /// The type of the deserialized object. /// The used to open the XML stream. /// Used to write a trace event to the trace listeners using the event type, event identifier, and message. /// The deserialized object. /// public static type Load(FileInfo fileToRead, Action trace) where type : class, new() { if (!fileToRead.Exists) throw new ArgumentOutOfRangeException(nameof(fileToRead)); using (FileStream reader = fileToRead.Open(FileMode.Open)) { DataContractJsonSerializer _serializer = new DataContractJsonSerializer(typeof(type)); type _graph = _serializer.ReadObject(reader) as type; trace(TraceEventType.Verbose, 52, String.Format(Resources.InformationFileOpened2, fileToRead.FullName)); return _graph; } } /// /// Serializes the object of the specified type and saves it in the specified by the file. /// /// The type of the to be serialized. /// The file to write all the object data (starting XML element, content, and closing element) with an System.Xml.XmlWriter.. /// The object that contains the data to write to the stream. /// Used to write a trace event to the trace listeners using the event type, event identifier, and message. /// /// public static void Save(FileInfo fileToWrite, type graph, Action trace) { if (fileToWrite == null) throw new ArgumentNullException(nameof(fileToWrite)); if (graph == null) throw new ArgumentNullException(nameof(graph)); DataContractJsonSerializer _deserializer = new DataContractJsonSerializer(typeof(type)); Formatting _formatting = new Formatting() { }; using (FileStream _writer = fileToWrite.Open( FileMode.Create)) _deserializer.WriteObject(_writer, graph); trace(TraceEventType.Verbose, 52, String.Format(Resources.InformationFileSaved2, fileToWrite.FullName)); } } } ================================================ FILE: Configuration/Networking/Serializers/SerializerType.cs ================================================  namespace UAOOI.Configuration.Networking.Serializers { /// /// Enum SerializerType - enumerates available serializers /// public enum SerializerType { /// /// The json serializer /// Json, /// /// The XML serializer /// Xml } } ================================================ FILE: Configuration/Networking/Serializers/XmlDataContractSerializers.cs ================================================ using System; using System.Diagnostics; using System.IO; using System.Runtime.Serialization; using System.Text; using System.Xml; using UAOOI.Configuration.Networking.Properties; namespace UAOOI.Configuration.Networking.Serializers { /// /// Class DataContractSerializers- helper function to serialize or deserialize an object of the specified type using . /// public static class XmlDataContractSerializers { /// /// Reads the XML stream from with an and returns the deserialized object /// /// The type of the deserialized object. /// The used to open the XML stream. /// Used to write a trace event to the trace listeners using the event type, event identifier, and message. /// The deserialized object. /// public static type Load(FileInfo fileToRead, Action trace) where type : class, new() { if (!fileToRead.Exists) throw new ArgumentOutOfRangeException(nameof(fileToRead)); using (XmlTextReader reader = new XmlTextReader(fileToRead.Open(FileMode.Open, FileAccess.Read))) { DataContractSerializer _serializer = new DataContractSerializer(typeof(type)); type _graph = _serializer.ReadObject(reader, false) as type; trace(TraceEventType.Verbose, 52, String.Format(Resources.InformationFileOpened2, fileToRead.FullName)); return _graph; } } /// /// Serializes the object of the specified type and saves it in the specified by the file. /// /// The type of the to be serialized. /// The file to write all the object data (starting XML element, content, and closing element) with an System.Xml.XmlWriter.. /// The object that contains the data to write to the stream. /// Used to write a trace event to the trace listeners using the event type, event identifier, and message. /// /// public static void Save(FileInfo fileToWrite, type graph, Action trace) { if (fileToWrite == null) throw new ArgumentNullException(nameof(fileToWrite)); if (graph == null) throw new ArgumentNullException(nameof(graph)); DataContractSerializer _deserializer = new DataContractSerializer(typeof(type)); Formatting _formatting = new Formatting() { }; using (XmlTextWriter _writer = new XmlTextWriter(fileToWrite.Open(FileMode.Create, FileAccess.Write), Encoding.UTF8) { Formatting = Formatting.Indented, Indentation = 2 }) _deserializer.WriteObject(_writer, graph); trace(TraceEventType.Verbose, 52, String.Format(Resources.InformationFileSaved2, fileToWrite.FullName)); } } } ================================================ FILE: Configuration/Networking/UANetworkingConfiguration.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2018, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using CommonServiceLocator; using System; using System.Diagnostics; using System.IO; using UAOOI.Common.Infrastructure.Diagnostic; using UAOOI.Configuration.Networking.Serialization; using UAOOI.Configuration.Networking.Serializers; namespace UAOOI.Configuration.Networking { /// /// Class UANetworkingConfiguration - Provides implementation of the for the UANetworking application. /// /// The type of the configuration data type. public class UANetworkingConfiguration where ConfigurationDataType : class, IConfigurationDataFactory, new() { #region constructor /// /// Initializes a new instance of the class. /// public UANetworkingConfiguration() { if (ServiceLocator.IsLocationProviderSet && ServiceLocator.Current != null) { IServiceLocator _locator = ServiceLocator.Current; this.TraceSource = _locator.GetInstance(); } else this.TraceSource = new TraceSourceDefault(); } #endregion #region ConfigurationBase /// /// Reads the configuration from the . /// /// The file containing the configuration data of the UANetworking application. public void ReadConfiguration(FileInfo configurationFile) { CurrentConfiguration = ConfigurationDataFactoryIO.Load (CommonDefinitions.Serializer.ToUpper() == "XML" ? SerializerType.Xml : SerializerType.Json, configurationFile, (x, y, z) => TraceSource.TraceData(x, y, z), () => RaiseOnChangeEvent()); } /// /// Saves the configuration. /// /// The configuration file. /// public void SaveConfiguration(FileInfo configurationFile) { if (CurrentConfiguration == null) throw new ArgumentNullException(nameof(CurrentConfiguration)); ConfigurationDataFactoryIO.Save(CurrentConfiguration, CommonDefinitions.Serializer.ToUpper() == "XML" ? SerializerType.Xml : SerializerType.Json, configurationFile, (x, y, z) => TraceSource.TraceData(x, y, z)); } /// /// Gets or sets the current configuration . /// /// The current configuration as instance of . public ConfigurationDataType CurrentConfiguration { get { return m_CurrentConfiguration; } set { if (Object.Equals(CurrentConfiguration, value)) return; m_CurrentConfiguration = value; RaiseOnChangeEvent(); } } /// /// Occurs any time the configuration is modified. /// public event EventHandler OnModified; /// /// Gets the configuration data. /// /// The configuration data. public ConfigurationData ConfigurationData { get { return CurrentConfiguration?.GetConfigurationData(); } } #endregion #region composition /// /// Gets or sets the trace source - an access point to the external component. /// By default an empty private implementation (do nothing) of the is provided. /// /// The trace source - an implementation of the . public ITraceSource TraceSource { get; set; } #endregion #region private private class TraceSourceDefault : ITraceSource { /// /// Writes trace data to the trace listeners in the collection using the specified , /// event identifier , and trace . /// /// One of the enumeration values that specifies the event type of the trace data. /// A numeric identifier for the event. /// The trace data. public void TraceData(TraceEventType eventType, int id, object data) { } } private ConfigurationDataType m_CurrentConfiguration; /// /// Raises the on change event. /// protected void RaiseOnChangeEvent() { OnModified?.Invoke(this, EventArgs.Empty); } #endregion } } ================================================ FILE: Configuration/NetworkingUpgrade/Configuration.Networking.Upgrade.csproj ================================================  netstandard2.0 UAOOI.Configuration.Networking.Upgrade UAOOI.Configuration.Networking.Upgrade 4.0.1 UAOOI.Configuration.Networking.Upgrade MPostol commsvr.com Object Oriented Internet Copyright MPostol (c) 2018 https://github.com/mpostol/OPC-UA-OOI/blob/master/license.md https://commsvr.gitbook.io/ooi https://github.com/mpostol/OPC-UA-OOI Object Oriented Internet, OPC UA, CommServer, Reactive Networking. GitHub Imports networking configuration helpers from obsolete versions true OPCUAOOIKey.snk 4.0.1.1 bin\Debug\netstandard2.0\UAOOI.Configuration.Networking.Upgrade.xml 1701;1702;1705;IDE0001,IDE0002,IDE0003 ================================================ FILE: Configuration/NetworkingUpgrade/ConfigurationManagement.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2018, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using UAOOI.Common.Infrastructure.Diagnostic; using UAOOI.Configuration.Networking.Serialization; namespace UAOOI.Configuration.Networking.Upgrade { /// /// Class UpdateConfiguration - provides helper function aimed at configuration management. /// public static class ConfigurationManagement { /// /// Creates the configuration. /// /// The data source fields. /// Name of the association used to select the to be modified and added to the output file. /// Name of the in file containing the configuration. /// Name of the out file containing the configuration. /// The trace source. public static void ReplaceDataSetFields(FieldMetaData[] dataSourceFields, string associationName, string inFileName, string outFileName, ITraceSource traceSource) { traceSource.TraceData(TraceEventType.Verbose, 53, $"Entering {nameof(ReplaceDataSetFields)} method."); UANetworkingConfiguration _newConfiguration = new UANetworkingConfiguration(); FileInfo _file2ReadConfiguration = new FileInfo(inFileName); _newConfiguration.ReadConfiguration(_file2ReadConfiguration); traceSource.TraceData(TraceEventType.Verbose, 53, $"I have read the configuration form the file {_file2ReadConfiguration.FullName}."); _newConfiguration.TraceSource = traceSource; Dictionary _dataSets = _newConfiguration.CurrentConfiguration.DataSets.ToDictionary(_dsc => _dsc.AssociationName); traceSource.TraceData(TraceEventType.Verbose, 53, $"Configuration contains {_dataSets.Count} item of type {nameof(DataSetConfiguration)}."); _dataSets[associationName].DataSet = dataSourceFields; traceSource.TraceData(TraceEventType.Verbose, 53, $"{nameof(DataSetConfiguration.DataSet)} for the association {associationName} has been modified by array of {dataSourceFields.Length} instances."); //_newConfiguration.CurrentConfiguration.DataSets = new DataSetConfiguration[] { _dataSets[associationName] }; FileInfo _file2SaveConfiguration = new FileInfo(outFileName); _newConfiguration.SaveConfiguration(_file2SaveConfiguration); traceSource.TraceData(TraceEventType.Verbose, 53, $"Configuration has been saved to the file {_file2SaveConfiguration.FullName}."); } /// /// Adds the data set configuration. /// /// The new data set configuration. /// Name of the in file. /// Name of the out file. /// The writer identifier. /// The trace source. public static void AddDataSetConfiguration(this DataSetConfiguration newDataSetConfiguration, Tuple writerId, string inFileName, string outFileName, ITraceSource traceSource) { traceSource.TraceData(TraceEventType.Verbose, 53, $"Entering {nameof(AddDataSetConfiguration)} method."); //open source configuration UANetworkingConfiguration _newConfiguration = new UANetworkingConfiguration(); FileInfo _file2ReadConfiguration = new FileInfo(inFileName); _newConfiguration.ReadConfiguration(_file2ReadConfiguration); traceSource.TraceData(TraceEventType.Verbose, 53, $"I have read the configuration form the file {_file2ReadConfiguration.FullName}."); _newConfiguration.TraceSource = traceSource; ConfigurationData _currentConfiguration = _newConfiguration.CurrentConfiguration; // ddd new DataSetConfiguration List _dataSets = _currentConfiguration.DataSets.ToList(); traceSource.TraceData(TraceEventType.Verbose, 53, $"Configuration contains {_dataSets.Count} item of type {nameof(DataSetConfiguration)}."); _dataSets.Add(newDataSetConfiguration); _currentConfiguration.DataSets = _dataSets.ToArray(); traceSource.TraceData(TraceEventType.Verbose, 53, $"New {nameof(DataSetConfiguration)} has been added to the copnfiguration."); // add new association for this DataSet in selected MessageWriterConfiguration ProducerAssociationConfiguration _newAssociation = new ProducerAssociationConfiguration() { AssociationName = newDataSetConfiguration.AssociationName, DataSetWriterId = writerId.Item2, FieldEncoding = FieldEncodingEnum.VariantFieldEncoding, PublisherId = writerId.Item3 }; MessageWriterConfiguration _selectedWriterConfiguration = _currentConfiguration.MessageHandlers .Where(_hn => (_hn.Name == writerId.Item1) && (_hn is MessageWriterConfiguration)) .Cast() .First(); List _associationsInWriterConfiguration = _selectedWriterConfiguration.ProducerAssociationConfigurations.ToList(); _associationsInWriterConfiguration.Add(_newAssociation); _selectedWriterConfiguration.ProducerAssociationConfigurations = _associationsInWriterConfiguration.ToArray(); traceSource.TraceData(TraceEventType.Verbose, 53, $"New {nameof (ProducerAssociationConfiguration)} has been added to the {nameof(MessageWriterConfiguration)}[{writerId.Item1}]."); //save the output file FileInfo _file2SaveConfiguration = new FileInfo(outFileName); _newConfiguration.SaveConfiguration(_file2SaveConfiguration); traceSource.TraceData(TraceEventType.Verbose, 53, $"Configuration has been saved to the file {_file2SaveConfiguration.FullName}."); } } } ================================================ FILE: Configuration/NetworkingUpgrade/Properties/AssemblyInfo.cs ================================================ using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; [assembly: AssemblyTrademark("UAOOI")] [assembly: AssemblyCulture("")] [assembly: ComVisible(false)] [assembly: Guid("bebe131a-c931-4c2c-9f9e-ed0d0b75df26")] ================================================ FILE: Configuration/NetworkingUpgrade/Re_l1_00_16/BuiltInType.cs ================================================  namespace UAOOI.Configuration.Networking.Upgrade.Re_l1_00_16 { /// /// The set of built-in data types for UA type descriptions - see Part 6 5.1.2. /// /// /// An enumeration that lists all of the built-in data types for OPC UA Type Descriptions. /// public enum BuiltInType : int { /// /// An invalid or unspecified value. /// Null = 0, /// /// A boolean logic value (true or false) - A two-state logical value (true or false). /// Boolean = 1, /// /// An 8 bit signed integer value. An integer value between −128 and 127. /// SByte = 2, /// /// An 8 bit unsigned integer value. An integer value between 0 and 255. /// Byte = 3, /// /// A 16 bit signed integer value. An integer value between 0 and 65 535. /// Int16 = 4, /// /// A 16 bit unsigned integer value. An integer value between 0 and 65 535. /// UInt16 = 5, /// /// A 32 bit signed integer value. An integer value between −2 147 483 648 and 2 147 483 647. /// Int32 = 6, /// /// A 32 bit unsigned integer value. An integer value between 0 and 4 294 967 295. /// UInt32 = 7, /// /// A 64 bit signed integer value. An integer value between −9 223 372 036 854 775 808 and 9 223 372 036 854 775 807 /// Int64 = 8, /// /// A 64 bit unsigned integer value. An integer value between 0 and 18 446 744 073 709 551 615. /// UInt64 = 9, /// /// An IEEE single precision (32 bit) floating point value. An IEEE single precision (32 bit) floating point value. /// Float = 10, /// /// An IEEE double precision (64 bit) floating point value. An IEEE double precision (64 bit) floating point value. /// Double = 11, /// /// A sequence of Unicode characters. /// String = 12, /// /// An instance in time. /// DateTime = 13, /// /// A 128-bit globally unique identifier. /// Guid = 14, /// /// A sequence of bytes. /// ByteString = 15, /// /// An XML element. /// XmlElement = 16, /// /// An identifier for a node in the address space of an OPC UA Server. /// NodeId = 17, /// /// A node id that stores the namespace URI instead of the namespace index. /// ExpandedNodeId = 18, /// /// A structured result code. /// StatusCode = 19, /// /// A string qualified with a namespace. /// QualifiedName = 20, /// /// A localized text string with an locale identifier. /// LocalizedText = 21, /// /// A structure that contains an application specific data type that may not be recognized by the receiver. /// ExtensionObject = 22, /// /// A data value with an associated quality and time stamp. /// DataValue = 23, /// /// Any of the other built-in types - a union of all of the types specified above. /// Variant = 24, /// /// A diagnostic information associated with a result code. /// DiagnosticInfo = 25, /// /// The enumeration /// Enumeration = 26, } } ================================================ FILE: Configuration/NetworkingUpgrade/Re_l1_00_16/CommonDefinitions.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2018, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System; using System.ComponentModel; namespace UAOOI.Configuration.Networking.Upgrade.Re_l1_00_16 { /// /// Class CommonDefinitions - contains common definition. /// internal static class CommonDefinitions { /// /// The namespace used for serialization of the configuration. /// internal const string Namespace = "http://commsvr.com/UAOOI/SemanticData/UANetworking/Configuration/Serialization.xsd"; /// /// Extension method that sets a new value in a variable and then executes the event handler if the new value /// differs from the old one. Used to easily implement . /// /// The type of values being handled (usually the type of the property). /// The event handler to execute in the event of actual value change. /// The new value to set. /// The old value to replace (and the value holder). /// The delegate used to update the property. /// The property's name as required by . /// The object to be appointed as the executioner of the handler. /// A boolean value that indicates if the new value was truly different from the old value according to object.Equals(). internal static bool RaiseHandler(this PropertyChangedEventHandler handler, T newValue, T oldValue, Action update, string propertyName, object sender) { bool changed = !Object.Equals(oldValue, newValue); if (changed) { //Save the new value. update(newValue); //Raise the event handler?.Invoke(sender, new PropertyChangedEventArgs(propertyName)); } //Signal what happened. return changed; } } } ================================================ FILE: Configuration/NetworkingUpgrade/Re_l1_00_16/ConfigurationData.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2018, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System; using System.Collections.Generic; namespace UAOOI.Configuration.Networking.Upgrade.Re_l1_00_16 { /// /// Class ConfigurationData - contains configuration data of the UANetworking application. /// public partial class ConfigurationData : IConfigurationDataFactory { #region IConfigurationDataFactory /// /// Gets or sets the the delegate capturing functionality tha is executed when the configuration is changing. /// /// The m_ on changed. public Action OnChanged { get; set; } /// /// Called when the configuration is loaded. /// public virtual void OnLoaded() { } /// /// Called before the saving the configuration. /// public virtual void OnSaving() { throw new NotImplementedException("The configuration is read only"); } /// /// Gets and instance of . /// /// Returns an instance of . /// Serialization.ConfigurationData IConfigurationDataFactory.GetConfigurationData() { throw new NotImplementedException(); } #endregion #region private private List b_DataSetConfigurationList; private void PendingChanges() { OnChanged(); } private void M_MessageHandlers_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e) { OnChanged(); } private List DataSetsList { get { if (b_DataSetConfigurationList == null) b_DataSetConfigurationList = new List(DataSets); return b_DataSetConfigurationList; } } #endregion } } ================================================ FILE: Configuration/NetworkingUpgrade/Re_l1_00_16/ConfigurationData.xsd ================================================  ================================================ FILE: Configuration/NetworkingUpgrade/Re_l1_00_16/ConfigurationData.xsd.cs ================================================ #pragma warning disable 1591 using System.Runtime.Serialization; using System; using System.Xml.Serialization; [assembly: ContractNamespaceAttribute("http://commsvr.com/UAOOI/SemanticData/UANetworking/Configuration/Serialization.xsd", ClrNamespace = "UAOOI.Configuration.Networking.Serialization")] namespace UAOOI.Configuration.Networking.Upgrade.Re_l1_00_16 { [DataContractAttribute(Name = "ConfigurationData", Namespace = CommonDefinitions.Namespace)] [System.SerializableAttribute()] [XmlRoot(Namespace = CommonDefinitions.Namespace)] //[XmlType(Namespace = CommonDefinitions.Namespace)] public partial class ConfigurationData : object, IExtensibleDataObject { private ExtensionDataObject extensionDataField; private DataSetConfiguration[] DataSetsField; private MessageHandlerConfiguration[] MessageHandlersField; public ExtensionDataObject ExtensionData { get { return this.extensionDataField; } set { this.extensionDataField = value; } } [DataMemberAttribute(EmitDefaultValue = false)] [XmlElementAttribute(IsNullable = false)] public DataSetConfiguration[] DataSets { get { return this.DataSetsField; } set { this.DataSetsField = value; } } [DataMemberAttribute(EmitDefaultValue = true)] [XmlArray(IsNullable = false)] [XmlArrayItem(Type = typeof(MessageWriterConfiguration), ElementName = "MessageWriterConfiguration")] [XmlArrayItem(Type = typeof(MessageReaderConfiguration), ElementName = "MessageReaderConfiguration")] public MessageHandlerConfiguration[] MessageHandlers { get { return this.MessageHandlersField; } set { this.MessageHandlersField = value; } } } [DataContractAttribute(Name = "DataSetConfiguration", Namespace = CommonDefinitions.Namespace)] [System.SerializableAttribute()] public partial class DataSetConfiguration : object, IExtensibleDataObject { #region private [System.NonSerializedAttribute()] private ExtensionDataObject extensionDataField; private AssociationRole AssociationRoleField; [OptionalFieldAttribute()] private string AssociationNameField; [OptionalFieldAttribute()] private string RepositoryGroupField; [OptionalFieldAttribute()] private string InformationModelURIField; [OptionalFieldAttribute()] private string DataSymbolicNameField; [OptionalFieldAttribute()] private FieldMetaData[] DataSetField; [OptionalFieldAttribute()] private string GuidField; [OptionalFieldAttribute()] private NodeDescriptor RootField; [OptionalFieldAttribute()] private double PublishingIntervalField; [OptionalFieldAttribute()] private double MaxBufferTimeField; [OptionalFieldAttribute()] private Guid ConfigurationGuidField; [OptionalFieldAttribute()] private ConfigurationVersionDataType ConfigurationVersionField; #endregion #region public public ExtensionDataObject ExtensionData { get { return this.extensionDataField; } set { this.extensionDataField = value; } } [DataMemberAttribute(IsRequired = true)] public AssociationRole AssociationRole { get { return this.AssociationRoleField; } set { this.AssociationRoleField = value; } } [DataMemberAttribute(EmitDefaultValue = false, Order = 1)] public string AssociationName { get { return this.AssociationNameField; } set { this.AssociationNameField = value; } } [DataMemberAttribute(EmitDefaultValue = false, Order = 2)] public string RepositoryGroup { get { return this.RepositoryGroupField; } set { this.RepositoryGroupField = value; } } [DataMemberAttribute(EmitDefaultValue = false, Order = 3)] public string InformationModelURI { get { return this.InformationModelURIField; } set { this.InformationModelURIField = value; } } [DataMemberAttribute(EmitDefaultValue = false, Order = 4)] public string DataSymbolicName { get { return this.DataSymbolicNameField; } set { this.DataSymbolicNameField = value; } } [DataMemberAttribute(EmitDefaultValue = false, Order = 5, IsRequired = true)] public FieldMetaData[] DataSet { get { return this.DataSetField; } set { this.DataSetField = value; } } [DataMemberAttribute(EmitDefaultValue = false, Order = 6)] public string Guid { get { return this.GuidField; } set { this.GuidField = value; } } [DataMemberAttribute(EmitDefaultValue = false, Order = 7, IsRequired = true)] [XmlElementAttribute(IsNullable = false)] public NodeDescriptor Root { get { return RootField; } set { RootField = value; } } /// /// Gets or sets the publishing interval - The interval in milliseconds for sampling the Variables and publishing the Values in a DataSet by the related MessageWriter. /// The Duration DataType is a subtype of Double and allows configuration of intervals smaller than a millisecond. /// /// The publishing interval. [DataMemberAttribute(EmitDefaultValue = true, Order = 8, IsRequired = true)] [XmlElementAttribute(IsNullable = false)] public double PublishingInterval { get { return PublishingIntervalField; } set { PublishingIntervalField = value; } } /// /// Gets or sets the maximum buffer time. The MaxBufferTime defines the maximum time the delivery of the DataSet may be delayed by the /// MessageWriter, to allow for the collection of additional Messages. This parameter allows the Producer to reduce the number of network packets necessary to send the Messages. /// /// The maximum buffer time. [DataMemberAttribute(EmitDefaultValue = true, Order = 9, IsRequired = true)] [XmlElementAttribute(IsNullable = false)] public double MaxBufferTime { get { return MaxBufferTimeField; } set { MaxBufferTimeField = value; } } /// /// Gets or sets the configuration unique identifier. It provides a unique identifier for the current configuration of this object. /// Any change of the ConfigurationVersion Property triggers a creation of a new value. /// /// The configuration unique identifier. [DataMemberAttribute(EmitDefaultValue = true, Order = 10, IsRequired = true)] [XmlElementAttribute(IsNullable = false)] public Guid ConfigurationGuid { get { return ConfigurationGuidField; } set { ConfigurationGuidField = value; } } [DataMemberAttribute(EmitDefaultValue = true, Order = 11, IsRequired = true)] [XmlElementAttribute(IsNullable = false)] public ConfigurationVersionDataType ConfigurationVersion { get { return ConfigurationVersionField; } set { ConfigurationVersionField = value; } } #endregion } public class ConfigurationVersionDataType { private byte MajorVersionField; private byte MinorVersionField; /// /// Gets or sets the major version. The major number reflects the primary format of the DataSet and must be equal in both Producer and Consumer. /// Removing fields from the DataSet, reordering fields, adding fields in between other fields or a DataType change in fields shall result in an update of the MajorVersion. /// The initial value for the MajorVersion is 0. If the MajorVersion is incremented, the MinorVersion shall be set to 0. /// An overflow of the MajorVersion is treated like any other major version change and requires a meta data exchange. /// /// The major version. public byte MajorVersion { get { return MajorVersionField; } set { MajorVersionField = value; } } /// /// Gets or sets the minor version. The minor number reflects backward compatible changes of the DataSet like adding a field at the end of the DataSet. /// The initial value for the MinorVersion is 0. The MajorVersion shall be incremented after an overflow of the MinorVersion. /// /// The minor version. public byte MinorVersion { get { return MinorVersionField; } set { MinorVersionField = value; } } } [DataContractAttribute(Name = "AssociationConfiguration", Namespace = CommonDefinitions.Namespace)] [KnownType(typeof(ProducerAssociationConfiguration))] [KnownType(typeof(ConsumerAssociationConfiguration))] [SerializableAttribute()] public partial class AssociationConfiguration { private string AssociationNameField; private UInt16 DataSetWriterIdField; [DataMemberAttribute(EmitDefaultValue = false, Order = 0)] public string AssociationName { get { return AssociationNameField; } set { AssociationNameField = value; } } [DataMemberAttribute(EmitDefaultValue = false, Order = 1)] public UInt16 DataSetWriterId { get { return DataSetWriterIdField; } set { DataSetWriterIdField = value; } } } [DataContractAttribute(Name = "ProducerAssociationConfiguration", Namespace = CommonDefinitions.Namespace)] [SerializableAttribute()] public partial class ProducerAssociationConfiguration : AssociationConfiguration { FieldEncodingEnum FieldEncodingField; [DataMemberAttribute(EmitDefaultValue = true, IsRequired = true, Order = 1)] public FieldEncodingEnum FieldEncoding { get { return FieldEncodingField; } set { FieldEncodingField = value; } } } [DataContractAttribute(Name = "ConsumerAssociationConfiguration", Namespace = CommonDefinitions.Namespace)] [SerializableAttribute()] public partial class ConsumerAssociationConfiguration : AssociationConfiguration { private Guid PublisherIdField; [DataMemberAttribute(EmitDefaultValue = false, Order = 0)] public Guid PublisherId { get { return PublisherIdField; } set { PublisherIdField = value; } } } [DataContractAttribute(Name = "MessageWriterConfiguration", Namespace = CommonDefinitions.Namespace)] [SerializableAttribute()] public partial class MessageWriterConfiguration : MessageHandlerConfiguration { private ProducerAssociationConfiguration[] ProducerAssociationConfigurationField; [DataMemberAttribute(EmitDefaultValue = false)] [XmlArray(ElementName = "ProducerAssociationConfigurations")] public ProducerAssociationConfiguration[] ProducerAssociationConfigurations { get { return ProducerAssociationConfigurationField; } set { ProducerAssociationConfigurationField = value; } } } [DataContractAttribute(Name = "MessageReaderConfiguration")] [SerializableAttribute()] public partial class MessageReaderConfiguration : MessageHandlerConfiguration { private ConsumerAssociationConfiguration[] ConsumerAssociationConfigurationsFields; [DataMemberAttribute(EmitDefaultValue = false)] [XmlArray(ElementName = "ConsumerAssociationConfigurations")] public ConsumerAssociationConfiguration[] ConsumerAssociationConfigurations { get { return ConsumerAssociationConfigurationsFields; } set { ConsumerAssociationConfigurationsFields = value; } } } //[DataContractAttribute(Name = "MessageHandlerConfiguration", Namespace = CommonDefinitions.Namespace)] [DataContractAttribute()] [KnownType(typeof(MessageReaderConfiguration))] [KnownType(typeof(MessageWriterConfiguration))] [SerializableAttribute()] public partial class MessageHandlerConfiguration : object, IExtensibleDataObject { [System.NonSerializedAttribute()] private ExtensionDataObject extensionDataField; private string NameField; private MessageChannelConfiguration ConfigurationField; private AssociationRole TransportRoleField; public ExtensionDataObject ExtensionData { get { return this.extensionDataField; } set { this.extensionDataField = value; } } [DataMemberAttribute(EmitDefaultValue = false)] public string Name { get { return this.NameField; } set { this.NameField = value; } } [DataMemberAttribute(EmitDefaultValue = false, Order = 2)] public MessageChannelConfiguration Configuration { get { return this.ConfigurationField; } set { this.ConfigurationField = value; } } [DataMemberAttribute(IsRequired = true, Order = 3)] public AssociationRole TransportRole { get { return this.TransportRoleField; } set { this.TransportRoleField = value; } } } [DataContractAttribute(Name = "MessageChannelConfiguration", Namespace = CommonDefinitions.Namespace)] public class MessageChannelConfiguration { } [DataContractAttribute(Name = "AssociationRole", Namespace = CommonDefinitions.Namespace)] public enum AssociationRole : int { [EnumMemberAttribute()] Consumer = 0, [EnumMemberAttribute()] Producer = 1, } [DataContractAttribute(Name = "DataMemberConfiguration", Namespace = CommonDefinitions.Namespace)] [System.SerializableAttribute()] public partial class FieldMetaData : object, IExtensibleDataObject { #region private private ExtensionDataObject extensionDataField; private string SymbolicNameField; private string ProcessValueNameField; private UATypeInfo m_TypeInfo; #endregion #region public public ExtensionDataObject ExtensionData { get { return this.extensionDataField; } set { this.extensionDataField = value; } } /// /// Gets or sets the name of the field. /// /// The name of the field. [DataMember(EmitDefaultValue = false, Order = 0)] public string SymbolicName { get { return this.SymbolicNameField; } set { this.SymbolicNameField = value; } } [DataMemberAttribute(EmitDefaultValue = false, Order = 1)] public string ProcessValueName { get { return this.ProcessValueNameField; } set { this.ProcessValueNameField = value; } } [DataMemberAttribute(EmitDefaultValue = false, IsRequired = true, Order = 2)] public UATypeInfo TypeInformation { get { return m_TypeInfo; } set { m_TypeInfo = value; } } #endregion } } #pragma warning restore 1591 ================================================ FILE: Configuration/NetworkingUpgrade/Re_l1_00_16/FieldEncodingEnum.cs ================================================  using System; namespace UAOOI.Configuration.Networking.Upgrade.Re_l1_00_16 { /// /// Enum FieldEncodingEnum - /// public enum FieldEncodingEnum : Byte { /// /// The variant encoding - The DataSetFields are encoded as Variant. The Variant can contain a StatusCode instead of the expected DataType if the /// status of the field is Bad. The Variant can contain a DataValue if the status of the field is Uncertain. /// VariantFieldEncoding = 0x0, /// /// The compressed field encoding - The DataSet fields are encoded using the data types defined in the configuration. /// CompressedFieldEncoding = 0x4, /// /// The data value field encoding - The DataSet fields are encoded as DataValue. This option is set if the DataSet is configured to send more than the Value. /// DataValueFieldEncoding = 0x8 } } ================================================ FILE: Configuration/NetworkingUpgrade/Re_l1_00_16/InstanceNodeClassesEnum.cs ================================================  namespace UAOOI.Configuration.Networking.Upgrade.Re_l1_00_16 { /// /// Enumeration of the node classes that can be a source of process data. /// public enum InstanceNodeClassesEnum { /// /// Object NodeClasses /// Object, /// /// Variable NodeClasses /// Variable, /// /// Method NodeClasses /// Method, /// /// View NodeClasses /// View, /// /// Not defined or nor relevant /// NotDefined } } ================================================ FILE: Configuration/NetworkingUpgrade/Re_l1_00_16/NodeDescriptor.cs ================================================  using System; using System.Runtime.Serialization; using System.Xml; namespace UAOOI.Configuration.Networking.Upgrade.Re_l1_00_16 { /// /// Class NodeDescriptor. /// [DataContractAttribute(Name = "NodeDescriptor", Namespace = CommonDefinitions.Namespace)] [SerializableAttribute()] public partial class NodeDescriptor { #region INodeDescriptor /// /// Gets or sets the binding description. /// /// The binding description. [DataMemberAttribute(EmitDefaultValue = false, Order = 1)] public string BindingDescription { get { return m_BindingDescriptionField; } set { m_BindingDescriptionField = value; } } /// /// Gets or sets the type of the data. /// /// The type of the data. [DataMemberAttribute(EmitDefaultValue = false, Order = 2)] public XmlQualifiedName DataType { get { return m_DataTypeField; } set { m_DataTypeField = value; } } /// /// Gets or sets a value indicating whether [instance declaration]. /// /// true if [instance declaration]; otherwise, false. [DataMemberAttribute(EmitDefaultValue = false, Order = 3)] public bool InstanceDeclaration { get { return m_InstanceDeclarationField; } set { m_InstanceDeclarationField = value; } } /// /// Gets or sets the node class. /// /// The node class. [DataMemberAttribute(EmitDefaultValue = false, Order = 4)] public InstanceNodeClassesEnum NodeClass { get { return m_NodeClassField; } set { m_NodeClassField = value; } } /// /// Gets or sets the node identifier. /// /// The node identifier. [DataMemberAttribute(EmitDefaultValue = false, Order = 5)] public XmlQualifiedName NodeIdentifier { get { return m_NodeIdentifierField; } set { m_NodeIdentifierField = value; } } #endregion #region private private string m_BindingDescriptionField; private XmlQualifiedName m_DataTypeField; private bool m_InstanceDeclarationField; private InstanceNodeClassesEnum m_NodeClassField; private XmlQualifiedName m_NodeIdentifierField; #endregion } } ================================================ FILE: Configuration/NetworkingUpgrade/Re_l1_00_16/UATypeInfo.cs ================================================  using System; using System.Runtime.Serialization; namespace UAOOI.Configuration.Networking.Upgrade.Re_l1_00_16 { /// /// Class UATypeInfo - stores information about an OPC UA Type. /// [DataContractAttribute(Name = "UATypeInfo", Namespace = CommonDefinitions.Namespace)] [SerializableAttribute()] public class UATypeInfo { #region creators /// /// Initializes a new instance of the class representing an unknown type. /// [Obsolete("Shall be used only by the serializer")] public UATypeInfo() { m_builtInType = BuiltInType.Null; m_valueRank = ValueRanks.Any; } /// /// Initializes a new instance of the class representing and value rank. /// /// Type of the an OPC UA entity. public UATypeInfo(BuiltInType builtInType) : this(builtInType, ValueRanks.Scalar) { } /// /// Initializes a new instance of the class representing and value rank. /// /// Type of the an OPC UA entity. /// The value rank. public UATypeInfo(BuiltInType builtInType, int valueRank) : this(builtInType, valueRank, null) { } /// /// Initializes a new instance of the class. /// /// Type of the built in. /// The value rank. /// The array dimensions. /// $for {nameof(valueRank)} == {valueRank} {nameof(ArrayDimensions)} must be provided. public UATypeInfo(BuiltInType builtInType, int valueRank, int[] arrayDimensions) { if ((valueRank == 0 || valueRank > 1) && (arrayDimensions == null || arrayDimensions.Length == 0)) throw new ArgumentOutOfRangeException(nameof(valueRank), $"for {nameof(valueRank)} == {valueRank} {nameof(ArrayDimensions)} must be provided."); m_builtInType = builtInType; m_valueRank = valueRank; m_ArrayDimensionsField = (arrayDimensions == null || arrayDimensions.Length == 0) ? null : (int[])arrayDimensions.Clone(); } #endregion #region properties /// /// The built-in type. /// /// The type of any value represented by this instance. [DataMemberAttribute(EmitDefaultValue = false)] public BuiltInType BuiltInType { get { return m_builtInType; } set { m_builtInType = value; } } /// /// Gets or sets the array range. Indicates whether the dataType is an array and how many dimensions the array has. /// It may have the following values: /// n > 1: the dataType is an array with the specified number of dimensions. /// OneDimension(1): The dataType is an array with one dimension. /// OneOrMoreDimensions (0): The dataType is an array with one or more dimensions. /// Scalar (−1): The dataType is not an array. /// Any (−2): The dataType can be a scalar or an array with any number of dimensions. /// ScalarOrOneDimension(−3): The dataType can be a scalar or a one dimensional array. /// /// /// /// NOTE All DataTypes are considered to be scalar, even if they have array-like semantics like ByteString and String. /// /// /// The array dimensions. [DataMemberAttribute(IsRequired = true)] public int ValueRank { get { return m_valueRank; } set { m_valueRank = value; } } /// /// Gets or sets the array dimensions - Specifies the length of each dimension for an array dataType. /// It is intended to describe the capability of the dataType, not the current size. /// The number of elements shall be equal to the value of the valueRank.Shall be null if valueRank ≤ 0. /// A value of 0 for an individual dimension indicates that the dimension has a variable length. /// /// The array dimensions. [DataMemberAttribute(EmitDefaultValue = false)] public int[] ArrayDimensions { get { return m_ArrayDimensionsField; } set { m_ArrayDimensionsField = value; } } #endregion #region private private BuiltInType m_builtInType; private int m_valueRank; private int[] m_ArrayDimensionsField; #endregion } } ================================================ FILE: Configuration/NetworkingUpgrade/Re_l1_00_16/ValueRanks.cs ================================================  using System.Collections.Generic; namespace UAOOI.Configuration.Networking.Upgrade.Re_l1_00_16 { /// /// Class ValueRanks provides definition of constants defined for the ValueRank attribute. /// public static class ValueRanks { /// /// The variable may be a scalar or a one dimensional array. /// public const int ScalarOrOneDimension = -3; /// /// The variable may be a scalar or an array of any dimension. /// public const int Any = -2; /// /// The variable is always a scalar. /// public const int Scalar = -1; /// /// The variable is always an array with one or more dimensions. /// public const int OneOrMoreDimensions = 0; /// /// The variable is always one dimensional array. /// public const int OneDimension = 1; /// /// The variable is always an array with two or more dimensions. /// public const int TwoDimensions = 2; /// /// Checks if the actual value rank is compatible with the expected value rank. /// /// The actual value rank. /// The expected value rank. /// true if the specified actual value rank is valid; otherwise, false. public static bool IsValid(int actualValueRank, int expectedValueRank) { if (actualValueRank == expectedValueRank) return true; switch (expectedValueRank) { case Any: return true; case OneOrMoreDimensions: if (actualValueRank < 0) return false; break; case ScalarOrOneDimension: if (actualValueRank != Scalar && actualValueRank != OneDimension) return false; break; default: return false; } return true; } /// /// Checks if the actual array dimensions is compatible with the expected value rank and array dimensions. /// /// The actual array dimensions. /// The value rank. /// The expected array dimensions. /// true if the specified actual array dimensions is valid; otherwise, false. public static bool IsValid(IList actualArrayDimensions, int valueRank, IList expectedArrayDimensions) { // check if parameter omitted. if (actualArrayDimensions == null || actualArrayDimensions.Count == 0) return expectedArrayDimensions == null || expectedArrayDimensions.Count == 0; // no array dimensions allowed for scalars. if (valueRank == ValueRanks.Scalar) return false; // check if one dimension required. if ((valueRank == ValueRanks.OneDimension || valueRank == ValueRanks.ScalarOrOneDimension) && (actualArrayDimensions.Count != 1)) return false; // check number of dimensions. if ((valueRank != ValueRanks.OneOrMoreDimensions) && (actualArrayDimensions.Count != valueRank)) return false; // nothing more to do if expected dimensions omitted. if (expectedArrayDimensions == null || expectedArrayDimensions.Count == 0) return true; // check dimensions. if (expectedArrayDimensions.Count != actualArrayDimensions.Count) return false; // check length of each dimension. for (int ii = 0; ii < expectedArrayDimensions.Count; ii++) if (expectedArrayDimensions[ii] != actualArrayDimensions[ii] && expectedArrayDimensions[ii] != 0) return false; // everything ok. return true; } } } ================================================ FILE: Configuration/README.md ================================================ # Configuration - Executive Summary ## Introduction This library contains types that support the configuration management of application implementing the paradigm described in [Semantic-Data Processing Architecture](../SemanticData/README.MD#ooi-reactive-application). By design, this library may be used to support a variety of application types at design and run time. The project is to be a prototyping workspace to answer the question of how far we can go with the configuration (design-time approach) in the context of the following problems we have: 1. all about how to establish semantic-context, i.e. to make data exchange meaningful * message encoding, i.e. process data selection, and message populating * message decoding preparation of the consumer to be able to decode the messages, i.e. to make the message meaningful 2. all about how to establish security-context, i..e. to make data exchange secure * Privileges/Permissions management in the context of the mobile data as the primary resource (subject) for any OPC UA data processing application and context of the message handlers as the data access communication channels (infrastructure) * Security artifacts distribution to support all scenarios mentioned above ## Architecture The relationship between the assemblies in this namespace is illustrated in the following figure. ![Configuration Architecture](../CommonResources/Media/Configuration/ConfigurationArchitecture.png) >Where: > > * `DataBindings` - this library is aimed at implementing an independent editor of the `OOI Reactive Application` (`RxNetworking`) configuration file > * `Networking` - this library contains types that support the configuration management of the `OOI Reactive Application` (`RxNetworking`) > * `Core` - The library contains core definitions for "DataBindings" to promote late binding and loosely coupled components interaction > ## Features By design libraries in this namespace * allow editing and saving the configuration in the **XML** or **JSON** formats * promotes dependency injection pattern * enable dynamic configuration to reload after modification and discovery functionality The dependency injection allows the composition of the hosting application using a late-binding approach and as a result replacing the used parts after deploying the main library. It requires loosely coupled parts. ## Prerequisites By design, the Configuration libraries depend on a logger functionality implementing the interface ```txt UAOOI.Common.Infrastructure.Diagnostic.ITraceSource ``` defined in the `UAOOI.Common.Infrastructure` package. It is used to trace the behavior of libraries at run-time. To get an instance implementing this interface the `CommonServiceLocator` is used. The functionality required by the `CommonServiceLocator` has to be provided by the hosting application. Usually, it is provided by the composition container that is built at the application bootstrap stage. To get more visit this library home page [Microsoft.Practices.ServiceLocation at GitHub](https://github.com/unitycontainer/commonservicelocator). > If the `CommonServiceLocator` is not available a default logger (do nothing) is used. ## How to guide ### How to use the library by the configuration editor tool The following code snippet demonstrates how to use this library set by a configuration editor tool. ```C# public class ConfigurationEditorBase : IConfigurationEditor { ... } public class InstanceConfigurationFactory : IInstanceConfigurationFactory { ... } ``` Implementation of this scenario is covered by a full-featured example managed in an independent repository [Object Oriented Internet Reactive Networking Configuration Editor](https://github.com/mpostol/OPC-UA-OOI.ConfigEditor). Implementation of the above-mentioned interfaces is supported by the libraries that provide a vast variety of helper classes. ### How to use the library by the RxNetworking (OPC UA PubSub) communication application For the XML format, an example illustrating the reactive networking (`RxNetworking`) atop of the OPC UA PubSub is the `UAOOI.Networking.DataLogger.ConsumerConfigurationFactory` class. The following code snippet demonstrates this case. To get more examples of how to design custom configuration, visit the document covering [`RxNetworking configuration][RxNetworkingConfig]. ```C# internal class ConsumerConfigurationFactory : ConfigurationFactoryBase { ... public ConsumerConfigurationFactory(string configurationFileName) { Loader = LoadConfig; m_ConfigurationFileName = configurationFileName; } private ConfigurationData LoadConfig() { FileInfo _configurationFile = new FileInfo(m_ConfigurationFileName); return ConfigurationDataFactoryIO.Load(() => XmlDataContractSerializers.Load(_configurationFile, (x, y, z) => { }), () => RaiseEvents()); } ... } ``` ## See Also * [Reactive Networking (RxNetworking) Configuration][RxNetworkingConfig]. * API Browser: the preliminary code help documentation - [available for sponsors- consider joining](https://github.commsvr.com/AboutPartnershipProgram.md.html) * [OPC UA Address Space Model Designer (ASMD) - GitHub repository with related work][ASMD] [RxNetworkingConfig]:./Networking/README.MD [ASMD]:https://github.com/mpostol/ASMD ================================================ FILE: Configuration/Tests/DataBindingsUnitTest/Configuration.DataBindings.UnitTest.csproj ================================================  Debug AnyCPU {71D956E4-1AE6-4EF8-BC18-A195A68AFAB5} Library Properties UAOOI.Configuration.DataBindings.UnitTest UAOOI.Configuration.DataBindings.UnitTest v4.7.2 512 {3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} 10.0 $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) $(ProgramFiles)\Common Files\microsoft shared\VSTT\$(VisualStudioVersion)\UITestExtensionPackages False UnitTest ..\ true true full false bin\Debug\ DEBUG;TRACE prompt 4 IDE0001,IDE0003,CS0067 false pdbonly true bin\Release\ TRACE prompt 4 true OPCUAOOIKey.snk ..\..\..\packages\CommonServiceLocator.2.0.6\lib\net47\CommonServiceLocator.dll ..\..\..\packages\System.Diagnostics.TraceSource.4.3.0\lib\net46\System.Diagnostics.TraceSource.dll True True ..\..\..\packages\UAOOI.Common.Infrastructure.6.4.7\lib\netstandard2.0\UAOOI.Common.Infrastructure.dll False True True AssemblyInfo.tt {0a2fb856-d50c-463d-8218-063a36942188} Configuration.Core {f8db9567-c559-440c-bbcf-e02013f9ab94} Configuration.DataBindings {e28e0880-03aa-4d1b-a820-41b04e766019} Configuration.Networking Designer Designer TextTemplatingFileGenerator AssemblyInfo.cs False False False False This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. ================================================ FILE: Configuration/Tests/DataBindingsUnitTest/ConfigurationBaseUnitTest.cs ================================================  using Microsoft.VisualStudio.TestTools.UnitTesting; using System; using System.IO; using UAOOI.Common.Infrastructure.Diagnostic; using UAOOI.Configuration.Core; using UAOOI.Configuration.Networking.Serialization; namespace UAOOI.Configuration.DataBindings.UnitTest { [TestClass] [DeploymentItem(@"..\..\..\NetworkingUnitTest\TestData\", @"TestData\")] public class ConfigurationBaseUnitTest { #region TestMethod [TestMethod] [TestCategory("DataBindings_ConfigurationBaseUnitTest")] public void CreatorTestMethod() { ConfigurationBaseDerivedTest _newConfiguration = new ConfigurationBaseDerivedTest(); Assert.IsNotNull(_newConfiguration); Assert.IsNull(_newConfiguration.ConfigurationData); Assert.IsNull(_newConfiguration.CurrentConfiguration); Assert.IsNotNull(_newConfiguration.TraceSource); } [TestMethod] [TestCategory("DataBindings_ConfigurationBaseUnitTest")] public void RaiseOnChangeNullTestMethod() { ConfigurationBaseDerivedTest _instance = new ConfigurationBaseDerivedTest(); int _OnModifiedCalled = 0; _instance.OnModified += (x, y) => { _OnModifiedCalled++; Assert.IsTrue(y.ConfigurationFileChanged); }; _instance.CurrentConfiguration = new ConfigurationData(); Assert.AreEqual(1, _OnModifiedCalled); _instance.CurrentConfiguration = _instance.CurrentConfiguration; Assert.AreEqual(1, _OnModifiedCalled); _instance.CurrentConfiguration = new ConfigurationData(); Assert.AreEqual(2, _OnModifiedCalled); _instance.CreateDefaultConfiguration(); Assert.AreEqual(3, _OnModifiedCalled); } [TestMethod] [TestCategory("DataBindings_ConfigurationBaseUnitTest")] //[DeploymentItem(@"..\..\..\NetworkingUnitTest\TestData\", @"TestData\")] public void ReadConfigurationTest() { ConfigurationBaseDerivedTest _instance = new ConfigurationBaseDerivedTest(); _instance.TraceSource = new TraceSourceBase(); int _OnModifiedCalled = 0; _instance.OnModified += (x, y) => _OnModifiedCalled++; FileInfo _configurationFile = new FileInfo(@"TestData\ConfigurationDataConsumer.xml"); Assert.IsTrue(_configurationFile.Exists); _instance.ReadConfiguration(_configurationFile); Assert.IsNotNull(_instance.CurrentConfiguration); Assert.AreEqual(1, _OnModifiedCalled); _instance.CurrentConfiguration = _instance.CurrentConfiguration; Assert.AreEqual(1, _OnModifiedCalled); _configurationFile = new FileInfo(@"TestData\ConfigurationDataProducer.xml"); Assert.IsTrue(_configurationFile.Exists); _instance.ReadConfiguration(_configurationFile); Assert.AreEqual(2, _OnModifiedCalled); } #endregion #region private private class ConfigurationBaseDerivedTest : ConfigurationBase { /// /// Gets the default name of the file. /// /// The default name of the file. /// public override string DefaultFileName { get { throw new NotImplementedException(); } } /// /// Creates the default configuration. /// public override void CreateDefaultConfiguration() { CurrentConfiguration = new ConfigurationData(); } /// /// Creates automatically the instance configurations on the best effort basis. /// /// The descriptors of nodes. /// if set to true skip opening configuration file. /// if set to true cancel was pressed. /// public override void CreateInstanceConfigurations(INodeDescriptor[] descriptors, bool SkipOpeningConfigurationFile, out bool CancelWasPressed) { throw new NotImplementedException(); } /// /// Gets the configuration editor - user interface to edit the plug-in configuration file. /// /// Represents a window or dialog box that makes up an application's user interface to be used to edit configuration file. /// public override void EditConfiguration() { throw new NotImplementedException(); } /// /// Gets the instance to be used by a user to configure the selected node. /// /// Provides identifying description of the node to be configured. /// Returned object provides access to the instance node configuration edition functionality. /// public override IInstanceConfiguration GetInstanceConfiguration(INodeDescriptor descriptor) { throw new NotImplementedException(); } /// /// Saves the configuration file to a specified location. /// /// The solution file path. /// The configuration file. /// /// is to be used to create relative file path to configuration files used by the plug-in. public override void SaveConfiguration(string solutionFilePath, FileInfo configurationFile) { throw new NotImplementedException(); } } #endregion } } ================================================ FILE: Configuration/Tests/DataBindingsUnitTest/Exports/ConfigurationEditor.cs ================================================  using System; using UAOOI.Configuration.Core; using UAOOI.Configuration.Networking.Serialization; namespace UAOOI.Configuration.DataBindings.UnitTest.Exports { /// /// Class ConfigurationEditorBase - a simple implementation of the . /// public class ConfigurationEditorBase : IConfigurationEditor { /// /// Creates the instance configurations. /// /// The descriptors. /// if set to true skip opening configuration file. /// The cancel was pressed. public virtual void CreateInstanceConfigurations(INodeDescriptor[] descriptors, bool SkipOpeningConfigurationFile, Action CancelWasPressed) { throw new NotImplementedException("CreateInstanceConfigurations is not implemented yet"); //MessageBox.Show("CreateInstanceConfigurations is not implemented yet", "Library functionality", MessageBoxButton.OK, MessageBoxImage.Question); } /// /// Open configuration editor. /// /// The configuration. public virtual void EditConfiguration(ConfigurationData configuration) { throw new NotImplementedException("EditConfiguration is not implemented yet"); //MessageBox.Show("EditConfiguration is not implemented yet", "Library functionality", MessageBoxButton.OK, MessageBoxImage.Question); } } } ================================================ FILE: Configuration/Tests/DataBindingsUnitTest/Exports/Container.cs ================================================  using System; using System.Collections.Generic; using System.Linq; namespace UAOOI.Configuration.DataBindings.UnitTest.Exports { internal class Container : CommonServiceLocator.ServiceLocatorImplBase { public Container() { m_ObjectsContainer = new List() { new Logger { }, new ConfigurationEditorBase(), new InstanceConfigurationFactory() }; } private readonly IEnumerable m_ObjectsContainer; #region ServiceLocatorImplBase protected override object DoGetInstance(Type requestedType, string key) { return String.IsNullOrEmpty(key) ? m_ObjectsContainer.First(o => requestedType.IsAssignableFrom(o.GetType())) : m_ObjectsContainer.First(o => requestedType.IsAssignableFrom(o.GetType()) && Equals(key, o.GetType().FullName)); } protected override IEnumerable DoGetAllInstances(Type requestedType) { return m_ObjectsContainer.Where(o => requestedType.IsAssignableFrom(o.GetType())); } #endregion } } ================================================ FILE: Configuration/Tests/DataBindingsUnitTest/Exports/InstanceConfigurationFactory.cs ================================================  using System; using System.Collections.ObjectModel; using System.ComponentModel; using System.Linq; using UAOOI.Configuration.Core; using UAOOI.Configuration.Networking.Serialization; namespace UAOOI.Configuration.DataBindings.UnitTest.Exports { public class InstanceConfigurationFactory : IInstanceConfigurationFactory { public IInstanceConfiguration GetIInstanceConfiguration(DataSetConfiguration dataSet, ObservableCollection availableHandlers, TraceEvent trace, Action onModification) { return new InstanceConfiguration(dataSet, availableHandlers, trace, onModification); } private class InstanceConfiguration : IInstanceConfiguration, INotifyPropertyChanged { public InstanceConfiguration(DataSetConfiguration dataSet, ObservableCollection availableHandlers, TraceEvent trace, Action onModification) { AvailableMessageHandlers = availableHandlers; AssociatedMessageHandlers = new ObservableCollection(availableHandlers.Where(x => x.Associated(dataSet.AssociationName)).ToArray()); DataSetConfiguration = dataSet; PropertyChanged += (x, y) => onModification(); } /// /// Occurs when a property value changes. /// public event PropertyChangedEventHandler PropertyChanged; #region IInstanceConfiguration public void ClearConfiguration() { throw new NotImplementedException("ClearConfiguration for IInstanceConfigurations is not implemented yet"); //MessageBox.Show("ClearConfiguration for IInstanceConfigurations is not implemented yet", "Library functionality", MessageBoxButton.OK, MessageBoxImage.Question); } public void Edit() { throw new NotImplementedException("Edit for IInstanceConfigurations is not implemented yet"); //MessageBox.Show("Edit for IInstanceConfigurations is not implemented yet", "Library functionality", MessageBoxButton.OK, MessageBoxImage.Question); } #endregion #region properties for view interface [DisplayName("Available Handlers")] [Description("Available massage handlers collection - use the provided row editor to add, remove or modify available data sources.")] [Category("Message Handlers")] [ReadOnly(false)] [TypeConverterAttribute(typeof(CollectionConverter))] public ObservableCollection AvailableMessageHandlers { get; set; } [DisplayName("Associated Handlers")] [Description("Associated massage handlers collection - use the provided row editor to add, remove or modify available data sources.")] [Category("Message Handlers")] [ReadOnly(true)] [TypeConverterAttribute(typeof(CollectionConverter))] public ObservableCollection AssociatedMessageHandlers { get; set; } [DisplayName("DataSet")] [Description("Selected node DataSet that is to be used by a process data binding manager at run time to couple the instantiated object with the message centric communication.")] [Category("Data Set")] [ReadOnly(false)] [NotifyParentProperty(true)] [TypeConverterAttribute(typeof(ExpandableObjectConverter))] public DataSetConfiguration DataSetConfiguration { get; set; } public override string ToString() { return $"Configuration of: {DataSetConfiguration} associated with {String.Join(", ", AssociatedMessageHandlers.Select(x => x.Name))}"; } #endregion } } } ================================================ FILE: Configuration/Tests/DataBindingsUnitTest/Exports/Logger.cs ================================================  using System.Collections.Generic; using System.Diagnostics; using UAOOI.Common.Infrastructure.Diagnostic; namespace UAOOI.Configuration.DataBindings.UnitTest.Exports { public class Logger : ITraceSource { public class TraceLogEntity { public TraceEventType EventType { get; private set; } public int Id { get; private set; } public object Data { get; private set; } public TraceLogEntity(TraceEventType eventType, int id, object data) { this.EventType = eventType; this.Id = id; this.Data = data; } } public List TraceLogList { get; } = new List(); #region ITraceSource public void TraceData(TraceEventType eventType, int id, object data) { TraceLogList.Add(new TraceLogEntity(eventType, id, data)); } #endregion } } ================================================ FILE: Configuration/Tests/DataBindingsUnitTest/InstanceConfigurationBaseUnitTest.cs ================================================  using Microsoft.VisualStudio.TestTools.UnitTesting; using System; using UAOOI.Configuration.Core; namespace UAOOI.Configuration.DataBindings.UnitTest { [TestClass] public class InstanceConfigurationBaseUnitTest { [TestMethod] [ExpectedException(typeof(NotImplementedException))] public void ClearConfigurationTestMethod() { IInstanceConfiguration _ic = new InstanceConfigurationBase(); Assert.IsNotNull(_ic); _ic.ClearConfiguration(); } [TestMethod] [ExpectedException(typeof(NotImplementedException))] public void EditTestMethod() { IInstanceConfiguration _ic = new InstanceConfigurationBase(); Assert.IsNotNull(_ic); _ic.Edit(); } } } ================================================ FILE: Configuration/Tests/DataBindingsUnitTest/NodeDescriptor.cs ================================================  using System.Xml; using UAOOI.Configuration.Core; namespace UAOOI.Configuration.DataBindings.UnitTest { /// /// Class NodeDescriptor provides test implementation of the /// internal class NodeDescriptor : NodeDescriptorBase { /// /// Gets the test instance. /// /// NodeDescriptor. internal static NodeDescriptor GetTestInstance() { return new NodeDescriptor() { NodeIdentifier = GetDefaultNodeIdentifier(), BindingDescription = "BindingDescription", DataType = new XmlQualifiedName("DataType", "NameSpace"), InstanceDeclaration = false, NodeClass = InstanceNodeClassesEnum.Object, }; } internal static XmlQualifiedName GetDefaultNodeIdentifier() { return new XmlQualifiedName("NodeIdentifier", "NodeIdentifierNS"); } private NodeDescriptor() { } } } ================================================ FILE: Configuration/Tests/DataBindingsUnitTest/NodeDescriptorBaseUnitTest.cs ================================================ using Microsoft.VisualStudio.TestTools.UnitTesting; using System; using System.Collections.Generic; namespace UAOOI.Configuration.DataBindings.UnitTest { [TestClass] public class NodeDescriptorBaseUnitTest { [TestMethod] [TestCategory("DataBindings_NodeDescriptorBaseUnitTest")] public void CreatorTestMethod() { NodeDescriptorBase _new = NodeDescriptor.GetTestInstance(); Assert.IsNotNull(_new); Assert.IsNotNull(_new.NodeIdentifier); } [TestMethod] [TestCategory("DataBindings_NodeDescriptorBaseUnitTest")] public void IComparerTestMethod() { NodeDescriptorBase _new = NodeDescriptor.GetTestInstance(); Assert.IsNotNull(_new); Assert.IsNotNull(_new.NodeIdentifier); NodeDescriptorBase _Other = NodeDescriptor.GetTestInstance(); Assert.IsNotNull(_new); Assert.IsNotNull(_new.NodeIdentifier); Assert.AreEqual(0, _new.CompareTo(_Other)); Assert.AreEqual(_new, _Other); } [TestMethod] [TestCategory("DataBindings_NodeDescriptorBaseUnitTest")] public void IEqualityComparerTestMethod() { NodeDescriptorBase _new = NodeDescriptor.GetTestInstance(); Assert.IsNotNull(_new); Assert.IsNotNull(_new.NodeIdentifier); NodeDescriptorBase _other = NodeDescriptor.GetTestInstance(); Assert.IsNotNull(_new); Assert.IsNotNull(_new.NodeIdentifier); Assert.AreEqual(_new.GetHashCode(_new), _other.GetHashCode(_other)); Assert.AreEqual(_new, _other); } [TestMethod] [TestCategory("DataBindings_NodeDescriptorBaseUnitTest")] [ExpectedException(typeof(ArgumentException))] public void DictionaryTestMethod() { NodeDescriptorBase _new = NodeDescriptor.GetTestInstance(); Assert.IsNotNull(_new); Assert.IsNotNull(_new.NodeIdentifier); NodeDescriptorBase _Other = NodeDescriptor.GetTestInstance(); Assert.IsNotNull(_new); Assert.IsNotNull(_new.NodeIdentifier); Assert.AreEqual(0, _new.CompareTo(_Other)); Assert.AreEqual(_new, _Other); Dictionary _newDic = new Dictionary(); _newDic.Add(_new, _new); Assert.IsTrue(_newDic.ContainsKey(_new)); Assert.IsTrue(_newDic.ContainsKey(_Other)); _newDic.Add(_new, _Other); } } } ================================================ FILE: Configuration/Tests/DataBindingsUnitTest/Properties/AssemblyInfo.cs ================================================ //_______________________________________________________________ // Title : Assembly info for: DataBindingsUnitTest // System : Microsoft VisualStudio 2015 / C# // // Copyright (C) 2022 Mariusz Postol LODZ POLAND // +48 608 619 899 // mpostol@cas.eu // https://github.com/mpostol/OPC-UA-OOI //_______________________________________________________________ using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; [assembly: AssemblyTitle("DataBindingsUnitTest")] [assembly: AssemblyDescription("OPC UA DataBindings UtitTests")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("Mariusz Postol")] [assembly: AssemblyProduct("Object Oriented Internet")] [assembly: AssemblyCopyright("Copyright (C) 2022 Mariusz Postol LODZ POLAND")] [assembly: AssemblyTrademark("Object Oriented Internet")] [assembly: AssemblyCulture("")] [assembly: ComVisible(false)] [assembly: Guid("73e0467b-131e-4a9f-8986-cb00f6c58f62")] [assembly: AssemblyVersion("6.4.9.*")] [assembly: AssemblyFileVersion("6.4.9")] ================================================ FILE: Configuration/Tests/DataBindingsUnitTest/Properties/AssemblyInfo.tt ================================================ <#@ template debug="false" hostspecific="false" language="C#" #> <#@ output extension=".cs" #> //_______________________________________________________________ // Title : Assembly info for: <#=m_AssemblyTitle#> // System : Microsoft VisualStudio 2015 / C# // // <#=AssemblyCopyright#> // <#=Phone#> // <#=Email#> // <#=Url#> //_______________________________________________________________ using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; [assembly: AssemblyTitle("<#=m_AssemblyTitle#>")] [assembly: AssemblyDescription("OPC UA DataBindings UtitTests")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("<#=AssemblyCompany#>")] [assembly: AssemblyProduct("<#=ConfigurationProduct#>")] [assembly: AssemblyCopyright("<#=AssemblyCopyright#>")] [assembly: AssemblyTrademark("<#=ProductTrademark#>")] [assembly: AssemblyCulture("")] [assembly: ComVisible(false)] [assembly: Guid("73e0467b-131e-4a9f-8986-cb00f6c58f62")] [assembly: AssemblyVersion("<#= ConfigurationVersion #>.*")] [assembly: AssemblyFileVersion("<#= ConfigurationVersion #>")] <#@ include file = "..\..\..\..\CommonResources\T4Definitions\Model.t4" #> <#+ string m_AssemblyTitle = "DataBindingsUnitTest"; #> ================================================ FILE: Configuration/Tests/DataBindingsUnitTest/UANetworkingConfigurationEditorUnitTest.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2021, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ using CommonServiceLocator; using Microsoft.VisualStudio.TestTools.UnitTesting; using System; using System.IO; using System.Reflection; using UAOOI.Configuration.Core; using UAOOI.Configuration.DataBindings.UnitTest.Exports; using UAOOI.Configuration.Networking.Serialization; namespace UAOOI.Configuration.DataBindings.UnitTest { [TestClass] public class UANetworkingConfigurationEditorUnitTest { #region Test Methods [TestMethod] [TestCategory("DataBindings_UANetworkingConfigurationEditor")] public void GetIServerConfigurationTestMethod() { FileInfo _fileInfo = new FileInfo("UAOOI.Configuration.DataBindings.dll"); Assert.IsTrue(_fileInfo.Exists); // IConfiguration _serverConfiguration = null; Container _container = new Container(); ServiceLocator.SetLocatorProvider(() => _container); GetIServerConfiguration(_fileInfo, out Assembly _pluginAssembly, out IConfiguration _serverConfiguration); Assert.IsNotNull(_pluginAssembly); Assert.IsNotNull(_serverConfiguration); Assert.IsInstanceOfType(_serverConfiguration, typeof(UANetworkingConfigurationEditor)); _serverConfiguration.Dispose(); } [TestMethod] [TestCategory("DataBindings_UANetworkingConfigurationEditor")] public void AfterCreationStateTest() { Container _container = new Container(); ServiceLocator.SetLocatorProvider(() => _container); UANetworkingConfigurationEditor _mc = new UANetworkingConfigurationEditor(); Assert.IsNotNull(_mc.ConfigurationEditor); Assert.IsNotNull(_mc.CurrentConfiguration); Assert.IsFalse(String.IsNullOrEmpty(_mc.DefaultFileName)); Assert.IsNotNull(_mc.InstanceConfigurationFactory); Assert.IsNotNull(_mc.TraceSource); } [TestMethod] [TestCategory("DataBindings_UANetworkingConfigurationEditor")] [ExpectedException(typeof(NotImplementedException))] public void EditConfigurationTest() { Container _container = new Container(); ServiceLocator.SetLocatorProvider(() => _container); UANetworkingConfigurationEditor _mc = new UANetworkingConfigurationEditor(); _mc.EditConfiguration(); } [TestMethod] [TestCategory("DataBindings_UANetworkingConfigurationEditor")] [ExpectedException(typeof(NotImplementedException))] public void GetInstanceConfigurationTest() { Container _container = new Container(); ServiceLocator.SetLocatorProvider(() => _container); UANetworkingConfigurationEditor _mc = new UANetworkingConfigurationEditor(); IInstanceConfiguration _ic = _mc.GetInstanceConfiguration(new NodeDescriptorBase() { NodeIdentifier = new System.Xml.XmlQualifiedName("TestNodeIdentifier", "UAOOI.Configuration.DataBindings.UnitTest") }); Assert.IsNotNull(_ic); _ic.Edit(); } [TestMethod] [TestCategory("DataBindings_UANetworkingConfigurationEditor")] public void DefaultFileNameTestMethod() { Container _container = new Container(); ServiceLocator.SetLocatorProvider(() => _container); UANetworkingConfigurationEditor _mc = new UANetworkingConfigurationEditor(); string _fileName = _mc.DefaultFileName; FileInfo _fi = new FileInfo(_fileName); Assert.AreEqual(".uasconfig", _fi.Extension); Assert.AreEqual("UANetworkingConfiguration.uasconfig", _fi.Name); } [TestMethod] [TestCategory("DataBindings_UANetworkingConfigurationEditor")] public void CreateDefaultConfigurationTestMethod() { Container _container = new Container(); ServiceLocator.SetLocatorProvider(() => _container); UANetworkingConfigurationEditor _newConfiguration = new UANetworkingConfigurationEditor(); Assert.IsNotNull(_newConfiguration); _newConfiguration.CreateDefaultConfiguration(); Assert.IsNotNull(_newConfiguration.CurrentConfiguration); ConfigurationData _CurrentConfiguration = _newConfiguration.CurrentConfiguration; Assert.IsNotNull(_CurrentConfiguration.DataSets); Assert.AreEqual(0, _CurrentConfiguration.DataSets.Length); Assert.IsNotNull(_CurrentConfiguration.MessageHandlers); Assert.AreEqual(0, _CurrentConfiguration.MessageHandlers.Length); } [TestMethod] [TestCategory("Configuration_UANetworkingConfigurationUnitTest")] [ExpectedException(typeof(ArgumentNullException))] public void GetInstanceConfigurationNullTestMethod() { Container _container = new Container(); ServiceLocator.SetLocatorProvider(() => _container); UANetworkingConfigurationEditor _newConfiguration = new UANetworkingConfigurationEditor(); Assert.IsNotNull(_newConfiguration); IInstanceConfiguration _newInstanceConfiguration = _newConfiguration.GetInstanceConfiguration(null); } [TestMethod] [TestCategory("Configuration_UANetworkingConfigurationUnitTest")] public void GetInstanceConfigurationNoConfigurationTestMethod() { Container _container = new Container(); ServiceLocator.SetLocatorProvider(() => _container); UANetworkingConfigurationEditor _newConfiguration = new UANetworkingConfigurationEditor(); Assert.IsNotNull(_newConfiguration); NodeDescriptor _nd = NodeDescriptor.GetTestInstance(); IInstanceConfiguration _newInstanceConfiguration = _newConfiguration.GetInstanceConfiguration(_nd); Assert.IsNotNull(_newInstanceConfiguration); IInstanceConfiguration _nxtInstanceConfiguration = _newConfiguration.GetInstanceConfiguration(_nd); Assert.AreNotSame(_newInstanceConfiguration, _nxtInstanceConfiguration); Assert.AreEqual(_newInstanceConfiguration.ToString(), _nxtInstanceConfiguration.ToString()); } [TestMethod] [TestCategory("Configuration_UANetworkingConfigurationUnitTest")] public void OnModifiedTestMethod() { UANetworkingConfigurationEditor _newConfiguration = new UANetworkingConfigurationEditor(); Assert.IsNotNull(_newConfiguration); bool _ConfigurationFileChanged = false; _newConfiguration.OnModified += (x, y) => { _ConfigurationFileChanged = true; }; _newConfiguration.CreateDefaultConfiguration(); Assert.IsTrue(_ConfigurationFileChanged); Assert.IsNotNull(_newConfiguration.CurrentConfiguration); } #endregion Test Methods #region test instrumentation private static void GetIServerConfiguration(FileInfo info, out Assembly pluginAssembly, out IConfiguration serverConfiguration) { string iName = typeof(IConfiguration).ToString(); pluginAssembly = Assembly.LoadFrom(info.FullName); serverConfiguration = null; foreach (Type pluginType in pluginAssembly.GetExportedTypes()) //Only look at public types if (pluginType.IsPublic && !pluginType.IsAbstract && pluginType.GetInterface(iName) != null) try { serverConfiguration = (IConfiguration)Activator.CreateInstance(pluginType); } catch (TargetInvocationException _ex) { throw new ApplicationException(String.Format("The server configuration plug-in {0}/{1} cannot be loaded. Contact the vendor to get current version of this component", pluginType.FullName, info.Name), _ex); } } #endregion test instrumentation } } ================================================ FILE: Configuration/Tests/DataBindingsUnitTest/app.config ================================================ ================================================ FILE: Configuration/Tests/DataBindingsUnitTest/packages.config ================================================  ================================================ FILE: Configuration/Tests/NetworkingUnitTest/CSharpSelectedTypesEncoding.cs ================================================ using Microsoft.VisualStudio.TestTools.UnitTesting; using System; using System.Runtime.Serialization; namespace UAOOI.Configuration.Networking.UnitTest { // Set the Name and Namespace properties to new values. [DataContract(Name = "CSharpJsonEncoding", Namespace = "http://www.commsvr.com/UAOOI/DataBindings/UnitTest")] internal class CSharpSelectedTypesEncoding : IExtensibleDataObject { public CSharpSelectedTypesEncoding() { } // To implement the IExtensibleDataObject interface, you must also implement the ExtensionData property. private ExtensionDataObject extensionDataObjectValue; public ExtensionDataObject ExtensionData { get { return extensionDataObjectValue; } set { extensionDataObjectValue = value; } } [DataMember(Name = "BooleanType")] internal bool BooleanType = false; [DataMember(Name = "StringType")] internal string StringType = "StringType"; [DataMember(Name = "floatType")] internal float floatType = 1.12345678e-3F; [DataMember(Name = "intType")] internal int intType = 98765; [DataMember(Name = "DateTimeType")] internal DateTime DateTimeType = DateTime.Today; [DataMember(Name = "GuidType")] internal Guid GuidType = Guid.NewGuid(); [DataMember(Name = "ByteStringType")] internal byte[] ByteStringType = new byte[] { 0x1, 0x55, 0xCF, 0xFF }; internal void AreEqual(CSharpSelectedTypesEncoding p2) { Assert.AreEqual(this.BooleanType, p2.BooleanType); Assert.AreEqual(this.StringType, p2.StringType); Assert.AreEqual(this.floatType, p2.floatType); Assert.AreEqual(this.intType, p2.intType); Assert.AreEqual(this.DateTimeType, p2.DateTimeType); Assert.AreEqual(this.GuidType, p2.GuidType); CollectionAssert.AreEqual(this.ByteStringType, p2.ByteStringType); } } } ================================================ FILE: Configuration/Tests/NetworkingUnitTest/Configuration.Networking.UnitTest.csproj ================================================  Debug AnyCPU {81DDD889-3223-4F24-8B65-DD5C57886994} Library Properties UAOOI.Configuration.Networking.UnitTest UAOOI.Configuration.Networking.UnitTest v4.7.2 512 {3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} 10.0 $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) $(ProgramFiles)\Common Files\microsoft shared\VSTT\$(VisualStudioVersion)\UITestExtensionPackages False UnitTest true full false bin\Debug\ TRACE;DEBUG;IDE0001,IDE0002,IDE0003 prompt 4 IDE0001,IDE0002,IDE0003 false pdbonly true bin\Release\ TRACE prompt 4 true OPCUAOOIKey.snk ..\..\..\packages\CommonServiceLocator.2.0.6\lib\net47\CommonServiceLocator.dll ..\..\..\packages\System.Diagnostics.TraceSource.4.3.0\lib\net46\System.Diagnostics.TraceSource.dll True True ..\..\..\packages\UAOOI.Common.Infrastructure.6.4.7\lib\netstandard2.0\UAOOI.Common.Infrastructure.dll False {e28e0880-03aa-4d1b-a820-41b04e766019} Configuration.Networking PreserveNewest PreserveNewest PreserveNewest PreserveNewest Always Always False False False False ================================================ FILE: Configuration/Tests/NetworkingUnitTest/ConfigurationDataUnitTest.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2018, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using Microsoft.VisualStudio.TestTools.UnitTesting; using System; using System.Diagnostics; using System.IO; using System.Runtime.Serialization; using System.Xml; using System.Xml.Schema; using UAOOI.Configuration.Networking.Serialization; using UAOOI.Configuration.Networking.Serializers; using UAOOI.Configuration.Networking.UnitTest.Instrumentation; namespace UAOOI.Configuration.Networking.UnitTest { [TestClass] [DeploymentItem(@"TestData\", @"TestData\")] public class ConfigurationDataUnitTest { #region TestMethod [TestMethod] [TestCategory("Configuration_ConfigurationDataUnitTest")] public void AfterCreationTest() { ConfigurationData _newOne = new ConfigurationData(); Assert.IsNull(_newOne.DataSets); Assert.IsNull(_newOne.ExtensionData); Assert.AreSame(_newOne, _newOne.GetConfigurationData()); Assert.IsNull(_newOne.MessageHandlers); Assert.IsNull(_newOne.OnChanged); Assert.IsNull(_newOne.TypeDictionaries); } [TestMethod] [TestCategory("Configuration_ConfigurationDataUnitTest")] public void LoadSaveTestMethod() { LocalConfigurationData _configuration = ConfigurationDataFactoryIO.Load(LocalConfigurationData.Loader, () => { }); Assert.IsNotNull(_configuration); Assert.AreEqual(1, _configuration.OnLoadedCount); Assert.AreEqual(0, _configuration.OnSavingCount); ConfigurationDataFactoryIO.Save(_configuration, (x) => { Assert.AreEqual(1, x.OnSavingCount); }); } [TestMethod] [TestCategory("Configuration_ConfigurationDataUnitTest")] public void SaveLoadTestMethod() { SaveLoadConfigurationData(Role.Consumer, SerializerType.Xml); SaveLoadConfigurationData(Role.Consumer, SerializerType.Json); SaveLoadConfigurationData(Role.Producer, SerializerType.Xml); SaveLoadConfigurationData(Role.Producer, SerializerType.Json); //Assert.Fail(); } [TestMethod] [TestCategory("Configuration_SerializationUnitTest")] public void LoadUsingSerializerTestMethod() { LoadUsingSerializer(Role.Consumer, SerializerType.Xml); LoadUsingSerializer(Role.Consumer, SerializerType.Json); LoadUsingSerializer(Role.Producer, SerializerType.Xml); LoadUsingSerializer(Role.Producer, SerializerType.Json); } [TestMethod] [TestCategory("Configuration_SerializationUnitTest")] public void ExportXSDUsingDataContractExporter() { //create schema XsdDataContractExporter _exporter = new XsdDataContractExporter(); Type _ConfigurationDataType = typeof(ConfigurationData); Assert.IsTrue(_exporter.CanExport(_ConfigurationDataType)); _exporter.Export(_ConfigurationDataType); Console.WriteLine("number of schemas: {0}", _exporter.Schemas.Count); Console.WriteLine(); //write out the schema XmlSchemaSet _Schemas = _exporter.Schemas; XmlQualifiedName XmlNameValue = _exporter.GetRootElementName(_ConfigurationDataType); string EmployeeNameSpace = XmlNameValue.Namespace; foreach (XmlSchema _schema in _Schemas.Schemas(EmployeeNameSpace)) _schema.Write(Console.Out); } [TestMethod] public void ConfigurationVersionDataTypeTestMethod() { ConfigurationVersionDataType _newInstance = new ConfigurationVersionDataType() { MajorVersion = 1, MinorVersion = 2 }; Assert.AreEqual("1.2", _newInstance.ToString()); } #endregion #region private private class LocalConfigurationData : ConfigurationData { /// /// Loads this . /// /// LocalConfigurationData. internal static LocalConfigurationData Loader() { return new LocalConfigurationData(); } public LocalConfigurationData() { } /// /// Called when the configuration is loaded. /// public override void OnLoaded() { base.OnLoaded(); OnLoadedCount++; } /// /// Called before the saving the configuration. /// public override void OnSaving() { base.OnSaving(); OnSavingCount++; } #region test instrumentation /// internal int OnLoadedCount = 0; /// internal int OnSavingCount = 0; #endregion } private enum Role { Producer, Consumer }; private void SaveLoadConfigurationData(Role role, SerializerType serializer) { FileInfo _fileInfo = GetFileName(role, serializer, @"ConfigurationData{0}.{1}"); ConfigurationData _configuration = null; switch (role) { case Role.Producer: _configuration = ReferenceConfiguration.LoadProducer(); break; case Role.Consumer: _configuration = ReferenceConfiguration.LoadConsumer(); break; default: break; } ConfigurationDataFactoryIO.Save(_configuration, serializer, _fileInfo, (x, y, z) => { Console.WriteLine(z); }); _fileInfo.Refresh(); Assert.IsTrue(_fileInfo.Exists); ConfigurationData _mirror = ConfigurationDataFactoryIO.Load(serializer, _fileInfo, (x, y, z) => { Console.WriteLine(z); }, () => { }); ReferenceConfiguration.Compare(_configuration, _mirror); } private void LoadUsingSerializer(Role role, SerializerType serializer) { FileInfo _fileInfo = GetFileName(role, serializer, @"TestData\ConfigurationData{0}.{1}"); Assert.IsTrue(_fileInfo.Exists, _fileInfo.ToString()); ConfigurationData _mirror = null; ConfigurationData _source = null; switch (role) { case Role.Producer: _source = ReferenceConfiguration.LoadProducer(); break; case Role.Consumer: _source = ReferenceConfiguration.LoadConsumer(); break; } string _message = null; switch (serializer) { case SerializerType.Json: _mirror = ConfigurationDataFactoryIO.Load (() => JSONDataContractSerializers.Load(_fileInfo, (x, y, z) => { _message = z; Assert.AreEqual(TraceEventType.Verbose, x); }), () => { }); break; case SerializerType.Xml: _mirror = ConfigurationDataFactoryIO.Load (() => XmlDataContractSerializers.Load(_fileInfo, (x, y, z) => { _message = z; Assert.AreEqual(TraceEventType.Verbose, x); }), () => { }); break; } Console.WriteLine(_message); Assert.IsNotNull(_mirror); Assert.IsFalse(String.IsNullOrEmpty(_message)); Assert.IsTrue(_message.Contains(_fileInfo.FullName)); ReferenceConfiguration.Compare(_source, _mirror); } private static FileInfo GetFileName(Role role, SerializerType serializer, string fileNameTemplate) { string _extension = serializer == SerializerType.Xml ? "xml" : "json"; string _fileName = String.Format(fileNameTemplate, role, _extension); return new FileInfo(_fileName); } #endregion } } ================================================ FILE: Configuration/Tests/NetworkingUnitTest/ConfigurationFactoryBaseUnitTest.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using Microsoft.VisualStudio.TestTools.UnitTesting; using System; using System.IO; using UAOOI.Configuration.Networking.Serialization; using UAOOI.Configuration.Networking.Serializers; using UAOOI.Configuration.Networking.UnitTest.Instrumentation; namespace UAOOI.Configuration.Networking.UnitTest { [TestClass] [DeploymentItem(@"TestData\", @"TestData\")] public class ConfigurationFactoryBaseUnitTest { [TestMethod] [TestCategory("DataBindings_XmlSerializerTestMethod")] public void CreationStateTest() { TestConfigurationDataFactory _newOne = new TestConfigurationDataFactory(); Assert.IsNotNull(_newOne.Loader); Assert.IsNull(_newOne.Configuration); ConfigurationData _config = _newOne.GetConfiguration(); Assert.IsNotNull(_config); Assert.IsNotNull(_newOne.Configuration); Assert.AreSame(_config, _newOne.Configuration); } [TestMethod] public void LoadConfigurationDataWrapperTest() { TestConfigurationFactoryBaseConfigurationDataWrapper _newOne = new TestConfigurationFactoryBaseConfigurationDataWrapper(); Assert.IsNotNull(_newOne.Loader); ConfigurationData _config = _newOne.GetConfiguration(); Assert.IsNotNull(_config); Assert.IsNotNull(_newOne.Configuration); } private class TestConfigurationDataFactory : ConfigurationFactoryBase { /// /// Initializes a new instance of the class. /// public TestConfigurationDataFactory() { Loader = LoadConfig; } #region ConfigurationFactoryBase /// /// Occurs after the association configuration has been changed. /// public override event EventHandler OnAssociationConfigurationChange; /// /// Occurs after the communication configuration has been changed. /// public override event EventHandler OnMessageHandlerConfigurationChange; #endregion internal new Func Loader { get => base.Loader; set => base.Loader = value; } #region private private ConfigurationData LoadConfig() { FileInfo _configurationFile = new FileInfo(_ConsumerConfigurationFileName); return ConfigurationDataFactoryIO.Load(() => XmlDataContractSerializers.Load(_configurationFile, (x, y, z) => { }), () => RaiseEvents()); } protected override void RaiseEvents() { OnAssociationConfigurationChange?.Invoke(this, EventArgs.Empty); OnMessageHandlerConfigurationChange?.Invoke(this, EventArgs.Empty); } private readonly string _ConsumerConfigurationFileName = @"TestData\ConfigurationDataConsumer.xml"; #endregion } private class TestConfigurationFactoryBaseConfigurationDataWrapper : ConfigurationFactoryBase { public TestConfigurationFactoryBaseConfigurationDataWrapper() : base(m_FileName) { } #region ConfigurationFactoryBase public override event EventHandler OnAssociationConfigurationChange; public override event EventHandler OnMessageHandlerConfigurationChange; protected override void RaiseEvents() { throw new NotImplementedException(); } #endregion internal new Func Loader { get => base.Loader; set => base.Loader = value; } private const string m_FileName = @"TestData\ConsumerConfigurationDataWrapper.xml"; } } } ================================================ FILE: Configuration/Tests/NetworkingUnitTest/DataSetConfigurationUnitTest.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2018, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using Microsoft.VisualStudio.TestTools.UnitTesting; using System; using System.Xml; using UAOOI.Configuration.Networking.Serialization; namespace UAOOI.Configuration.Networking.UnitTest { [TestClass] public class DataSetConfigurationUnitTest { [TestMethod] public void AfterCreationStateTest() { DataSetConfiguration _dataSet = new DataSetConfiguration(); Assert.IsTrue(String.IsNullOrEmpty(_dataSet.Guid)); Assert.AreEqual(Guid.Empty, _dataSet.Id); } [TestMethod] public void IdTest() { DataSetConfiguration _dataSet = new DataSetConfiguration(); Assert.IsTrue(String.IsNullOrEmpty(_dataSet.Guid)); Assert.AreEqual(Guid.Empty, _dataSet.Id); Guid _newId = System.Guid.NewGuid(); _dataSet.Id = _newId; Assert.IsFalse(String.IsNullOrEmpty(_dataSet.Guid)); Assert.AreEqual(XmlConvert.ToString(_newId), _dataSet.Guid); } } } ================================================ FILE: Configuration/Tests/NetworkingUnitTest/Instrumentation/ConfigurationDataWrapper.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2018, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System; using System.Runtime.Serialization; using System.Xml.Serialization; using UAOOI.Configuration.Networking.Serialization; namespace UAOOI.Configuration.Networking.UnitTest.Instrumentation { [DataContractAttribute(Name = "ConfigurationDataWrapper", Namespace = Definitions.m_Namespace)] [System.SerializableAttribute()] [XmlRoot(Namespace = CommonDefinitions.Namespace)] internal class ConfigurationDataWrapper : IConfigurationDataFactory { public ConfigurationDataWrapper() { ConfigurationData = ReferenceConfiguration.LoadConsumer(); } [DataMember(EmitDefaultValue = false, IsRequired = true)] public ConfigurationData ConfigurationData { get; set; } #region IConfigurationDataFactory public ConfigurationData GetConfigurationData() { return ConfigurationData; } public void OnLoaded() { OnLoadedCount++; } public void OnSaving() { OnSavingCount++; } public Action OnChanged { get; set; } #endregion internal int OnSavingCount = 0; internal int OnLoadedCount = 0; } internal static class Definitions { internal const string m_Namespace = "http://commsvr.com/UAOOI/SemanticData/UANetworking/Configuration/UnitTest/Serialization.xsd"; } } ================================================ FILE: Configuration/Tests/NetworkingUnitTest/Instrumentation/Container.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2018, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using CommonServiceLocator; using System; using System.Collections.Generic; using System.Linq; namespace UAOOI.Configuration.Networking.UnitTest.Instrumentation { internal class Container : ServiceLocatorImplBase { public Container(IEnumerable list) { m_ObjectsContainer = list; } private readonly IEnumerable m_ObjectsContainer; protected override object DoGetInstance(Type requestedType, string key) { return String.IsNullOrEmpty(key) ? m_ObjectsContainer.First(o => requestedType.IsAssignableFrom(o.GetType())) : m_ObjectsContainer.First(o => requestedType.IsAssignableFrom(o.GetType()) && Equals(key, o.GetType().FullName)); } protected override IEnumerable DoGetAllInstances(Type requestedType) { return m_ObjectsContainer.Where(o => requestedType.IsAssignableFrom(o.GetType())); } } } ================================================ FILE: Configuration/Tests/NetworkingUnitTest/Instrumentation/CustomConfigurationData.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System; using System.Runtime.Serialization; using System.Xml.Serialization; using UAOOI.Configuration.Networking.Serialization; namespace UAOOI.Configuration.Networking.UnitTest.Instrumentation { [DataContractAttribute(Name = "CustomConfigurationData", Namespace = CommonDefinitions.Namespace)] [SerializableAttribute()] [XmlRoot(Namespace = CommonDefinitions.Namespace)] public class CustomConfigurationData : ConfigurationData { [DataMemberAttribute(EmitDefaultValue = true, IsRequired = true)] [XmlElementAttribute(IsNullable = false)] public string CustomProperty { get; set; } internal static CustomConfigurationData LoadConsumer() { return new CustomConfigurationData() { CustomProperty = nameof(CustomProperty), DataSets = ReferenceConfiguration.GetDataSetConfigurations(AssociationRole.Consumer), MessageHandlers = ReferenceConfiguration.GetMessageHandlers(AssociationRole.Consumer), TypeDictionaries = ReferenceConfiguration.TypeDictionaries() }; } public override void OnLoaded() { OnLoadedCount++; base.OnLoaded(); } public override void OnSaving() { OnSavingCount++; base.OnSaving(); } internal int OnLoadedCount = 0; internal int OnSavingCount = 0; } internal class CommonDefinitions { internal const string Namespace = "http://commsvr.com/UAOOI/SemanticData/UANetworking/Configuration/CustomConfigurationData.xsd"; } } ================================================ FILE: Configuration/Tests/NetworkingUnitTest/Instrumentation/GoXSD.cmd ================================================ xsd.exe ..\bin\Debug\UAOOI.Configuration.Networking.UnitTest.dll /t:UAOOI.Configuration.Networking.UnitTest.Instrumentation.CustomConfigurationData rem https://msdn.microsoft.com/en-us/library/aa347733(v=vs.110).aspx rem Svcutil ..\bin\Debug\UAOOI.Configuration.Networking.dll /collectionType:UAOOI.Configuration.Networking.Serialization.ConfigurationData /N:http://commsvr.com/UAOOI/SemanticData/UANetworking/Configuration/Serialization.xsd,UAOOI.Configuration.Networking.Serialization /o:ConfigurationData.!.xsd /dconly /s /serializer:DataContractSerializer rem Svcutil ..\bin\Debug\UAOOI.Configuration.Networking.dll /t:metadata /dconly /d:xsd ================================================ FILE: Configuration/Tests/NetworkingUnitTest/Instrumentation/Logger.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2018, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System.Collections.Generic; using System.Diagnostics; using UAOOI.Common.Infrastructure.Diagnostic; namespace UAOOI.Configuration.Networking.UnitTest.Instrumentation { public class Logger : ITraceSource { public class TraceLogEntity { public TraceEventType EventType { get; private set; } public int Id { get; private set; } public object Data { get; private set; } public TraceLogEntity(TraceEventType eventType, int id, object data) { this.EventType = eventType; this.Id = id; this.Data = data; } } public List TraceLogList { get; } = new List(); #region ITraceSource public void TraceData(TraceEventType eventType, int id, object data) { TraceLogList.Add(new TraceLogEntity(eventType, id, data)); } #endregion } } ================================================ FILE: Configuration/Tests/NetworkingUnitTest/Instrumentation/ReferenceConfiguration.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2018, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using Microsoft.VisualStudio.TestTools.UnitTesting; using System; using System.Collections.Generic; using System.Linq; using System.Xml; using UAOOI.Configuration.Networking.Serialization; namespace UAOOI.Configuration.Networking.UnitTest.Instrumentation { /// /// Class ReferenceConfiguration - creates a configuration for testing purpose. /// internal static class ReferenceConfiguration { #region API /// /// Created the configuration from the local data. /// /// In production release shall be replaced by reading from the file. /// ConfigurationData. internal static ConfigurationData LoadConsumer() { return new ConfigurationData() { DataSets = GetDataSetConfigurations(AssociationRole.Consumer), MessageHandlers = GetMessageHandlers(AssociationRole.Consumer), TypeDictionaries = TypeDictionaries() }; } /// /// Created the configuration from the local data. /// /// In production release shall be replaced by reading from the file. /// ConfigurationData. internal static ConfigurationData LoadProducer() { return new ConfigurationData() { DataSets = GetDataSetConfigurations(AssociationRole.Producer), MessageHandlers = GetMessageHandlers(AssociationRole.Producer), TypeDictionaries = TypeDictionaries() }; } #endregion #region configuration internal static MessageHandlerConfiguration[] GetMessageHandlers(AssociationRole associationRole) { MessageHandlerConfiguration[] _ret = null; switch (associationRole) { case AssociationRole.Consumer: _ret = new MessageReaderConfiguration[] { new MessageReaderConfiguration() { ConsumerAssociationConfigurations = GetConsumerAssociationConfiguration(), Configuration = new MessageChannelConfiguration() { ChannelConfiguration = "4840,True,239.255.255.1,True" }, Name = "UDP", TransportRole = associationRole }}; break; case AssociationRole.Producer: _ret = new MessageWriterConfiguration[] { new MessageWriterConfiguration() { ProducerAssociationConfigurations = GetProducerAssociationConfiguration(), Configuration = new MessageChannelConfiguration () { ChannelConfiguration = "4840,localhost" }, Name = "UDP", TransportRole = associationRole }}; break; } return _ret; } private static ConsumerAssociationConfiguration[] GetConsumerAssociationConfiguration() { return new ConsumerAssociationConfiguration[] { new ConsumerAssociationConfiguration() { AssociationName = AssociationConfigurationAlias, DataSetWriterId = DefaultDataSetWriterId, PublisherId = DefaultAssociationConfigurationId } }; } private static ProducerAssociationConfiguration[] GetProducerAssociationConfiguration() { return new ProducerAssociationConfiguration[] { new ProducerAssociationConfiguration() { AssociationName = AssociationConfigurationAlias, DataSetWriterId = DefaultDataSetWriterId, PublisherId = DefaultAssociationConfigurationId, FieldEncoding = FieldEncodingEnum.VariantFieldEncoding } }; } internal static TypeDictionary[] TypeDictionaries() { return new TypeDictionary[] { new TypeDictionary() { TargetNamespace = "http://commsvr.com/UAOOI/Configuration/Networking/UnitTest/TargetNamespace.xsd", Items = GetItems() } }; } private static TypeDescription[] GetItems() { TypeDescription _ret = new StructuredType() { Name = "StructuredTypeName", StructureKind = StructureKindEnum.Structure, Field = GetFields() }; TypeDescription _retEnum = new EnumeratedType() { Name = "EnumeratedTypeName", EnumeratedValues = GetEnumeratedValue() }; return new TypeDescription[] { _ret, _retEnum }; } private static EnumeratedValue[] GetEnumeratedValue() { List _ret = new List(); _ret.Add(new EnumeratedValue() { Documentation = new LocalizedText[] { new LocalizedText() { Locale = "en-us", Value = "Documentation" }, new LocalizedText() { Locale = "pl-pl", Value = "Dokumentacja" } }, Name = "Field1", Value = 0, }); _ret.Add(new EnumeratedValue() { Documentation = new LocalizedText[] { new LocalizedText() { Locale = "en-us", Value = "Documentation" }, new LocalizedText() { Locale = "pl-pl", Value = "Dokumentacja" } }, Name = "Field2", Value = 1, }); _ret.Add(new EnumeratedValue() { Documentation = new LocalizedText[] { new LocalizedText() { Locale = "en-us", Value = "Documentation" }, new LocalizedText() { Locale = "pl-pl", Value = "Dokumentacja" } }, Name = "Field3", Value = 2, }); return _ret.ToArray(); } private static FieldType[] GetFields() { List _fields = new List(); _fields.Add(new FieldType() { Name = "FieldName1", TypeName = new System.Xml.XmlQualifiedName("Int32", @"http://opcfoundation.org/UA/"), SwitchOperandSpecified = false, SwitchValueSpecified = false }); _fields.Add(new FieldType() { Name = "FieldName2", TypeName = new System.Xml.XmlQualifiedName("Int32", @"http://opcfoundation.org/UA/"), SwitchOperandSpecified = false, SwitchValueSpecified = false }); return _fields.ToArray(); } internal static DataSetConfiguration[] GetDataSetConfigurations(AssociationRole associationRole) { return new DataSetConfiguration[] { new DataSetConfiguration() { AssociationName = AssociationConfigurationAlias, AssociationRole = associationRole, DataSet = GetMembers(), DataSymbolicName = "DataSymbolicName", Id = DefaultAssociationConfigurationId, RepositoryGroup = m_RepositoryGroup, InformationModelURI= AssociationConfigurationInformationModelURI, ConfigurationGuid = m_ConfigurationGuid, ConfigurationVersion = new ConfigurationVersionDataType() { MajorVersion = 0x0, MinorVersion=0x0 }, MaxBufferTime = 100, PublishingInterval = 1000, Root = new NodeDescriptor( ) { NodeIdentifier = new System.Xml.XmlQualifiedName("NodeDescriptor", "NodeDescriptorNS") } } }; } private static FieldMetaData[] GetMembers() { return new FieldMetaData[] { new FieldMetaData() { ProcessValueName = "Value1", TypeInformation = new UATypeInfo( BuiltInType.DateTime) { TypeName = new System.Xml.XmlQualifiedName("Value1Name", "Value1NS") } , SymbolicName = "Value1" }, new FieldMetaData() { ProcessValueName = "Value2", TypeInformation = new UATypeInfo( BuiltInType.Double) { TypeName = new System.Xml.XmlQualifiedName("Value2Name", "Value2NS") }, SymbolicName = "Value2" }, }; } #endregion #region Compare /// internal static void Compare(ConfigurationData source, ConfigurationData mirror) { Assert.AreEqual(source.DataSets.Length, mirror.DataSets.Length); CompareArrays(source.DataSets, mirror.DataSets, x => x.AssociationName, CompareDataSetConfiguration); Assert.AreEqual(source.MessageHandlers.Length, mirror.MessageHandlers.Length); Compare(source.MessageHandlers, mirror.MessageHandlers); CompareArrays(source.TypeDictionaries, mirror.TypeDictionaries, x => x.TargetNamespace, CompareTypeDictionary); } private static void CompareTypeDictionary(TypeDictionary source, TypeDictionary mirror) { CompareArrays(source.Items, mirror.Items, x => x.Name, CompareTypeDescription); Assert.AreEqual(source.TargetNamespace, mirror.TargetNamespace); } private static void CompareTypeDescription(TypeDescription source, TypeDescription mirror) { Assert.AreEqual(source.Name, mirror.Name); Assert.AreSame(source.GetType(), mirror.GetType()); if (source is StructuredType) Compare((StructuredType)source, (StructuredType)mirror); else Compare((EnumeratedType)source, (EnumeratedType)mirror); } private static void Compare(EnumeratedType source, EnumeratedType mirror) { Assert.AreEqual(source.Name, mirror.Name); CompareArrays(source.EnumeratedValues, mirror.EnumeratedValues, x => x.Name, CompareEnumeratedValue); } private static void CompareEnumeratedValue(EnumeratedValue source, EnumeratedValue mirror) { Assert.AreEqual(source.Name, mirror.Name); Assert.AreEqual(source.Value, mirror.Value); CompareArrays(source.Documentation, mirror.Documentation, x => x.Locale, (x, y) => Assert.AreEqual(x.Value, y.Value)); } private static void Compare(StructuredType source, StructuredType mirror) { Assert.AreEqual(source.StructureKind, mirror.StructureKind); CompareArrays(source.Field, mirror.Field, x => x.Name, CompareFieldType); } private static void CompareFieldType(FieldType source, FieldType mirror) { Assert.AreEqual(source.Name, mirror.Name); Assert.AreEqual(source.SwitchField, mirror.SwitchField); Assert.AreEqual(source.SwitchOperandSpecified, mirror.SwitchOperandSpecified); if (source.SwitchOperandSpecified) Assert.AreEqual(source.SwitchOperand, mirror.SwitchOperand); Assert.AreEqual(source.SwitchValueSpecified, mirror.SwitchValueSpecified); if (source.SwitchValueSpecified) Assert.AreEqual(source.SwitchValue, mirror.SwitchValue); Assert.AreEqual(source.TypeName, mirror.TypeName); } private static void CompareArrays(type[] source, type[] mirror, Func selector, Action compareItems) where type : class { if (source == null && mirror == null) return; Assert.IsNotNull(source); Assert.IsNotNull(mirror); Assert.AreEqual(source.Length, mirror.Length); if (source.Length == 0) return; Dictionary _dictionary = source.ToDictionary(selector); foreach (type _item in mirror) compareItems(_dictionary[selector(_item)], _item); } private static void Compare(MessageHandlerConfiguration[] source, MessageHandlerConfiguration[] mirror) { Assert.IsNotNull(source); Assert.IsNotNull(mirror); Dictionary _mirror2Dictionary = mirror.ToDictionary(x => x.Name); foreach (MessageHandlerConfiguration _configItem in source) Compare(_configItem, _mirror2Dictionary[_configItem.Name]); } private static void Compare(MessageHandlerConfiguration source, MessageHandlerConfiguration mirror) { switch (source.TransportRole) { case AssociationRole.Consumer: CompareMessageReaderConfiguration((MessageReaderConfiguration)source, (MessageReaderConfiguration)mirror); break; case AssociationRole.Producer: CompareMessageWriterConfiguration((MessageWriterConfiguration)source, (MessageWriterConfiguration)mirror); break; } } private static void CompareMessageWriterConfiguration(MessageWriterConfiguration source, MessageWriterConfiguration mirror) { Assert.IsNotNull(source); Assert.IsNotNull(mirror); Assert.AreEqual(source.TransportRole, mirror.TransportRole); Dictionary _mirror2Dictionary = mirror.ProducerAssociationConfigurations.ToDictionary(x => x.AssociationName); foreach (ProducerAssociationConfiguration _item in source.ProducerAssociationConfigurations) Compare(_item, _mirror2Dictionary[_item.AssociationName]); } private static void CompareMessageReaderConfiguration(MessageReaderConfiguration source, MessageReaderConfiguration mirror) { Assert.IsNotNull(source); Assert.IsNotNull(mirror); Assert.AreEqual(source.TransportRole, mirror.TransportRole); Assert.IsNotNull(mirror.ConsumerAssociationConfigurations); Dictionary _mirror2Dictionary = mirror.ConsumerAssociationConfigurations.ToDictionary(x => x.AssociationName); Assert.IsNotNull(source.ConsumerAssociationConfigurations); foreach (ConsumerAssociationConfiguration _item in source.ConsumerAssociationConfigurations) { Assert.IsTrue(_mirror2Dictionary.ContainsKey(_item.AssociationName)); Compare(_item, _mirror2Dictionary[_item.AssociationName]); } } private static void Compare(ProducerAssociationConfiguration source, ProducerAssociationConfiguration mirror) { Assert.IsNotNull(source); Assert.IsNotNull(mirror); Assert.AreEqual(source.AssociationName, mirror.AssociationName); Assert.AreEqual(source.DataSetWriterId, mirror.DataSetWriterId); Assert.AreEqual(source.PublisherId, mirror.PublisherId); } private static void Compare(ConsumerAssociationConfiguration source, ConsumerAssociationConfiguration mirror) { Assert.AreEqual(source.AssociationName, mirror.AssociationName); Assert.AreEqual(source.DataSetWriterId, mirror.DataSetWriterId); Assert.AreEqual(source.PublisherId, mirror.PublisherId); } private static void CompareDataSetConfiguration(DataSetConfiguration source, DataSetConfiguration mirror) { Assert.AreEqual(source.AssociationName, mirror.AssociationName); Assert.AreEqual(source.AssociationRole, mirror.AssociationRole); Assert.AreEqual(source.ConfigurationGuid, mirror.ConfigurationGuid); Compare(source.ConfigurationVersion, mirror.ConfigurationVersion); Assert.AreEqual(source.DataSymbolicName, mirror.DataSymbolicName); CompareArrays(source.DataSet, mirror.DataSet, x => x.SymbolicName, CompareFieldMetaData); Assert.AreEqual(source.Guid, mirror.Guid); Assert.AreEqual(source.Id, mirror.Id); Assert.AreEqual(source.InformationModelURI, mirror.InformationModelURI); Assert.AreEqual(source.MaxBufferTime, mirror.MaxBufferTime); Assert.AreEqual(source.PublishingInterval, mirror.PublishingInterval); Assert.AreEqual(source.RepositoryGroup, mirror.RepositoryGroup); Compare(source.Root, mirror.Root); } private static void Compare(ConfigurationVersionDataType source, ConfigurationVersionDataType mirror) { Assert.IsNotNull(source); Assert.IsNotNull(mirror); Assert.AreEqual(source.MajorVersion, mirror.MajorVersion); Assert.AreEqual(source.MinorVersion, mirror.MinorVersion); } private static void CompareFieldMetaData(FieldMetaData source, FieldMetaData mirror) { Assert.AreEqual(source.ProcessValueName, mirror.ProcessValueName); Assert.AreEqual(source.SymbolicName, mirror.SymbolicName); Compare(source.TypeInformation, mirror.TypeInformation); } private static void Compare(UATypeInfo source, UATypeInfo mirror) { Assert.IsNotNull(source); Assert.IsNotNull(mirror); CollectionAssert.AreEqual(source.ArrayDimensions, mirror.ArrayDimensions); Assert.AreEqual(source.BuiltInType, mirror.BuiltInType); Compare(source.TypeName, mirror.TypeName); Assert.AreEqual(source.ValueRank, mirror.ValueRank); } private static void Compare(XmlQualifiedName source, XmlQualifiedName mirror) { if (source == null && mirror == null) return; Assert.IsNotNull(source); Assert.IsNotNull(mirror); if (source.IsEmpty && mirror.IsEmpty) return; Assert.AreEqual(source.IsEmpty, mirror.IsEmpty); Assert.AreEqual(source.Name, mirror.Name); Assert.AreEqual(source.Namespace, mirror.Namespace); } private static void Compare(NodeDescriptor item1, NodeDescriptor item2) { if (item1 == null && item2 == null) return; Assert.IsNotNull(item1); Assert.IsNotNull(item2); Assert.AreEqual(item1.BindingDescription, item2.BindingDescription); Assert.AreEqual(item1.DataType, item2.DataType); Assert.AreEqual(item1.InstanceDeclaration, item2.InstanceDeclaration); Assert.AreEqual(item1.NodeClass, item2.NodeClass); Assert.AreEqual(item1.NodeIdentifier, item2.NodeIdentifier); Assert.AreEqual(item1.ToString(), item2.ToString()); } #endregion #region preconfigured settings private const string AssociationConfigurationAlias = "Association1"; private const string m_RepositoryGroup = "repositoryGroup"; private const string AssociationConfigurationDataSymbolicName = "DataSymbolicName"; private const string AssociationConfigurationInformationModelURI = @"https://github.com/mpostol/OPC-UA-OOI"; private static readonly Guid DefaultAssociationConfigurationId = new Guid("C1F53FFB-6552-4CCC-84C9-F847147CDC85"); private const UInt16 DefaultDataSetWriterId = 12345; private static Guid m_ConfigurationGuid = new Guid("D3DEA20A-1F65-4744-ABF5-3D8120960D7B"); #endregion } } ================================================ FILE: Configuration/Tests/NetworkingUnitTest/JSONDataContractSerializersUnitTest.cs ================================================  using Microsoft.VisualStudio.TestTools.UnitTesting; using System.IO; using UAOOI.Configuration.Networking.Serializers; namespace UAOOI.Configuration.Networking.UnitTest { [TestClass] public class JSONDataContractSerializersUnitTest { public JSONDataContractSerializersUnitTest() { // // TODO: Add constructor logic here // } private TestContext testContextInstance; /// ///Gets or sets the test context which provides ///information about and functionality for the current test run. /// public TestContext TestContext { get { return testContextInstance; } set { testContextInstance = value; } } #region Additional test attributes // // You can use the following additional attributes as you write your tests: // // Use ClassInitialize to run code before running the first test in the class // [ClassInitialize()] // public static void MyClassInitialize(TestContext testContext) { } // // Use ClassCleanup to run code after all tests in a class have run // [ClassCleanup()] // public static void MyClassCleanup() { } // // Use TestInitialize to run code before running each test // [TestInitialize()] // public void MyTestInitialize() { } // // Use TestCleanup to run code after each test has run // [TestCleanup()] // public void MyTestCleanup() { } // #endregion [TestMethod] [TestCategory("DataBindings_XmlSerializerTestMethod")] public void JSONSerializerTestMethod1() { // Create a new instance of the Person class and serialize it to an XML file. CSharpSelectedTypesEncoding _p1 = new CSharpSelectedTypesEncoding(); string _fileName = "DataContractExample.json"; JSONDataContractSerializers.Save(new FileInfo(_fileName), _p1, (x, y, z) => Assert.AreEqual(System.Diagnostics.TraceEventType.Verbose, x)); FileInfo _newFile = new FileInfo(_fileName); Assert.IsTrue(_newFile.Exists); CSharpSelectedTypesEncoding _p2 = JSONDataContractSerializers.Load (new FileInfo(_fileName), (x, y, z) => Assert.AreEqual(System.Diagnostics.TraceEventType.Verbose, x)); Assert.IsNotNull(_p2); _p1.AreEqual(_p2); } } } ================================================ FILE: Configuration/Tests/NetworkingUnitTest/NodeDescriptorUnitTest.cs ================================================ using Microsoft.VisualStudio.TestTools.UnitTesting; using System; using UAOOI.Configuration.Networking.Serialization; namespace UAOOI.Configuration.Networking.UnitTest { [TestClass] public class NodeDescriptorUnitTest { [TestMethod] public void CreatorTest() { NodeDescriptor _newDescriptor = new NodeDescriptor() { BindingDescription = "BindingDescription", DataType = new System.Xml.XmlQualifiedName("DataType", m_Namespace), InstanceDeclaration = false, NodeClass = InstanceNodeClassesEnum.Object, NodeIdentifier = new System.Xml.XmlQualifiedName("Name1", m_Namespace) }; IComparable _comparer = _newDescriptor.CreateWrapper(); Assert.AreEqual(0, _comparer.CompareTo(_comparer)); } [TestMethod] public void PrecedenceTestMethod() { NodeDescriptor _FirstNewDescriptor = new NodeDescriptor() { BindingDescription = "BindingDescription", DataType = new System.Xml.XmlQualifiedName("DataType", m_Namespace), InstanceDeclaration = false, NodeClass = InstanceNodeClassesEnum.Object, NodeIdentifier = new System.Xml.XmlQualifiedName("Name1", m_Namespace) }; NodeDescriptor _SecondNewDescriptor = new NodeDescriptor() { BindingDescription = "BindingDescription", DataType = new System.Xml.XmlQualifiedName("DataType", m_Namespace), InstanceDeclaration = false, NodeClass = InstanceNodeClassesEnum.Object, NodeIdentifier = new System.Xml.XmlQualifiedName("Name2", m_Namespace) }; IComparable _FirstComparer = _FirstNewDescriptor.CreateWrapper(); IComparable _SecondComparer = _SecondNewDescriptor.CreateWrapper(); Assert.IsTrue(_FirstComparer.CompareTo(_SecondComparer ) <0); Assert.IsTrue(_SecondComparer.CompareTo(_FirstComparer) > 0 ); } private readonly string m_Namespace = @"http://tempuri.org/TestData"; } } ================================================ FILE: Configuration/Tests/NetworkingUnitTest/PrepareTests.cs ================================================  using UAOOI.Common.Infrastructure.Diagnostic; namespace UAOOI.Configuration.Networking.UnitTest { public class PrepareTests { /// /// This method that contains code to be used before all tests in the assembly have run and to allocate resources obtained by the assembly. /// /// /// It is used top make sure tha assemblies containing dependency injection exports are copied to the working space used by the testing infrastructure. /// [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethod] [Microsoft.VisualStudio.TestTools.UnitTesting.AssemblyInitialize] public void Initialize() { //Makes sure UAOOI.Common.Infrastructure is in the test target folder. TraceSourceBase _newOne = new TraceSourceBase(); } } } ================================================ FILE: Configuration/Tests/NetworkingUnitTest/Properties/AssemblyInfo.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; [assembly: AssemblyTitle("UAOOI.Configuration.Networking.UnitTest")] [assembly: AssemblyDescription("UA Data Application Configuration UnitTests")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("mpostol commsvr.com")] [assembly: AssemblyProduct("UAOOI")] [assembly: AssemblyCopyright("Copyright commsvr.com © 2015")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] [assembly: ComVisible(false)] [assembly: Guid("81ddd889-3223-4f24-8b65-dd5c57886994")] [assembly: AssemblyVersion("4.0.1.*")] [assembly: AssemblyFileVersion("4.0.1.0")] ================================================ FILE: Configuration/Tests/NetworkingUnitTest/TestData/ConfigurationDataConsumer.json ================================================ {"DataSets":[{"AssociationRole":0,"AssociationName":"Association1","RepositoryGroup":"repositoryGroup","InformationModelURI":"https:\/\/github.com\/mpostol\/OPC-UA-OOI","DataSymbolicName":"DataSymbolicName","DataSet":[{"SymbolicName":"Value1","ProcessValueName":"Value1","TypeInformation":{"BuiltInType":13,"TypeName":"Value1Name:Value1NS","ValueRank":-1}},{"SymbolicName":"Value2","ProcessValueName":"Value2","TypeInformation":{"BuiltInType":11,"TypeName":"Value2Name:Value2NS","ValueRank":-1}}],"Guid":"c1f53ffb-6552-4ccc-84c9-f847147cdc85","Root":{"NodeIdentifier":"NodeDescriptor:NodeDescriptorNS"},"PublishingInterval":1000,"MaxBufferTime":100,"ConfigurationGuid":"d3dea20a-1f65-4744-abf5-3d8120960d7b","ConfigurationVersion":{"MajorVersion":0,"MinorVersion":0}}],"MessageHandlers":[{"__type":"MessageReaderConfiguration:http:\/\/commsvr.com\/UAOOI\/SemanticData\/UANetworking\/Configuration\/Serialization.xsd","Name":"UDP","Configuration":{"ChannelConfiguration":"4840,True,239.255.255.1,True"},"TransportRole":0,"ConsumerAssociationConfigurations":[{"AssociationName":"Association1","DataSetWriterId":12345,"PublisherId":"c1f53ffb-6552-4ccc-84c9-f847147cdc85"}]}],"TypeDictionaries":[{"Items":[{"__type":"StructuredType:http:\/\/commsvr.com\/UAOOI\/SemanticData\/UANetworking\/Configuration\/Serialization.xsd","Name":"StructuredTypeName","Field":[{"Name":"FieldName1","SwitchField":null,"SwitchOperand":0,"SwitchOperandSpecified":false,"SwitchValue":0,"SwitchValueSpecified":false,"TypeName":"Int32:http:\/\/opcfoundation.org\/UA\/"},{"Name":"FieldName2","SwitchField":null,"SwitchOperand":0,"SwitchOperandSpecified":false,"SwitchValue":0,"SwitchValueSpecified":false,"TypeName":"Int32:http:\/\/opcfoundation.org\/UA\/"}],"StructureKind":0},{"__type":"EnumeratedType:http:\/\/commsvr.com\/UAOOI\/SemanticData\/UANetworking\/Configuration\/Serialization.xsd","Name":"EnumeratedTypeName","EnumeratedValues":[{"Documentation":[{"Locale":"en-us","Value":"Documentation"},{"Locale":"pl-pl","Value":"Dokumentacja"}],"Name":"Field1","Value":0},{"Documentation":[{"Locale":"en-us","Value":"Documentation"},{"Locale":"pl-pl","Value":"Dokumentacja"}],"Name":"Field2","Value":1},{"Documentation":[{"Locale":"en-us","Value":"Documentation"},{"Locale":"pl-pl","Value":"Dokumentacja"}],"Name":"Field3","Value":2}]}],"TargetNamespace":"http:\/\/commsvr.com\/UAOOI\/Configuration\/Networking\/UnitTest\/TargetNamespace.xsd"}]} ================================================ FILE: Configuration/Tests/NetworkingUnitTest/TestData/ConfigurationDataConsumer.xml ================================================  Consumer Association1 repositoryGroup https://github.com/mpostol/OPC-UA-OOI DataSymbolicName Value1 Value1 DateTime d7p1:Value1Name -1 Value2 Value2 Double d7p1:Value2Name -1 c1f53ffb-6552-4ccc-84c9-f847147cdc85 d5p1:NodeDescriptor 1000 100 d3dea20a-1f65-4744-abf5-3d8120960d7b 0 0 UDP 4840,True,239.255.255.1,True Consumer Association1 12345 c1f53ffb-6552-4ccc-84c9-f847147cdc85 StructuredTypeName FieldName1 Equals false 0 false d8p1:Int32 FieldName2 Equals false 0 false d8p1:Int32 Structure EnumeratedTypeName en-us Documentation pl-pl Dokumentacja Field1 0 en-us Documentation pl-pl Dokumentacja Field2 1 en-us Documentation pl-pl Dokumentacja Field3 2 http://commsvr.com/UAOOI/Configuration/Networking/UnitTest/TargetNamespace.xsd ================================================ FILE: Configuration/Tests/NetworkingUnitTest/TestData/ConfigurationDataProducer.json ================================================ {"DataSets":[{"AssociationRole":1,"AssociationName":"Association1","RepositoryGroup":"repositoryGroup","InformationModelURI":"https:\/\/github.com\/mpostol\/OPC-UA-OOI","DataSymbolicName":"DataSymbolicName","DataSet":[{"SymbolicName":"Value1","ProcessValueName":"Value1","TypeInformation":{"BuiltInType":13,"TypeName":"Value1Name:Value1NS","ValueRank":-1}},{"SymbolicName":"Value2","ProcessValueName":"Value2","TypeInformation":{"BuiltInType":11,"TypeName":"Value2Name:Value2NS","ValueRank":-1}}],"Guid":"c1f53ffb-6552-4ccc-84c9-f847147cdc85","Root":{"NodeIdentifier":"NodeDescriptor:NodeDescriptorNS"},"PublishingInterval":1000,"MaxBufferTime":100,"ConfigurationGuid":"d3dea20a-1f65-4744-abf5-3d8120960d7b","ConfigurationVersion":{"MajorVersion":0,"MinorVersion":0}}],"MessageHandlers":[{"__type":"MessageWriterConfiguration:http:\/\/commsvr.com\/UAOOI\/SemanticData\/UANetworking\/Configuration\/Serialization.xsd","Name":"UDP","Configuration":{"ChannelConfiguration":"4840,localhost"},"TransportRole":1,"ProducerAssociationConfigurations":[{"AssociationName":"Association1","DataSetWriterId":12345,"PublisherId":"c1f53ffb-6552-4ccc-84c9-f847147cdc85","FieldEncoding":0}]}],"TypeDictionaries":[{"Items":[{"__type":"StructuredType:http:\/\/commsvr.com\/UAOOI\/SemanticData\/UANetworking\/Configuration\/Serialization.xsd","Name":"StructuredTypeName","Field":[{"Name":"FieldName1","SwitchField":null,"SwitchOperand":0,"SwitchOperandSpecified":false,"SwitchValue":0,"SwitchValueSpecified":false,"TypeName":"Int32:http:\/\/opcfoundation.org\/UA\/"},{"Name":"FieldName2","SwitchField":null,"SwitchOperand":0,"SwitchOperandSpecified":false,"SwitchValue":0,"SwitchValueSpecified":false,"TypeName":"Int32:http:\/\/opcfoundation.org\/UA\/"}],"StructureKind":0},{"__type":"EnumeratedType:http:\/\/commsvr.com\/UAOOI\/SemanticData\/UANetworking\/Configuration\/Serialization.xsd","Name":"EnumeratedTypeName","EnumeratedValues":[{"Documentation":[{"Locale":"en-us","Value":"Documentation"},{"Locale":"pl-pl","Value":"Dokumentacja"}],"Name":"Field1","Value":0},{"Documentation":[{"Locale":"en-us","Value":"Documentation"},{"Locale":"pl-pl","Value":"Dokumentacja"}],"Name":"Field2","Value":1},{"Documentation":[{"Locale":"en-us","Value":"Documentation"},{"Locale":"pl-pl","Value":"Dokumentacja"}],"Name":"Field3","Value":2}]}],"TargetNamespace":"http:\/\/commsvr.com\/UAOOI\/Configuration\/Networking\/UnitTest\/TargetNamespace.xsd"}]} ================================================ FILE: Configuration/Tests/NetworkingUnitTest/TestData/ConfigurationDataProducer.xml ================================================  Producer Association1 repositoryGroup https://github.com/mpostol/OPC-UA-OOI DataSymbolicName Value1 Value1 DateTime d7p1:Value1Name -1 Value2 Value2 Double d7p1:Value2Name -1 c1f53ffb-6552-4ccc-84c9-f847147cdc85 d5p1:NodeDescriptor 1000 100 d3dea20a-1f65-4744-abf5-3d8120960d7b 0 0 UDP 4840,localhost Producer Association1 12345 c1f53ffb-6552-4ccc-84c9-f847147cdc85 VariantFieldEncoding StructuredTypeName FieldName1 Equals false 0 false d8p1:Int32 FieldName2 Equals false 0 false d8p1:Int32 Structure EnumeratedTypeName en-us Documentation pl-pl Dokumentacja Field1 0 en-us Documentation pl-pl Dokumentacja Field2 1 en-us Documentation pl-pl Dokumentacja Field3 2 http://commsvr.com/UAOOI/Configuration/Networking/UnitTest/TargetNamespace.xsd ================================================ FILE: Configuration/Tests/NetworkingUnitTest/TestData/ConsumerConfigurationDataWrapper.xml ================================================  Consumer Association1 repositoryGroup https://github.com/mpostol/OPC-UA-OOI DataSymbolicName Value1 Value1 DateTime d8p1:Value1Name -1 Value2 Value2 Double d8p1:Value2Name -1 c1f53ffb-6552-4ccc-84c9-f847147cdc85 d6p1:NodeDescriptor 1000 100 d3dea20a-1f65-4744-abf5-3d8120960d7b 0 0 UDP 4840,True,239.255.255.1,True Consumer Association1 12345 c1f53ffb-6552-4ccc-84c9-f847147cdc85 StructuredTypeName FieldName1 Equals false 0 false d9p1:Int32 FieldName2 Equals false 0 false d9p1:Int32 Structure EnumeratedTypeName en-us Documentation pl-pl Dokumentacja Field1 0 en-us Documentation pl-pl Dokumentacja Field2 1 en-us Documentation pl-pl Dokumentacja Field3 2 http://commsvr.com/UAOOI/Configuration/Networking/UnitTest/TargetNamespace.xsd ================================================ FILE: Configuration/Tests/NetworkingUnitTest/TestData/CustomConfigurationData.xml ================================================  Consumer Association1 repositoryGroup https://github.com/mpostol/OPC-UA-OOI DataSymbolicName Value1 Value1 DateTime d7p1:Value1Name -1 Value2 Value2 Double d7p1:Value2Name -1 c1f53ffb-6552-4ccc-84c9-f847147cdc85 d5p1:NodeDescriptor 1000 100 d3dea20a-1f65-4744-abf5-3d8120960d7b 0 0 UDP 4840,True,239.255.255.1,True Consumer Association1 12345 c1f53ffb-6552-4ccc-84c9-f847147cdc85 StructuredTypeName FieldName1 Equals false 0 false d8p1:Int32 FieldName2 Equals false 0 false d8p1:Int32 Structure EnumeratedTypeName en-us Documentation pl-pl Dokumentacja Field1 0 en-us Documentation pl-pl Dokumentacja Field2 1 en-us Documentation pl-pl Dokumentacja Field3 2 http://commsvr.com/UAOOI/Configuration/Networking/UnitTest/TargetNamespace.xsd CustomProperty ================================================ FILE: Configuration/Tests/NetworkingUnitTest/UANetworkingConfigurationUnitTest.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2018, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using CommonServiceLocator; using Microsoft.VisualStudio.TestTools.UnitTesting; using System; using System.Diagnostics; using System.IO; using System.Runtime.Serialization; using UAOOI.Configuration.Networking.Serialization; using UAOOI.Configuration.Networking.UnitTest.Instrumentation; namespace UAOOI.Configuration.Networking.UnitTest { [TestClass] [DeploymentItem(@"TestData\", @"TestData\")] public class UANetworkingConfigurationUnitTest { #region TestClass [TestMethod] [TestCategory("Configuration_UANetworkingConfigurationUnitTest")] public void CreatorTest() { CommonServiceLocator.ServiceLocator.SetLocatorProvider(() => null); DerivedUANetworkingConfiguration _newConfiguration = new DerivedUANetworkingConfiguration(); Assert.IsNotNull(_newConfiguration); Assert.IsNull(_newConfiguration.ConfigurationData); Assert.IsNull(_newConfiguration.CurrentConfiguration); Assert.IsNotNull(_newConfiguration.TraceSource); } [TestMethod] [TestCategory("Configuration_UANetworkingConfigurationUnitTest")] public void CustomLoggerTraceSourceTest() { Logger _Logger = new Logger(); Container _container = new Container(new object[] { _Logger }); ServiceLocator.SetLocatorProvider(() => _container); Assert.IsTrue(ServiceLocator.IsLocationProviderSet); DerivedUANetworkingConfiguration _newConfiguration = new DerivedUANetworkingConfiguration(); Assert.AreSame(_Logger, _newConfiguration.TraceSource); Assert.AreEqual(0, _Logger.TraceLogList.Count); } [TestMethod] [TestCategory("Configuration_UANetworkingConfigurationUnitTest")] public void ReadConfigurationTest() { Logger _Logger = new Logger(); CommonServiceLocator.ServiceLocator.SetLocatorProvider(() => new Container(new object[] { _Logger })); DerivedUANetworkingConfiguration _newConfiguration = new DerivedUANetworkingConfiguration(); FileInfo _configFile = new FileInfo(@"TestData\ConfigurationDataConsumer.xml"); Assert.IsTrue(_configFile.Exists); bool _ConfigurationFileChanged = false; Assert.IsNull(_newConfiguration.ConfigurationData); _newConfiguration.OnModified += (x, y) => { _ConfigurationFileChanged = true; }; _newConfiguration.ReadConfiguration(_configFile); Assert.IsTrue(_ConfigurationFileChanged); Assert.IsNotNull(_newConfiguration.CurrentConfiguration); Assert.IsNotNull(_newConfiguration.ConfigurationData); Assert.AreEqual(1, _Logger.TraceLogList.Count); Logger.TraceLogEntity _logEntry = _Logger.TraceLogList[0]; Assert.AreEqual(TraceEventType.Verbose, _logEntry.EventType); Assert.AreEqual(52, _logEntry.Id); string _logMessage = $"Data = {_logEntry.Data}, EventType = {_logEntry.EventType} Id = {_logEntry.Id}"; Debug.WriteLine(_logMessage); } [TestMethod] [TestCategory("Configuration_UANetworkingConfigurationUnitTest")] public void OnChangedConfigurationTest() { Logger _Logger = new Logger(); CommonServiceLocator.ServiceLocator.SetLocatorProvider(() => new Container(new object[] { _Logger })); DerivedUANetworkingConfiguration _newConfiguration = new DerivedUANetworkingConfiguration(); FileInfo _configFile = new FileInfo(@"TestData\ConfigurationDataConsumer.xml"); Assert.IsTrue(_configFile.Exists); bool _ConfigurationFileChanged = false; Assert.IsNull(_newConfiguration.ConfigurationData); _newConfiguration.ReadConfiguration(_configFile); Assert.IsNotNull(_newConfiguration.ConfigurationData); _newConfiguration.OnModified += (x, y) => { _ConfigurationFileChanged = true; }; Assert.IsNotNull(_newConfiguration.ConfigurationData.OnChanged); _newConfiguration.ConfigurationData.OnChanged(); Assert.IsTrue(_ConfigurationFileChanged); Assert.AreEqual(1, _Logger.TraceLogList.Count); } [TestMethod] [TestCategory("Configuration_UANetworkingConfigurationUnitTest")] public void ReadSaveConfigurationTest() { Logger _Logger = new Logger(); CommonServiceLocator.ServiceLocator.SetLocatorProvider(() => new Container(new object[] { _Logger })); DerivedUANetworkingConfiguration _newConfiguration = new DerivedUANetworkingConfiguration(); FileInfo _configFile = new FileInfo(@"TestData\ConfigurationDataConsumer.xml"); Assert.IsNull(_newConfiguration.ConfigurationData); _newConfiguration.ReadConfiguration(_configFile); Assert.IsNotNull(_newConfiguration.ConfigurationData); //SaveConfiguration bool _ConfigurationFileChanged = false; _newConfiguration.OnModified += (x, y) => { _ConfigurationFileChanged = true; }; FileInfo _fi = new FileInfo(@"BleBle.txt"); Assert.IsFalse(_fi.Exists); _newConfiguration.SaveConfiguration(_fi); Assert.IsFalse(_ConfigurationFileChanged); Assert.IsNotNull(_newConfiguration.CurrentConfiguration); _fi.Refresh(); Assert.IsTrue(_fi.Exists); Assert.AreEqual(2, _Logger.TraceLogList.Count); } [TestMethod] [TestCategory("Configuration_UANetworkingConfigurationUnitTest")] [ExpectedException(typeof(ArgumentNullException))] public void CurrentConfigurationNullTest() { Logger _Logger = new Logger(); CommonServiceLocator.ServiceLocator.SetLocatorProvider(() => new Container(new object[] { _Logger })); UANetworkingConfigurationConfigurationDataWrapper _newConfiguration = new UANetworkingConfigurationConfigurationDataWrapper { CurrentConfiguration = null }; FileInfo _configFile = new FileInfo(@"TestData\ConfigurationDataWrapperNull.xml"); Assert.IsFalse(_configFile.Exists); _newConfiguration.SaveConfiguration(_configFile); } [TestMethod] [TestCategory("Configuration_UANetworkingConfigurationUnitTest")] [ExpectedException(typeof(SerializationException))] public void ConfigurationDataNullTest() { Logger _Logger = new Logger(); CommonServiceLocator.ServiceLocator.SetLocatorProvider(() => new Container(new object[] { _Logger })); UANetworkingConfigurationConfigurationDataWrapper _newConfiguration = new UANetworkingConfigurationConfigurationDataWrapper(); _newConfiguration.CurrentConfiguration.ConfigurationData = null; FileInfo _configFile = new FileInfo(@"TestData\ConfigurationDataWrapper.ConfigurationDataNull.xml"); Assert.IsFalse(_configFile.Exists); _newConfiguration.SaveConfiguration(_configFile); } [TestMethod] [TestCategory("Configuration_UANetworkingConfigurationUnitTest")] public void ReadSaveConfigurationDataWrapperTest() { Logger _Logger = new Logger(); CommonServiceLocator.ServiceLocator.SetLocatorProvider(() => new Container(new object[] { _Logger })); UANetworkingConfigurationConfigurationDataWrapper _newConfiguration = new UANetworkingConfigurationConfigurationDataWrapper(); Assert.AreEqual(0, _newConfiguration.CurrentConfiguration.OnLoadedCount); FileInfo _configFile = new FileInfo(@"TestData\ConfigurationDataWrapper.xml"); Assert.IsFalse(_configFile.Exists); Assert.AreEqual(0, _newConfiguration.CurrentConfiguration.OnSavingCount); _newConfiguration.SaveConfiguration(_configFile); //on SaveConfiguration tests Assert.AreEqual(1, _newConfiguration.CurrentConfiguration.OnSavingCount); Assert.IsNotNull(_newConfiguration.CurrentConfiguration); _configFile.Refresh(); Assert.IsTrue(_configFile.Exists); Assert.IsNotNull(_newConfiguration.ConfigurationData); Assert.AreEqual(0, _newConfiguration.CurrentConfiguration.OnLoadedCount); //prepare ReadConfiguration bool _ConfigurationFileChanged = false; _newConfiguration.OnModified += (x, y) => { _ConfigurationFileChanged = true; }; _newConfiguration.ReadConfiguration(_configFile); //on ReadConfiguration test Assert.IsTrue(_ConfigurationFileChanged); Assert.IsNotNull(_newConfiguration.CurrentConfiguration); Assert.IsNotNull(_newConfiguration.ConfigurationData); Assert.AreEqual(1, _newConfiguration.CurrentConfiguration.OnLoadedCount); Assert.AreEqual(0, _newConfiguration.CurrentConfiguration.OnSavingCount); Assert.AreEqual(2, _Logger.TraceLogList.Count); //Assert.Fail(); //To get created file the test must fail. } [TestMethod] public void CustomConfigurationDataTest() { Logger _Logger = new Logger(); CommonServiceLocator.ServiceLocator.SetLocatorProvider(() => new Container(new object[] { _Logger })); UANetworkingConfigurationCustomConfigurationDataFixture _newConfiguration = UANetworkingConfigurationCustomConfigurationDataFixture.GetUANetworkingConfigurationFixture(); Assert.IsNotNull(_newConfiguration.CurrentConfiguration); Assert.AreEqual(0, _newConfiguration.CurrentConfiguration.OnLoadedCount); FileInfo _configFile = new FileInfo(@"TestData\CustomConfigurationData.new.xml"); Assert.IsFalse(_configFile.Exists); Assert.AreEqual(0, _newConfiguration.CurrentConfiguration.OnSavingCount); _newConfiguration.SaveConfiguration(_configFile); //on SaveConfiguration tests Assert.AreEqual(1, _newConfiguration.CurrentConfiguration.OnSavingCount); Assert.IsNotNull(_newConfiguration.CurrentConfiguration); _configFile.Refresh(); Assert.IsTrue(_configFile.Exists); Assert.IsNotNull(_newConfiguration.ConfigurationData); Assert.AreEqual(0, _newConfiguration.CurrentConfiguration.OnLoadedCount); //prepare ReadConfiguration bool _ConfigurationFileChanged = false; _newConfiguration.OnModified += (x, y) => { _ConfigurationFileChanged = true; }; _newConfiguration.ReadConfiguration(_configFile); //on ReadConfiguration test Assert.IsTrue(_ConfigurationFileChanged); Assert.IsNotNull(_newConfiguration.CurrentConfiguration); Assert.IsNotNull(_newConfiguration.ConfigurationData); Assert.AreEqual(1, _newConfiguration.CurrentConfiguration.OnLoadedCount); Assert.AreEqual(0, _newConfiguration.CurrentConfiguration.OnSavingCount); Assert.AreEqual(2, _Logger.TraceLogList.Count); //Assert.Fail(); //To get created file the test must fail. } #endregion #region private private class UANetworkingConfigurationConfigurationDataWrapper : UANetworkingConfiguration { public UANetworkingConfigurationConfigurationDataWrapper() { this.CurrentConfiguration = new ConfigurationDataWrapper(); } } private class UANetworkingConfigurationCustomConfigurationDataFixture : UANetworkingConfiguration { internal static UANetworkingConfigurationCustomConfigurationDataFixture GetUANetworkingConfigurationFixture() { UANetworkingConfigurationCustomConfigurationDataFixture _item = new UANetworkingConfigurationCustomConfigurationDataFixture(); _item.CurrentConfiguration = CustomConfigurationData.LoadConsumer(); return _item; } } private class DerivedUANetworkingConfiguration : UANetworkingConfiguration { public DerivedUANetworkingConfiguration() { CommonServiceLocator.ServiceLocator.SetLocatorProvider(() => null); } } #endregion } } ================================================ FILE: Configuration/Tests/NetworkingUnitTest/UATypeInfoUnitTest.cs ================================================ using System; using Microsoft.VisualStudio.TestTools.UnitTesting; using UAOOI.Configuration.Networking.Serialization; namespace UAOOI.Configuration.Networking.UnitTest { [TestClass] public class UATypeInfoUnitTest { [TestMethod] [ExpectedException(typeof(ArgumentOutOfRangeException))] public void CreatorADNullTestMethod1() { new UATypeInfo(BuiltInType.Byte, 0, null); } [TestMethod] [ExpectedException(typeof(ArgumentOutOfRangeException))] public void CreatorADLengthTestMethod1() { new UATypeInfo(BuiltInType.Byte, 0, new int[] { }); } [TestMethod] public void CreatorTestMethod1() { Assert.IsNotNull(new UATypeInfo(BuiltInType.Byte, 0, new int[] { 1, 2, 3 })); } } } ================================================ FILE: Configuration/Tests/NetworkingUnitTest/XmlDataContractSerializersUnitTest.cs ================================================  using Microsoft.VisualStudio.TestTools.UnitTesting; using System.IO; using UAOOI.Configuration.Networking.Serializers; namespace UAOOI.Configuration.Networking.UnitTest { /// /// Summary description for DataContractSerializersUnitTest /// [TestClass] public class XmlDataContractSerializersUnitTest { public XmlDataContractSerializersUnitTest() { // // TODO: Add constructor logic here // } private TestContext testContextInstance; /// ///Gets or sets the test context which provides ///information about and functionality for the current test run. /// public TestContext TestContext { get { return testContextInstance; } set { testContextInstance = value; } } #region Additional test attributes // // You can use the following additional attributes as you write your tests: // // Use ClassInitialize to run code before running the first test in the class // [ClassInitialize()] // public static void MyClassInitialize(TestContext testContext) { } // // Use ClassCleanup to run code after all tests in a class have run // [ClassCleanup()] // public static void MyClassCleanup() { } // // Use TestInitialize to run code before running each test // [TestInitialize()] // public void MyTestInitialize() { } // // Use TestCleanup to run code after each test has run // [TestCleanup()] // public void MyTestCleanup() { } // #endregion [TestMethod] [TestCategory("DataBindings_XmlSerializerTestMethod")] public void XmlSerializerTestMethod() { // Create a new instance of the Person class and serialize it to an XML file. CSharpSelectedTypesEncoding _p1 = new CSharpSelectedTypesEncoding(); string _fileName = "DataContractExample.xml"; XmlDataContractSerializers.Save(new FileInfo(_fileName), _p1, (x, y, z) => Assert.AreEqual(System.Diagnostics.TraceEventType.Verbose, x)); FileInfo _newFile = new FileInfo(_fileName); Assert.IsTrue(_newFile.Exists); CSharpSelectedTypesEncoding _p2 = XmlDataContractSerializers.Load(new FileInfo(_fileName), (x, y, z) => Assert.AreEqual(System.Diagnostics.TraceEventType.Verbose, x)); Assert.IsNotNull(_p2); _p1.AreEqual(_p2); } } } ================================================ FILE: Configuration/Tests/NetworkingUnitTest/packages.config ================================================  ================================================ FILE: Configuration/Tests/NetworkingUpgradeUnitTest/Configuration.Networking.Upgrade.UnitTest.csproj ================================================  Debug AnyCPU {F2ED1AC0-2F78-4506-ADFD-0BC88A6C616D} Library Properties UAOOI.Configuration.Networking.Upgrade.UnitTest UAOOI.Configuration.Networking.Upgrade.UnitTest v4.7.2 512 {3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} 10.0 $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) $(ProgramFiles)\Common Files\microsoft shared\VSTT\$(VisualStudioVersion)\UITestExtensionPackages False UnitTest true full false bin\Debug\ DEBUG;TRACE prompt 4 IDE0001 pdbonly true bin\Release\ TRACE prompt 4 true OPCUAOOIKey.snk ..\..\..\packages\System.Diagnostics.TraceSource.4.3.0\lib\net46\System.Diagnostics.TraceSource.dll True True ..\..\..\packages\UAOOI.Common.Infrastructure.6.4.7\lib\netstandard2.0\UAOOI.Common.Infrastructure.dll False PreserveNewest PreserveNewest {bebe131a-c931-4c2c-9f9e-ed0d0b75df26} Configuration.Networking.Upgrade {e28e0880-03aa-4d1b-a820-41b04e766019} Configuration.Networking False False False False ================================================ FILE: Configuration/Tests/NetworkingUpgradeUnitTest/InitializeTests.cs ================================================ using Microsoft.VisualStudio.TestTools.UnitTesting; using System.IO; namespace UAOOI.Configuration.Networking.Upgrade.UnitTest { [TestClass] [DeploymentItem(@"TestingData\", @"TestingData\")] public class AssemblyInitialize { [AssemblyInitialize] public static void Initialize(TestContext context) { } [TestMethod] public void TestingDataTestMethod() { FileInfo _testFile = new FileInfo(@"TestingData\ConfigurationDataConsumer.xml"); Assert.IsTrue(_testFile.Exists); } } } ================================================ FILE: Configuration/Tests/NetworkingUpgradeUnitTest/Properties/AssemblyInfo.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System.Reflection; using System.Runtime.InteropServices; [assembly: AssemblyTitle("UAOOI.Configuration.Networking.Upgrade.UnitTest")] [assembly: AssemblyDescription("Unit tests aimed to upgrade obsolete configuration")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("commsvr.com")] [assembly: AssemblyProduct("NetworkingUpgradeUnitTest")] [assembly: AssemblyCopyright("Copyright © mpostol 2019")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] [assembly: Guid("f2ed1ac0-2f78-4506-adfd-0bc88a6c616d")] [assembly: AssemblyVersion("4.0.1.*")] [assembly: AssemblyFileVersion("4.0.1.0")] ================================================ FILE: Configuration/Tests/NetworkingUpgradeUnitTest/Re_l1_00_16UnitTest.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2018, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using Microsoft.VisualStudio.TestTools.UnitTesting; using System.IO; using UAOOI.Common.Infrastructure.Diagnostic; using UAOOI.Configuration.Networking.Serializers; using UAOOI.Configuration.Networking.Upgrade.Re_l1_00_16; using NewConfigurationData = UAOOI.Configuration.Networking.Serialization.ConfigurationData; namespace UAOOI.Configuration.Networking.Upgrade.UnitTest { [TestClass] public class Re_l1_00_16UnitTest { [TestMethod] [DeploymentItem(@"TestingData\", @"TestingData\")] public void AfterCreationStateTest() { ConfigurationData _newInstance = new ConfigurationData(); Assert.IsNull(_newInstance.DataSets); Assert.IsNull(_newInstance.MessageHandlers); } [TestMethod] public void ReadXmlTestMethod() { NewMethod(@"TestingData\ConfigurationDataConsumer.xml", @"NewConfigurationDataConsumer.xml"); NewMethod(@"TestingData\ConfigurationDataProducer.xml", @"NewConfigurationDataProducer.xml"); } private void NewMethod(string inFileName, string outFileName) { TraceSourceBase _trace = new TraceSourceBase(); FileInfo _file2Covert = new FileInfo(inFileName); Assert.IsTrue(_file2Covert.Exists); ConfigurationData _oldConfiguration = XmlDataContractSerializers.Load(_file2Covert, _trace.TraceData); Assert.IsNotNull(_oldConfiguration); NewConfigurationData _newConfiguration = Import(_oldConfiguration); Assert.IsNotNull(_newConfiguration); FileInfo _file2Save = new FileInfo(outFileName); XmlDataContractSerializers.Save(_file2Save, _newConfiguration, _trace.TraceData); } private NewConfigurationData Import(ConfigurationData _oldConfiguration) { NewConfigurationData _ret = new NewConfigurationData() { }; return _ret; } } } ================================================ FILE: Configuration/Tests/NetworkingUpgradeUnitTest/TestingData/ConfigurationDataConsumer.xml ================================================  Consumer Simple repositoryGroup https://github.com/mpostol/OPC-UA-OOI DataSymbolicName BoolToggle BoolToggle Boolean -1 ValueInt32 ValueInt32 Int32 -1 Int32Fast Int32Fast Int32 -1 ValueDateTime ValueDateTime DateTime -1 c1f53ffb-6552-4ccc-84c9-f847147cdc85 d5p1:NodeDescriptor 1000 100 1893991b-517c-4a5f-b8a4-1633d2a101c8 1 0 Consumer AllTypes repositoryGroup https://github.com/mpostol/OPC-UA-OOI DataSymbolicName ValueBoolean ValueBoolean Boolean -1 ValueByte ValueByte Byte -1 ValueInt16 ValueInt16 Int16 -1 ValueInt32 ValueInt32 Int32 -1 ValueInt64 ValueInt64 Int64 -1 ValueSByte ValueSByte SByte -1 ValueUInt16 ValueUInt16 UInt16 -1 ValueUInt32 ValueUInt32 UInt32 -1 ValueUInt64 ValueUInt64 UInt64 -1 ValueFloat ValueFloat Float -1 ValueDouble ValueDouble Double -1 ValueString ValueString String -1 ValueByteString ValueByteString ByteString -1 ValueGuid ValueGuid Guid -1 ValueDateTime ValueDateTime DateTime -1 UInt32Array UInt32Array UInt32 1 c1f53ffb-6552-4ccc-84c9-f847147cdc85 d5p1:NodeDescriptor 1000 100 D79E3F84-48AB-48A2-9055-DF589D19E824 1 0 Consumer MassTest repositoryGroup https://github.com/mpostol/OPC-UA-OOI DataSymbolicName MassTest_00 MassTest_00 UInt32 -1 MassTest_01 MassTest_01 UInt32 -1 MassTest_02 MassTest_02 UInt32 -1 MassTest_03 MassTest_03 UInt32 -1 MassTest_04 MassTest_04 UInt32 -1 MassTest_05 MassTest_05 UInt32 -1 MassTest_06 MassTest_06 UInt32 -1 MassTest_07 MassTest_07 UInt32 -1 MassTest_08 MassTest_08 UInt32 -1 MassTest_09 MassTest_09 UInt32 -1 MassTest_10 MassTest_10 UInt32 -1 MassTest_11 MassTest_11 UInt32 -1 MassTest_12 MassTest_12 UInt32 -1 MassTest_13 MassTest_13 UInt32 -1 MassTest_14 MassTest_14 UInt32 -1 MassTest_15 MassTest_15 UInt32 -1 MassTest_16 MassTest_16 UInt32 -1 MassTest_17 MassTest_17 UInt32 -1 MassTest_18 MassTest_18 UInt32 -1 MassTest_19 MassTest_19 UInt32 -1 MassTest_20 MassTest_20 UInt32 -1 MassTest_21 MassTest_21 UInt32 -1 MassTest_22 MassTest_22 UInt32 -1 MassTest_23 MassTest_23 UInt32 -1 MassTest_24 MassTest_24 UInt32 -1 MassTest_25 MassTest_25 UInt32 -1 MassTest_26 MassTest_26 UInt32 -1 MassTest_27 MassTest_27 UInt32 -1 MassTest_28 MassTest_28 UInt32 -1 MassTest_29 MassTest_29 UInt32 -1 MassTest_30 MassTest_30 UInt32 -1 MassTest_31 MassTest_31 UInt32 -1 MassTest_32 MassTest_32 UInt32 -1 MassTest_33 MassTest_33 UInt32 -1 MassTest_34 MassTest_34 UInt32 -1 MassTest_35 MassTest_35 UInt32 -1 MassTest_36 MassTest_36 UInt32 -1 MassTest_37 MassTest_37 UInt32 -1 MassTest_38 MassTest_38 UInt32 -1 MassTest_39 MassTest_39 UInt32 -1 MassTest_40 MassTest_40 UInt32 -1 MassTest_41 MassTest_41 UInt32 -1 MassTest_42 MassTest_42 UInt32 -1 MassTest_43 MassTest_43 UInt32 -1 MassTest_44 MassTest_44 UInt32 -1 MassTest_45 MassTest_45 UInt32 -1 MassTest_46 MassTest_46 UInt32 -1 MassTest_47 MassTest_47 UInt32 -1 MassTest_48 MassTest_48 UInt32 -1 MassTest_49 MassTest_49 UInt32 -1 MassTest_50 MassTest_50 UInt32 -1 MassTest_51 MassTest_51 UInt32 -1 MassTest_52 MassTest_52 UInt32 -1 MassTest_53 MassTest_53 UInt32 -1 MassTest_54 MassTest_54 UInt32 -1 MassTest_55 MassTest_55 UInt32 -1 MassTest_56 MassTest_56 UInt32 -1 MassTest_57 MassTest_57 UInt32 -1 MassTest_58 MassTest_58 UInt32 -1 MassTest_59 MassTest_59 UInt32 -1 MassTest_60 MassTest_60 UInt32 -1 MassTest_61 MassTest_61 UInt32 -1 MassTest_62 MassTest_62 UInt32 -1 MassTest_63 MassTest_63 UInt32 -1 MassTest_64 MassTest_64 UInt32 -1 MassTest_65 MassTest_65 UInt32 -1 MassTest_66 MassTest_66 UInt32 -1 MassTest_67 MassTest_67 UInt32 -1 MassTest_68 MassTest_68 UInt32 -1 MassTest_69 MassTest_69 UInt32 -1 MassTest_70 MassTest_70 UInt32 -1 MassTest_71 MassTest_71 UInt32 -1 MassTest_72 MassTest_72 UInt32 -1 MassTest_73 MassTest_73 UInt32 -1 MassTest_74 MassTest_74 UInt32 -1 MassTest_75 MassTest_75 UInt32 -1 MassTest_76 MassTest_76 UInt32 -1 MassTest_77 MassTest_77 UInt32 -1 MassTest_78 MassTest_78 UInt32 -1 MassTest_79 MassTest_79 UInt32 -1 MassTest_80 MassTest_80 UInt32 -1 MassTest_81 MassTest_81 UInt32 -1 MassTest_82 MassTest_82 UInt32 -1 MassTest_83 MassTest_83 UInt32 -1 MassTest_84 MassTest_84 UInt32 -1 MassTest_85 MassTest_85 UInt32 -1 MassTest_86 MassTest_86 UInt32 -1 MassTest_87 MassTest_87 UInt32 -1 MassTest_88 MassTest_88 UInt32 -1 MassTest_89 MassTest_89 UInt32 -1 MassTest_90 MassTest_90 UInt32 -1 MassTest_91 MassTest_91 UInt32 -1 MassTest_92 MassTest_92 UInt32 -1 MassTest_93 MassTest_93 UInt32 -1 MassTest_94 MassTest_94 UInt32 -1 MassTest_95 MassTest_95 UInt32 -1 MassTest_96 MassTest_96 UInt32 -1 MassTest_97 MassTest_97 UInt32 -1 MassTest_98 MassTest_98 UInt32 -1 MassTest_99 MassTest_99 UInt32 -1 c1f53ffb-6552-4ccc-84c9-f847147cdc85 d5p1:NodeDescriptor 1000 100 C67E4D73-F46E-499C-991F-F86D0E1BEB00 1 0 UDP Consumer Simple 1 d80d81dd-96e6-4560-850e-154f9181307c AllTypes 2 d80d81dd-96e6-4560-850e-154f9181307c MassTest 3 d80d81dd-96e6-4560-850e-154f9181307c ================================================ FILE: Configuration/Tests/NetworkingUpgradeUnitTest/TestingData/ConfigurationDataProducer.xml ================================================  Producer Simple repositoryGroup https://github.com/mpostol/OPC-UA-OOI DataSymbolicName BoolToggle BoolToggle Boolean -1 Int32Normal Int32Normal Int32 -1 Int32Fast Int32Fast Int32 -1 SimpleValueDateTime SimpleValueDateTime DateTime -1 c1f53ffb-6552-4ccc-84c9-f847147cdc85 d5p1:NodeDescriptor 1000 100 1893991b-517c-4a5f-b8a4-1633d2a101c8 1 0 Producer AllTypes repositoryGroup https://github.com/mpostol/OPC-UA-OOI DataSymbolicName ValueBoolean ValueBoolean Boolean -1 ValueByte ValueByte Byte -1 ValueInt16 ValueInt16 Int16 -1 ValueInt32 ValueInt32 Int32 -1 ValueInt64 ValueInt64 Int64 -1 ValueSByte ValueSByte SByte -1 ValueUInt16 ValueUInt16 UInt16 -1 ValueUInt32 ValueUInt32 UInt32 -1 ValueUInt64 ValueUInt64 UInt64 -1 ValueFloat ValueFloat Float -1 ValueDouble ValueDouble Double -1 ValueString ValueString String -1 ValueByteString ValueByteString ByteString -1 ValueGuid ValueGuid Guid -1 ValueDateTime ValueDateTime DateTime -1 UInt32Array UInt32Array UInt32 1 c1f53ffb-6552-4ccc-84c9-f847147cdc85 d5p1:NodeDescriptor 1000 100 D79E3F84-48AB-48A2-9055-DF589D19E824 1 0 Producer MassTest repositoryGroup https://github.com/mpostol/OPC-UA-OOI DataSymbolicName MassTest_00 MassTest_00 UInt32 -1 MassTest_01 MassTest_01 UInt32 -1 MassTest_02 MassTest_02 UInt32 -1 MassTest_03 MassTest_03 UInt32 -1 MassTest_04 MassTest_04 UInt32 -1 MassTest_05 MassTest_05 UInt32 -1 MassTest_06 MassTest_06 UInt32 -1 MassTest_07 MassTest_07 UInt32 -1 MassTest_08 MassTest_08 UInt32 -1 MassTest_09 MassTest_09 UInt32 -1 MassTest_10 MassTest_10 UInt32 -1 MassTest_11 MassTest_11 UInt32 -1 MassTest_12 MassTest_12 UInt32 -1 MassTest_13 MassTest_13 UInt32 -1 MassTest_14 MassTest_14 UInt32 -1 MassTest_15 MassTest_15 UInt32 -1 MassTest_16 MassTest_16 UInt32 -1 MassTest_17 MassTest_17 UInt32 -1 MassTest_18 MassTest_18 UInt32 -1 MassTest_19 MassTest_19 UInt32 -1 MassTest_20 MassTest_20 UInt32 -1 MassTest_21 MassTest_21 UInt32 -1 MassTest_22 MassTest_22 UInt32 -1 MassTest_23 MassTest_23 UInt32 -1 MassTest_24 MassTest_24 UInt32 -1 MassTest_25 MassTest_25 UInt32 -1 MassTest_26 MassTest_26 UInt32 -1 MassTest_27 MassTest_27 UInt32 -1 MassTest_28 MassTest_28 UInt32 -1 MassTest_29 MassTest_29 UInt32 -1 MassTest_30 MassTest_30 UInt32 -1 MassTest_31 MassTest_31 UInt32 -1 MassTest_32 MassTest_32 UInt32 -1 MassTest_33 MassTest_33 UInt32 -1 MassTest_34 MassTest_34 UInt32 -1 MassTest_35 MassTest_35 UInt32 -1 MassTest_36 MassTest_36 UInt32 -1 MassTest_37 MassTest_37 UInt32 -1 MassTest_38 MassTest_38 UInt32 -1 MassTest_39 MassTest_39 UInt32 -1 MassTest_40 MassTest_40 UInt32 -1 MassTest_41 MassTest_41 UInt32 -1 MassTest_42 MassTest_42 UInt32 -1 MassTest_43 MassTest_43 UInt32 -1 MassTest_44 MassTest_44 UInt32 -1 MassTest_45 MassTest_45 UInt32 -1 MassTest_46 MassTest_46 UInt32 -1 MassTest_47 MassTest_47 UInt32 -1 MassTest_48 MassTest_48 UInt32 -1 MassTest_49 MassTest_49 UInt32 -1 MassTest_50 MassTest_50 UInt32 -1 MassTest_51 MassTest_51 UInt32 -1 MassTest_52 MassTest_52 UInt32 -1 MassTest_53 MassTest_53 UInt32 -1 MassTest_54 MassTest_54 UInt32 -1 MassTest_55 MassTest_55 UInt32 -1 MassTest_56 MassTest_56 UInt32 -1 MassTest_57 MassTest_57 UInt32 -1 MassTest_58 MassTest_58 UInt32 -1 MassTest_59 MassTest_59 UInt32 -1 MassTest_60 MassTest_60 UInt32 -1 MassTest_61 MassTest_61 UInt32 -1 MassTest_62 MassTest_62 UInt32 -1 MassTest_63 MassTest_63 UInt32 -1 MassTest_64 MassTest_64 UInt32 -1 MassTest_65 MassTest_65 UInt32 -1 MassTest_66 MassTest_66 UInt32 -1 MassTest_67 MassTest_67 UInt32 -1 MassTest_68 MassTest_68 UInt32 -1 MassTest_69 MassTest_69 UInt32 -1 MassTest_70 MassTest_70 UInt32 -1 MassTest_71 MassTest_71 UInt32 -1 MassTest_72 MassTest_72 UInt32 -1 MassTest_73 MassTest_73 UInt32 -1 MassTest_74 MassTest_74 UInt32 -1 MassTest_75 MassTest_75 UInt32 -1 MassTest_76 MassTest_76 UInt32 -1 MassTest_77 MassTest_77 UInt32 -1 MassTest_78 MassTest_78 UInt32 -1 MassTest_79 MassTest_79 UInt32 -1 MassTest_80 MassTest_80 UInt32 -1 MassTest_81 MassTest_81 UInt32 -1 MassTest_82 MassTest_82 UInt32 -1 MassTest_83 MassTest_83 UInt32 -1 MassTest_84 MassTest_84 UInt32 -1 MassTest_85 MassTest_85 UInt32 -1 MassTest_86 MassTest_86 UInt32 -1 MassTest_87 MassTest_87 UInt32 -1 MassTest_88 MassTest_88 UInt32 -1 MassTest_89 MassTest_89 UInt32 -1 MassTest_90 MassTest_90 UInt32 -1 MassTest_91 MassTest_91 UInt32 -1 MassTest_92 MassTest_92 UInt32 -1 MassTest_93 MassTest_93 UInt32 -1 MassTest_94 MassTest_94 UInt32 -1 MassTest_95 MassTest_95 UInt32 -1 MassTest_96 MassTest_96 UInt32 -1 MassTest_97 MassTest_97 UInt32 -1 MassTest_98 MassTest_98 UInt32 -1 MassTest_99 MassTest_99 UInt32 -1 c1f53ffb-6552-4ccc-84c9-f847147cdc85 d5p1:NodeDescriptor 1000 100 C67E4D73-F46E-499C-991F-F86D0E1BEB00 1 0 UDP Producer Simple 1 VariantFieldEncoding AllTypes 2 VariantFieldEncoding MassTest 3 VariantFieldEncoding ================================================ FILE: Configuration/Tests/NetworkingUpgradeUnitTest/packages.config ================================================  ================================================ FILE: Configuration.playlist ================================================ ================================================ FILE: DataDiscovery/DiscoveryServices/DataDiscovery.DiscoveryServices.csproj ================================================  netstandard2.0 UAOOI.DataDiscovery.DiscoveryServices 4.0.1 MPostol commsvr.com Object Oriented Internet OPC UA Object Oriented Internet (UAOOI) UAOOI.DataDiscovery.DiscoveryServices library is dedicated to support global data discovery services for any application based on OPC UA Information Model. It is part of the project supporting OPC UA Object Oriented Internet paradigm. Copyright MPostol (c) 2018 https://github.com/mpostol/OPC-UA-OOI/blob/master/license.md https://commsvr.gitbook.io/ooi https://github.com/mpostol/OPC-UA-OOI GitHub Semantic Data, Object Oriented Internet, OPC UA, true OPCUAOOIKey.snk UAOOI.DataDiscovery.DiscoveryServices UAOOI.DataDiscovery.DiscoveryServices 4.0.1.1 ================================================ FILE: DataDiscovery/DiscoveryServices/DataDiscoveryServices.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2021, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ using System; using System.Diagnostics; using System.IO; using System.Net.Http; using System.Threading.Tasks; using System.Xml.Serialization; using UAOOI.DataDiscovery.DiscoveryServices.Models; namespace UAOOI.DataDiscovery.DiscoveryServices { /// /// Class DataDiscoveryServices - provides functionality supporting Global Data Discovery resolution. /// public class DataDiscoveryServices : IDisposable { #region public API /// /// Resolves address and reads the record as an asynchronous operation. /// /// The model URI. /// The root zone URL where the resolving process shall start. /// encapsulating tracing functionality . /// Task{DomainModel}. /// Too many iteration in the resolving process. public async Task ResolveDomainModelAsync(Uri modelUri, Uri rootZoneUrl, Action log) { log($"Starting resolving address of the domain model descriptor for the model Uri {modelUri}", TraceEventType.Verbose, Priority.Low); DomainDescriptor lastDomainDescriptor = new DomainDescriptor() { NextStepRecordType = RecordType.DomainDescriptor }; Uri nextUri = rootZoneUrl; int iteration = 0; do { iteration++; log($"Resolving address iteration {iteration} address: {nextUri}", TraceEventType.Verbose, Priority.Low); if (iteration > 16) throw new InvalidOperationException("Too many iteration in the resolving process."); lastDomainDescriptor = await GetHTTPResponseAsync(nextUri, log); nextUri = lastDomainDescriptor.ResolveUri(modelUri); } while (lastDomainDescriptor.NextStepRecordType == RecordType.DomainDescriptor); log($"Reading DomainModel at: {nextUri}", TraceEventType.Verbose, Priority.Low); Task _DomainModelTask = GetHTTPResponseAsync(nextUri, log); DomainModel _model = await _DomainModelTask; _model.UniversalDiscoveryServiceLocator = nextUri.ToString(); log($"Successfully received and decoded the requested DomainModel record: {nextUri}", TraceEventType.Verbose, Priority.Low); return _model; } #endregion public API #region IDisposable Support private bool disposedValue = false; // To detect redundant calls private HttpClient m_Client = new HttpClient() { MaxResponseContentBufferSize = int.MaxValue }; /// /// Releases unmanaged and - optionally - managed resources. /// /// true to release both managed and unmanaged resources; false to release only unmanaged resources. protected virtual void Dispose(bool disposing) { if (!disposedValue) { if (disposing) m_Client.Dispose(); m_Client = null; disposedValue = true; } } // This code added to correctly implement the disposable pattern. /// /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. /// public void Dispose() { Dispose(true); } #endregion IDisposable Support #region private /// /// Resolve domain description as an asynchronous operation. /// /// /// The address of the discovery service. /// Encapsulates the log operation. /// Task{TResult} private async Task GetHTTPResponseAsync(Uri address, Action log) where TResult : class, new() { m_Client.DefaultRequestHeaders.Add("user-agent", "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)"); //_client.DefaultRequestHeaders.Accept.Clear(); //_client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("opc/application/json")); int _retryCount = 0; do { try { using (HttpResponseMessage message = await m_Client.GetAsync(address)) { message.EnsureSuccessStatusCode(); using (Task descriptionStream = message.Content.ReadAsStreamAsync()) { XmlSerializer serializer = new XmlSerializer(typeof(TResult)); Stream _description = await descriptionStream; TResult _newDescription = (TResult)serializer.Deserialize(_description); return _newDescription; } }; } catch (Exception _ex) { log($"Error for {address} in {nameof(GetHTTPResponseAsync)} retry ={_retryCount}: {_ex.Message} ", TraceEventType.Error, Priority.Medium); if (_retryCount < 3) _retryCount++; else throw; } } while (true); } //UnitTest instrumentation [Conditional("DEBUG")] internal void GetHTTPResponse(Uri address, Action debugLog, Action getResult) where T : class, new() { Task _task = GetHTTPResponseAsync(address, debugLog); _task.Wait(); getResult(_task.Result); } #endregion private } } ================================================ FILE: DataDiscovery/DiscoveryServices/Models/DomainDescriptor.GoCS.cmd ================================================ # convert the scheme DomainDescriptor.xsd to cs code xsd.exe DomainDescriptor.xsd /N:UAOOI.DataDiscovery.DiscoveryServices.Models /c ================================================ FILE: DataDiscovery/DiscoveryServices/Models/DomainDescriptor.GoXSD.cmd ================================================ xsd.exe ..\bin\Debug\CASUAOOI.DataDiscovery.DiscoveryServices.dll /t:UAOOI.DataDiscovery.DiscoveryServices.Models.DomainDescriptor ================================================ FILE: DataDiscovery/DiscoveryServices/Models/DomainDescriptor.cs ================================================ //------------------------------------------------------------------------------ // // This code was generated by a tool. // Runtime Version:4.0.30319.42000 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. // //------------------------------------------------------------------------------ // // This source code was auto-generated by xsd, Version=4.6.1055.0. // namespace UAOOI.DataDiscovery.DiscoveryServices.Models { using System.Xml.Serialization; /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true, Namespace="http://commsvr.com/UAOOI/DataDiscovery/DiscoveryServices/Models/DomainDescriptor." + "xsd")] [System.Xml.Serialization.XmlRootAttribute(Namespace="http://commsvr.com/UAOOI/DataDiscovery/DiscoveryServices/Models/DomainDescriptor." + "xsd", IsNullable=true)] public partial class DomainDescriptor { private string descriptionField; private string urlPatternField; private RecordType nextStepRecordTypeField; /// public string Description { get { return this.descriptionField; } set { this.descriptionField = value; } } /// public string UrlPattern { get { return this.urlPatternField; } set { this.urlPatternField = value; } } /// public RecordType NextStepRecordType { get { return this.nextStepRecordTypeField; } set { this.nextStepRecordTypeField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] [System.SerializableAttribute()] [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://commsvr.com/UAOOI/DataDiscovery/DiscoveryServices/Models/DomainDescriptor." + "xsd")] public enum RecordType { /// DomainModel, /// DomainDescriptor, } } ================================================ FILE: DataDiscovery/DiscoveryServices/Models/DomainDescriptor.xsd ================================================  ================================================ FILE: DataDiscovery/DiscoveryServices/Models/DomainDescriptor.xsd.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2021, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ using System; using System.Linq; using System.Text.RegularExpressions; namespace UAOOI.DataDiscovery.DiscoveryServices.Models { public partial class DomainDescriptor { /// /// Resolves the URL of the service providing resources describing the data domain using path template and the . /// /// The model URI. /// An instance of encapsulating URL of the service responsible to return expected record. It uses regular expression to replace /// the key words #authority# and #path# in the by appropriate parts of the /// . It is next hope in the resolving process. internal Uri ResolveUri(Uri modelUri) { Regex _regex = new Regex("#authority#"); string _resolution = _regex.Replace(UrlPattern, modelUri.Authority); string _path = string.Join(@"", modelUri.Segments.Skip(1).ToArray()); _regex = new Regex("#path#"); _resolution = _regex.Replace(_resolution, _path); return new Uri(_resolution); } } } ================================================ FILE: DataDiscovery/DiscoveryServices/Models/DomainModel.GoCS.cmd ================================================ # convert the DomainModel.xsd schema to cs code xsd.exe DomainModel.xsd /N:UAOOI.DataDiscovery.DiscoveryServices.Models /c ================================================ FILE: DataDiscovery/DiscoveryServices/Models/DomainModel.GoXSD.cmd ================================================ xsd.exe ..\bin\Debug\CASUAOOI.DataDiscovery.DiscoveryServices.dll /t:UAOOI.DataDiscovery.DiscoveryServices.Models.DomainModel ================================================ FILE: DataDiscovery/DiscoveryServices/Models/DomainModel.cs ================================================ //------------------------------------------------------------------------------ // // This code was generated by a tool. // Runtime Version:4.0.30319.42000 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. // //------------------------------------------------------------------------------ // // This source code was auto-generated by xsd, Version=4.6.1055.0. // namespace UAOOI.DataDiscovery.DiscoveryServices.Models { using System.Xml.Serialization; /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://http://commsvr.com/UAOOI/DataDiscovery/DiscoveryServices/Models/DomainMode" + "l.xsd")] [System.Xml.Serialization.XmlRootAttribute(Namespace = "http://http://commsvr.com/UAOOI/DataDiscovery/DiscoveryServices/Models/DomainMode" + "l.xsd", IsNullable = true)] public partial class DomainModel { private string aliasNameField; private string domainModelUriStringField; private string domainModelGuidStringField; private string descriptionField; private SemanticsDataIndex[] semanticsDataCollectionField; private string universalAddressSpaceLocatorField; private string universalAuthorizationServerLocatorField; private TypeDictionary[] typeDictionariesField; /// public string AliasName { get { return this.aliasNameField; } set { this.aliasNameField = value; } } /// public string DomainModelUriString { get { return this.domainModelUriStringField; } set { this.domainModelUriStringField = value; } } /// public string DomainModelGuidString { get { return this.domainModelGuidStringField; } set { this.domainModelGuidStringField = value; } } /// public string Description { get { return this.descriptionField; } set { this.descriptionField = value; } } /// [System.Xml.Serialization.XmlArrayItemAttribute(IsNullable = false)] public SemanticsDataIndex[] SemanticsDataCollection { get { return this.semanticsDataCollectionField; } set { this.semanticsDataCollectionField = value; } } /// public string UniversalAddressSpaceLocator { get { return this.universalAddressSpaceLocatorField; } set { this.universalAddressSpaceLocatorField = value; } } /// public string UniversalAuthorizationServerLocator { get { return this.universalAuthorizationServerLocatorField; } set { this.universalAuthorizationServerLocatorField = value; } } /// [System.Xml.Serialization.XmlArrayItemAttribute(IsNullable = false)] public TypeDictionary[] TypeDictionaries { get { return this.typeDictionariesField; } set { this.typeDictionariesField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://http://commsvr.com/UAOOI/DataDiscovery/DiscoveryServices/Models/DomainMode" + "l.xsd")] public partial class SemanticsDataIndex { private string symbolicNameField; private ushort indexField; private FieldMetaData[] dataSetField; /// public string SymbolicName { get { return this.symbolicNameField; } set { this.symbolicNameField = value; } } /// public ushort Index { get { return this.indexField; } set { this.indexField = value; } } /// [System.Xml.Serialization.XmlArrayItemAttribute(IsNullable = false)] public FieldMetaData[] DataSet { get { return this.dataSetField; } set { this.dataSetField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://http://commsvr.com/UAOOI/DataDiscovery/DiscoveryServices/Models/DomainMode" + "l.xsd")] public partial class FieldMetaData { private ExtensionDataObject extensionDataField; private string symbolicNameField; private string processValueNameField; private UATypeInfo typeInformationField; /// public ExtensionDataObject ExtensionData { get { return this.extensionDataField; } set { this.extensionDataField = value; } } /// public string SymbolicName { get { return this.symbolicNameField; } set { this.symbolicNameField = value; } } /// public string ProcessValueName { get { return this.processValueNameField; } set { this.processValueNameField = value; } } /// public UATypeInfo TypeInformation { get { return this.typeInformationField; } set { this.typeInformationField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://http://commsvr.com/UAOOI/DataDiscovery/DiscoveryServices/Models/DomainMode" + "l.xsd")] public partial class ExtensionDataObject { } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://http://commsvr.com/UAOOI/DataDiscovery/DiscoveryServices/Models/DomainMode" + "l.xsd")] public partial class LocalizedText { private string localeField; private string valueField; /// /// Initializes a new instance of the class. /// public LocalizedText() { this.localeField = ""; } /// [System.Xml.Serialization.XmlAttributeAttribute()] [System.ComponentModel.DefaultValueAttribute("")] public string Locale { get { return this.localeField; } set { this.localeField = value; } } /// [System.Xml.Serialization.XmlTextAttribute()] public string Value { get { return this.valueField; } set { this.valueField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://http://commsvr.com/UAOOI/DataDiscovery/DiscoveryServices/Models/DomainMode" + "l.xsd")] public partial class EnumeratedValue { private LocalizedText[] documentationField; private string nameField; private int valueField; /// public LocalizedText[] Documentation { get { return this.documentationField; } set { this.documentationField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] public string Name { get { return this.nameField; } set { this.nameField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] public int Value { get { return this.valueField; } set { this.valueField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://http://commsvr.com/UAOOI/DataDiscovery/DiscoveryServices/Models/DomainMode" + "l.xsd")] public partial class StructuredTypeField { private string nameField; private System.Xml.XmlQualifiedName typeNameField; private string switchFieldField; private uint switchValueField; private bool switchValueFieldSpecified; private SwitchOperand switchOperandField; private bool switchOperandFieldSpecified; /// [System.Xml.Serialization.XmlAttributeAttribute()] public string Name { get { return this.nameField; } set { this.nameField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] public System.Xml.XmlQualifiedName TypeName { get { return this.typeNameField; } set { this.typeNameField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] public string SwitchField { get { return this.switchFieldField; } set { this.switchFieldField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] public uint SwitchValue { get { return this.switchValueField; } set { this.switchValueField = value; } } /// [System.Xml.Serialization.XmlIgnoreAttribute()] public bool SwitchValueSpecified { get { return this.switchValueFieldSpecified; } set { this.switchValueFieldSpecified = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] public SwitchOperand SwitchOperand { get { return this.switchOperandField; } set { this.switchOperandField = value; } } /// [System.Xml.Serialization.XmlIgnoreAttribute()] public bool SwitchOperandSpecified { get { return this.switchOperandFieldSpecified; } set { this.switchOperandFieldSpecified = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] [System.SerializableAttribute()] [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://http://commsvr.com/UAOOI/DataDiscovery/DiscoveryServices/Models/DomainMode" + "l.xsd")] public enum SwitchOperand { /// Equals, /// GreaterThan, /// LessThan, /// GreaterThanOrEqual, /// LessThanOrEqual, /// NotEqual, } /// [System.Xml.Serialization.XmlIncludeAttribute(typeof(EnumeratedType))] [System.Xml.Serialization.XmlIncludeAttribute(typeof(StructuredType))] [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://http://commsvr.com/UAOOI/DataDiscovery/DiscoveryServices/Models/DomainMode" + "l.xsd")] public partial class TypeDescription { private string nameField; /// [System.Xml.Serialization.XmlAttributeAttribute(DataType = "NCName")] public string Name { get { return this.nameField; } set { this.nameField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://http://commsvr.com/UAOOI/DataDiscovery/DiscoveryServices/Models/DomainMode" + "l.xsd")] public partial class EnumeratedType : TypeDescription { private EnumeratedValue[] enumeratedValuesField; /// [System.Xml.Serialization.XmlElementAttribute("EnumeratedValues")] public EnumeratedValue[] EnumeratedValues { get { return this.enumeratedValuesField; } set { this.enumeratedValuesField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://http://commsvr.com/UAOOI/DataDiscovery/DiscoveryServices/Models/DomainMode" + "l.xsd")] public partial class StructuredType : TypeDescription { private StructuredTypeField[] fieldField; private StructureKindEnum structureKindField; /// [System.Xml.Serialization.XmlElementAttribute("Field")] public StructuredTypeField[] Field { get { return this.fieldField; } set { this.fieldField = value; } } /// public StructureKindEnum StructureKind { get { return this.structureKindField; } set { this.structureKindField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] [System.SerializableAttribute()] [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://http://commsvr.com/UAOOI/DataDiscovery/DiscoveryServices/Models/DomainMode" + "l.xsd")] public enum StructureKindEnum { /// Structure, /// StructureWithOptionalFields, /// Union, } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://http://commsvr.com/UAOOI/DataDiscovery/DiscoveryServices/Models/DomainMode" + "l.xsd")] public partial class TypeDictionary { private StructuredType[] structuredTypeField; private string targetNamespaceField; /// [System.Xml.Serialization.XmlElementAttribute("StructuredType")] public StructuredType[] StructuredType { get { return this.structuredTypeField; } set { this.structuredTypeField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] public string TargetNamespace { get { return this.targetNamespaceField; } set { this.targetNamespaceField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://http://commsvr.com/UAOOI/DataDiscovery/DiscoveryServices/Models/DomainMode" + "l.xsd")] public partial class UATypeInfo { private BuiltInType builtInTypeField; private int valueRankField; private int[] arrayDimensionsField; private System.Xml.XmlQualifiedName typeNameField; /// public BuiltInType BuiltInType { get { return this.builtInTypeField; } set { this.builtInTypeField = value; } } /// public int ValueRank { get { return this.valueRankField; } set { this.valueRankField = value; } } /// public int[] ArrayDimensions { get { return this.arrayDimensionsField; } set { this.arrayDimensionsField = value; } } /// public System.Xml.XmlQualifiedName TypeName { get { return this.typeNameField; } set { this.typeNameField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] [System.SerializableAttribute()] [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://http://commsvr.com/UAOOI/DataDiscovery/DiscoveryServices/Models/DomainMode" + "l.xsd")] public enum BuiltInType { /// Null, /// Boolean, /// SByte, /// Byte, /// Int16, /// UInt16, /// Int32, /// UInt32, /// Int64, /// UInt64, /// Float, /// Double, /// String, /// DateTime, /// Guid, /// ByteString, /// XmlElement, /// NodeId, /// ExpandedNodeId, /// StatusCode, /// QualifiedName, /// LocalizedText, /// ExtensionObject, /// DataValue, /// Variant, /// DiagnosticInfo, /// Enumeration, } } ================================================ FILE: DataDiscovery/DiscoveryServices/Models/DomainModel.xsd ================================================  ================================================ FILE: DataDiscovery/DiscoveryServices/Models/DomainModel.xsd.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2021, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ using System; using System.Xml; using System.Xml.Serialization; namespace UAOOI.DataDiscovery.DiscoveryServices.Models { /// /// Class DomainModel - domain description holder. /// /// /// Domain is a collection of data over which an owner has control. It may be used to describe: /// * a collection of package addresses used to push the message to the receiver. /// * a collection of data used to provide data semantic unique identifier and support subscription to receive copies of the data as the message payload based on the data semantics. /// public partial class DomainModel { #region API /// /// Gets or sets the URI of the domain. /// /// The URI. [XmlIgnore] public Uri DomainModelUri { get => new Uri(DomainModelUriString); set => DomainModelUriString = value.ToString(); } /// /// Gets or sets the unique name of the domain. /// /// The name of the unique. [XmlIgnore] public Guid DomainModelGuid { get => XmlConvert.ToGuid(DomainModelGuidString); set => DomainModelGuidString = XmlConvert.ToString(value); } /// /// Gets or sets the universal discovery service locator - this URL (REST call is assigned by the resolver). /// /// The universal discovery service locator. [XmlIgnore] public string UniversalDiscoveryServiceLocator { get; set; } #endregion API } } ================================================ FILE: DataDiscovery/DiscoveryServices/Models/SemanticsDataIndex.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2021, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ namespace UAOOI.DataDiscovery.DiscoveryServices.Models { /// /// Class SemanticsDataIndex - provides description of a set of data items representing the current state of a selected object uniquely named by the . /// /// /// Each Semantic data belongs to the only one domain and must have symbolic name unique in context of the domain. /// is used to replace the symbolic name with the purpose of optimization of the data transfer. /// public partial class SemanticsDataIndex { } } ================================================ FILE: DataDiscovery/DiscoveryServices/Priority.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2021, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ namespace UAOOI.DataDiscovery.DiscoveryServices { /// /// Defines values for the priorities used by a logger. /// public enum Priority { /// /// No priority specified. /// None = 0, /// /// High priority entry. /// High = 1, /// /// Medium priority entry. /// Medium = 2, /// /// Low priority entry. /// Low = 3 } } ================================================ FILE: DataDiscovery/DiscoveryServices/Properties/AssemblyInfo.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2021, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ using System.Reflection; using System.Runtime.CompilerServices; [assembly: AssemblyTrademark("Object Oriented Internet")] [assembly: AssemblyCulture("")] [assembly: InternalsVisibleTo( "UAOOI.DataDiscovery.DiscoveryServices.UnitTest, PublicKey=" + "00240000048000009400000006020000002400005253413100040000010001005b97a0972ff6b13a" + "8a9ff9c09503aea0e5e2fe29cb2275a0c0942182f4c3431814b6bc9a556d9fe0d7e7823439c1ba28" + "521f6318e4c936c4461604ef668e9686c2021571b093e1bfba071b373bc56a07a3afdc120c5313d3" + "9a935cda64b759f857ebb3db483641444a5347e1564f8ba6d4fad2f968d3caf9991a4fa6aa019ebe" )] ================================================ FILE: DataDiscovery/DiscoveryServices/Properties/UAOOI.DataDiscovery.DiscoveryServices.nuspec ================================================  UAOOI.DataDiscovery.DiscoveryServices 1.0.0-Alpha Library supporting global data discovery services commsvr.com cas.eu https://github.com/mpostol/OPC-UA-OOI/tree/master/DataDiscovery https://github.com/mpostol/OPC-UA-OOI/blob/master/license.md false false OPC UA Object Oriented Internet (UAOOI) UAOOI.DataDiscovery.DiscoveryServices library is dedicated to support global data discovery services for any application based on OPC UA Information Model. It is part of the project supporting OPC UA Object Oriented Internet paradigm. Library supporting global data discovery services. It is working unit tested prerelease. Copyright MPostol (c) 2018 Semantics Data, Object Oriented Internet, OPC UA, CommServer, ASMD, Address Space Model Designer. ================================================ FILE: DataDiscovery/DiscoveryServices/ReadMe.old ================================================ Version History: ================================================ FILE: DataDiscovery/DiscoveryServices/ReadMe.tt ================================================ <#@ template debug="false" hostspecific="false" language="C#" #> <#@ assembly name="System.Core" #> <#@ import namespace="System.Linq" #> <#@ import namespace="System.Text" #> <#@ import namespace="System.Collections.Generic" #> <#@ output extension=".txt" #> The documentation is available on line at: TBD Current release: Assembly Title: <#=m_AssemblyTitle#> Assembly Description: <#=DataDiscoveryProduct#>. Assembly Company: <#=AssemblyCompany#> Assembly Product: <#=DataDiscoveryProduct#> Assembly Copyright: <#=AssemblyCopyright#> Assembly Trademark: <#=ProductTrademark#> Assembly Version: <#=DataDiscoveryVersion#><#=DataDiscoveryPrerelease#> Assembly Date: <#=m_Date#> The main changes and new functionalities are listed below: 1. ____________________________________________________________________________________________ For assistance, contact: Mariusz Postol CAS mailto://mpostol@cas.eu Copyright (C) <#=m_Year#>, commsvr.com LODZ POLAND mailto://commserver@cas.eu http://www.commsvr.com/ <#@ include file = "Readme.old" #> <#@ include file = "..\..\CommonResources\T4Definitions\Model.t4" #> <#+ string m_AssemblyTitle = "UAOOI.DataDiscovery.DiscoveryServices"; string m_Date = System.DateTime.Today.ToShortDateString(); string m_Year = System.DateTime.Today.Year.ToString(); #> ================================================ FILE: DataDiscovery/DiscoveryServices/ReadMe.txt ================================================  The documentation is available on line at: TBD Current release: Assembly Title: UAOOI.DataDiscovery.DiscoveryServices Assembly Description: OOI Global Data Discovery. Assembly Company: commsvr.com Assembly Product: OOI Global Data Discovery Assembly Copyright: Copyright MPostol (c) 2018 Assembly Trademark: Object Oriented Internet Assembly Version: 1.0.0-Alpha Assembly Date: 2018-04-08 The main changes and new functionalities are listed below: 1. ____________________________________________________________________________________________ For assistance, contact: Mariusz Postol CAS mailto://mpostol@cas.eu Copyright (C) 2018, commsvr.com LODZ POLAND mailto://commserver@cas.eu http://www.commsvr.com/ Version History: ================================================ FILE: DataDiscovery/DiscoveryServices/Readme.md ================================================ # Global Data Discovery Services Library supporting global data discovery services. ================================================ FILE: DataDiscovery/DomainModel.md ================================================ # Domain Model of the Global Data Discovery ## Main goals * To promote systems integration against data type definitions. * To promote separation of concerns. ## Roles and Activities The following diagram presents domain model of the **Data Discovery** concept. ![Design Time Activities](../CommonResources/Media/DataDiscovery.DomainModel.png) On the diagram the following artifacts are distinguished: * *Generic Process* - *Control Agency* (e.g. Pollution Control Agency) prepares a *Generic Process* information model to meet monitoring requirements. * *Asset* - *Asset Vendor* (e.g. boilers vendor) adapts the *Generic Process* model and creates derived *Asset* model to meet the product requirements with the purpose of continuous development and real time control. * *Maintenance* - *Engineering* organization (e.g. boiler maintenance service provider) according to the local needs adopts the *Asset* OPC UA information model to meet maintenance requirements on behalf of the *Asset User* (e.g. Heat and Power Plant). * *Data Domain* - *Asset User* is ultimate owner of the data. *Engineering* on behalf of the user prepares the **Data Domain** OPC UA Information Model that could be uniquely identified in the global scope. Finally the presented scenario the subscriber configurations of the *Cloud IIoT Hub*, *Asset Vendor*, and *Engineering* are based on the prepared in advance **Data Domain** model to gather selected data. Using the real time data the Pollution *Control Agency* are working to: * reduce greenhouse gas emissions * reduce harmful effects from air pollution and noise * reduce the spread of substances harmful to health and environment *Engineering* provides asset management and predictive maintenance services. This services involves the balancing of costs, opportunities and risks against the desired performance of assets to achieve the organizational objectives. All of these activities requires real time data access to achieve finally predictive maintenance. *Asset Vendor* deploys the asset (thing) and uses the data for continuous improvement process. *Cloud IIoT Hub* provides cloud computing services and processes the data to meet requirements of the *Control Agency* *Asset User* as the owner of the asset (thing) publishes the data to make them available to all of the stakeholders. > To achieve separation of concerns systems integration against type definition is required. ================================================ FILE: DataDiscovery/ProjectDescription.md ================================================ # DataDiscovery Project Description Description is covered by the section of the ebook: * [Global Data Discovery](https://commsvr.gitbook.io/ooi/global-data-discovery/datadiscovery) The **Data Discovery** procedure may be applied to the following scenarios: * **Design time data discovery** - all about using data definition \(OPC UA Information Model - semantics\) to configure data bindings and data distribution over the wire. * **Startup process** - all about bootstrapping process of the `OOI Reactive Application`. * **Operational time** - all about dynamic data definitions and security stuff management \(certificates, keys\) ## Goal All tasks required to release the `DataDiscovery` package meeting above described requirements. ## Work-space The `DataDiscovery` branch contains all related modifications, i.e. different features or ideas in progress at any given time – some of which are ready to go, and others which are not. It is an environment where new ideas are tried out. The branch won't be merged with `master` until it's ready to be reviewed by someone you're collaborating with. To merge the following conditions must be met: * the code is error-free * all unit tests have to pass * the documentation is ready to be exposed in the ebook * all integration tests have to pass If harmonization with other branches is required PR modification to the `DataDiscovery` branch. ================================================ FILE: DataDiscovery/README.MD ================================================ # Global Data Discovery ## Concept In this approach, the URI of the OPC UA **Information Model** is to be used as a unique key to browse the _Global Data Discovery System_ \(GDDS – an expanded version of GDS\) to find recursively the destination _OPC UA Server_ or _UA Data Application_ exposing the requested data. The main assumptions of the concept are covered in the document: [Discoverable Data](../SemanticData/README.MD#discoverable-data) The URI syntax is described in the document: [Uniform Resource Identifier \(URI\): Generic Syntax](http://tools.ietf.org/html/rfc3986). The **Data Discovery** procedure may be applied to the following scenarios: * **Design time data discovery** - all about using data definition \(OPC UA Information Model - semantics\) to configure data bindings and data distribution over the wire. * **Startup process** - all about bootstrapping process of the `OOI Reactive Application`. * **Operational time** - all about dynamic data definitions and security stuff management \(certificates, keys\) Design time data discovery process is illustrated in the activity diagram: * ![Design Time Activities](../CommonResources/Media/DataDiscovery.Design Time Activities.png) The startup process of an `OOI Reactive Application` is illustrated in the activity diagram: * ![StartupActivityDiagram](../CommonResources/Media/DataDiscovery.StartupActivityDiagram.png) The proposed concept is scalable and could be used in local and global scope depending on the available resources. A domain model describing a scenario where this approach is applicable is covered in the document [Domain Model of the Global Data Discovery](./DomainModel.md). ## Data semantics In the discovery process the semantics of the data is layered as follows: 1. Value encoding \(serialization\), e.g. double, Int32, Boolean, 2. Value meaning, e.g. pressure, temperature, flow, etc. 3. Values relation, e.g. boiler object type containing relation between drum, input pipe and flow neater. 4. Process – data source, e.g. set of boilers: `Boiler #1`, `Boiler #i`, ...., `Boiler #N` located at….. Semantics of the data is expressed using types. Process data is available as the Variables described by types. > Conclusion > The discovery process must address: > > * the data types - to get meaning and design data management and processing > * the data values - to get current process state and control it ## URI resolver ```txt foo://example.com:8042/over/there?name=ferret#nose \_/ \______________/ \________/ \_________/ \__/ | | | | | scheme authority path query fragment ``` It is assumed that the **Data Domain** description is provided by the discovery services resolved from the **OPC UA Information Model** URI. The main challenge is where the recursive resolution process shall start. It seems we have the following options: 1. Direct - the URI is URL of the XML/Json files containing all definitions required to configure application. 2. Authority part of the model URI is a DNS entry (see also: [rfc1034: DOMAIN NAMES - CONCEPTS AND FACILITIES; November 1987](https://tools.ietf.org/html/rfc1034) in the information model URI zone – on promise services. 3. A selected root HTTP services, e.g. in the opcfoundation.com domain. ## Solution The discovery procedure is based on the following records: * `DomainModel`: contains information about data available in the selected **Data Domain**. * `DomainDescriptor`: contains information about how to find and download `DomainModel`. The recovery and resolving procedure is based on the Restful \(Representational State Transfer\) Web API style with the goal that the system can evolve over a long period of time and can tolerate many different clients and many different changes without breaking those clients. ## Content * `DataDiscovery` - Library supporting global data discovery services. * `Tests` - test projects. ================================================ FILE: DataDiscovery/Tests/DiscoveryServices.UnitTest/DataDiscovery.DiscoveryServices.UnitTest.csproj ================================================  Debug AnyCPU {591B6DB0-0D22-4E58-AA29-4EB10C0EAFFE} Library Properties UAOOI.DataDiscovery.DiscoveryServices.UnitTest UAOOI.DataDiscovery.DiscoveryServices.UnitTest v4.7.2 512 {3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} 10.0 $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) $(ProgramFiles)\Common Files\microsoft shared\VSTT\$(VisualStudioVersion)\UITestExtensionPackages False UnitTest true full false bin\Debug\ DEBUG;TRACE prompt 4 IDE0001, IDE0002, IDE0003 pdbonly true bin\Release\ TRACE prompt 4 true OPCUAOOIKey.snk False TextTemplatingFileGenerator AssemblyInfo.cs PreserveNewest PreserveNewest Designer PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest True True AssemblyInfo.tt {dd1a7ec2-ff25-4d35-9d0a-5bb626e61d17} DataDiscovery.DiscoveryServices False False False False ================================================ FILE: DataDiscovery/Tests/DiscoveryServices.UnitTest/DataDiscoveryServicesUnitTest.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2021, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ using Microsoft.VisualStudio.TestTools.UnitTesting; using System; using System.Diagnostics; using System.Threading.Tasks; using UAOOI.DataDiscovery.DiscoveryServices.Models; using UAOOI.DataDiscovery.DiscoveryServices.UnitTest.TestData; namespace UAOOI.DataDiscovery.DiscoveryServices.UnitTest { [TestClass] public class DataDiscoveryServicesUnitTest { [TestMethod] public void RGetHTTPResponseAsyncTestMethod() { int _messages = 0; using (LocalDataDiscoveryServices _service = new LocalDataDiscoveryServices()) { _service.AreEqualsDomainDescriptors ( DomainDescriptorFactory.GetRootDomainDescriptor(), new Uri(@"https://raw.githubusercontent.com/mpostol/OPC-UA-OOI/master/DataDiscovery/Tests/DiscoveryServices.UnitTest/TestData/root.zone/DomainDescriptor.xml"), (x, y, z) => { _messages++; DebugLog(x, y, z); } ); _service.AreEqualsDomainDescriptors ( DomainDescriptorFactory.Iteration1DomainDescriptor(), new Uri(@"https://raw.githubusercontent.com/mpostol/OPC-UA-OOI/master/DataDiscovery/Tests/DiscoveryServices.UnitTest/TestData/root.zone/commsvr.com/DomainDescriptor.xml"), (x, y, z) => { _messages++; DebugLog(x, y, z); } ); _service.AreEqualsDomainDescriptors ( DomainDescriptorFactory.Iteration2DomainDescriptor(), new Uri(@"https://raw.githubusercontent.com/mpostol/OPC-UA-OOI/master/DataDiscovery/Tests/DiscoveryServices.UnitTest/TestData/root.zone/commsvr.com/UA/Examples/BoilersSet/DomainDescriptor.xml"), (x, y, z) => { _messages++; DebugLog(x, y, z); } ); Assert.AreEqual(3, _messages); } } [TestMethod] [ExpectedException(typeof(System.AggregateException))] public void GetHTTPResponseAsyncRetryCountErrorTestMethod() { using (LocalDataDiscoveryServices _service = new LocalDataDiscoveryServices()) { DomainDescriptor _tc = null; _service.GetHTTPResponse(new Uri("http://localhost/alfa.bravo.xml"), DebugLog, x => _tc = x); } } [TestMethod] public void ResolveDomainModelAsyncTestMethod() { using (LocalDataDiscoveryServices _service = new LocalDataDiscoveryServices()) { Task _DomainModelTask = _service.ResolveDomainModelAsync(m_ModelUri, m_RootUrl, DebugLog); _DomainModelTask.Wait(TimeSpan.FromSeconds(10)); DomainModel _model = _DomainModelTask.Result; Assert.IsNotNull(_model); } } //tests instrumentation private readonly Uri m_RootUrl = new Uri(@"https://raw.githubusercontent.com/mpostol/OPC-UA-OOI/master/DataDiscovery/Tests/DiscoveryServices.UnitTest/TestData/root.zone/DomainDescriptor.xml"); private readonly Uri m_ModelUri = new Uri(@"http://commsvr.com/UA/Examples/BoilersSet"); private static void DebugLog(string message, TraceEventType eventType, Priority priority) { Debug.WriteLine($"ResolveDomainModelAsync log: message: {message}, level: {eventType}, priority: {priority}"); } private class LocalDataDiscoveryServices : DataDiscoveryServices { internal void AreEqualsDomainDescriptors(DomainDescriptor _rootDomainDescriptor, Uri address, Action debugLog) { DomainDescriptor _tc = null; GetHTTPResponse(address, DebugLog, x => _tc = x); Assert.IsNotNull(_tc); Assert.AreEqual(_rootDomainDescriptor.Description, _tc.Description); Assert.AreEqual(_rootDomainDescriptor.NextStepRecordType, _tc.NextStepRecordType); Assert.AreEqual(_rootDomainDescriptor.UrlPattern, _tc.UrlPattern); debugLog($"Finished {nameof(AreEqualsDomainDescriptors)} successfully", TraceEventType.Verbose, Priority.None); } } } } ================================================ FILE: DataDiscovery/Tests/DiscoveryServices.UnitTest/DomainDescriptorUnitTest.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2021, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ using Microsoft.VisualStudio.TestTools.UnitTesting; using System; using System.IO; using System.Xml.Serialization; using UAOOI.DataDiscovery.DiscoveryServices.Models; using UAOOI.DataDiscovery.DiscoveryServices.UnitTest.TestData; namespace UAOOI.DataDiscovery.DiscoveryServices.UnitTest { [TestClass] public class DomainDescriptorUnitTest { [TestMethod] public void GetRootDomainDescriptorTest() { DomainDescriptor rootDomainDescriptor = DomainDescriptorFactory.GetRootDomainDescriptor(); Uri _resolution = rootDomainDescriptor.ResolveUri(m_ModelUri); string expectedFirsRoundUrl = "https://raw.githubusercontent.com/mpostol/OPC-UA-OOI/master/DataDiscovery/Tests/DiscoveryServices.UnitTest/TestData/root.zone/commsvr.com/DomainDescriptor.xml"; Assert.AreEqual(expectedFirsRoundUrl, _resolution.ToString()); string _fn = "RootDomainDescriptor.xml"; FileInfo file = new FileInfo($@"TestData\{_fn}"); using (Stream outputStream = file.Create()) { XmlSerializer _serializer = new XmlSerializer(typeof(DomainDescriptor)); _serializer.Serialize(outputStream, rootDomainDescriptor); } file.Refresh(); Assert.IsTrue(file.Exists); Assert.IsTrue(file.Length > 0); DomainDescriptor domainDescriptor; using (Stream descriptionStream = file.OpenRead()) { XmlSerializer serializer = new XmlSerializer(typeof(DomainDescriptor)); domainDescriptor = (DomainDescriptor)serializer.Deserialize(descriptionStream); Assert.IsNotNull(domainDescriptor); } Assert.IsTrue(domainDescriptor.Description.Contains("Starting point")); Assert.AreEqual(RecordType.DomainDescriptor, domainDescriptor.NextStepRecordType); Assert.AreEqual(@"https://raw.githubusercontent.com/mpostol/OPC-UA-OOI/master/DataDiscovery/Tests/DiscoveryServices.UnitTest/TestData/root.zone/#authority#/DomainDescriptor.xml", domainDescriptor.UrlPattern); _resolution = domainDescriptor.ResolveUri(m_ModelUri); Assert.AreEqual(expectedFirsRoundUrl, _resolution.ToString()); } [TestMethod] [DeploymentItem(@"TestData\", @"TestData\")] public void RootZoneDomainDescriptorTest() { DomainDescriptor _referenceDomainDescriptor = DomainDescriptorFactory.GetRootDomainDescriptor(); AreEqualsDomainDescriptors(_referenceDomainDescriptor, @"root.zone\DomainDescriptor.xml"); _referenceDomainDescriptor = DomainDescriptorFactory.Iteration1DomainDescriptor(); AreEqualsDomainDescriptors(_referenceDomainDescriptor, @"root.zone\commsvr.com\DomainDescriptor.xml"); _referenceDomainDescriptor = DomainDescriptorFactory.Iteration2DomainDescriptor(); AreEqualsDomainDescriptors(_referenceDomainDescriptor, @"root.zone\commsvr.com\UA\Examples\BoilersSet\DomainDescriptor.xml"); } [TestMethod] [DeploymentItem(@"TestData\", @"TestData\")] public void DomainDescriptorAutogeneratedFileTest() { FileInfo _fi = new FileInfo(@"TestData\DomainDescriptor.xml"); Assert.IsTrue(_fi.Exists); DomainDescriptor newDescription = null; using (Stream _descriptionStream = _fi.OpenRead()) { XmlSerializer _serializer = new XmlSerializer(typeof(DomainDescriptor)); newDescription = (DomainDescriptor)_serializer.Deserialize(_descriptionStream); } Assert.IsNotNull(newDescription); Assert.IsFalse(string.IsNullOrEmpty(newDescription.Description)); Assert.IsFalse(string.IsNullOrEmpty(newDescription.UrlPattern)); } //instrumentation private readonly Uri m_ModelUri = new Uri(@"http://commsvr.com/UA/Examples/BoilersSet"); private static void AreEqualsDomainDescriptors(DomainDescriptor _rootDomainDescriptor, string fileName) { FileInfo file = new FileInfo($@"TestData\{fileName}"); Assert.IsTrue(file.Exists); DomainDescriptor domainDescriptor; using (Stream _descriptionStream = file.OpenRead()) { XmlSerializer _serializer = new XmlSerializer(typeof(DomainDescriptor)); domainDescriptor = (DomainDescriptor)_serializer.Deserialize(_descriptionStream); } Assert.IsNotNull(domainDescriptor); Assert.AreEqual(_rootDomainDescriptor.Description, domainDescriptor.Description); Assert.AreEqual(_rootDomainDescriptor.NextStepRecordType, domainDescriptor.NextStepRecordType); Assert.AreEqual(_rootDomainDescriptor.UrlPattern, domainDescriptor.UrlPattern); } } } ================================================ FILE: DataDiscovery/Tests/DiscoveryServices.UnitTest/DomainModelUnitTest.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2021, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ using Microsoft.VisualStudio.TestTools.UnitTesting; using System.Collections.Generic; using System.IO; using System.Linq; using System.Xml.Serialization; using UAOOI.DataDiscovery.DiscoveryServices.Models; using UAOOI.DataDiscovery.DiscoveryServices.UnitTest.TestData; namespace UAOOI.DataDiscovery.DiscoveryServices.UnitTest { [TestClass] public class DomainModelUnitTest { [TestMethod] [DeploymentItem(@"TestData\", @"TestData\")] public void DeserializeAutoGeneratedXmlTest() { FileInfo file = new FileInfo(@"TestData\DomainModel.xml"); Assert.IsTrue(file.Exists); DomainModel newDescription = null; using (Stream _descriptionStream = file.OpenRead()) { XmlSerializer _serializer = new XmlSerializer(typeof(DomainModel)); newDescription = (DomainModel)_serializer.Deserialize(_descriptionStream); } Assert.IsNotNull(newDescription); Assert.IsFalse(string.IsNullOrEmpty(newDescription.AliasName)); Assert.IsFalse(string.IsNullOrEmpty(newDescription.Description)); Assert.IsFalse(string.IsNullOrEmpty(newDescription.DomainModelGuidString)); Assert.IsFalse(string.IsNullOrEmpty(newDescription.DomainModelUriString)); Assert.IsFalse(string.IsNullOrEmpty(newDescription.UniversalAddressSpaceLocator)); Assert.IsFalse(string.IsNullOrEmpty(newDescription.UniversalAuthorizationServerLocator)); Assert.IsTrue(string.IsNullOrEmpty(newDescription.UniversalDiscoveryServiceLocator)); } [TestMethod] public void TypeDictionariesTestMethod() { DomainModel domainModel = ReferenceDomainModel.GerReferenceDomainModel(); Assert.IsNotNull(domainModel.TypeDictionaries); Dictionary _dictionary = (from x in domainModel.TypeDictionaries from y in x.StructuredType select new TypeDictionaryWitKey { Key = $"{x.TargetNamespace}:{y.Name}", Dictionary = y }).ToDictionary(z => z.Key); Assert.AreEqual(2, _dictionary.Count); } [TestMethod] public void SerializeTestMethod() { string fileName = "ReferenceDomainModel.xml"; DomainModel _dm = ReferenceDomainModel.GerReferenceDomainModel(); FileInfo file = new FileInfo($@"TestData\{fileName}"); using (Stream _outputStream = file.Create()) { XmlSerializer _serializer = new XmlSerializer(typeof(DomainModel)); _serializer.Serialize(_outputStream, _dm); } Assert.IsTrue(file.Exists); Assert.IsTrue(file.Length > 0); using (Stream _descriptionStream = file.OpenRead()) { XmlSerializer _serializer = new XmlSerializer(typeof(DomainModel)); DomainModel newDescription = (DomainModel)_serializer.Deserialize(_descriptionStream); Assert.IsNotNull(newDescription); } } [TestMethod] public void TestDataFolderContentTestMethod() { FileInfo _fi = new FileInfo(@"TestData\root.zone\commsvr.com\UA\Examples\BoilersSet\DomainModel.xml"); Assert.IsTrue(_fi.Exists); _fi = new FileInfo(@"TestData\root.zone\commsvr.com\UA\Examples\BoilersSet\DomainDescriptor.xml"); Assert.IsTrue(_fi.Exists); _fi = new FileInfo(@"TestData\root.zone\commsvr.com\UA\Examples\BoilersSet\Commsvr.UA.Examples.BoilersSet.NodeSet2.xml"); Assert.IsTrue(_fi.Exists); } private class TypeDictionaryWitKey { public string Key; public StructuredType Dictionary; } } } ================================================ FILE: DataDiscovery/Tests/DiscoveryServices.UnitTest/Properties/AssemblyInfo.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2021, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; [assembly: AssemblyTitle("UAOOI.DataDiscovery.DiscoveryServices.UnitTest")] [assembly: AssemblyDescription("UnitTests for library supporting global data discovery services")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("Mariusz Postol")] [assembly: AssemblyProduct("Object Oriented Internet")] [assembly: AssemblyCopyright("Copyright (C) 2022 Mariusz Postol LODZ POLAND")] [assembly: AssemblyTrademark("Object Oriented Internet")] [assembly: AssemblyCulture("")] [assembly: ComVisible(false)] [assembly: AssemblyVersion("4.0.3.*")] [assembly: AssemblyFileVersion("4.0.3")] [assembly: InternalsVisibleTo( "UAOOI.DataDiscovery.DiscoveryServices.UnitTest, PublicKey=" + "00240000048000009400000006020000002400005253413100040000010001005b97a0972ff6b13a" + "8a9ff9c09503aea0e5e2fe29cb2275a0c0942182f4c3431814b6bc9a556d9fe0d7e7823439c1ba28" + "521f6318e4c936c4461604ef668e9686c2021571b093e1bfba071b373bc56a07a3afdc120c5313d3" + "9a935cda64b759f857ebb3db483641444a5347e1564f8ba6d4fad2f968d3caf9991a4fa6aa019ebe" )] ================================================ FILE: DataDiscovery/Tests/DiscoveryServices.UnitTest/Properties/AssemblyInfo.tt ================================================ <#@ template debug="false" hostspecific="false" language="C#" #> <#@ output extension=".cs" #> //__________________________________________________________________________________________________ // // Copyright (C) 2021, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; [assembly: AssemblyTitle("<#=m_AssemblyTitle#>")] [assembly: AssemblyDescription("UnitTests for library supporting global data discovery services")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("<#=AssemblyCompany#>")] [assembly: AssemblyProduct("<#=DataDiscoveryProduct#>")] [assembly: AssemblyCopyright("<#=AssemblyCopyright#>")] [assembly: AssemblyTrademark("<#=ProductTrademark#>")] [assembly: AssemblyCulture("")] [assembly: ComVisible(false)] [assembly: AssemblyVersion("<#= DataDiscoveryVersion #>.*")] [assembly: AssemblyFileVersion("<#= DataDiscoveryVersion #>")] [assembly: InternalsVisibleTo( "UAOOI.DataDiscovery.DiscoveryServices.UnitTest, PublicKey=" + "00240000048000009400000006020000002400005253413100040000010001005b97a0972ff6b13a" + "8a9ff9c09503aea0e5e2fe29cb2275a0c0942182f4c3431814b6bc9a556d9fe0d7e7823439c1ba28" + "521f6318e4c936c4461604ef668e9686c2021571b093e1bfba071b373bc56a07a3afdc120c5313d3" + "9a935cda64b759f857ebb3db483641444a5347e1564f8ba6d4fad2f968d3caf9991a4fa6aa019ebe" )] <#@ include file = "..\..\..\..\CommonResources\T4Definitions\Model.t4" #> <#+ string m_AssemblyTitle = "UAOOI.DataDiscovery.DiscoveryServices.UnitTest"; #> ================================================ FILE: DataDiscovery/Tests/DiscoveryServices.UnitTest/TestData/DomainDescriptor.xml ================================================ Description1 UrlPattern1 DomainModel ================================================ FILE: DataDiscovery/Tests/DiscoveryServices.UnitTest/TestData/DomainDescriptorFactory.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2021, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ using UAOOI.DataDiscovery.DiscoveryServices.Models; namespace UAOOI.DataDiscovery.DiscoveryServices.UnitTest.TestData { internal static class DomainDescriptorFactory { internal static DomainDescriptor GetRootDomainDescriptor() { return new DomainDescriptor() { Description = "Starting point for discovery process with the purpose of resolving Uri and get DomainDescriptor record", NextStepRecordType = RecordType.DomainDescriptor, UrlPattern = "https://raw.githubusercontent.com/mpostol/OPC-UA-OOI/master/DataDiscovery/Tests/DiscoveryServices.UnitTest/TestData/root.zone/#authority#/DomainDescriptor.xml" }; } internal static DomainDescriptor Iteration1DomainDescriptor() { return new DomainDescriptor() { Description = "Iteration #1 DomainDescriptor record - root entry for commsvr.com.", NextStepRecordType = RecordType.DomainDescriptor, UrlPattern = "https://raw.githubusercontent.com/mpostol/OPC-UA-OOI/master/DataDiscovery/Tests/DiscoveryServices.UnitTest/TestData/root.zone/#authority#/#path#/DomainDescriptor.xml" }; } internal static DomainDescriptor Iteration2DomainDescriptor() { return new DomainDescriptor() { Description = "Iteration #2 DomainDescriptor record - Boiler test domain model.", NextStepRecordType = RecordType.DomainModel, UrlPattern = "https://raw.githubusercontent.com/mpostol/OPC-UA-OOI/master/DataDiscovery/Tests/DiscoveryServices.UnitTest/TestData/root.zone/#authority#/#path#/DomainModel.xml" }; } } } ================================================ FILE: DataDiscovery/Tests/DiscoveryServices.UnitTest/TestData/DomainModel.xml ================================================ AliasName1 DomainModelUriString1 DomainModelGuidString1 Description1 SymbolicName1 0 SymbolicName1 ProcessValueName1 Null 1 1 -2147483647 2147483647 qname1 SymbolicName2 ProcessValueName2 Boolean -2147483647 0 2 -2147483646 qname2 SymbolicName3 ProcessValueName3 SByte 2147483647 2147483646 -1 3 qname3 SymbolicName2 65535 SymbolicName4 ProcessValueName4 Byte 0 -2147483645 2147483645 -2 qname4 SymbolicName5 ProcessValueName5 Int16 2 4 -2147483644 2147483644 qname5 SymbolicName6 ProcessValueName6 UInt16 -2147483646 -3 5 -2147483643 qname6 SymbolicName3 1 SymbolicName7 ProcessValueName7 Int32 2147483646 2147483643 -4 6 qname7 SymbolicName8 ProcessValueName8 UInt32 -1 -2147483642 2147483642 -5 qname8 SymbolicName9 ProcessValueName9 Int64 3 7 -2147483641 2147483641 qname9 UniversalAddressSpaceLocator1 UniversalAuthorizationServerLocator1 Structure StructureWithOptionalFields Union Structure StructureWithOptionalFields Union Structure StructureWithOptionalFields Union ================================================ FILE: DataDiscovery/Tests/DiscoveryServices.UnitTest/TestData/commsvr.com.UA.Examples.BoilersSet.DomainModel.cs ================================================  using System; using System.Xml; using UAOOI.DataDiscovery.DiscoveryServices.Models; namespace UAOOI.DataDiscovery.DiscoveryServices.UnitTest.TestData { public static class ReferenceDomainModel { internal static DomainModel GerReferenceDomainModel() { return new DomainModel() { AliasName = "BoilersArea", Description = "Domain model for the BoilersArea", DomainModelGuid = new Guid("81976533-C604-4AEA-A2F9-F27687FF1A17"), DomainModelUri = new Uri(@"http://commsvr.com/UA/Examples/BoilersSet"), SemanticsDataCollection = NewSemanticsDataCollection(), TypeDictionaries = NewTypeDictionaries(), UniversalAddressSpaceLocator = @"http://localhost/opc/Commsvr.UA.Examples.BoilersSet.NodeSet2.xml", UniversalAuthorizationServerLocator = @"http://localhost/opc/Commsvr.UA.Examples.BoilersSet.OTPTable.xml", UniversalDiscoveryServiceLocator = @"http://localhost/opc/Commsvr.UA.Examples.BoilersSet.DiscoveryServiceLocator.xml", }; } private static TypeDictionary[] NewTypeDictionaries() { return new TypeDictionary[] { new TypeDictionary() { TargetNamespace = @"http://opcfoundation.org/UA/", StructuredType = new StructuredType[] { CreateStructuredType("Range", RangeFields), CreateStructuredType("EUInformation", EUInformationFields) } } }; } private static StructuredTypeField[] EUInformationFields() { return new StructuredTypeField[] { new StructuredTypeField() { Name = "NamespaceUri", TypeName = new XmlQualifiedName("NamespaceUri", "http://opcfoundation.org/UA/"), SwitchOperandSpecified = false, SwitchValueSpecified = false }, new StructuredTypeField() { Name = "UnitId", TypeName = new XmlQualifiedName("Int32", "http://opcfoundation.org/UA/"), SwitchOperandSpecified = false, SwitchValueSpecified = false }, new StructuredTypeField() { Name = "DisplayName", TypeName = new XmlQualifiedName("LocalizedText", "http://opcfoundation.org/UA/"), SwitchOperandSpecified = false, SwitchValueSpecified = false }, new StructuredTypeField() { Name = "Description", TypeName = new XmlQualifiedName("LocalizedText", "http://opcfoundation.org/UA/"), SwitchOperandSpecified = false, SwitchValueSpecified = false } }; } private static StructuredType CreateStructuredType(string name, Func createFields) { return new StructuredType() { StructureKind = StructureKindEnum.Structure, Name = name, Field = createFields() }; } private static StructuredTypeField[] RangeFields() { return new StructuredTypeField[] { new StructuredTypeField() { Name = "Low", TypeName = new XmlQualifiedName("Double", "http://opcfoundation.org/UA/"), SwitchOperandSpecified = false, SwitchValueSpecified = false }, new StructuredTypeField() { Name = "High", TypeName = new XmlQualifiedName("Double", "http://opcfoundation.org/UA/"), SwitchOperandSpecified = false, SwitchValueSpecified = false } }; } private static SemanticsDataIndex[] NewSemanticsDataCollection() { return new SemanticsDataIndex[] { NewBoilerAlpha() }; } private static SemanticsDataIndex NewBoilerAlpha() { return new SemanticsDataIndex() { DataSet = NewBoilerAlphaDataSet(), Index = 0, SymbolicName = "BoilersArea_BoilerAlpha", }; } private static FieldMetaData[] NewBoilerAlphaDataSet() { return new FieldMetaData[] { new FieldMetaData { SymbolicName = "BoilersArea_BoilerAlpha_InputPipe_FlowTransmitter1_Output", TypeInformation = new UATypeInfo( ) { BuiltInType = BuiltInType.Double, ValueRank= -1 } }, new FieldMetaData { SymbolicName = "BoilersArea_BoilerAlpha_InputPipe_FlowTransmitter1_Output_Definition", TypeInformation = new UATypeInfo( ) { BuiltInType = BuiltInType.String, ValueRank= -1 } }, new FieldMetaData { SymbolicName = "BoilersArea_BoilerAlpha_InputPipe_FlowTransmitter1_Output_ValuePrecision", TypeInformation = new UATypeInfo( ) { BuiltInType = BuiltInType.Double, ValueRank= -1 } }, new FieldMetaData { SymbolicName = "BoilersArea_BoilerAlpha_InputPipe_FlowTransmitter1_Output_InstrumentRange", TypeInformation = new UATypeInfo( ) { BuiltInType = BuiltInType.ExtensionObject, ValueRank= -1 , TypeName = new System.Xml.XmlQualifiedName( "Range", @"http://opcfoundation.org/UA/")} }, new FieldMetaData { SymbolicName = "BoilersArea_BoilerAlpha_InputPipe_FlowTransmitter1_Output_EURange", TypeInformation = new UATypeInfo( ) { BuiltInType = BuiltInType.ExtensionObject, ValueRank= -1 , TypeName = new System.Xml.XmlQualifiedName( "Range", @"http://opcfoundation.org/UA/") } }, new FieldMetaData { SymbolicName = "BoilersArea_BoilerAlpha_InputPipe_FlowTransmitter1_Output_EngineeringUnits", TypeInformation = new UATypeInfo( ) { BuiltInType = BuiltInType.ExtensionObject, ValueRank= -1 , TypeName = new System.Xml.XmlQualifiedName( "EUInformation", @"http://opcfoundation.org/UA/") } }, new FieldMetaData { SymbolicName = "BoilersArea_BoilerAlpha_InputPipe_Valve_Input", TypeInformation = new UATypeInfo( ) { BuiltInType = BuiltInType.Double, ValueRank= -1 } }, new FieldMetaData { SymbolicName = "BoilersArea_BoilerAlpha_InputPipe_Valve_Input_Definition", TypeInformation = new UATypeInfo( ) { BuiltInType = BuiltInType.String, ValueRank= -1 } }, new FieldMetaData { SymbolicName = "BoilersArea_BoilerAlpha_InputPipe_Valve_Input_ValuePrecision", TypeInformation = new UATypeInfo( ) { BuiltInType = BuiltInType.Double, ValueRank= -1 } }, new FieldMetaData { SymbolicName = "BoilersArea_BoilerAlpha_InputPipe_Valve_Input_InstrumentRange", TypeInformation = new UATypeInfo( ) { BuiltInType = BuiltInType.ExtensionObject, ValueRank= -1 , TypeName = new System.Xml.XmlQualifiedName( "Range", @"http://opcfoundation.org/UA/")} }, new FieldMetaData { SymbolicName = "BoilersArea_BoilerAlpha_InputPipe_Valve_Input_EURange", TypeInformation = new UATypeInfo( ) { BuiltInType = BuiltInType.ExtensionObject, ValueRank= -1 , TypeName = new System.Xml.XmlQualifiedName( "Range", @"http://opcfoundation.org/UA/") } }, new FieldMetaData { SymbolicName = "BoilersArea_BoilerAlpha_InputPipe_Valve_Input_EngineeringUnits", TypeInformation = new UATypeInfo( ) { BuiltInType = BuiltInType.ExtensionObject, ValueRank= -1 , TypeName = new System.Xml.XmlQualifiedName( "EUInformation", @"http://opcfoundation.org/UA/") } }, new FieldMetaData { SymbolicName = "BoilersArea_BoilerAlpha_Drum_LevelIndicator_Output", TypeInformation = new UATypeInfo( ) { BuiltInType = BuiltInType.Double, ValueRank= -1 } }, new FieldMetaData { SymbolicName = "BoilersArea_BoilerAlpha_Drum_LevelIndicator_Output_Definition", TypeInformation = new UATypeInfo( ) { BuiltInType = BuiltInType.String, ValueRank= -1 } }, new FieldMetaData { SymbolicName = "BoilersArea_BoilerAlpha_Drum_LevelIndicator_Output_ValuePrecision", TypeInformation = new UATypeInfo( ) { BuiltInType = BuiltInType.Double, ValueRank= -1 } }, new FieldMetaData { SymbolicName = "BoilersArea_BoilerAlpha_Drum_LevelIndicator_Output_InstrumentRange", TypeInformation = new UATypeInfo( ) { BuiltInType = BuiltInType.ExtensionObject, ValueRank= -1 , TypeName = new System.Xml.XmlQualifiedName( "Range", @"http://opcfoundation.org/UA/")} }, new FieldMetaData { SymbolicName = "BoilersArea_BoilerAlpha_Drum_LevelIndicator_Output_EURange", TypeInformation = new UATypeInfo( ) { BuiltInType = BuiltInType.ExtensionObject, ValueRank= -1 , TypeName = new System.Xml.XmlQualifiedName( "Range", @"http://opcfoundation.org/UA/") } }, new FieldMetaData { SymbolicName = "BoilersArea_BoilerAlpha_Drum_LevelIndicator_Output_EngineeringUnits", TypeInformation = new UATypeInfo( ) { BuiltInType = BuiltInType.ExtensionObject, ValueRank= -1 , TypeName = new System.Xml.XmlQualifiedName( "EUInformation", @"http://opcfoundation.org/UA/") } }, new FieldMetaData { SymbolicName = "BoilersArea_BoilerAlpha_OutputPipe_FlowTransmitter2_Output", TypeInformation = new UATypeInfo( ) { BuiltInType = BuiltInType.Double, ValueRank= -1 } }, new FieldMetaData { SymbolicName = "BoilersArea_BoilerAlpha_OutputPipe_FlowTransmitter2_Output_Definition", TypeInformation = new UATypeInfo( ) { BuiltInType = BuiltInType.String, ValueRank= -1 } }, new FieldMetaData { SymbolicName = "BoilersArea_BoilerAlpha_OutputPipe_FlowTransmitter2_Output_ValuePrecision", TypeInformation = new UATypeInfo( ) { BuiltInType = BuiltInType.Double, ValueRank= -1 } }, new FieldMetaData { SymbolicName = "BoilersArea_BoilerAlpha_OutputPipe_FlowTransmitter2_Output_InstrumentRange", TypeInformation = new UATypeInfo( ) { BuiltInType = BuiltInType.ExtensionObject, ValueRank= -1 , TypeName = new System.Xml.XmlQualifiedName( "Range", @"http://opcfoundation.org/UA/")} }, new FieldMetaData { SymbolicName = "BoilersArea_BoilerAlpha_OutputPipe_FlowTransmitter2_Output_EURange", TypeInformation = new UATypeInfo( ) { BuiltInType = BuiltInType.ExtensionObject, ValueRank= -1 , TypeName = new System.Xml.XmlQualifiedName( "Range", @"http://opcfoundation.org/UA/") } }, new FieldMetaData { SymbolicName = "BoilersArea_BoilerAlpha_OutputPipe_FlowTransmitter2_Output_EngineeringUnits", TypeInformation = new UATypeInfo( ) { BuiltInType = BuiltInType.ExtensionObject, ValueRank= -1 , TypeName = new System.Xml.XmlQualifiedName( "EUInformation", @"http://opcfoundation.org/UA/") } }, new FieldMetaData { SymbolicName = "BoilersArea_BoilerAlpha_FlowController_Measurement", TypeInformation = new UATypeInfo( ) { BuiltInType = BuiltInType.Double, ValueRank= -1 } }, new FieldMetaData { SymbolicName = "BoilersArea_BoilerAlpha_FlowController_SetPoint", TypeInformation = new UATypeInfo( ) { BuiltInType = BuiltInType.Double, ValueRank= -1 } }, new FieldMetaData { SymbolicName = "BoilersArea_BoilerAlpha_FlowController_ControlOut", TypeInformation = new UATypeInfo( ) { BuiltInType = BuiltInType.Double, ValueRank= -1 } }, new FieldMetaData { SymbolicName = "BoilersArea_BoilerAlpha_LevelController_Measurement", TypeInformation = new UATypeInfo( ) { BuiltInType = BuiltInType.Double, ValueRank= -1 } }, new FieldMetaData { SymbolicName = "BoilersArea_BoilerAlpha_LevelController_SetPoint", TypeInformation = new UATypeInfo( ) { BuiltInType = BuiltInType.Double, ValueRank= -1 } }, new FieldMetaData { SymbolicName = "BoilersArea_BoilerAlpha_LevelController_ControlOut", TypeInformation = new UATypeInfo( ) { BuiltInType = BuiltInType.Double, ValueRank= -1 } }, new FieldMetaData { SymbolicName = "BoilersArea_BoilerAlpha_CustomController_Input1", TypeInformation = new UATypeInfo( ) { BuiltInType = BuiltInType.Double, ValueRank= -1 } }, new FieldMetaData { SymbolicName = "BoilersArea_BoilerAlpha_CustomController_Input2", TypeInformation = new UATypeInfo( ) { BuiltInType = BuiltInType.Double, ValueRank= -1 } }, new FieldMetaData { SymbolicName = "BoilersArea_BoilerAlpha_CustomController_Input3", TypeInformation = new UATypeInfo( ) { BuiltInType = BuiltInType.Double, ValueRank= -1 } }, new FieldMetaData { SymbolicName = "BoilersArea_BoilerAlpha_CustomController_ControlOut", TypeInformation = new UATypeInfo( ) { BuiltInType = BuiltInType.Double, ValueRank= -1 } }, new FieldMetaData { SymbolicName = "BoilersArea_BoilerAlpha_CustomController_DescriptionX", TypeInformation = new UATypeInfo( ) { BuiltInType = BuiltInType.LocalizedText, ValueRank= -1 } }, new FieldMetaData { SymbolicName = "BoilersArea_BoilerAlpha_CustomController_Input1", TypeInformation = new UATypeInfo( ) { BuiltInType = BuiltInType.Double, ValueRank= -1 } }, new FieldMetaData { SymbolicName = "BoilersArea_BoilerAlpha_Simulation_CurrentState", TypeInformation = new UATypeInfo( ) { BuiltInType = BuiltInType.LocalizedText, ValueRank= -1 } }, new FieldMetaData { SymbolicName = "BoilersArea_BoilerAlpha_Simulation_CurrentState_Id", TypeInformation = new UATypeInfo( ) { BuiltInType = BuiltInType.NodeId, ValueRank= -1 } }, new FieldMetaData { SymbolicName = "BoilersArea_BoilerAlpha_Simulation_CurrentState_Name", TypeInformation = new UATypeInfo( ) { BuiltInType = BuiltInType.LocalizedText, ValueRank= -1 } }, new FieldMetaData { SymbolicName = "BoilersArea_BoilerAlpha_Simulation_CurrentState_Number", TypeInformation = new UATypeInfo( ) { BuiltInType = BuiltInType.UInt32, ValueRank= -1 } }, new FieldMetaData { SymbolicName = "BoilersArea_BoilerAlpha_Simulation_CurrentState_EffectiveDisplayName", TypeInformation = new UATypeInfo( ) { BuiltInType = BuiltInType.Double, ValueRank= -1 } }, new FieldMetaData { SymbolicName = "BoilersArea_BoilerAlpha_Simulation_LastTransition", TypeInformation = new UATypeInfo( ) { BuiltInType = BuiltInType.LocalizedText, ValueRank= -1 } }, new FieldMetaData { SymbolicName = "BoilersArea_BoilerAlpha_Simulation_LastTransition_Id", TypeInformation = new UATypeInfo( ) { BuiltInType = BuiltInType.NodeId, ValueRank= -1 } }, new FieldMetaData { SymbolicName = "BoilersArea_BoilerAlpha_Simulation_LastTransition_Name", TypeInformation = new UATypeInfo( ) { BuiltInType = BuiltInType.LocalizedText, ValueRank= -1 } }, new FieldMetaData { SymbolicName = "BoilersArea_BoilerAlpha_Simulation_LastTransition_Number", TypeInformation = new UATypeInfo( ) { BuiltInType = BuiltInType.UInt32, ValueRank= -1 } }, new FieldMetaData { SymbolicName = "BoilersArea_BoilerAlpha_Simulation_LastTransition_TransitionTime", TypeInformation = new UATypeInfo( ) { BuiltInType = BuiltInType.DateTime, ValueRank= -1 } }, new FieldMetaData { SymbolicName = "BoilersArea_BoilerAlpha_Simulation_LastTransition_EffectiveTransitionTime", TypeInformation = new UATypeInfo( ) { BuiltInType = BuiltInType.DateTime, ValueRank= -1 } }, new FieldMetaData { SymbolicName = "BoilersArea_BoilerAlpha_Simulation_Deletable", TypeInformation = new UATypeInfo( ) { BuiltInType = BuiltInType.Boolean, ValueRank= -1 } }, new FieldMetaData { SymbolicName = "BoilersArea_BoilerAlpha_Simulation_AutoDelete", TypeInformation = new UATypeInfo( ) { BuiltInType = BuiltInType.Boolean, ValueRank= -1 } }, new FieldMetaData { SymbolicName = "BoilersArea_BoilerAlpha_Simulation_RecycleCount", TypeInformation = new UATypeInfo( ) { BuiltInType = BuiltInType.UInt32, ValueRank= -1 } }, new FieldMetaData { SymbolicName = "BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics", TypeInformation = new UATypeInfo( ) { BuiltInType = BuiltInType.Double, ValueRank= -1 } }, new FieldMetaData { SymbolicName = "BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_CreateSessionId", TypeInformation = new UATypeInfo( ) { BuiltInType = BuiltInType.Double, ValueRank= -1 } }, new FieldMetaData { SymbolicName = "BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_CreateClientName", TypeInformation = new UATypeInfo( ) { BuiltInType = BuiltInType.Double, ValueRank= -1 } }, new FieldMetaData { SymbolicName = "BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_InvocationCreationTime", TypeInformation = new UATypeInfo( ) { BuiltInType = BuiltInType.Double, ValueRank= -1 } }, new FieldMetaData { SymbolicName = "BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_InvocationCreationTime", TypeInformation = new UATypeInfo( ) { BuiltInType = BuiltInType.Double, ValueRank= -1 } }, new FieldMetaData { SymbolicName = "BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_LastTransitionTime", TypeInformation = new UATypeInfo( ) { BuiltInType = BuiltInType.Double, ValueRank= -1 } }, new FieldMetaData { SymbolicName = "BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_InvocationCreationTime", TypeInformation = new UATypeInfo( ) { BuiltInType = BuiltInType.Double, ValueRank= -1 } }, new FieldMetaData { SymbolicName = "BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_LastMethodCall", TypeInformation = new UATypeInfo( ) { BuiltInType = BuiltInType.Double, ValueRank= -1 } }, new FieldMetaData { SymbolicName = "BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_LastMethodSessionId", TypeInformation = new UATypeInfo( ) { BuiltInType = BuiltInType.Double, ValueRank= -1 } }, new FieldMetaData { SymbolicName = "BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_LastMethodInputArguments", TypeInformation = new UATypeInfo( ) { BuiltInType = BuiltInType.Double, ValueRank= -1 } }, new FieldMetaData { SymbolicName = "BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_LastMethodOutputArguments", TypeInformation = new UATypeInfo( ) { BuiltInType = BuiltInType.Double, ValueRank= -1 } }, new FieldMetaData { SymbolicName = "BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_LastMethodCallTime", TypeInformation = new UATypeInfo( ) { BuiltInType = BuiltInType.Double, ValueRank= -1 } }, new FieldMetaData { SymbolicName = "BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_LastMethodReturnStatus", TypeInformation = new UATypeInfo( ) { BuiltInType = BuiltInType.Double, ValueRank= -1 } }, new FieldMetaData { SymbolicName = "BoilersArea_BoilerAlpha_Simulation_FinalResultData", TypeInformation = new UATypeInfo( ) { BuiltInType = BuiltInType.Double, ValueRank= -1 } }, new FieldMetaData { SymbolicName = "BoilersArea_BoilerAlpha_Simulation_UpdateRate", TypeInformation = new UATypeInfo( ) { BuiltInType = BuiltInType.Int32, ValueRank= -1 } }, }; } } } ================================================ FILE: DataDiscovery/Tests/DiscoveryServices.UnitTest/TestData/root.zone/DomainDescriptor.xml ================================================ Starting point for discovery process with the purpose of resolving Uri and get DomainDescriptor record https://raw.githubusercontent.com/mpostol/OPC-UA-OOI/master/DataDiscovery/Tests/DiscoveryServices.UnitTest/TestData/root.zone/#authority#/DomainDescriptor.xml DomainDescriptor ================================================ FILE: DataDiscovery/Tests/DiscoveryServices.UnitTest/TestData/root.zone/commsvr.com/DomainDescriptor.xml ================================================ Iteration #1 DomainDescriptor record - root entry for commsvr.com. https://raw.githubusercontent.com/mpostol/OPC-UA-OOI/master/DataDiscovery/Tests/DiscoveryServices.UnitTest/TestData/root.zone/#authority#/#path#/DomainDescriptor.xml DomainDescriptor ================================================ FILE: DataDiscovery/Tests/DiscoveryServices.UnitTest/TestData/root.zone/commsvr.com/UA/Examples/BoilersSet/Commsvr.UA.Examples.BoilersSet.NodeSet2.xml ================================================  http://commsvr.com/UA/Examples/BoilersSet http://tempuri.org/UA/Examples/BoilerType i=1 i=2 i=3 i=4 i=5 i=6 i=7 i=8 i=9 i=10 i=11 i=13 i=12 i=15 i=14 i=16 i=17 i=18 i=20 i=21 i=19 i=22 i=26 i=27 i=28 i=47 i=46 i=35 i=36 i=48 i=45 i=40 i=37 i=38 i=39 BoilersArea ns=1;i=81 ns=1;i=160 ns=1;i=239 ns=1;i=318 i=85 i=2253 ns=1;i=81 i=61 Boiler #1 ns=1;i=82 ns=1;i=97 ns=1;i=105 ns=1;i=113 ns=1;i=117 ns=1;i=121 ns=1;i=127 ns=1;i=1 ns=1;i=82 ns=1;i=97 ns=1;i=105 ns=1;i=127 ns=2;i=151 ns=1;i=1 Boiler #1: Pipe1001 ns=1;i=83 ns=1;i=90 ns=1;i=81 ns=1;i=83 ns=1;i=97 ns=2;i=120 ns=1;i=81 FlowTransmitter1 ns=1;i=84 ns=1;i=82 ns=2;i=50 ns=1;i=82 Output ns=1;i=88 ns=1;i=114 ns=1;i=123 i=2368 ns=1;i=83 EURange i=68 ns=1;i=84 Valve ns=1;i=91 ns=2;i=28 ns=1;i=82 Input ns=1;i=95 ns=1;i=116 i=2368 ns=1;i=90 EURange i=68 ns=1;i=91 Boiler #1: Drum1001 ns=1;i=98 ns=1;i=81 ns=1;i=82 ns=1;i=98 ns=1;i=105 ns=2;i=135 ns=1;i=81 LIX001 ns=1;i=99 ns=1;i=97 ns=2;i=43 ns=1;i=97 Output ns=1;i=103 ns=1;i=118 i=2368 ns=1;i=98 EURange i=68 ns=1;i=99 Boiler #1: Pipe1002 ns=1;i=106 ns=1;i=81 ns=1;i=97 ns=1;i=106 ns=2;i=143 ns=1;i=81 FTX002 ns=1;i=107 ns=1;i=105 ns=2;i=50 ns=1;i=105 Output ns=1;i=111 ns=1;i=124 i=2368 ns=1;i=106 EURange i=68 ns=1;i=107 Boiler #1: FC1001 ns=1;i=114 ns=1;i=115 ns=1;i=116 ns=2;i=39 ns=1;i=81 Measurement ns=1;i=84 i=68 ns=1;i=113 SetPoint ns=1;i=125 i=68 ns=1;i=113 ControlOut ns=1;i=91 i=68 ns=1;i=113 Boiler #1: LC1001 ns=1;i=118 ns=1;i=119 ns=1;i=120 ns=2;i=35 ns=1;i=81 Measurement ns=1;i=99 i=68 ns=1;i=117 SetPoint i=68 ns=1;i=117 ControlOut ns=1;i=122 i=68 ns=1;i=117 Boiler #1: CC1001 ns=1;i=122 ns=1;i=123 ns=1;i=124 ns=1;i=125 ns=1;i=126 ns=2;i=22 ns=1;i=81 Input1 ns=1;i=120 i=68 ns=1;i=121 Input2 ns=1;i=84 i=68 ns=1;i=121 Input3 ns=1;i=107 i=68 ns=1;i=121 ControlOut ns=1;i=115 i=68 ns=1;i=121 Description i=68 ns=1;i=121 Simulation ns=1;i=128 ns=1;i=133 ns=1;i=139 ns=1;i=141 ns=1;i=154 ns=1;i=155 ns=1;i=156 ns=1;i=157 ns=1;i=158 ns=1;i=159 ns=1;i=81 ns=2;i=57 ns=1;i=81 CurrentState ns=1;i=129 ns=1;i=131 i=2760 ns=1;i=127 Id i=68 ns=1;i=128 Number i=68 ns=1;i=128 LastTransition ns=1;i=134 ns=1;i=136 ns=1;i=137 i=2767 ns=1;i=127 Id i=68 ns=1;i=133 Number i=68 ns=1;i=133 TransitionTime i=68 ns=1;i=133 Deletable i=68 ns=1;i=127 RecycleCount i=68 ns=1;i=127 Start Causes the Program to transition from the Ready state to the Running state. ns=1;i=127 Suspend Causes the Program to transition from the Running state to the Suspended state. ns=1;i=127 Resume Causes the Program to transition from the Suspended state to the Running state. ns=1;i=127 Halt Causes the Program to transition from the Ready, Running or Suspended state to the Halted state. ns=1;i=127 Reset Causes the Program to transition from the Halted state to the Ready state. ns=1;i=127 UpdateRate The rate at which the simulation runs. i=68 ns=1;i=127 Boilers Second ns=1;i=161 ns=1;i=176 ns=1;i=184 ns=1;i=192 ns=1;i=196 ns=1;i=200 ns=1;i=206 ns=1;i=161 ns=1;i=176 ns=1;i=184 ns=1;i=206 ns=2;i=151 ns=1;i=1 Boiler #2: Pipe1001 ns=1;i=162 ns=1;i=169 ns=1;i=160 ns=1;i=162 ns=1;i=176 ns=2;i=120 ns=1;i=160 FlowTransmitter1 ns=1;i=163 ns=1;i=161 ns=2;i=50 ns=1;i=161 Output ns=1;i=167 ns=1;i=193 ns=1;i=202 i=2368 ns=1;i=162 EURange i=68 ns=1;i=163 Valve ns=1;i=170 ns=2;i=28 ns=1;i=161 Input ns=1;i=174 ns=1;i=195 i=2368 ns=1;i=169 EURange i=68 ns=1;i=170 Boiler #2: Drum1001 ns=1;i=177 ns=1;i=160 ns=1;i=161 ns=1;i=177 ns=1;i=184 ns=2;i=135 ns=1;i=160 LIX001 ns=1;i=178 ns=1;i=176 ns=2;i=43 ns=1;i=176 Output ns=1;i=182 ns=1;i=197 i=2368 ns=1;i=177 EURange i=68 ns=1;i=178 Boiler #2: Pipe1002 ns=1;i=185 ns=1;i=160 ns=1;i=176 ns=1;i=185 ns=2;i=143 ns=1;i=160 FTX002 ns=1;i=186 ns=1;i=184 ns=2;i=50 ns=1;i=184 Output ns=1;i=190 ns=1;i=203 i=2368 ns=1;i=185 EURange i=68 ns=1;i=186 Boiler #2: FC1001 ns=1;i=193 ns=1;i=194 ns=1;i=195 ns=2;i=39 ns=1;i=160 Measurement ns=1;i=163 i=68 ns=1;i=192 SetPoint ns=1;i=204 i=68 ns=1;i=192 ControlOut ns=1;i=170 i=68 ns=1;i=192 Boiler #2: LC1001 ns=1;i=197 ns=1;i=198 ns=1;i=199 ns=2;i=35 ns=1;i=160 Measurement ns=1;i=178 i=68 ns=1;i=196 SetPoint i=68 ns=1;i=196 ControlOut ns=1;i=201 i=68 ns=1;i=196 Boiler #2: CC1001 ns=1;i=201 ns=1;i=202 ns=1;i=203 ns=1;i=204 ns=1;i=205 ns=2;i=22 ns=1;i=160 Input1 ns=1;i=199 i=68 ns=1;i=200 Input2 ns=1;i=163 i=68 ns=1;i=200 Input3 ns=1;i=186 i=68 ns=1;i=200 ControlOut ns=1;i=194 i=68 ns=1;i=200 Description i=68 ns=1;i=200 Simulation ns=1;i=207 ns=1;i=212 ns=1;i=218 ns=1;i=220 ns=1;i=233 ns=1;i=234 ns=1;i=235 ns=1;i=236 ns=1;i=237 ns=1;i=238 ns=1;i=160 ns=2;i=57 ns=1;i=160 CurrentState ns=1;i=208 ns=1;i=210 i=2760 ns=1;i=206 Id i=68 ns=1;i=207 Number i=68 ns=1;i=207 LastTransition ns=1;i=213 ns=1;i=215 ns=1;i=216 i=2767 ns=1;i=206 Id i=68 ns=1;i=212 Number i=68 ns=1;i=212 TransitionTime i=68 ns=1;i=212 Deletable i=68 ns=1;i=206 RecycleCount i=68 ns=1;i=206 Start Causes the Program to transition from the Ready state to the Running state. ns=1;i=206 Suspend Causes the Program to transition from the Running state to the Suspended state. ns=1;i=206 Resume Causes the Program to transition from the Suspended state to the Running state. ns=1;i=206 Halt Causes the Program to transition from the Ready, Running or Suspended state to the Halted state. ns=1;i=206 Reset Causes the Program to transition from the Halted state to the Ready state. ns=1;i=206 UpdateRate The rate at which the simulation runs. i=68 ns=1;i=206 Boiler #3 ns=1;i=240 ns=1;i=255 ns=1;i=263 ns=1;i=271 ns=1;i=275 ns=1;i=279 ns=1;i=285 ns=1;i=240 ns=1;i=255 ns=1;i=263 ns=1;i=285 ns=2;i=151 ns=1;i=1 Boiler #3: Pipe1001 ns=1;i=241 ns=1;i=248 ns=1;i=239 ns=1;i=241 ns=1;i=255 ns=2;i=120 ns=1;i=239 FlowTransmitter1 ns=1;i=242 ns=1;i=240 ns=2;i=50 ns=1;i=240 Output ns=1;i=246 ns=1;i=272 ns=1;i=281 i=2368 ns=1;i=241 EURange i=68 ns=1;i=242 Valve ns=1;i=249 ns=2;i=28 ns=1;i=240 Input ns=1;i=253 ns=1;i=274 i=2368 ns=1;i=248 EURange i=68 ns=1;i=249 Boiler #3: Drum1001 ns=1;i=256 ns=1;i=239 ns=1;i=240 ns=1;i=256 ns=1;i=263 ns=2;i=135 ns=1;i=239 LIX001 ns=1;i=257 ns=1;i=255 ns=2;i=43 ns=1;i=255 Output ns=1;i=261 ns=1;i=276 i=2368 ns=1;i=256 EURange i=68 ns=1;i=257 Boiler #3: Pipe1002 ns=1;i=264 ns=1;i=239 ns=1;i=255 ns=1;i=264 ns=2;i=143 ns=1;i=239 FTX002 ns=1;i=265 ns=1;i=263 ns=2;i=50 ns=1;i=263 Output ns=1;i=269 ns=1;i=282 i=2368 ns=1;i=264 EURange i=68 ns=1;i=265 Boiler #3: FC1001 ns=1;i=272 ns=1;i=273 ns=1;i=274 ns=2;i=39 ns=1;i=239 Measurement ns=1;i=242 i=68 ns=1;i=271 SetPoint ns=1;i=283 i=68 ns=1;i=271 ControlOut ns=1;i=249 i=68 ns=1;i=271 Boiler #3: LC1001 ns=1;i=276 ns=1;i=277 ns=1;i=278 ns=2;i=35 ns=1;i=239 Measurement ns=1;i=257 i=68 ns=1;i=275 SetPoint i=68 ns=1;i=275 ControlOut ns=1;i=280 i=68 ns=1;i=275 Boiler #3: CC1001 ns=1;i=280 ns=1;i=281 ns=1;i=282 ns=1;i=283 ns=1;i=284 ns=2;i=22 ns=1;i=239 Input1 ns=1;i=278 i=68 ns=1;i=279 Input2 ns=1;i=242 i=68 ns=1;i=279 Input3 ns=1;i=265 i=68 ns=1;i=279 ControlOut ns=1;i=273 i=68 ns=1;i=279 Description i=68 ns=1;i=279 Simulation ns=1;i=286 ns=1;i=291 ns=1;i=297 ns=1;i=299 ns=1;i=312 ns=1;i=313 ns=1;i=314 ns=1;i=315 ns=1;i=316 ns=1;i=317 ns=1;i=239 ns=2;i=57 ns=1;i=239 CurrentState ns=1;i=287 ns=1;i=289 i=2760 ns=1;i=285 Id i=68 ns=1;i=286 Number i=68 ns=1;i=286 LastTransition ns=1;i=292 ns=1;i=294 ns=1;i=295 i=2767 ns=1;i=285 Id i=68 ns=1;i=291 Number i=68 ns=1;i=291 TransitionTime i=68 ns=1;i=291 Deletable i=68 ns=1;i=285 RecycleCount i=68 ns=1;i=285 Start Causes the Program to transition from the Ready state to the Running state. ns=1;i=285 Suspend Causes the Program to transition from the Running state to the Suspended state. ns=1;i=285 Resume Causes the Program to transition from the Suspended state to the Running state. ns=1;i=285 Halt Causes the Program to transition from the Ready, Running or Suspended state to the Halted state. ns=1;i=285 Reset Causes the Program to transition from the Halted state to the Ready state. ns=1;i=285 UpdateRate The rate at which the simulation runs. i=68 ns=1;i=285 Boiler #4 ns=1;i=319 ns=1;i=334 ns=1;i=342 ns=1;i=350 ns=1;i=354 ns=1;i=358 ns=1;i=364 ns=1;i=319 ns=1;i=334 ns=1;i=342 ns=1;i=364 ns=2;i=151 ns=1;i=1 Boiler #4: Pipe1001 ns=1;i=320 ns=1;i=327 ns=1;i=318 ns=1;i=320 ns=1;i=334 ns=2;i=120 ns=1;i=318 FlowTransmitter1 ns=1;i=321 ns=1;i=319 ns=2;i=50 ns=1;i=319 Output ns=1;i=325 ns=1;i=351 ns=1;i=360 i=2368 ns=1;i=320 EURange i=68 ns=1;i=321 Valve ns=1;i=328 ns=2;i=28 ns=1;i=319 Input ns=1;i=332 ns=1;i=353 i=2368 ns=1;i=327 EURange i=68 ns=1;i=328 Boiler #4: Drum1001 ns=1;i=335 ns=1;i=318 ns=1;i=319 ns=1;i=335 ns=1;i=342 ns=2;i=135 ns=1;i=318 LIX001 ns=1;i=336 ns=1;i=334 ns=2;i=43 ns=1;i=334 Output ns=1;i=340 ns=1;i=355 i=2368 ns=1;i=335 EURange i=68 ns=1;i=336 Boiler #4: Pipe1002 ns=1;i=343 ns=1;i=318 ns=1;i=334 ns=1;i=343 ns=2;i=143 ns=1;i=318 FTX002 ns=1;i=344 ns=1;i=342 ns=2;i=50 ns=1;i=342 Output ns=1;i=348 ns=1;i=361 i=2368 ns=1;i=343 EURange i=68 ns=1;i=344 Boiler #4: FC1001 ns=1;i=351 ns=1;i=352 ns=1;i=353 ns=2;i=39 ns=1;i=318 Measurement ns=1;i=321 i=68 ns=1;i=350 SetPoint ns=1;i=362 i=68 ns=1;i=350 ControlOut ns=1;i=328 i=68 ns=1;i=350 Boiler #4: LC1001 ns=1;i=355 ns=1;i=356 ns=1;i=357 ns=2;i=35 ns=1;i=318 Measurement ns=1;i=336 i=68 ns=1;i=354 SetPoint i=68 ns=1;i=354 ControlOut ns=1;i=359 i=68 ns=1;i=354 Boiler #4: CC1001 ns=1;i=359 ns=1;i=360 ns=1;i=361 ns=1;i=362 ns=1;i=363 ns=2;i=22 ns=1;i=318 Input1 ns=1;i=357 i=68 ns=1;i=358 Input2 ns=1;i=321 i=68 ns=1;i=358 Input3 ns=1;i=344 i=68 ns=1;i=358 ControlOut ns=1;i=352 i=68 ns=1;i=358 Description i=68 ns=1;i=358 Simulation ns=1;i=365 ns=1;i=370 ns=1;i=376 ns=1;i=378 ns=1;i=391 ns=1;i=392 ns=1;i=393 ns=1;i=394 ns=1;i=395 ns=1;i=396 ns=1;i=318 ns=2;i=57 ns=1;i=318 CurrentState ns=1;i=366 ns=1;i=368 i=2760 ns=1;i=364 Id i=68 ns=1;i=365 Number i=68 ns=1;i=365 LastTransition ns=1;i=371 ns=1;i=373 ns=1;i=374 i=2767 ns=1;i=364 Id i=68 ns=1;i=370 Number i=68 ns=1;i=370 TransitionTime i=68 ns=1;i=370 Deletable i=68 ns=1;i=364 RecycleCount i=68 ns=1;i=364 Start Causes the Program to transition from the Ready state to the Running state. ns=1;i=364 Suspend Causes the Program to transition from the Running state to the Suspended state. ns=1;i=364 Resume Causes the Program to transition from the Suspended state to the Running state. ns=1;i=364 Halt Causes the Program to transition from the Ready, Running or Suspended state to the Halted state. ns=1;i=364 Reset Causes the Program to transition from the Halted state to the Ready state. ns=1;i=364 UpdateRate The rate at which the simulation runs. i=68 ns=1;i=364 Drums i=85 ns=1;i=97 i=58 Pipes i=85 ns=1;i=82 ns=1;i=105 ns=1;i=161 ns=1;i=184 ns=1;i=240 ns=1;i=263 ns=1;i=319 ns=1;i=342 i=58 ================================================ FILE: DataDiscovery/Tests/DiscoveryServices.UnitTest/TestData/root.zone/commsvr.com/UA/Examples/BoilersSet/DomainDescriptor.xml ================================================ Iteration #2 DomainDescriptor record - Boiler test domain model. https://raw.githubusercontent.com/mpostol/OPC-UA-OOI/master/DataDiscovery/Tests/DiscoveryServices.UnitTest/TestData/root.zone/#authority#/#path#/DomainModel.xml DomainModel ================================================ FILE: DataDiscovery/Tests/DiscoveryServices.UnitTest/TestData/root.zone/commsvr.com/UA/Examples/BoilersSet/DomainModel.xml ================================================ BoilersArea http://commsvr.com/UA/Examples/BoilersSet 81976533-c604-4aea-a2f9-f27687ff1a17 Domain model for the BoilersArea BoilersArea_BoilerAlpha 0 InputPipe_FlowTransmitter1_Output Double -1 InputPipe_FlowTransmitter1_Output_Definition String -1 InputPipe_FlowTransmitter1_Output_ValuePrecision Double -1 InputPipe_FlowTransmitter1_Output_InstrumentRange ExtensionObject -1 q1:Range InputPipe_FlowTransmitter1_Output_EURange ExtensionObject -1 q2:Range InputPipe_FlowTransmitter1_Output_EngineeringUnits ExtensionObject -1 q3:EUInformation InputPipe_Valve_Input Double -1 InputPipe_Valve_Input_Definition String -1 InputPipe_Valve_Input_ValuePrecision Double -1 InputPipe_Valve_Input_InstrumentRange ExtensionObject -1 q4:Range InputPipe_Valve_Input_EURange ExtensionObject -1 q5:Range InputPipe_Valve_Input_EngineeringUnits ExtensionObject -1 q6:EUInformation Drum_LevelIndicator_Output Double -1 Drum_LevelIndicator_Output_Definition String -1 Drum_LevelIndicator_Output_ValuePrecision Double -1 Drum_LevelIndicator_Output_InstrumentRange ExtensionObject -1 q7:Range Drum_LevelIndicator_Output_EURange ExtensionObject -1 q8:Range Drum_LevelIndicator_Output_EngineeringUnits ExtensionObject -1 q9:EUInformation OutputPipe_FlowTransmitter2_Output Double -1 OutputPipe_FlowTransmitter2_Output_Definition String -1 OutputPipe_FlowTransmitter2_Output_ValuePrecision Double -1 OutputPipe_FlowTransmitter2_Output_InstrumentRange ExtensionObject -1 q10:Range OutputPipe_FlowTransmitter2_Output_EURange ExtensionObject -1 q11:Range OutputPipe_FlowTransmitter2_Output_EngineeringUnits ExtensionObject -1 q12:EUInformation FlowController_Measurement Double -1 FlowController_SetPoint Double -1 FlowController_ControlOut Double -1 LevelController_Measurement Double -1 LevelController_SetPoint Double -1 LevelController_ControlOut Double -1 CustomController_Input1 Double -1 CustomController_Input2 Double -1 CustomController_Input3 Double -1 CustomController_ControlOut Double -1 CustomController_DescriptionX LocalizedText -1 CustomController_Input1 Double -1 Simulation_CurrentState LocalizedText -1 Simulation_CurrentState_Id NodeId -1 Simulation_CurrentState_Name LocalizedText -1 Simulation_CurrentState_Number UInt32 -1 Simulation_CurrentState_EffectiveDisplayName Double -1 Simulation_LastTransition LocalizedText -1 Simulation_LastTransition_Id NodeId -1 Simulation_LastTransition_Name LocalizedText -1 Simulation_LastTransition_Number UInt32 -1 Simulation_LastTransition_TransitionTime DateTime -1 Simulation_LastTransition_EffectiveTransitionTime DateTime -1 Simulation_Deletable Boolean -1 Simulation_AutoDelete Boolean -1 Simulation_RecycleCount UInt32 -1 Simulation_ProgramDiagnostics Double -1 Simulation_ProgramDiagnostics_CreateSessionId Double -1 Simulation_ProgramDiagnostics_CreateClientName Double -1 Simulation_ProgramDiagnostics_InvocationCreationTime Double -1 Simulation_ProgramDiagnostics_InvocationCreationTime Double -1 Simulation_ProgramDiagnostics_LastTransitionTime Double -1 Simulation_ProgramDiagnostics_InvocationCreationTime Double -1 Simulation_ProgramDiagnostics_LastMethodCall Double -1 Simulation_ProgramDiagnostics_LastMethodSessionId Double -1 Simulation_ProgramDiagnostics_LastMethodInputArguments Double -1 Simulation_ProgramDiagnostics_LastMethodOutputArguments Double -1 Simulation_ProgramDiagnostics_LastMethodCallTime Double -1 Simulation_ProgramDiagnostics_LastMethodReturnStatus Double -1 Simulation_FinalResultData Double -1 Simulation_UpdateRate Int32 -1 BoilersArea_BoilerBravo 1 InputPipe_FlowTransmitter1_Output Double -1 InputPipe_FlowTransmitter1_Output_Definition String -1 InputPipe_FlowTransmitter1_Output_ValuePrecision Double -1 InputPipe_FlowTransmitter1_Output_InstrumentRange ExtensionObject -1 q1:Range InputPipe_FlowTransmitter1_Output_EURange ExtensionObject -1 q2:Range InputPipe_FlowTransmitter1_Output_EngineeringUnits ExtensionObject -1 q3:EUInformation InputPipe_Valve_Input Double -1 InputPipe_Valve_Input_Definition String -1 InputPipe_Valve_Input_ValuePrecision Double -1 InputPipe_Valve_Input_InstrumentRange ExtensionObject -1 q4:Range InputPipe_Valve_Input_EURange ExtensionObject -1 q5:Range InputPipe_Valve_Input_EngineeringUnits ExtensionObject -1 q6:EUInformation Drum_LevelIndicator_Output Double -1 Drum_LevelIndicator_Output_Definition String -1 Drum_LevelIndicator_Output_ValuePrecision Double -1 Drum_LevelIndicator_Output_InstrumentRange ExtensionObject -1 q7:Range Drum_LevelIndicator_Output_EURange ExtensionObject -1 q8:Range Drum_LevelIndicator_Output_EngineeringUnits ExtensionObject -1 q9:EUInformation OutputPipe_FlowTransmitter2_Output Double -1 OutputPipe_FlowTransmitter2_Output_Definition String -1 OutputPipe_FlowTransmitter2_Output_ValuePrecision Double -1 OutputPipe_FlowTransmitter2_Output_InstrumentRange ExtensionObject -1 q10:Range OutputPipe_FlowTransmitter2_Output_EURange ExtensionObject -1 q11:Range OutputPipe_FlowTransmitter2_Output_EngineeringUnits ExtensionObject -1 q12:EUInformation FlowController_Measurement Double -1 FlowController_SetPoint Double -1 FlowController_ControlOut Double -1 LevelController_Measurement Double -1 LevelController_SetPoint Double -1 LevelController_ControlOut Double -1 CustomController_Input1 Double -1 CustomController_Input2 Double -1 CustomController_Input3 Double -1 CustomController_ControlOut Double -1 CustomController_DescriptionX LocalizedText -1 CustomController_Input1 Double -1 Simulation_CurrentState LocalizedText -1 Simulation_CurrentState_Id NodeId -1 Simulation_CurrentState_Name LocalizedText -1 Simulation_CurrentState_Number UInt32 -1 Simulation_CurrentState_EffectiveDisplayName Double -1 Simulation_LastTransition LocalizedText -1 Simulation_LastTransition_Id NodeId -1 Simulation_LastTransition_Name LocalizedText -1 Simulation_LastTransition_Number UInt32 -1 Simulation_LastTransition_TransitionTime DateTime -1 Simulation_LastTransition_EffectiveTransitionTime DateTime -1 Simulation_Deletable Boolean -1 Simulation_AutoDelete Boolean -1 Simulation_RecycleCount UInt32 -1 Simulation_ProgramDiagnostics Double -1 Simulation_ProgramDiagnostics_CreateSessionId Double -1 Simulation_ProgramDiagnostics_CreateClientName Double -1 Simulation_ProgramDiagnostics_InvocationCreationTime Double -1 Simulation_ProgramDiagnostics_InvocationCreationTime Double -1 Simulation_ProgramDiagnostics_LastTransitionTime Double -1 Simulation_ProgramDiagnostics_InvocationCreationTime Double -1 Simulation_ProgramDiagnostics_LastMethodCall Double -1 Simulation_ProgramDiagnostics_LastMethodSessionId Double -1 Simulation_ProgramDiagnostics_LastMethodInputArguments Double -1 Simulation_ProgramDiagnostics_LastMethodOutputArguments Double -1 Simulation_ProgramDiagnostics_LastMethodCallTime Double -1 Simulation_ProgramDiagnostics_LastMethodReturnStatus Double -1 Simulation_FinalResultData Double -1 Simulation_UpdateRate Int32 -1 BoilersArea_BoilerCharlie 2 InputPipe_FlowTransmitter1_Output Double -1 InputPipe_FlowTransmitter1_Output_Definition String -1 InputPipe_FlowTransmitter1_Output_ValuePrecision Double -1 InputPipe_FlowTransmitter1_Output_InstrumentRange ExtensionObject -1 q1:Range InputPipe_FlowTransmitter1_Output_EURange ExtensionObject -1 q2:Range InputPipe_FlowTransmitter1_Output_EngineeringUnits ExtensionObject -1 q3:EUInformation InputPipe_Valve_Input Double -1 InputPipe_Valve_Input_Definition String -1 InputPipe_Valve_Input_ValuePrecision Double -1 InputPipe_Valve_Input_InstrumentRange ExtensionObject -1 q4:Range InputPipe_Valve_Input_EURange ExtensionObject -1 q5:Range InputPipe_Valve_Input_EngineeringUnits ExtensionObject -1 q6:EUInformation Drum_LevelIndicator_Output Double -1 Drum_LevelIndicator_Output_Definition String -1 Drum_LevelIndicator_Output_ValuePrecision Double -1 Drum_LevelIndicator_Output_InstrumentRange ExtensionObject -1 q7:Range Drum_LevelIndicator_Output_EURange ExtensionObject -1 q8:Range Drum_LevelIndicator_Output_EngineeringUnits ExtensionObject -1 q9:EUInformation OutputPipe_FlowTransmitter2_Output Double -1 OutputPipe_FlowTransmitter2_Output_Definition String -1 OutputPipe_FlowTransmitter2_Output_ValuePrecision Double -1 OutputPipe_FlowTransmitter2_Output_InstrumentRange ExtensionObject -1 q10:Range OutputPipe_FlowTransmitter2_Output_EURange ExtensionObject -1 q11:Range OutputPipe_FlowTransmitter2_Output_EngineeringUnits ExtensionObject -1 q12:EUInformation FlowController_Measurement Double -1 FlowController_SetPoint Double -1 FlowController_ControlOut Double -1 LevelController_Measurement Double -1 LevelController_SetPoint Double -1 LevelController_ControlOut Double -1 CustomController_Input1 Double -1 CustomController_Input2 Double -1 CustomController_Input3 Double -1 CustomController_ControlOut Double -1 CustomController_DescriptionX LocalizedText -1 CustomController_Input1 Double -1 Simulation_CurrentState LocalizedText -1 Simulation_CurrentState_Id NodeId -1 Simulation_CurrentState_Name LocalizedText -1 Simulation_CurrentState_Number UInt32 -1 Simulation_CurrentState_EffectiveDisplayName Double -1 Simulation_LastTransition LocalizedText -1 Simulation_LastTransition_Id NodeId -1 Simulation_LastTransition_Name LocalizedText -1 Simulation_LastTransition_Number UInt32 -1 Simulation_LastTransition_TransitionTime DateTime -1 Simulation_LastTransition_EffectiveTransitionTime DateTime -1 Simulation_Deletable Boolean -1 Simulation_AutoDelete Boolean -1 Simulation_RecycleCount UInt32 -1 Simulation_ProgramDiagnostics Double -1 Simulation_ProgramDiagnostics_CreateSessionId Double -1 Simulation_ProgramDiagnostics_CreateClientName Double -1 Simulation_ProgramDiagnostics_InvocationCreationTime Double -1 Simulation_ProgramDiagnostics_InvocationCreationTime Double -1 Simulation_ProgramDiagnostics_LastTransitionTime Double -1 Simulation_ProgramDiagnostics_InvocationCreationTime Double -1 Simulation_ProgramDiagnostics_LastMethodCall Double -1 Simulation_ProgramDiagnostics_LastMethodSessionId Double -1 Simulation_ProgramDiagnostics_LastMethodInputArguments Double -1 Simulation_ProgramDiagnostics_LastMethodOutputArguments Double -1 Simulation_ProgramDiagnostics_LastMethodCallTime Double -1 Simulation_ProgramDiagnostics_LastMethodReturnStatus Double -1 Simulation_FinalResultData Double -1 Simulation_UpdateRate Int32 -1 BoilersArea_BoilerDelta 3 InputPipe_FlowTransmitter1_Output Double -1 InputPipe_FlowTransmitter1_Output_Definition String -1 InputPipe_FlowTransmitter1_Output_ValuePrecision Double -1 InputPipe_FlowTransmitter1_Output_InstrumentRange ExtensionObject -1 q1:Range InputPipe_FlowTransmitter1_Output_EURange ExtensionObject -1 q2:Range InputPipe_FlowTransmitter1_Output_EngineeringUnits ExtensionObject -1 q3:EUInformation InputPipe_Valve_Input Double -1 InputPipe_Valve_Input_Definition String -1 InputPipe_Valve_Input_ValuePrecision Double -1 InputPipe_Valve_Input_InstrumentRange ExtensionObject -1 q4:Range InputPipe_Valve_Input_EURange ExtensionObject -1 q5:Range InputPipe_Valve_Input_EngineeringUnits ExtensionObject -1 q6:EUInformation Drum_LevelIndicator_Output Double -1 Drum_LevelIndicator_Output_Definition String -1 Drum_LevelIndicator_Output_ValuePrecision Double -1 Drum_LevelIndicator_Output_InstrumentRange ExtensionObject -1 q7:Range Drum_LevelIndicator_Output_EURange ExtensionObject -1 q8:Range Drum_LevelIndicator_Output_EngineeringUnits ExtensionObject -1 q9:EUInformation OutputPipe_FlowTransmitter2_Output Double -1 OutputPipe_FlowTransmitter2_Output_Definition String -1 OutputPipe_FlowTransmitter2_Output_ValuePrecision Double -1 OutputPipe_FlowTransmitter2_Output_InstrumentRange ExtensionObject -1 q10:Range OutputPipe_FlowTransmitter2_Output_EURange ExtensionObject -1 q11:Range OutputPipe_FlowTransmitter2_Output_EngineeringUnits ExtensionObject -1 q12:EUInformation FlowController_Measurement Double -1 FlowController_SetPoint Double -1 FlowController_ControlOut Double -1 LevelController_Measurement Double -1 LevelController_SetPoint Double -1 LevelController_ControlOut Double -1 CustomController_Input1 Double -1 CustomController_Input2 Double -1 CustomController_Input3 Double -1 CustomController_ControlOut Double -1 CustomController_DescriptionX LocalizedText -1 CustomController_Input1 Double -1 Simulation_CurrentState LocalizedText -1 Simulation_CurrentState_Id NodeId -1 Simulation_CurrentState_Name LocalizedText -1 Simulation_CurrentState_Number UInt32 -1 Simulation_CurrentState_EffectiveDisplayName Double -1 Simulation_LastTransition LocalizedText -1 Simulation_LastTransition_Id NodeId -1 Simulation_LastTransition_Name LocalizedText -1 Simulation_LastTransition_Number UInt32 -1 Simulation_LastTransition_TransitionTime DateTime -1 Simulation_LastTransition_EffectiveTransitionTime DateTime -1 Simulation_Deletable Boolean -1 Simulation_AutoDelete Boolean -1 Simulation_RecycleCount UInt32 -1 Simulation_ProgramDiagnostics Double -1 Simulation_ProgramDiagnostics_CreateSessionId Double -1 Simulation_ProgramDiagnostics_CreateClientName Double -1 Simulation_ProgramDiagnostics_InvocationCreationTime Double -1 Simulation_ProgramDiagnostics_InvocationCreationTime Double -1 Simulation_ProgramDiagnostics_LastTransitionTime Double -1 Simulation_ProgramDiagnostics_InvocationCreationTime Double -1 Simulation_ProgramDiagnostics_LastMethodCall Double -1 Simulation_ProgramDiagnostics_LastMethodSessionId Double -1 Simulation_ProgramDiagnostics_LastMethodInputArguments Double -1 Simulation_ProgramDiagnostics_LastMethodOutputArguments Double -1 Simulation_ProgramDiagnostics_LastMethodCallTime Double -1 Simulation_ProgramDiagnostics_LastMethodReturnStatus Double -1 Simulation_FinalResultData Double -1 Simulation_UpdateRate Int32 -1 https://raw.githubusercontent.com/mpostol/OPC-UA-OOI/master/DataDiscovery/Tests/DiscoveryServices.UnitTest/TestData/root.zone/commsvr.com/UA/Examples/BoilersSet/Commsvr.UA.Examples.BoilersSet.NodeSet2.xml http://localhost/opc/Commsvr.UA.Examples.BoilersSet.OTPTable.xml Structure Structure ================================================ FILE: DataDiscovery.playlist ================================================ ================================================ FILE: InformationProcessing.md ================================================ # Information Processing ## Data - Information Representation By definition, the industrial IT domain is an integrated set of ICT systems. System integration means the necessity of the information exchange between them (the nodes of a common domain). ICT systems are recognized as a typical measure of information processing. The main challenge of deploying an industrial IT solution is that information is abstract – it is knowledge describing a situation in the selected environment, e.g. temperature in a boiler, car speed, account balance, etc. >Unfortunately, machines cannot be used to process abstraction. It is also impossible to transfer abstraction from one place to another over the network. Fortunately, there is a very simple solution to address that impossibility, namely the information must be represented as a binary stream. In consequence, the terms information and data can usually be used interchangeably while talking about the ICT systems. On the other hand, they must be distinguished in the context of further discussion on information processing, because before stepping forward we must be aware of the fact that the same information could have many different but equivalent representations – different binary patterns. For example, having interconnected system A and system B, system A can use one representation, but system B another one. Moreover, to integrate them, the transferred stream of bits may not resemble any of the previous ones. It should be nothing new for us, as it is obvious that the same information represented as a text in regional newspapers in English, German, Polish, etc. does not resemble one another. To understand a newspaper we must learn an appropriate language. To understand binary data a data type must have been defined – a description of how to create an appropriate bits pattern. Simplifying, the data type determines a set of valid values and rules needed to assign the information to the selected bits pattern (understand data). Therefore, to make two systems interoperable, apart from communication, they should be prepared (integrated) to be able to consume data from each other, and so communication accessibility is only a prerequisite for interoperability. The type is usually not enough to make the data meaningful. Referring to the above example, the newspaper name (i.e. the location where the information came from) and timestamp (a single point in time when the information was valid) are attributes of the text that is a representation of the information. ## Complex Data To have a similar ability to add common attributes to the representations of many information entities at the same time the complex data types must be used. In this context, the term complex means that the data type must additionally define a relationship between the components of the binary data and operation returning a selected component of the complex data. Software engineering offers two well-known and widely used relationships: - **Arrays** – parts of the array are indexed and all of them must have a common data type - **Structures** – components are named and they may have different data types. Anyway, indexes and names must be unambiguous, and a complex data type has a responsibility to provide a precise definition of them, i.e. selectors of the components. The complex data has a very important feature, namely, all components are considered to be consistent with one another. For example, if we need to represent time at least three components must be distinguished: hour, minute, and second. In this case, even if there is no need to add any common attribute to the binary data it must be consistent, i.e. it has to represent information in a single point in time. Other criteria for describing the data consistency could also be applied. Using complex data simplifies data integrity if there is a need to store or transfer it. If intermediaries are present, the initial data creator and the ultimate consumer need to trust those intermediaries to help provide end-to-end data integrity, because each hop is processed separately. Thus, using complex data means that the data is processed and transferred as one item what finally mitigates any risk of integrity compromising. Using the data type definitions to describe the exposed information allows for: • Development against a type definition. • Unambiguous association of the information with the data. Having defined types in advance, clients may provide dedicated functionality, e.g. displaying the information in the context of specific graphics. Typical scenarios occur when we can define appropriate complex data types in advance. Usually, the design environment offers a variety of standard types ready to be used in common cases. If the out-of-the-box set is not capable of fulfilling more demanding needs users may define custom data types. They may be of generic use or they may be application domain specific. Representing the information processed as one whole sequence of bits could be impossible or impractical for some application domains. If the information comes from a real-time process, for example, a boiler or a chemical analyzer, we use an independent sensor to measure values, e.g. pressure, temperature, flow. The measuring process is independent, but pieces of information are related to each other as they describe the same physical process. If the data publisher (e.g. an OPC UA server) is not running in an environment capable of creating complex data there must be taken special measures to fabricate it if required. An example of this scenario is a software application pooling data from plant floor devices using a custom protocol, e.g. MODBUS. If that is the case the protocol used to gather process data is usually not data complex aware. Reading and writing the data is accomplished using REQUEST/RESPONSE frame pairs. Moreover, one request can be used to read a set of values that has the same simple type only. > Fabrication is an operation that uses a group of requests to gather components and embed them into a single value of a selected complex data type. ## Data Graph Fabrication of complex data is comparable to using reverse engineering for recovering a big picture from details. Additionally, as it was pointed out, fabrication of complex data from pieces (i.e. composing it using building-blocks) is possible but it needs additional effort. Because processing and transferring the data over the network are not for free this approach must be well-founded. If the data volume grows paying this cost could be groundless or even impossible and then we need an alternative solution, i.e. the possibility to process and transfer the data piece by piece. In such a case the consistency could be achieved by timestamps associated with each piece separately and partial data processing is possible if pieces can be accessed selectively. The proposed selection mechanisms of components for the complex data are rather static, i.e. they limit the internal structure and meaning (semantics) of the relations, but still can be successfully used for that purpose. Hence, to overcome those limits the reference concept could be introduced. Reference links two elements together, where the source and target roles are distinguished in this couple. Reference could also represent information. Adding randomly specific references to particular pieces of data we can create a graph. For example, lets try to describe a car. We need partial information about the main car body and four references to the tires as its components, but for the spare tire we need different reference kind, say a spare component to point out a different relationship for this case. Following the reference concept, we actually introduced a new selection mechanism, namely browsing. Nowadays, as a consequence of using references, we are able to replace a static newspaper with a dynamic website, where information is represented using hypertext instead of using text. The concepts and terms presented above are well known and widely used by programmers and website authors. As there are people working on processing and exposing information professionally, a question arises why we are bothering about it. There is one simple reason: the offered services are unsatisfactory. There are two issues that can be recognized. Programmers offer dedicated solutions with the goal of meeting precisely defined requirements of selected stakeholders. The webmasters offer the possibility for freely exposing any information you need, but the representation is hard to be processed by other programs because the references are described (has meaning) in the native language. In contrast to the offer of programmers and webmasters we face the biggest challenge of providing a generic solution that allows us to: - expose any mentioned above data, i.e. simple, complex, and graph - transport it over the network - process it finally Additionally, it must be assumed that all these three operations can be done by independent parties. In this context generic means that only out of the box products and existing infrastructure are acceptable. Independent parties mean no need for special agreements made to guarantee interoperability case by case. In other words, common rules must be observed instead of case-specific agreements. The rules must be valid now, in the future, and for all application domains called industrial IT. Having an adequate rules specification in hands we will be able to develop products fulfilling these requirements and finally obtaining a universal, flexible enough solution based on best practice. To meet the requirements presented above it is proposed to select OPC Unified Architecture specification as a foundation for further work. One of the main goals of the OPC Unified Architecture (OPC UA) is to provide a consistent mechanism for the integration of process control and business management systems. It is assumed that it should be robust and the implementation should be platform independent. In the next section, I will examine technologies and paradigms used as a framework for the development of the OPC UA standard and discuss their impact on the final result. ================================================ FILE: Introduction2ComplexDataProcessing.md ================================================ # Introduction to Complex Data Processing From the definition, the Industrial IT domain is an integrated set of ICT systems. System integration means the necessity of the information exchange between them (the nodes of a common domain). ICT systems are recognized as a typical measure of processing information (Section [Semantic-Data Processing Architecture]). The main challenge of deploying an Industrial IT solution is that information is abstract – it is knowledge describing a situation in the selected environment, e.g. temperature in a boiler, a car speed, an account balance, a robot manipulator position, etc. Unfortunately, machines cannot be used to process abstraction. It is also impossible to transfer abstraction from one place to another. Fortunately, there is a very simple solution to address that impossibility, namely the information must be represented as binary data. In consequence, we can usually use both ones (ie. data and information) as interchangeable terms while talking about ICT systems. Unfortunately, these terms must be distinguished in the context of further discussion on the complex data, because before stepping forward we must be aware of the fact that the same information could have many different but equivalent representations – different binary patterns. For example, having interconnected system A and system B, system A can use one representation, but system B another one. Moreover, to integrate them, the transferred stream of bits may not resemble any of the previous ones. It should be nothing new for us, as it is obvious that the same information is written as a text in regional newspapers in English, German, Polish, etc. does not resemble one another. To understand a newspaper we must learn the appropriate language. To understand the binary data we must have defined a data type – a description of how to create an appropriate bits pattern. Simplifying, the data type determines a set of valid values and rules needed to assign the information (understand the data) to a selected bits pattern. Therefore, to make two systems interoperable, apart from communication, they should be prepared – integrated to be able to consume data from each other, and so communication is only a prerequisite for interoperability. The type is usually not enough to make the data meaningful. Referring to the above example the newspaper name (i.e. the location where the information came from) and timestamp (a single point in time when the information was valid) are properties of the text that is a representation of the information. To have a similar ability to add common properties to the representations of many information entities at the same time the complex data types must be used. Complex in this context means that the data type must additionally define a relationship between the components of the binary data, i.e. how to selectively get a component of the complex data. There are two well-known and widely used relationships: - **Arrays** – components are indexed and all components must have a common data type - **Structures** – components are named and components may have different data types Anyway, indexes and names must be unambiguous, and a complex data type has the responsibility to provide a precise definition of them, i.e. selectors of the components. The complex data has a very important feature, namely, all components are considered to be consistent with one another. For example, if we need to represent time at last three components (integers) must be distinguished: hour, minute, and second. In this case, even if there is no need to add any property to the binary data it must be consistent, i.e. it has to represent information in a single point in time. Other criteria for describing the data consistency could also be applied. On the other hand using complex data simplifies data integrity if there is a need to store or transfer it. If intermediaries are present, the initial data creator and the ultimate consumer need to trust those intermediaries to help provide end-to-end data integrity, because each hop is processed separately. Thus, using complex data it can be processed and transferred as one item what finally mitigates any risk of integrity compromising. Using the data type definitions to describe information exposed by a server allows: - Development against a type definition. - Unambiguous association of the information with the data. Having defined types in advance, clients may provide dedicated functionality, e.g. displaying the information in the context of specific graphics. Typical scenarios can be recognized when we can define appropriate complex data types in advance. The OPC UA offers a variety of standard types ready to be used in common cases (Section [Standard Information Model]). If this out of the box set is not capable of fulfilling more demanding needs users may define custom data types. The OPC UA allows servers to provide data type definitions. The type definitions may be abstract and may be inherited by new types to reflect polymorphism. They may be of generic use or they may be application domain specific. Custom types must have a globally unique identifier, which can be used to identify the authoring organization responsible for that type definition. Representing the information processed as one sequence of bits could be impossible or impractical for some application domains. If the information comes from a real-time process, for example, a boiler or a chemical analyzer, we use an independent sensor to measure values, e.g. pressure, temperature, flow. The measuring process is independent, but pieces of information are related to each other as they describe the same physical process. If the data publisher (e.g. a server) is not running in an environment capable of creating complex data there must be taken special measures to fabricate it if required. An example of this scenario is a software application pooling data from plant floor devices using a custom protocol, e.g. MODBUS. If that is the case the protocol used to gather process data is usually not data complex aware. Reading and writing the data is accomplished using REQUEST/RESPONSE frame pairs. Moreover, one request can be used to read a set of values that has the same simple type only. Fabrication is an operation that uses a group of requests to gather components and embed them into a single value of a selected complex data type. Fabrication of complex data is similar to using reverse engineering for recovering a big picture from details. Additionally, as it was pointed out, fabrication of complex data from pieces (i.e. composing it using building-blocks) is possible but it needs additional effort. Because processing and transferring the data over the network are not for free this approach must be well-founded. If the data volume grows paying this cost could be groundless or even impossible and then we need an alternative solution, i.e. the possibility to process and transfer the data piece by piece. In such a case the consistency could be achieved by timestamps associated with each piece separately and partial data processing is possible if pieces can be accessed selectively. The proposed selection mechanisms of components for the complex data are rather static, i.e. they limit the internal structure and meaning (semantics) of the relations, but still can be successfully used for that purpose. Hence, to overcome those limits the reference concept could be introduced. Reference links two elements together, where the source and target roles are distinguished in this couple. Reference could also represent information - has meaning. Adding randomly specific references to particular pieces of data we can create unlimited structures - a graph of entities. For example, let’s try to describe a car. We need partial information about the main car body and four references to the tires as components, but for the spare tire we need different reference kind, say a spare component to point out a different relationship for this case. Following the reference concept, we actually introduced a new selection mechanism, namely browsing. Nowadays, as a consequence of using references, we are able to replace a static newspaper with a dynamic website, where information is represented using hypertext instead of plain text. The concepts and terms presented above are well known and widely used by programmers and website authors. As there are people working on processing and exposing information professionally, a question arises why we are bothering about it. There is one simple reason: the offered services are unsatisfactory. > There are two issues that can be recognized. Programmers offer **dedicated solutions with the goal of meeting precisely defined requirements of selected stakeholders**. The webmasters offer the possibility for freely exposing any information you need, but the **representation is hard to be processed by other programs** because the content and references have semantics (have meaning) in the native language only. In contrast to the offer of programmers and webmasters we face the biggest challenge of providing a generic solution that allows us to expose any complex information, transport it over the network and finally process it on the assumption that all these three operations can be done by independent parties. In this context generic means here that only out of the box products and existing infrastructure are acceptable. Independent parties mean no need for special agreements made to guarantee interoperability case by case. > In other words, **common rules must be observed instead of case-specific agreements**. The rules must be valid now, in the future, and for all application domains called industrial IT. Having an adequate rules specification in hands we will be able to ask programmers and webmasters to fulfill our requirements and we will finally obtain a universal, flexible enough solution based on best practice. This project is all about the selection of appropriate specifications and deployment rules in the context of information processing. To meet the requirements presented above it is proposed to select OPC Unified Architecture specification as a foundation for further work. One of the main goals of the OPC Unified Architecture (OPC UA) is to provide a consistent mechanism for the integration of process control and business management systems. It is assumed that it should be robust and the implementation should be platform independent. The section [Semantic-Data Processing Architecture] provides more information about the Semantic-Data environment architecture and the section [Address Space Model Life-cycle] describes the modeling process step by step in more details. The section [Semantic-Data Message Centric Communication] introduces some aspects related to exchange the Semantic-Data over the wire and how to plan a foundation for interoperability. ## See also - [Semantic-Data Processing Architecture] - [Standard Information Model] - [Address Space Model Life-cycle] - [Semantic-Data Message Centric Communication] [Address Space Model Life-cycle]:SemanticData/InformationModelLifecycle.md [Semantic-Data Processing Architecture]:SemanticData/README.MD [Standard Information Model]:SemanticData/StandardInformationModel.md [Semantic-Data Message Centric Communication]:Networking/README.MessageCentricCommunication.md ================================================ FILE: Networking/Core/HandlerState.cs ================================================  //____________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //____________________________________________________________________________ namespace UAOOI.Networking.Core { /// /// Enum HandlerState - represents states of an configurable object. /// public enum HandlerState { /// /// The handler is not configured and cannot be enabled. /// NoConfiguration, /// /// The handler is configured but currently disabled. /// Disabled, /// /// The handler is operational. /// Operational, /// /// The handler is in an error state, i.e. cannot change the state to Operational. Similar to NoConfiguration state but after an error occurs. /// Error } } ================================================ FILE: Networking/Core/IAssociationState.cs ================================================ //____________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //____________________________________________________________________________ namespace UAOOI.Networking.Core { /// /// Interface IAssociationState - encapsulates the state machine implementation governing this instance behavior. /// The provided functionality behavior depends on the current value returned by the property. /// public interface IAssociationState { /// /// Gets the current state of an association instance. /// /// The state of type. HandlerState State { get; } /// /// This method is used to enable a configured association instance. If a normal operation is possible, the state changes into state. /// In the case of an error situation, the state changes into . The operation is rejected if the current is not . /// void Enable(); /// /// This method is used to disable an already enabled association instance. /// This method call shall be rejected if the current State is or . /// void Disable(); } } ================================================ FILE: Networking/Core/IBinaryDataTransferGraphReceiver.cs ================================================ //____________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //____________________________________________________________________________ using System; namespace UAOOI.Networking.Core { /// /// Interface IBinaryDataTransferGraphReceiver /// Implements the /// /// public interface IBinaryDataTransferGraphReceiver : IDisposable { /// /// Is executed after arriving new Data Transfer Graph (DTG). /// event EventHandler OnNewFrameArrived; /// /// Gets or sets the state of the transport channel. Interface encapsulates the state machine implementation governing this instance behavior. /// The provided functionality behavior depends on the current value returned by the property. /// /// An object implementing representing the state machine of communication channel. IAssociationState State { get; set; } /// /// Attach the communication channel to the network. /// void AttachToNetwork(); } } ================================================ FILE: Networking/Core/IBinaryDataTransferGraphSender.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System; namespace UAOOI.Networking.Core { /// /// Interface IBinaryDataTransferGraphSender /// Implements the /// /// public interface IBinaryDataTransferGraphSender : IDisposable { /// /// Sends a Data Transfer Graph to a remote host (DTG). /// /// The buffer. void SendFrame(byte[] buffer); /// /// Gets or sets the state of the transport channel. Interface encapsulates the state machine implementation governing this instance behavior. /// The provided functionality behavior depends on the current value returned by the property. /// /// An object implementing representing the state machine of communication channel. IAssociationState State { get; set; } /// /// Attach the communication channel to the network. /// void AttachToNetwork(); } } ================================================ FILE: Networking/Core/IMessageHandlerFactory.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ namespace UAOOI.Networking.Core { /// /// Interface IMessageHandlerFactory - creates objects supporting the Data Transfer Graph messages handling over the wire. /// public interface IMessageHandlerFactory { /// /// Gets an instance implementing interface. /// /// The name to be used for identification of the underlying DTG transport channel. /// The configuration of the object implementing the . /// An object implementing that provides functionality supporting reading the messages from the wire. IBinaryDataTransferGraphReceiver GetBinaryDTGReceiver(string name, string configuration); /// /// Gets an instance implementing interface. /// /// The name to be used for identification of the underlying DTG transport channel. /// The configuration of the object implementing the . /// An object implementing that provides functionality supporting sending the messages over the wire. IBinaryDataTransferGraphSender GetBinaryDTGSender(string name, string configuration); } } ================================================ FILE: Networking/Core/INetworkingEventSourceProvider.cs ================================================ //____________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //____________________________________________________________________________ using System.Diagnostics.Tracing; namespace UAOOI.Networking.Core { /// /// Interface IEventSourceProvider - if implemented returns an instance of to be registered by the logging infrastructure. /// public interface INetworkingEventSourceProvider { /// /// Gets the part event source. /// /// Returns an instance of . EventSource GetPartEventSource(); } } ================================================ FILE: Networking/Core/Networking.Core.csproj ================================================ netstandard2.0 UAOOI.Networking.Core UAOOI.Networking.Core MPostol MPostol Object Oriented Internet The core functionality of SemanticData Reactive Networking library based on OPC UA Part 14 Pub/Sub. Copyright MPostol (c) 2020 https://github.com/mpostol/OPC-UA-OOI https://commsvr.gitbook.io/ooi GitHub Object Oriented Internet, OPC UA, CommServer, Reactive Networking. 4.0.2 4.0.2 true OPCUAOOIKey.snk 4.0.2 false C:\VS.git\UAOOI\OPC-UA-OOI\Networking\Core\UAOOI.Networking.Core.xml True True Networking.Core.nuspec.tt TextTemplatingFileGenerator Networking.Core.nuspec.nuspec ================================================ FILE: Networking/Core/Networking.Core.nuspec.nuspec ================================================  UAOOI.Networking.Core 4.0.2 Object Oriented Internet Networking Core Mariusz Postol Mariusz Postol false MIT https://github.com/mpostol/OPC-UA-OOI/tree/master/Networking/Core Logo64.PNG The core functionality of SemanticData Reactive Networking library based on OPC UA Part 14 Pub/Sub. The core functionality of SemanticData Reactive Networking library based on OPC UA Part 14 Pub/Sub. Copyright (C) 2022 Mariusz Postol LODZ POLAND Object Oriented Internet, OPC UA, PubSub, Information Model, IoT, M2M, DOA, Maintenance release - unimportant changes. Copyright (C) 2022 Mariusz Postol LODZ POLAND ================================================ FILE: Networking/Core/Networking.Core.nuspec.tt ================================================ <#@ template debug="false" hostspecific="false" language="C#" #> <#@ output extension=".nuspec" #> <#=m_AssemblyTitle#> 4.0.2 <#=NetworkingDataProduct#> Networking Core <#=AssemblyCompany#> <#=Owner#> false MIT https://github.com/mpostol/OPC-UA-OOI/tree/master/Networking/Core Logo64.PNG The core functionality of SemanticData Reactive Networking library based on OPC UA Part 14 Pub/Sub. The core functionality of SemanticData Reactive Networking library based on OPC UA Part 14 Pub/Sub. <#=AssemblyCopyright#> Object Oriented Internet, OPC UA, PubSub, Information Model, IoT, M2M, DOA, Maintenance release - unimportant changes. <#=AssemblyCopyright#> <#@ include file = "..\..\CommonResources\T4Definitions\Model.t4" #> <#+ string m_AssemblyTitle = "UAOOI.Networking.Core"; #> ================================================ FILE: Networking/Core/UAOOI.Networking.Core.xml ================================================ UAOOI.Networking.Core Enum HandlerState - represents states of an configurable object. The handler is not configured and cannot be enabled. The handler is configured but currently disabled. The handler is operational. The handler is in an error state, i.e. cannot change the state to Operational. Similar to NoConfiguration state but after an error occurs. Interface IAssociationState - encapsulates the state machine implementation governing this instance behavior. The provided functionality behavior depends on the current value returned by the property. Gets the current state of an association instance. The state of type. This method is used to enable a configured association instance. If a normal operation is possible, the state changes into state. In the case of an error situation, the state changes into . The operation is rejected if the current is not . This method is used to disable an already enabled association instance. This method call shall be rejected if the current State is or . Interface IBinaryDataTransferGraphReceiver Implements the Is executed after arriving new Data Transfer Graph (DTG). Gets or sets the state of the transport channel. Interface encapsulates the state machine implementation governing this instance behavior. The provided functionality behavior depends on the current value returned by the property. An object implementing representing the state machine of communication channel. Attach the communication channel to the network. Interface IBinaryDataTransferGraphSender Implements the Sends a Data Transfer Graph to a remote host (DTG). The buffer. Gets or sets the state of the transport channel. Interface encapsulates the state machine implementation governing this instance behavior. The provided functionality behavior depends on the current value returned by the property. An object implementing representing the state machine of communication channel. Attach the communication channel to the network. Interface IMessageHandlerFactory - creates objects supporting the Data Transfer Graph messages handling over the wire. Gets an instance implementing interface. The name to be used for identification of the underlying DTG transport channel. The configuration of the object implementing the . An object implementing that provides functionality supporting reading the messages from the wire. Gets an instance implementing interface. The name to be used for identification of the underlying DTG transport channel. The configuration of the object implementing the . An object implementing that provides functionality supporting sending the messages over the wire. Interface IEventSourceProvider - if implemented returns an instance of to be registered by the logging infrastructure. Gets the part event source. Returns an instance of . ================================================ FILE: Networking/DataRepository/AzureGateway/AzureInterconnection/AzureDeviceParameters.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2020, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using CommandLine; using Microsoft.Azure.Devices.Client; using System; using System.Collections.Generic; namespace UAOOI.Networking.DataRepository.AzureGateway.AzureInterconnection { /// /// Interface defining device parameters for establishing azure connection. /// public class AzureDeviceParameters { #region constructor /// /// Parses the specified configuration if is not empty, otherwise parse it . /// /// The configuration. /// AzureDeviceParameters. /// parse string internal static AzureDeviceParameters ParseRepositoryGroup(string repositoryGroup) { AzureDeviceParameters ret = new AzureDeviceParameters(); if (String.IsNullOrEmpty(repositoryGroup)) return ret; string[] args = repositoryGroup.Split(' '); using (Parser parserInstance = new Parser(x => { x.AutoHelp = false; x.AutoVersion = false; x.HelpWriter = null; })) parserInstance.ParseArguments(args).WithParsed(opts => ret = opts).WithNotParsed(X => ReportErrors(X)); return ret; } private static void ReportErrors(IEnumerable errors) { List errorsList = new List(); foreach (Error e in errors) errorsList.Add(new ArgumentOutOfRangeException($"{e.Tag} with stop processing = {e.StopsProcessing}")); throw new AggregateException(errorsList); } /// /// Initializes a new instance of the class. /// /// Must be public to be used by the command line parser public AzureDeviceParameters() { } #endregion constructor #region API /// /// Gets or sets the name of the resource group. /// /// The name of the resource group. [Value(0, HelpText = "Resource Group Name retrieved as the first identifier", Required = true)] public string ResourceGroupName { get; set; } /// /// Gets the transport type used for this device. /// [Option('t', "transport", HelpText = "TransportType", Default = default(TransportType), Required = false)] public TransportType TransportType { get; set; } /// /// Gets the Id corresponding to Azure device id. /// [Option('d', "DeviceId", HelpText = "a string representing AzureDeviceId", Required = true)] public string AzureDeviceId { get; set; } /// /// Gets the azure scope id in which given device resides. /// [Option('s', "ScopeId", HelpText = "a string representing AzureScopeId", Required = true)] public string AzureScopeId { get; set; } /// /// Gets the Azure primary key. /// /// The Azure primary key. [Option('p', "PrimaryKey", HelpText = "a string representing AzurePrimaryKey", Required = true)] public string AzurePrimaryKey { get; set; } /// /// Gets the azure secondary key. /// /// The azure secondary key. [Option('k', "SecondaryKey", HelpText = "a string representing AzureSecondaryKey", Required = true)] public string AzureSecondaryKey { get; set; } /// /// Gets the time interval when to send device state to Azure. /// [Option('i', "Interval", HelpText = "an integer representing PublishingInterval", Required = false)] public int PublishingIntervalMS { get; set; } /// /// Calculates the time interval when to send device state to Azure. /// internal TimeSpan PublishingInterval() { return TimeSpan.FromMilliseconds(Math.Max(1000, PublishingIntervalMS)); } #endregion API } } ================================================ FILE: Networking/DataRepository/AzureGateway/AzureInterconnection/CommunicationContext.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2020, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using Microsoft.Azure.Devices.Client; using Microsoft.Azure.Devices.Provisioning.Client; using Microsoft.Azure.Devices.Provisioning.Client.Transport; using Microsoft.Azure.Devices.Shared; using System; using System.Text; using System.Threading; using System.Threading.Tasks; using UAOOI.Networking.DataRepository.AzureGateway.Diagnostic; namespace UAOOI.Networking.DataRepository.AzureGateway.AzureInterconnection { /// /// Class CommunicationContext - implements Azure communication state machine. /// internal class CommunicationContext { #region constructor internal CommunicationContext(IDTOProvider dataProvider, string repositoryGroup, AzureDeviceParameters azureDeviceParameters) { _Logger.EnteringMethodAzure(nameof(CommunicationContext)); _dataProvider = dataProvider ?? throw new ArgumentNullException($"{nameof(dataProvider)}"); _repositoryGroup = repositoryGroup; _azureDeviceParameters = azureDeviceParameters ?? throw new ArgumentNullException($"{nameof(azureDeviceParameters)}"); } #endregion constructor #region API /// /// Runs the communication machine. /// /// The cancellation token. internal async void Run(CancellationToken cancellation) { _Logger.EnteringMethodAzure(nameof(CommunicationContext)); if (_running) throw new ApplicationException($"Only one instance of the task {nameof(Run)} is allowed."); _running = true; await CommunicationEngineLoopAsync(cancellation); } /// /// Disconnects the request. /// /// Calling the {nameof(DisconnectRequest)} operation is allowed only in the running state of the communication machine. internal void DisconnectRequest() { _Logger.EnteringMethodAzure(nameof(CommunicationContext)); if (!_running) { _Logger.ProgramFailure(nameof(CommunicationContext), "This method cannot be called in the running state of the communication machine"); throw new ApplicationException($"Calling the {nameof(DisconnectRequest)} operation is allowed only in the running state of the communication machine."); } _disconnectRequest = true; } #endregion API #region private private const string _globalDeviceEndpoint = "global.azure-devices-provisioning.net"; private const int _delayAfterFailure = 5000; private enum MachineState { UnassignedState, AssigneddState, DataTransferingState } private readonly AzureGatewaySemanticEventSource _Logger = AzureGatewaySemanticEventSource.Log(); private readonly IDTOProvider _dataProvider; private readonly string _repositoryGroup; private readonly AzureDeviceParameters _azureDeviceParameters; private MachineState _currentState = MachineState.UnassignedState; private bool _disconnectRequest = false; private bool _running = false; private void TransitionTo(MachineState state) { _currentState = state; } private async Task RegisterAsync(SecurityProvider security, CancellationToken token) { _Logger.EnteringMethodAzure(nameof(CommunicationContext)); ProvisioningTransportHandler transport = null; try { switch (_azureDeviceParameters.TransportType) { case TransportType.Amqp: transport = new ProvisioningTransportHandlerAmqp(); break; case TransportType.Http1: transport = new ProvisioningTransportHandlerHttp(); break; case TransportType.Amqp_WebSocket_Only: transport = new ProvisioningTransportHandlerAmqp(TransportFallbackType.WebSocketOnly); break; case TransportType.Amqp_Tcp_Only: transport = new ProvisioningTransportHandlerAmqp(TransportFallbackType.TcpOnly); break; case TransportType.Mqtt: transport = new ProvisioningTransportHandlerMqtt(); break; case TransportType.Mqtt_WebSocket_Only: transport = new ProvisioningTransportHandlerMqtt(TransportFallbackType.WebSocketOnly); break; case TransportType.Mqtt_Tcp_Only: transport = new ProvisioningTransportHandlerMqtt(TransportFallbackType.TcpOnly); break; default: throw new ArgumentOutOfRangeException(); } ProvisioningDeviceClient provisioningClient = ProvisioningDeviceClient.Create(_globalDeviceEndpoint, _azureDeviceParameters.AzureScopeId, security, transport); _Logger.EnteringMethodAzure(nameof(ProvisioningDeviceClient), nameof(ProvisioningDeviceClient.RegisterAsync)); return await provisioningClient.RegisterAsync(token); } finally { _Logger.EnteringMethodAzure(nameof(ProvisioningTransportHandler), nameof(ProvisioningTransportHandler.Dispose)); transport.Dispose(); } } private async Task ConnectAsync(string assignedHub, SecurityProvider security, CancellationToken token) { _Logger.EnteringMethodAzure(nameof(CommunicationContext)); DeviceClient deviceClient; try { IAuthenticationMethod authenticationMethod; switch (security) { case SecurityProviderTpm tpmSecurity: authenticationMethod = new DeviceAuthenticationWithTpm(_azureDeviceParameters.AzureDeviceId, tpmSecurity); break; case SecurityProviderX509 certificateSecurity: authenticationMethod = new DeviceAuthenticationWithX509Certificate(_azureDeviceParameters.AzureDeviceId, certificateSecurity.GetAuthenticationCertificate()); break; case SecurityProviderSymmetricKey symmetricKeySecurity: authenticationMethod = new DeviceAuthenticationWithRegistrySymmetricKey(_azureDeviceParameters.AzureDeviceId, symmetricKeySecurity.GetPrimaryKey()); break; default: _Logger.ProgramFailure(nameof(CommunicationContext), "Specified authentication type is unknown."); throw new NotSupportedException("Unknown authentication type."); } _Logger.StartCreatingClient(nameof(DeviceClient), nameof(DeviceClient.Create), assignedHub, authenticationMethod.ToString(), _azureDeviceParameters.TransportType.ToString()); deviceClient = DeviceClient.Create(assignedHub, authenticationMethod, _azureDeviceParameters.TransportType); _Logger.EnteringMethodAzure(nameof(DeviceClient), nameof(DeviceClient.OpenAsync)); await deviceClient.OpenAsync(token); } catch (Exception ex) { _Logger.LogException(nameof(CommunicationContext), ex); return null; } return deviceClient; } private async Task DataTransfer(DeviceClient deviceClient, CancellationToken token) { try { _Logger.EnteringMethodAzure(nameof(CommunicationContext)); string payload = _dataProvider.GetDTO(_repositoryGroup); using (Message message = new Message(Encoding.UTF8.GetBytes(payload))) await deviceClient.SendEventAsync(message, token); _Logger.SendEvenSuccided(payload.Substring(0, 80)); } catch (Exception e) { _Logger.LogException(nameof(CommunicationContext), e); throw; } } private async Task CommunicationEngineLoopAsync(CancellationToken token) { _Logger.EnteringMethodAzure(nameof(CommunicationContext)); SecurityProvider security = null; DeviceClient deviceClient = null; string assignedHub = String.Empty; try { security = new SecurityProviderSymmetricKey(_azureDeviceParameters.AzureDeviceId, _azureDeviceParameters.AzurePrimaryKey, _azureDeviceParameters.AzureSecondaryKey); while (!_disconnectRequest) { token.ThrowIfCancellationRequested(); _Logger.EnteringState(_currentState.ToString()); switch (_currentState) { case MachineState.UnassignedState: DeviceRegistrationResult provisioningResult = await RegisterAsync(security, token); switch (provisioningResult.Status) { case ProvisioningRegistrationStatusType.Unassigned: _Logger.UnexpectedProvisioningResultStatus($"{nameof(ProvisioningRegistrationStatusType.Unassigned)}", $"{provisioningResult.ErrorMessage}"); await Task.Delay(_delayAfterFailure, token); //No transition break; case ProvisioningRegistrationStatusType.Assigning: _Logger.UnexpectedProvisioningResultStatus($"{nameof(ProvisioningRegistrationStatusType.Assigning)}", $"{provisioningResult.ErrorMessage}"); await Task.Delay(_delayAfterFailure, token); //No transition break; case ProvisioningRegistrationStatusType.Assigned: assignedHub = provisioningResult.AssignedHub; TransitionTo(MachineState.AssigneddState); break; case ProvisioningRegistrationStatusType.Failed: _Logger.UnexpectedProvisioningResultStatus($"{nameof(ProvisioningRegistrationStatusType.Failed)}", $"{provisioningResult.ErrorMessage}"); await Task.Delay(_delayAfterFailure, token); //No transition break; case ProvisioningRegistrationStatusType.Disabled: _Logger.UnexpectedProvisioningResultStatus($"{nameof(ProvisioningRegistrationStatusType.Disabled)}", $"{provisioningResult.ErrorMessage}"); await Task.Delay(_delayAfterFailure, token); //No transition break; } break; case MachineState.AssigneddState: deviceClient = await ConnectAsync(assignedHub, security, token); if (deviceClient != null) { security.Dispose(); security = null; TransitionTo(MachineState.DataTransferingState); } else { _Logger.AzureConnectionFailure(nameof(CommunicationContext), nameof(CommunicationEngineLoopAsync), $"Failed to connect."); await Task.Delay(_delayAfterFailure, token); } break; case MachineState.DataTransferingState: _Logger.StartingTimeDelay(_azureDeviceParameters.PublishingInterval().ToString()); await Task.Delay(_azureDeviceParameters.PublishingInterval(), token); await DataTransfer(deviceClient, token); break; } } } catch (Exception ex) { _Logger.LogException(nameof(CommunicationContext), ex); } finally { _Logger.DisposingObject(nameof(DeviceClient), nameof(DeviceClient.CloseAsync)); deviceClient?.CloseAsync(); _Logger.DisposingObject(nameof(SecurityProvider), nameof(SecurityProvider.Dispose)); security?.Dispose(); _disconnectRequest = false; _running = false; } } #endregion private } } ================================================ FILE: Networking/DataRepository/AzureGateway/AzureInterconnection/IDTOProvider.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2020, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ namespace UAOOI.Networking.DataRepository.AzureGateway.AzureInterconnection { /// /// Interface IDTOProvider - used to get access to data cached in the selected RepositoryGroup /// internal interface IDTOProvider { /// /// Gets the Data Transfer Object to be transmitted to Azure as the JSON document. /// /// The repository group. /// object capturing the current state of selected repository group. string GetDTO(string repositoryGroup); } } ================================================ FILE: Networking/DataRepository/AzureGateway/ConfigurationDataConsumer.BoilersSet.xml ================================================  Consumer BoilersArea_Boiler #1 BoilersArea_Boiler_#1 -tHttp1 -dAzureDeviceId -sAzureScopeId -pAzurePrimaryKey -kAzureSecondaryKey -i2000 http://commsvr.com/UA/Examples/BoilersSet BoilersArea_Boiler #1 CCX001_ControlOut CCX001_ControlOut Double -1 CCX001_Input1 CCX001_Input1 Double -1 CCX001_Input2 CCX001_Input2 Double -1 CCX001_Input3 CCX001_Input3 Double -1 DrumX001_LIX001_Output DrumX001_LIX001_Output Double -1 FCX001_ControlOut FCX001_ControlOut Double -1 FCX001_Measurement FCX001_Measurement Double -1 FCX001_SetPoint FCX001_SetPoint Double -1 PipeX001_FTX001_Output PipeX001_FTX001_Output Double -1 PipeX001_ValveX001_Input PipeX001_ValveX001_Input Double -1 LCX001_ControlOut LCX001_ControlOut Double -1 LCX001_Measurement LCX001_Measurement Double -1 LCX001_SetPoint LCX001_SetPoint Double -1 PipeX002_FTX002_Output PipeX002_FTX002_Output Double -1 Simulation_UpdateRate Simulation_UpdateRate UInt32 -1 e669df1f-3670-4dd4-9ef6-acb0975bf4f8 Binding Description d5p1:BoilerType d5p1:BoilersArea_BoilerAlpha 100 1000 ec1d3d5b-c988-45da-9b6e-8d7f7d5c6089 1 0 Consumer BoilersArea_Boiler #2 BoilersArea_Boiler_#2 -tHttp1 -dAzureDeviceId -sAzureScopeId -pAzurePrimaryKey -kAzureSecondaryKey -i2000 http://commsvr.com/UA/Examples/BoilersSet BoilersArea_Boiler #2 CCX001_ControlOut CCX001_ControlOut Double -1 CCX001_Input1 CCX001_Input1 Double -1 CCX001_Input2 CCX001_Input2 Double -1 CCX001_Input3 CCX001_Input3 Double -1 DrumX001_LIX001_Output DrumX001_LIX001_Output Double -1 FCX001_ControlOut FCX001_ControlOut Double -1 FCX001_Measurement FCX001_Measurement Double -1 FCX001_SetPoint FCX001_SetPoint Double -1 PipeX001_FTX001_Output PipeX001_FTX001_Output Double -1 PipeX001_ValveX001_Input PipeX001_ValveX001_Input Double -1 LCX001_ControlOut LCX001_ControlOut Double -1 LCX001_Measurement LCX001_Measurement Double -1 LCX001_SetPoint LCX001_SetPoint Double -1 PipeX002_FTX002_Output PipeX002_FTX002_Output Double -1 Simulation_UpdateRate Simulation_UpdateRate UInt32 -1 1f5c2bba-b5a7-44d2-93fe-b8736470ee54 Binding Description d5p1:BoilerType d5p1:BoilersArea_BoilerBravo 100 1000 33b3a9b8-595c-4dd6-8915-489cd6057b5b 1 0 Consumer BoilersArea_Boiler #3 BoilersArea_Boiler_#3 -tHttp1 -dAzureDeviceId -sAzureScopeId -pAzurePrimaryKey -kAzureSecondaryKey -i2000 http://commsvr.com/UA/Examples/BoilersSet BoilersArea_Boiler #3 CCX001_ControlOut CCX001_ControlOut Double -1 CCX001_Input1 CCX001_Input1 Double -1 CCX001_Input2 CCX001_Input2 Double -1 CCX001_Input3 CCX001_Input3 Double -1 DrumX001_LIX001_Output DrumX001_LIX001_Output Double -1 FCX001_ControlOut FCX001_ControlOut Double -1 FCX001_Measurement FCX001_Measurement Double -1 FCX001_SetPoint FCX001_SetPoint Double -1 PipeX001_FTX001_Output PipeX001_FTX001_Output Double -1 PipeX001_ValveX001_Input PipeX001_ValveX001_Input Double -1 LCX001_ControlOut LCX001_ControlOut Double -1 LCX001_Measurement LCX001_Measurement Double -1 LCX001_SetPoint LCX001_SetPoint Double -1 PipeX002_FTX002_Output PipeX002_FTX002_Output Double -1 Simulation_UpdateRate Simulation_UpdateRate UInt32 -1 096d553e-c1da-4ca4-9fcc-9d524fa3ca20 Binding Description d5p1:BoilerType d5p1:BoilersArea_BoilerBravo 100 1000 ef63fda7-bb4a-400d-a5e9-517fae8e4ff6 1 0 Consumer BoilersArea_Boiler #4 BoilersArea_Boiler_#4 -tHttp1 -dAzureDeviceId -sAzureScopeId -pAzurePrimaryKey -kAzureSecondaryKey -i2000 http://commsvr.com/UA/Examples/BoilersSet BoilersArea_Boiler #4 CCX001_ControlOut CCX001_ControlOut Double -1 CCX001_Input1 CCX001_Input1 Double -1 CCX001_Input2 CCX001_Input2 Double -1 CCX001_Input3 CCX001_Input3 Double -1 DrumX001_LIX001_Output DrumX001_LIX001_Output Double -1 FCX001_ControlOut FCX001_ControlOut Double -1 FCX001_Measurement FCX001_Measurement Double -1 FCX001_SetPoint FCX001_SetPoint Double -1 PipeX001_FTX001_Output PipeX001_FTX001_Output Double -1 PipeX001_ValveX001_Input PipeX001_ValveX001_Input Double -1 LCX001_ControlOut LCX001_ControlOut Double -1 LCX001_Measurement LCX001_Measurement Double -1 LCX001_SetPoint LCX001_SetPoint Double -1 PipeX002_FTX002_Output PipeX002_FTX002_Output Double -1 Simulation_UpdateRate Simulation_UpdateRate UInt32 -1 78e83ea4-aa0c-43e3-9449-3f2f195f2844 Binding Description d5p1:BoilerType d5p1:BoilersArea_BoilerBravo 100 1000 3b3273c2-c5bc-468d-9c6b-97c6e2a5042d 1 0 UDP 4840,False,127.0.0.1,True Consumer BoilersArea_Boiler #1 100 d80d81dd-96e6-4560-850e-154f9181307c BoilersArea_Boiler #2 1202 d80d81dd-96e6-4560-850e-154f9181307c BoilersArea_Boiler #3 130 d80d81dd-96e6-4560-850e-154f9181307c BoilersArea_Boiler #4 140 d80d81dd-96e6-4560-850e-154f9181307c VariantFieldEncoding ================================================ FILE: Networking/DataRepository/AzureGateway/Diagnostic/AzureGatewayDiagnosticExtension.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2020, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System; using System.Runtime.CompilerServices; namespace UAOOI.Networking.DataRepository.AzureGateway.Diagnostic { /// /// Class - expanding the /// internal static class AzureGatewayDiagnosticExtension { /// /// Logs the exception using . /// /// The event source to be used for problem reporting. /// Name of the class. /// Name of the method. /// The exception to be reported. internal static void LogException(this AzureGatewaySemanticEventSource eventSource, string className, Exception e, [CallerMemberName] string methodName = nameof(LogException)) { Exception _exception = e; string _innerText = "An exception has been caught:"; while (e != null) { eventSource.ProgramFailure(className, methodName, $"{_innerText} of type {_exception.GetType().Name} capturing the message: {e.Message}"); e = e.InnerException; _innerText = "It contains inner exception:"; } } } } ================================================ FILE: Networking/DataRepository/AzureGateway/Diagnostic/AzureGatewaySemanticEventSource.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2020, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System; using System.Diagnostics.Tracing; using System.Runtime.CompilerServices; namespace UAOOI.Networking.DataRepository.AzureGateway.Diagnostic { /// /// Class AzureGatewaySemanticEventSource captures event source functionality supporting semantic par logging /// Implements the /// /// [EventSource(Name = "UAOOI.Networking.DataRepository.AzureGateway.Diagnostic", Guid = "BC7E8C08-C708-4E3C-A27E-237F093F175C")] public class AzureGatewaySemanticEventSource : EventSource { /// /// Class Tasks - capturing definitions of the tasks that apply to events. /// public class Tasks { /// /// The part behavior event task /// public const EventTask Part = (EventTask)1; /// /// The code behavior event task /// public const EventTask Code = (EventTask)2; /// /// The binding behavior event task /// public const EventTask Binding = (EventTask)3; /// /// The configuration behavior event task /// public const EventTask Configuration = (EventTask)4; /// /// The azure behavior event task /// public const EventTask Azure = (EventTask)5; } /// /// Class Keywords - defines the local keywords (flags) that apply to events. /// public class Keywords { /// /// The PackageContent /// public const EventKeywords PackageContent = (EventKeywords)(1 << 1); /// /// The Diagnostic /// public const EventKeywords Diagnostic = (EventKeywords)(1 << 2); /// /// The Performance /// public const EventKeywords Performance = (EventKeywords)(1 << 3); /// /// The Settings /// public const EventKeywords Settings = (EventKeywords)(1 << 4); } /// /// Gets the log - implements singleton of the . /// /// The log. internal static AzureGatewaySemanticEventSource Log() { return _singleton.Value; } [Event(1, Message = "At {0}.{1} encountered application failure: {2}", Channel = EventChannel.Admin, Opcode = EventOpcode.Info, Task = Tasks.Code, Level = EventLevel.Error, Keywords = Keywords.Diagnostic, Version = 0x01)] internal void ProgramFailure(string className, string problem, [CallerMemberName] string methodName = nameof(ProgramFailure)) { WriteEvent(1, className, methodName, problem); } [Event(2, Message = "Disposing an object: {0}.{1}.", Channel = EventChannel.Debug, Opcode = EventOpcode.Stop, Task = Tasks.Code, Level = EventLevel.Verbose)] internal void DisposingObject(string className, string methodName) { WriteEvent(2, className, methodName); } [Event(3, Message = "At {0}.{1} encountered Azure transient communication problem: {2}", Channel = EventChannel.Admin, Opcode = EventOpcode.Suspend, Task = Tasks.Azure, Level = EventLevel.Warning, Keywords = EventKeywords.AuditFailure)] internal void AzureConnectionFailure(string className, string methodName, string problem) { WriteEvent(3, className, methodName, problem); } [Event(4, Message = "Entering method {0}.{1}", Channel = EventChannel.Debug, Opcode = EventOpcode.Start, Task = Tasks.Azure, Level = EventLevel.Verbose, Keywords = EventKeywords.AuditSuccess)] internal void EnteringMethodAzure(string className, [CallerMemberName] string methodName = nameof(EnteringMethodAzure)) { WriteEvent(4, className, methodName); } [Event(5, Message = "Start creating client using {0}.{1} for {2} with authenticationMethod {3}, and using the transport {3}", Channel = EventChannel.Debug, Opcode = EventOpcode.Start, Task = Tasks.Azure, Level = EventLevel.Informational, Keywords = EventKeywords.AuditSuccess)] internal void StartCreatingClient(string className, string methodName, string assignedHub, string authenticationMethod, string transportType) { WriteEvent(5, className, methodName, assignedHub, authenticationMethod, transportType); } [Event(6, Message = "Azure communication machine entering state {0}", Channel = EventChannel.Debug, Opcode = EventOpcode.Start, Task = Tasks.Azure, Level = EventLevel.Verbose, Keywords = EventKeywords.AuditSuccess)] internal void EnteringState(string machineState) { WriteEvent(6, machineState); } [Event(7, Message = "Unexpected provisioning resultStatus {0} reporting error {1}", Channel = EventChannel.Admin, Opcode = EventOpcode.Info, Task = Tasks.Azure, Level = EventLevel.Warning, Keywords = EventKeywords.AuditFailure)] internal void UnexpectedProvisioningResultStatus(string provisioningRegistrationStatusType, string errorMessage) { WriteEvent(7, provisioningRegistrationStatusType, errorMessage); } [Event(8, Message = "The following message has been successfully send to Azure service: {0}", Channel = EventChannel.Debug, Opcode = EventOpcode.Info, Task = Tasks.Azure, Level = EventLevel.Verbose, Keywords = EventKeywords.AuditSuccess)] internal void SendEvenSuccided(string payloadHeader) { WriteEvent(8, payloadHeader); } [Event(9, Message = "Starting time delay {0} for a transient failure", Channel = EventChannel.Admin, Opcode = EventOpcode.Info, Task = Tasks.Azure, Level = EventLevel.Verbose, Keywords = EventKeywords.AuditSuccess)] internal void StartingTimeDelay(string timeSpan) { WriteEvent(9, timeSpan); } [Event(10, Message = "Entering method PartBindingFactory.{0}", Channel = EventChannel.Debug, Opcode = EventOpcode.Info, Task = Tasks.Binding, Level = EventLevel.Verbose, Keywords = EventKeywords.AuditSuccess)] internal void EnteringMethodBinding([CallerMemberName] string methodName = nameof(EnteringMethodBinding)) { WriteEvent(10, methodName); } [Event(11, Message = "Opening the configuration file {0}", Channel = EventChannel.Debug, Opcode = EventOpcode.Info, Task = Tasks.Configuration, Level = EventLevel.Verbose, Keywords = EventKeywords.AuditSuccess)] internal void CreatingConfiguration(string configurationFileName) { WriteEvent(11, configurationFileName); } [Event(12, Message = "Entering method {0}.{1}", Channel = EventChannel.Debug, Opcode = EventOpcode.Info, Task = Tasks.Part, Level = EventLevel.Verbose, Keywords = EventKeywords.AuditSuccess)] internal void EnteringMethodPart(string className, [CallerMemberName] string methodName = nameof(EnteringMethodPart)) { WriteEvent(12, className, methodName); } [Event(13, Message = "Successfully composed {0} using instance of type {1}", Channel = EventChannel.Debug, Opcode = EventOpcode.Info, Task = Tasks.Part, Level = EventLevel.Informational, Keywords = EventKeywords.AuditSuccess)] internal void Composed(string variable, string typeName) { WriteEvent(13, variable, typeName); } [Event(14, Message = "Setup of the consumer engine has been accomplished and it starts receiving data.", Channel = EventChannel.Debug, Opcode = EventOpcode.Start, Task = Tasks.Part, Level = EventLevel.Informational, Keywords = EventKeywords.AuditSuccess)] internal void PartInitializationCompleted() { WriteEvent(14); } [Event(15, Message = "TraceData of the EventType={0} with id={1} and description={2}", Channel = EventChannel.Analytic, Opcode = EventOpcode.Start, Task = Tasks.Code, Level = EventLevel.Informational, Keywords = EventKeywords.AuditSuccess)] internal void TraceData(string eventType, int id, string data) { WriteEvent(15, eventType, id, data); } #region private private static Lazy _singleton = new Lazy(() => new AzureGatewaySemanticEventSource()); /// /// Releases the unmanaged resources used by the class and optionally releases the managed resources. /// /// true to release both managed and unmanaged resources; false to release only unmanaged resources. protected override void Dispose(bool disposing) { base.Dispose(disposing); if (disposing) _singleton = new Lazy(() => new AzureGatewaySemanticEventSource()); } private AzureGatewaySemanticEventSource() { } #endregion private } } ================================================ FILE: Networking/DataRepository/AzureGateway/Diagnostic/NetworkingEventSourceProvider.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2020, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System.ComponentModel.Composition; using System.Diagnostics.Tracing; using UAOOI.Networking.Core; namespace UAOOI.Networking.DataRepository.AzureGateway.Diagnostic { /// /// Class NetworkingEventSourceProvider - gets access to an instance of to be registered by the logging infrastructure. /// /// [Export(typeof(INetworkingEventSourceProvider))] public class NetworkingEventSourceProvider : INetworkingEventSourceProvider { #region INetworkingEventSourceProvider /// /// Gets the part event source. /// /// Returns an instance of . public EventSource GetPartEventSource() { return AzureGatewaySemanticEventSource.Log(); } #endregion INetworkingEventSourceProvider } } ================================================ FILE: Networking/DataRepository/AzureGateway/Networking.DataRepository.AzureGateway.csproj ================================================ netstandard2.0 UAOOI.Networking.DataRepository.AzureGateway UAOOI.Networking.DataRepository.AzureGateway true OPCUAOOIKey.snk TBD Copyright MPostol (c) 2020 https://github.com/mpostol/OPC-UA-OOI/blob/master/license.md https://commsvr.gitbook.io/ooi https://github.com/mpostol/OPC-UA-OOI GitHub Object Oriented Internet, OPC UA, CommServer, Reactive Networking. MPostol commsvr.com Object Oriented Internet false false True 1701;1702; IDE0049,IDE0001 Never ================================================ FILE: Networking/DataRepository/AzureGateway/PartBindingFactory.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2020, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System; using System.Collections.Generic; using UAOOI.Configuration.Networking.Serialization; using UAOOI.Networking.DataRepository.AzureGateway.AzureInterconnection; using UAOOI.Networking.DataRepository.AzureGateway.Diagnostic; using UAOOI.Networking.SemanticData; using UAOOI.Networking.SemanticData.DataRepository; namespace UAOOI.Networking.DataRepository.AzureGateway { /// /// Class PartBindingFactory. /// Implements the /// Implements the /// /// /// internal class PartBindingFactory : IBindingFactory, IDTOProvider { #region IBindingFactory /// /// Gets the binding captured by an instance of the type used by the consumer to save the data in the data repository. /// /// It is the name of a repository group profiling the configuration behavior, e.g. encoders selection. /// The configuration of the repositories belonging to the same group are handled according to the same profile. /// The name of a variable that is the ultimate destination of the values recovered from messages. /// Must be unique in the context of the group named by . /// The field metadata definition represented as an object of . /// Returns an object implementing the interface that can be used to update selected variable on the factory side. /// public IConsumerBinding GetConsumerBinding(string repositoryGroup, string processValueName, UATypeInfo fieldTypeInfo) { _log.EnteringMethodBinding(); IConsumerBinding _return = null; if (fieldTypeInfo.ValueRank == 0 || fieldTypeInfo.ValueRank > 1) throw new ArgumentOutOfRangeException(nameof(fieldTypeInfo.ValueRank)); switch (fieldTypeInfo.BuiltInType) { case BuiltInType.Boolean: if (fieldTypeInfo.ValueRank < 0) _return = AddBinding(repositoryGroup, processValueName, fieldTypeInfo); else _return = AddBinding(repositoryGroup, processValueName, fieldTypeInfo); break; case BuiltInType.SByte: if (fieldTypeInfo.ValueRank < 0) _return = AddBinding(repositoryGroup, processValueName, fieldTypeInfo); else _return = AddBinding(repositoryGroup, processValueName, fieldTypeInfo); break; case BuiltInType.Byte: if (fieldTypeInfo.ValueRank < 0) _return = AddBinding(repositoryGroup, processValueName, fieldTypeInfo); else _return = AddBinding(repositoryGroup, processValueName, fieldTypeInfo); break; case BuiltInType.Int16: if (fieldTypeInfo.ValueRank < 0) _return = AddBinding(repositoryGroup, processValueName, fieldTypeInfo); else _return = AddBinding(repositoryGroup, processValueName, fieldTypeInfo); break; case BuiltInType.UInt16: if (fieldTypeInfo.ValueRank < 0) _return = AddBinding(repositoryGroup, processValueName, fieldTypeInfo); else _return = AddBinding(repositoryGroup, processValueName, fieldTypeInfo); break; case BuiltInType.Int32: if (fieldTypeInfo.ValueRank < 0) _return = AddBinding(repositoryGroup, processValueName, fieldTypeInfo); else _return = AddBinding(repositoryGroup, processValueName, fieldTypeInfo); break; case BuiltInType.UInt32: if (fieldTypeInfo.ValueRank < 0) _return = AddBinding(repositoryGroup, processValueName, fieldTypeInfo); else _return = AddBinding(repositoryGroup, processValueName, fieldTypeInfo); break; case BuiltInType.Int64: if (fieldTypeInfo.ValueRank < 0) _return = AddBinding(repositoryGroup, processValueName, fieldTypeInfo); else _return = AddBinding(repositoryGroup, processValueName, fieldTypeInfo); break; case BuiltInType.UInt64: if (fieldTypeInfo.ValueRank < 0) _return = AddBinding(repositoryGroup, processValueName, fieldTypeInfo); else _return = AddBinding(repositoryGroup, processValueName, fieldTypeInfo); break; case BuiltInType.Float: if (fieldTypeInfo.ValueRank < 0) _return = AddBinding(repositoryGroup, processValueName, fieldTypeInfo); else _return = AddBinding(repositoryGroup, processValueName, fieldTypeInfo); break; case BuiltInType.Double: if (fieldTypeInfo.ValueRank < 0) _return = AddBinding(repositoryGroup, processValueName, fieldTypeInfo); else _return = AddBinding(repositoryGroup, processValueName, fieldTypeInfo); break; case BuiltInType.String: if (fieldTypeInfo.ValueRank < 0) _return = AddBinding(repositoryGroup, processValueName, fieldTypeInfo); else _return = AddBinding(repositoryGroup, processValueName, fieldTypeInfo); break; case BuiltInType.DateTime: if (fieldTypeInfo.ValueRank < 0) _return = AddBinding(repositoryGroup, processValueName, fieldTypeInfo); else _return = AddBinding(repositoryGroup, processValueName, fieldTypeInfo); break; case BuiltInType.Guid: if (fieldTypeInfo.ValueRank < 0) _return = AddBinding(repositoryGroup, processValueName, fieldTypeInfo); else _return = AddBinding(repositoryGroup, processValueName, fieldTypeInfo); break; case BuiltInType.ByteString: if (fieldTypeInfo.ValueRank < 0) _return = AddBinding(repositoryGroup, processValueName, fieldTypeInfo); else _return = AddBinding(repositoryGroup, processValueName, fieldTypeInfo); break; case BuiltInType.Null: case BuiltInType.XmlElement: case BuiltInType.NodeId: case BuiltInType.ExpandedNodeId: case BuiltInType.StatusCode: case BuiltInType.QualifiedName: case BuiltInType.LocalizedText: case BuiltInType.ExtensionObject: case BuiltInType.DataValue: case BuiltInType.Variant: case BuiltInType.DiagnosticInfo: case BuiltInType.Enumeration: default: throw new ArgumentOutOfRangeException("encoding"); } return _return; } /// /// Gets the binding captured by an instance of the type used by the producer to read from the local data repository. /// /// It is the name of a repository group profiling the configuration behavior, e.g. encoders selection. /// The configuration of the repositories belonging to the same group are handled according to the same profile. /// The name of a variable that is the source of the values forwarded by a message over the network. /// Must be unique in the context of the group named by /// The of the message field encoding. /// Returns an object implementing the interface that can be used to create message and populate it with the data. /// public IProducerBinding GetProducerBinding(string repositoryGroup, string processValueName, UATypeInfo fieldTypeInfo) { _log.EnteringMethodBinding(); throw new NotImplementedException("Intentionally nut implemented - this role is not supported for the consumer"); } #endregion IBindingFactory #region IDTOProvider public string GetDTO(string repositoryGroup) { _log.EnteringMethodBinding(); return _processReplica[repositoryGroup].ToString(); } #endregion IDTOProvider #region private private readonly Dictionary _processReplica = new Dictionary(); private readonly AzureGatewaySemanticEventSource _log = AzureGatewaySemanticEventSource.Log(); private IConsumerBinding AddBinding(string repositoryGroup, string variableName, UATypeInfo typeInfo) { ConsumerBindingMonitoredValue toBeReturned = new ConsumerBindingMonitoredValue(typeInfo); if (!_processReplica.ContainsKey(repositoryGroup)) _processReplica.Add(repositoryGroup, new RepositoryGroup()); Action updater = _processReplica[repositoryGroup].AddProperty(variableName); toBeReturned.PropertyChanged += (x, y) => updater(((ConsumerBindingMonitoredValue)x).Value); return toBeReturned; } #endregion private } } ================================================ FILE: Networking/DataRepository/AzureGateway/PartConfigurationFactory.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2020, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System; using System.Diagnostics; using UAOOI.Configuration.Networking; using UAOOI.Configuration.Networking.Serialization; using UAOOI.Networking.DataRepository.AzureGateway.Diagnostic; namespace UAOOI.Networking.DataRepository.AzureGateway { /// /// Class ProducerConfigurationFactory - provides implementation of the for the producer. /// Implements the /// /// internal class PartConfigurationFactory : ConfigurationFactoryBase { #region constructor /// /// Initializes a new instance of the class. /// /// Name of the producer configuration file. public PartConfigurationFactory(string configurationFileName) : base(configurationFileName) { _log.CreatingConfiguration(configurationFileName); } #endregion constructor #region ConfigurationFactoryBase /// /// Occurs after the association configuration has been changed. /// public override event EventHandler OnAssociationConfigurationChange; /// /// Occurs after the communication configuration has been changed. /// public override event EventHandler OnMessageHandlerConfigurationChange; /// /// Writes trace data to the trace listeners in the collection using the specified , /// event identifier , and trace . /// /// One of the enumeration values that specifies the event type of the trace data. /// A numeric identifier for the event. /// The trace data. protected override void TraceData(TraceEventType eventType, int id, object data) { _log.TraceData(eventType.ToString(), id, data.ToString()); } protected override void RaiseEvents() { OnAssociationConfigurationChange?.Invoke(this, EventArgs.Empty); OnMessageHandlerConfigurationChange?.Invoke(this, EventArgs.Empty); } #endregion ConfigurationFactoryBase #region private private readonly AzureGatewaySemanticEventSource _log = AzureGatewaySemanticEventSource.Log(); #endregion private } } ================================================ FILE: Networking/DataRepository/AzureGateway/PartDataManagementSetup.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2020, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using CommonServiceLocator; using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.ComponentModel.Composition; using System.Diagnostics; using System.Threading; using System.Threading.Tasks; using UAOOI.Configuration.Networking.Serialization; using UAOOI.Networking.Core; using UAOOI.Networking.DataRepository.AzureGateway.AzureInterconnection; using UAOOI.Networking.DataRepository.AzureGateway.Diagnostic; using UAOOI.Networking.ReferenceApplication.Core; using UAOOI.Networking.SemanticData; namespace UAOOI.Networking.DataRepository.AzureGateway { /// /// Class AzureGatewayDataManagementSetup - represents a data producer in the Reference Application. It is responsible to compose all parts making up a producer /// This class cannot be inherited. /// Implements the /// /// [Export(typeof(PartDataManagementSetup))] [PartCreationPolicy(CreationPolicy.Shared)] public sealed class PartDataManagementSetup : DataManagementSetup { #region Composition /// /// Initializes a new instance of the class. /// public PartDataManagementSetup() { _Logger.EnteringMethodPart(nameof(PartDataManagementSetup)); //Compose external parts IServiceLocator _serviceLocator = ServiceLocator.Current; //string _configurationFileName = _serviceLocator.GetInstance(CompositionSettings.ConfigurationFileNameContract); m_ViewModel = _serviceLocator.GetInstance(); EncodingFactory = _serviceLocator.GetInstance(); _Logger.Composed(nameof(EncodingFactory), EncodingFactory.GetType().FullName); MessageHandlerFactory = _serviceLocator.GetInstance(); _Logger.Composed(nameof(MessageHandlerFactory), MessageHandlerFactory.GetType().FullName); //compose internal parts ConfigurationFactory = new PartConfigurationFactory(ConfigurationFilePath); PartBindingFactory pbf = new PartBindingFactory(); _DTOProvider = pbf; BindingFactory = pbf; } internal static string ConfigurationFilePath { get; set; } = @"ConfigurationDataConsumer.BoilersSet.xml"; #endregion Composition #region IProducerDataManagementSetup /// /// Setups this instance. /// public void Setup() { _Logger.EnteringMethodPart(nameof(PartDataManagementSetup)); try { m_ViewModel.ChangeProducerCommand(() => { m_ViewModel.ProducerErrorMessage = "Restarted"; }); _Logger.EnteringMethodPart(nameof(DataManagementSetup), nameof(Start)); Start(); StartAzureCommunication(ConfigurationFactory.GetConfiguration()); _Logger.PartInitializationCompleted(); } catch (Exception ex) { m_ViewModel.ProducerErrorMessage = "ERROR"; _Logger.LogException(nameof(PartDataManagementSetup), ex); throw; } } #endregion IProducerDataManagementSetup #region IDisposable /// /// Releases unmanaged and - optionally - managed resources. /// /// true to release both managed and unmanaged resources; false to release only unmanaged resources. protected override void Dispose(bool disposing) { _Logger.EnteringMethodPart(nameof(PartDataManagementSetup), nameof(Dispose)); m_onDispose(disposing); base.Dispose(disposing); if (!disposing || m_disposed) return; m_disposed = true; _tokenSource.Cancel(); try { Task.WhenAll(_tasks.ToArray()).Wait(); } catch (OperationCanceledException oce) { _Logger.LogException(nameof(PartDataManagementSetup), oce); } finally { _Logger.DisposingObject(nameof(CancellationTokenSource), nameof(Dispose)); _tokenSource.Dispose(); } } #endregion IDisposable #region private /// /// Gets or sets the view model to be used for diagnostic purpose.. /// /// The view model. private ProducerViewModel m_ViewModel; private readonly ConcurrentBag _tasks = new ConcurrentBag(); private readonly AzureGatewaySemanticEventSource _Logger = AzureGatewaySemanticEventSource.Log(); private CancellationTokenSource _tokenSource = new CancellationTokenSource(); /// /// Gets a value indicating whether this is disposed. /// /// true if disposed; otherwise, false. private bool m_disposed = false; private readonly IDTOProvider _DTOProvider = null; private Action m_onDispose = disposing => { }; private void StartAzureCommunication(ConfigurationData configuration) { _Logger.EnteringMethodPart(nameof(PartDataManagementSetup)); CancellationToken token = _tokenSource.Token; List azureComunicationContextList = new List(); TaskFactory taskFactory = Task.Factory; foreach (DataSetConfiguration dataset in configuration.DataSets) { try { AzureDeviceParameters parameters = AzureDeviceParameters.ParseRepositoryGroup(dataset.RepositoryGroup); if (parameters == null) continue; CommunicationContext communicationContext = new CommunicationContext(_DTOProvider, dataset.RepositoryGroup, parameters); azureComunicationContextList.Add(communicationContext); Task newCommunicatinTask = taskFactory.StartNew(() => communicationContext.Run(token), token); _tasks.Add(newCommunicatinTask); } catch (AggregateException ax) { _Logger.LogException(nameof(PartDataManagementSetup), ax); continue; } catch (Exception) { throw; } } m_ViewModel.ProducerErrorMessage = "Running"; } #endregion private #region Unit tests instrumentation [Conditional("DEBUG")] internal void DisposeCheck(Action onDispose) { _Logger.EnteringMethodPart(nameof(PartDataManagementSetup)); m_onDispose = onDispose; } #endregion Unit tests instrumentation } } ================================================ FILE: Networking/DataRepository/AzureGateway/Properties/AssemblyInfo.cs ================================================ using System.Reflection; using System.Runtime.CompilerServices; [assembly: AssemblyTrademark("Object Oriented Internet")] [assembly: AssemblyCulture("")] [assembly: InternalsVisibleTo( "UAOOI.Networking.DataRepository.AzureGateway.Test, PublicKey=" + "00240000048000009400000006020000002400005253413100040000010001005b97a0972ff6b13a" + "8a9ff9c09503aea0e5e2fe29cb2275a0c0942182f4c3431814b6bc9a556d9fe0d7e7823439c1ba28" + "521f6318e4c936c4461604ef668e9686c2021571b093e1bfba071b373bc56a07a3afdc120c5313d3" + "9a935cda64b759f857ebb3db483641444a5347e1564f8ba6d4fad2f968d3caf9991a4fa6aa019ebe" )] [assembly: InternalsVisibleTo( "DynamicProxyGenAssembly2, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c547cac37abd99c8db225ef2f6c8a3602f3b3606cc9891605d02baa56104f4cfc0734aa39b93bf7852f7d9266654753cc297e7d2edfe0bac1cdcf9f717241550e0a7b191195b7667bb4f64bcb8e2121380fd1d9d46ad2d92d2d15605093924cceaf74c4861eff62abf69b9291ed0a340e113be11e6a7d3113e92484cf7045cc7" )] ================================================ FILE: Networking/DataRepository/AzureGateway/Properties/UAOOI.Networking.DataRepository.AzureGateway.xml ================================================ UAOOI.Networking.DataRepository.AzureGateway Interface defining device parameters for establishing azure connection. Parses the specified configuration if is not empty, otherwise parse it . The configuration. AzureDeviceParameters. parse string Initializes a new instance of the class. Must be public to be used by the command line parser Gets or sets the name of the resource group. The name of the resource group. Gets the transport type used for this device. Gets the Id corresponding to Azure device id. Gets the azure scope id in which given device resides. Gets the Azure primary key. The Azure primary key. Gets the azure secondary key. The azure secondary key. Gets the time interval when to send device state to Azure. Calculates the time interval when to send device state to Azure. Class CommunicationContext - implements Azure communication state machine. Runs the communication machine. The cancellation token. Disconnects the request. Calling the {nameof(DisconnectRequest)} operation is allowed only in the running state of the communication machine. Interface IDTOProvider - used to get access to data cached in the selected RepositoryGroup Gets the Data Transfer Object to be transmitted to Azure as the JSON document. The repository group. object capturing the current state of selected repository group. Class - expanding the Logs the exception using . The event source to be used for problem reporting. Name of the class. Name of the method. The exception to be reported. Class AzureGatewaySemanticEventSource captures event source functionality supporting semantic par logging Implements the Class Tasks - capturing definitions of the tasks that apply to events. The part behavior event task The code behavior event task The binding behavior event task The configuration behavior event task The azure behavior event task Class Keywords - defines the local keywords (flags) that apply to events. The PackageContent The Diagnostic The Performance The Settings Gets the log - implements singleton of the . The log. Releases the unmanaged resources used by the class and optionally releases the managed resources. true to release both managed and unmanaged resources; false to release only unmanaged resources. Class NetworkingEventSourceProvider - gets access to an instance of to be registered by the logging infrastructure. Gets the part event source. Returns an instance of . Class PartBindingFactory. Implements the Implements the Gets the binding captured by an instance of the type used by the consumer to save the data in the data repository. It is the name of a repository group profiling the configuration behavior, e.g. encoders selection. The configuration of the repositories belonging to the same group are handled according to the same profile. The name of a variable that is the ultimate destination of the values recovered from messages. Must be unique in the context of the group named by . The field metadata definition represented as an object of . Returns an object implementing the interface that can be used to update selected variable on the factory side. Gets the binding captured by an instance of the type used by the producer to read from the local data repository. It is the name of a repository group profiling the configuration behavior, e.g. encoders selection. The configuration of the repositories belonging to the same group are handled according to the same profile. The name of a variable that is the source of the values forwarded by a message over the network. Must be unique in the context of the group named by The of the message field encoding. Returns an object implementing the interface that can be used to create message and populate it with the data. Class ProducerConfigurationFactory - provides implementation of the for the producer. Implements the Initializes a new instance of the class. Name of the producer configuration file. Occurs after the association configuration has been changed. Occurs after the communication configuration has been changed. Writes trace data to the trace listeners in the collection using the specified , event identifier , and trace . One of the enumeration values that specifies the event type of the trace data. A numeric identifier for the event. The trace data. Class AzureGatewayDataManagementSetup - represents a data producer in the Reference Application. It is responsible to compose all parts making up a producer This class cannot be inherited. Implements the Initializes a new instance of the class. Setups this instance. Releases unmanaged and - optionally - managed resources. true to release both managed and unmanaged resources; false to release only unmanaged resources. Gets or sets the view model to be used for diagnostic purpose.. The view model. Gets a value indicating whether this is disposed. true if disposed; otherwise, false. Class RepositoryGroup - it is a process state replica implementing Data Transfer Object. Implements the Adds the property to the Dada Transfer Object. The type of the type. Name of the property. Action<type>. Duplicated property name: {propertyName} Gets an containing the keys of the . The keys. Gets an containing the values in the . The values. Gets the number of elements contained in the . The count. Gets a value indicating whether the is read-only. true if this instance is read only; otherwise, false. Gets or sets the with the specified key. The key. System.Object. Adds an element with the provided key and value to the . The object to use as the key of the element to add. The object to use as the value of the element to add. Determines whether the contains an element with the specified key. The key to locate in the . true if the contains an element with the key; otherwise, false. Removes the element with the specified key from the . The key of the element to remove. true if the element is successfully removed; otherwise, false. This method also returns false if key was not found in the original . Gets the value associated with the specified key. The key whose value to get. When this method returns, the value associated with the specified key, if the key is found; otherwise, the default value for the type of the value parameter. This parameter is passed uninitialized. true if the object that implements contains an element with the specified key; otherwise, false. Adds an item to the . The object to add to the . Removes all items from the . Determines whether the contains a specific value. The object to locate in the . true if item is found in the ; otherwise, false. Copies the elements of the to an , starting at a particular index. The one-dimensional that is the destination of the elements copied from . The must have zero-based indexing. The zero-based index in array at which copying begins. Removes the first occurrence of a specific object from the . The object to remove from the . true if item was successfully removed from the ; otherwise, false. This method also returns false if item is not found in the original . Returns an enumerator that iterates through the collection. An enumerator that can be used to iterate through the collection. Returns an enumerator that iterates through a collection. An object that can be used to iterate through the collection. ================================================ FILE: Networking/DataRepository/AzureGateway/README.md ================================================ # Azure Gateway DataRepository ## Key words Azure, Cloud Computing, Object-Oriented Internet, OPC Unified Architecture, Reactive Networking (RxNetworking), Machine to Machine Communication, Internet of Things ## Executive Summary This project shows an example implementation of an OPC UA PubSub to Azure embedded gateway. It is implemented as a composable part of the Reactive Networking Application (`RxNetworking App`). The article [Reactive Networking of Semantic-Data Library](../../../Networking/SemanticData/README.MD) covers a description of the architecture supporting the reactive communication design pattern. The `RxNetworking App` is an aggregation of `Producer` and `Consumer` entities derived from `DataRepository`. They must provide interconnection to real-time process data, hence they are recognized as an extension of the `DataRepository` class. `AzureGateway` part fulfills the `Consumer` role and uses out-of-band communication to push telemetry data to the cloud. Working through this tutorial gives you an introductory understanding of the steps required to implement the `Consumer` role of the `RxNetworking` application. It is an example of `Semantic-Data` reactive networking based on [OPC UA PubSub][OPC.UA.PubSub] specification. The document [OPC UA PubSub Main Technology Features][PubSubMTF] covers a description of selected fetuses relevant to this specification. This project is proof of concept that out-of-band communication for OPC UA PubSub can be implemented based on the `DataRepository` concept. This workout will be described in an independent article. To get the full story and your copy check out the preprint from [Research Gateway: Object-Oriented Internet - Azure Interoperability](https://www.researchgate.net/publication/346563454_Object-Oriented_Internet_-_Azure_Interoperability). Main purpose of this preprint it to enable an early community review. We will consider your contribution to be applied to the final version of the article. ## Conclusion The obtained results prove that the **embedded gateway** archetype implementation is possible based on the existing standalone framework supporting reactive interoperability atop of the M2M communication compliant with the [OPC UA PubSub standard][OPC.UA.PubSub]. It is worth stressing that **there is no dependency on the Client/Server session-oriented relationship**. In contrast to the architecture described in the OPC UA Part 1 specification, the publisher/consumer roles are not tightly coupled with the **Address Space** of the OPC UA Server embedded component. In the proposed approach, the cloud interoperability is supported by a dedicated part employing out-of-band communication only without dependency on the OPC UA functionality. In contrast to the middleware concept, the gateway functionality is implemented as a part - **composable to the whole without programming skills**. It makes it possible to modify its functionality later after releasing the library or even deploying the application program in the production environment because the part is composed at the runtime. Concluding, the paper describes a proof of concept that it is possible to integrate selected cloud services (e.g. **Azure**) with the **Cyber-physical network** atop of the OPC UA PubSub applying the proposed architecture and deployment scenario. In contrast to limiting the PubSub role to export the data from the **Address Space** exposed by a selected OPC UA server out of the OPC UA ecosystem, applying the proposed solution enables interoperability of the cloud services and the **Cyber-physical network** as one whole. ## Acknowledgment I would like to acknowledge the [CrossHMI](https://github.com/Drutol/CrossHMI#crosshmi) project from which the `AzureGateway` implementation of the `DataRepository` was derived. I would like to thank [Piotr Szymczak](https://github.com/Drutol) for his inputs/inspirations, feedback, and cooperation in this respect. ## Implementation walk through ### Introduction Here are steps undertook to implement the `Consumer` role in the application: 1. `DataManagementSetup`: this class has been overridden by the `PartDataManagementSetup` class and it initializes the communication and binds data fields recovered form messages to local resources. 1. `IEncodingFactory` and `IMessageHandlerFactory`: have been implemented in external common libraries and `Consumer` doesn't depend on this implementation - current implementation of the interfaces is localized as services using an instance of the [CommonServiceLocator.IServiceLocator][Locator] interface. 1. `IBindingFactory`: has been implemented in the class `PartBindingFactory` that is responsible to gather the data recovered from the `Message` instances pulled from the `Distribution Channel`. The received data is driven to the Azure services using configured out-of-band protocol. 1. `IConfigurationFactory`: the class `PartConfigurationFactory` implements this interface to be used for the configuration file opening. ### `DataManagementSetup` implementation The `PartDataManagementSetup` constructor initializes all properties, which are injection points of all parts composing this role. ```C# [Export(typeof(PartDataManagementSetup))] [PartCreationPolicy(CreationPolicy.Shared)] public sealed class PartDataManagementSetup : DataManagementSetup { public PartDataManagementSetup() { _Logger.EnteringMethodPart(nameof(PartDataManagementSetup)); //Compose external parts IServiceLocator _serviceLocator = ServiceLocator.Current; //string _configurationFileName = _serviceLocator.GetInstance(CompositionSettings.ConfigurationFileNameContract); m_ViewModel = _serviceLocator.GetInstance(); EncodingFactory = _serviceLocator.GetInstance(); _Logger.Composed(nameof(EncodingFactory), EncodingFactory.GetType().FullName); MessageHandlerFactory = _serviceLocator.GetInstance(); _Logger.Composed(nameof(MessageHandlerFactory), MessageHandlerFactory.GetType().FullName); //compose internal parts ConfigurationFactory = new PartConfigurationFactory(ConfigurationFilePath); PartBindingFactory pbf = new PartBindingFactory(); _DTOProvider = pbf; BindingFactory = pbf; } .... } ``` In this example, it is assumed that [IServiceLocator][Locator] is implemented to resolve references to any external services. Finally the `DataManagementSetup.Start()` method is called to initialize the infrastructure, enable all associations and start pumping the data. ### `IBindingFactory` implementation Implementation of this interface is a basic step to implement `Consumer` functionality. The `DataRepository` represents data holding assets in the `RxNetworking App` and, following the proposed approach, the `IBindingFactory` interface is implemented by an external part. It captures functionality responsible for accessing the process data represented by the `LocalResources`. The `LocalResources` represents the external part that has a very broad usage purpose. For example, it may be any kind of process data source/destination, and to name a few `Raw Data`, `OPC UA Address Space Management`, `Azure` cloud-based front-end, etc. The `AzureGateway` functional package has been implemented based on the `Consumer` concept. This particular `Consumer` (`PartBindingFactory`) implements the `IBindingFactory` interface to gather the data recovered from the `Message` instances pulled from the `Distribution Channel`. The received data is driven to the Azure services using configured out-of-band' protocol. An instance of the `IBindingFactory` is responsible to create objects implementing `IBinding` that can be used by the `Consumer` to forward the data retrieved from `NetworkMessag` received over the wire to Azure services. The proposed implementation of the Azure gateway proves that the `DataRepository` and associated entities, i.e. `Local Resources`, `Consumer`, `Producer` can be implemented as external parts, and consequently, the application scope may cover practically any concern that can be separated from the core OPC UA PubSub communication engine implementation. ### `IConfigurationFactory` implementation the library [`UAOOI.Configuration.Networking`](../../../Configuration/Networking/README.MD). In a typical scenario, this implementation should not be considered for further modification. The only open question is how to provide the name of the file containing the configuration of this role. This role uses an independent configuration file: - `ConfigurationDataConsumer.BoilersSet.xml` attached to the project. ## Current release > Note; This library is not considered to be published as the NuGet package. ## Versioning We use [Semantic Versioning 2.0.0](http://semver.org/) for versioning. For the versions available, see the [Releases](https://github.com/mpostol/OPC-UA-OOI/releases) page of the project. ## Authors - [Mariusz Postol](https://github.com/mpostol) - main contributor of this project. See also the list of contributors who participated in this project and the `Acknowledgment` section. ## See also - Postół M., Szymczak P. (2021) Object-Oriented Internet Cloud Interoperability. In: Paszynski M., Kranzlmüller D., Krzhizhanovskaya V.V., Dongarra J.J., Sloot P.M. (eds) Computational Science – ICCS 2021. ICCS 2021. Lecture Notes in Computer Science, vol 12745. Springer, Cham. - Available on [ResearchGate](https://www.researchgate.net/publication/352289895_Object-Oriented_Internet_Cloud_Interoperability) - ICCS 2021: INTERNATIONAL CONFERENCE ON COMPUTATIONAL Presentation is available on [YouTube](https://youtu.be/yXH09wuWEcA) - Postół M. (2020) Object-Oriented Internet Reactive Interoperability. In: Krzhizhanovskaya V. et al. (eds) Computational Science – ICCS 2020. ICCS 2020. Lecture Notes in Computer Science, vol 12141. Springer, Cham; [DOI: https://doi.org/10.1007/978-3-030-50426-7_31](https://doi.org/10.1007%2F978-3-030-50426-7_31) - Postół M. (2020) [Object-Oriented Internet Reactive Interoperability](https://www.researchgate.net/publication/341882427_Object-Oriented_Internet_Reactive_Interoperability), presentation, DOI: 10.13140/RG.2.2.33984.56323 - Mariusz Postol, [Machine to Machine Semantic-Data Based Communication: Comprehensive Survey](https://www.researchgate.net/publication/341165347_Machine_to_Machine_Semantic-Data_Based_Communication_Comprehensive_Survey) chapter in book [Computer Game Innovations 2018](https://www.researchgate.net/publication/335524620_Computer_Game_Innovations_2018), Publisher: Lodz University of Technology Press; ISBN: 978-83-7283-999-2 - Mariusz Postol, [Object Oriented Internet](https://ieeexplore.ieee.org/abstract/document/7321562), [3rd International Conference on Innovative Network Systems and Applications](https://fedcsis.org/2015/inetsapp), 2015, [IEEE Xplore Digital Library](https://ieeexplore.ieee.org/abstract/document/7321562) [![DOI](https://img.shields.io/badge/DOI-10.15439%2F2015F160-blue)](https://fedcsis.org/proceedings/2015/pliks/160.pdf) - [Reactive HMI Android application example](https://github.com/Drutol/CrossHMI#crosshmi) - [Object Oriented Internet - on-line ebook][OOIBook] - API Browser: the preliminary code help documentation - [available for sponsors- consider joining](https://github.commsvr.com/AboutPartnershipProgram.md.html) - [OPC UA Makes Complex Data Processing Possible][wordpress.OPCUACD] - [OPC Unified Architecture Specification Part 14: PubSub Release 1.04 February 06, 2018][OPC.UA.PubSub] - [OPC UA PubSub Main Technology Features][PubSubMTF] - [CommonServiceLocator NuGet package][Locator] [PubSubMTF]:../../../Networking/SemanticData/README.PubSubMTF.md [OPC.UA.PubSub]: https://opcfoundation.org/developer-tools/specifications-unified-architecture/part-14-pubsub/ [wordpress.OPCUACD]:https://mpostol.wordpress.com/2014/05/08/opc-ua-makes-complex-data-access-possible [OOIBook]:https://commsvr.gitbook.io/ooi/readme [Locator]:https://www.nuget.org/packages/CommonServiceLocator ================================================ FILE: Networking/DataRepository/AzureGateway/RepositoryGroup.cs ================================================ //____________________________________________________________________________ // // Copyright (C) 2020, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/TP //____________________________________________________________________________ using Newtonsoft.Json; using System; using System.Collections; using System.Collections.Generic; namespace UAOOI.Networking.DataRepository.AzureGateway { /// /// Class RepositoryGroup - it is a process state replica implementing Data Transfer Object. /// Implements the /// /// internal class RepositoryGroup : IDictionary { #region API /// /// Adds the property to the Dada Transfer Object. /// /// The type of the type. /// Name of the property. /// Action<type>. /// Duplicated property name: {propertyName} internal Action AddProperty(string propertyName) { if (_processReplica.ContainsKey(propertyName)) throw new ArgumentOutOfRangeException($"Duplicated property name: {propertyName}"); _processReplica.Add(propertyName, default(type)); //object _value = _processReplica[propertyName]; return x => Updater(propertyName, x); } #endregion API #region IDictionary /// /// Gets an containing the keys of the . /// /// The keys. public ICollection Keys => _processReplica.Keys; /// /// Gets an containing the values in the . /// /// The values. /// public ICollection Values => throw new NotImplementedException(); /// /// Gets the number of elements contained in the . /// /// The count. public int Count => _processReplica.Count; /// /// Gets a value indicating whether the is read-only. /// /// true if this instance is read only; otherwise, false. public bool IsReadOnly => true; /// /// Gets or sets the with the specified key. /// /// The key. /// System.Object. /// public object this[string key] { get => _processReplica[key]; set => throw new NotImplementedException(); } /// /// Adds an element with the provided key and value to the . /// /// The object to use as the key of the element to add. /// The object to use as the value of the element to add. /// public void Add(string key, object value) { throw new NotImplementedException(); } /// /// Determines whether the contains an element with the specified key. /// /// The key to locate in the . /// true if the contains an element with the key; otherwise, false. public bool ContainsKey(string key) { return _processReplica.ContainsKey(key); } /// /// Removes the element with the specified key from the . /// /// The key of the element to remove. /// true if the element is successfully removed; otherwise, false. This method also returns false if key was not found in the original . /// public bool Remove(string key) { throw new NotImplementedException(); } /// /// Gets the value associated with the specified key. /// /// The key whose value to get. /// When this method returns, the value associated with the specified key, if the key is found; otherwise, the default value for the type of the value parameter. This parameter is passed uninitialized. /// true if the object that implements contains an element with the specified key; otherwise, false. public bool TryGetValue(string key, out object value) { return _processReplica.TryGetValue(key, out value); } /// /// Adds an item to the . /// /// The object to add to the . /// public void Add(KeyValuePair item) { throw new NotImplementedException(); } /// /// Removes all items from the . /// /// public void Clear() { throw new NotImplementedException(); } /// /// Determines whether the contains a specific value. /// /// The object to locate in the . /// true if item is found in the ; otherwise, false. public bool Contains(KeyValuePair item) { return ((IDictionary)_processReplica).Contains(item); } /// /// Copies the elements of the to an , starting at a particular index. /// /// The one-dimensional that is the destination of the elements copied from . The must have zero-based indexing. /// The zero-based index in array at which copying begins. public void CopyTo(KeyValuePair[] array, int arrayIndex) { ((IDictionary)_processReplica).CopyTo(array, arrayIndex); } /// /// Removes the first occurrence of a specific object from the . /// /// The object to remove from the . /// true if item was successfully removed from the ; otherwise, false. This method also returns false if item is not found in the original . /// public bool Remove(KeyValuePair item) { throw new NotImplementedException(); } /// /// Returns an enumerator that iterates through the collection. /// /// An enumerator that can be used to iterate through the collection. public IEnumerator> GetEnumerator() { return _processReplica.GetEnumerator(); } /// /// Returns an enumerator that iterates through a collection. /// /// An object that can be used to iterate through the collection. IEnumerator IEnumerable.GetEnumerator() { return _processReplica.GetEnumerator(); } #endregion IDictionary #region object public override string ToString() { return JsonConvert.SerializeObject(this); } #endregion object #region private private readonly Dictionary _processReplica = new Dictionary(); private object GetPropertyValue(string propertyName) { object result = null; if (_processReplica.ContainsKey(propertyName)) result = _processReplica[propertyName]; return result; } private void Updater(string propertyName, type value) { _processReplica[propertyName] = value; } #endregion private } } ================================================ FILE: Networking/DataRepository/AzureGatewayUnitTest/AzureInterconnection/AzureDeviceParametersUnitTest.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2020, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using Microsoft.Azure.Devices.Client; using Microsoft.VisualStudio.TestTools.UnitTesting; using System; using UAOOI.Networking.DataRepository.AzureGateway.AzureInterconnection; namespace UAOOI.Networking.DataRepository.AzureGateway.Test.AzureInterconnection { [TestClass] public class AzureDeviceParametersUnitTest { [TestMethod] public void ConstructorTest() { AzureDeviceParameters instaneToTest = AzureDeviceParameters.ParseRepositoryGroup(String.Empty); Assert.IsNotNull(instaneToTest); Assert.IsTrue(String.IsNullOrEmpty(instaneToTest.AzureDeviceId)); Assert.IsTrue(String.IsNullOrEmpty(instaneToTest.AzurePrimaryKey)); Assert.IsTrue(String.IsNullOrEmpty(instaneToTest.AzureScopeId)); Assert.IsTrue(String.IsNullOrEmpty(instaneToTest.AzureSecondaryKey)); Assert.AreEqual(TimeSpan.FromSeconds(1.0), instaneToTest.PublishingInterval()); Assert.AreEqual(default(TransportType), instaneToTest.TransportType); Assert.IsTrue(String.IsNullOrEmpty(instaneToTest.ResourceGroupName)); } [TestMethod] public void ParseFullTestMethod() { AzureDeviceParameters instaneToTest = AzureDeviceParameters.ParseRepositoryGroup("RepositoryGroup -tHttp1 -dAzureDeviceId -sAzureScopeId -pAzurePrimaryKey -kAzureSecondaryKey -i2000"); Assert.IsNotNull(instaneToTest); Assert.AreEqual("AzureDeviceId", instaneToTest.AzureDeviceId); Assert.AreEqual("AzurePrimaryKey", instaneToTest.AzurePrimaryKey); Assert.AreEqual("AzureScopeId", instaneToTest.AzureScopeId); Assert.AreEqual("AzureSecondaryKey", instaneToTest.AzureSecondaryKey); Assert.AreEqual(TimeSpan.FromSeconds(2.0), instaneToTest.PublishingInterval()); Assert.AreEqual(TransportType.Http1, instaneToTest.TransportType); Assert.AreEqual("RepositoryGroup", instaneToTest.ResourceGroupName); } [TestMethod] public void ParseMissingOptionalTestMethod() { AzureDeviceParameters instaneToTest = AzureDeviceParameters.ParseRepositoryGroup("RepositoryGroup -dAzureDeviceId -sAzureScopeId -pAzurePrimaryKey -kAzureSecondaryKey "); Assert.IsNotNull(instaneToTest); Assert.AreEqual("AzureDeviceId", instaneToTest.AzureDeviceId); Assert.AreEqual("AzurePrimaryKey", instaneToTest.AzurePrimaryKey); Assert.AreEqual("AzureScopeId", instaneToTest.AzureScopeId); Assert.AreEqual("AzureSecondaryKey", instaneToTest.AzureSecondaryKey); Assert.AreEqual(TimeSpan.FromSeconds(1.0), instaneToTest.PublishingInterval()); Assert.AreEqual(TransportType.Amqp, instaneToTest.TransportType); Assert.AreEqual("RepositoryGroup", instaneToTest.ResourceGroupName); } [TestMethod] public void ParseMissingRepositoryGroupTestMethod() { AzureDeviceParameters instaneToTest = AzureDeviceParameters.ParseRepositoryGroup("-dAzureDeviceId -sAzureScopeId -pAzurePrimaryKey -kAzureSecondaryKey "); Assert.IsNotNull(instaneToTest); Assert.AreEqual("AzureDeviceId", instaneToTest.AzureDeviceId); Assert.AreEqual("AzurePrimaryKey", instaneToTest.AzurePrimaryKey); Assert.AreEqual("AzureScopeId", instaneToTest.AzureScopeId); Assert.AreEqual("AzureSecondaryKey", instaneToTest.AzureSecondaryKey); Assert.AreEqual(TimeSpan.FromSeconds(1.0), instaneToTest.PublishingInterval()); Assert.AreEqual(TransportType.Amqp, instaneToTest.TransportType); Assert.AreEqual("", instaneToTest.ResourceGroupName); } [TestMethod] public void ParseMissingRequiredTest() { Assert.ThrowsException(() => AzureDeviceParameters.ParseRepositoryGroup("RepositoryGroup -sAzureScopeId -pAzurePrimaryKey -kAzureSecondaryKey")); Assert.ThrowsException(() => AzureDeviceParameters.ParseRepositoryGroup("RepositoryGroup -dAzureDeviceId -pAzurePrimaryKey -kAzureSecondaryKey")); Assert.ThrowsException(() => AzureDeviceParameters.ParseRepositoryGroup("RepositoryGroup -dAzureDeviceId -sAzureScopeId -kAzureSecondaryKey")); Assert.ThrowsException(() => AzureDeviceParameters.ParseRepositoryGroup("RepositoryGroup -dAzureDeviceId -sAzureScopeId -pAzurePrimaryKey ")); } } } ================================================ FILE: Networking/DataRepository/AzureGatewayUnitTest/AzureInterconnection/CommunicationContextUnitTest.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2020, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using Microsoft.VisualStudio.TestTools.UnitTesting; using Moq; using System; using UAOOI.Networking.DataRepository.AzureGateway.AzureInterconnection; namespace UAOOI.Networking.DataRepository.AzureGateway.Test.AzureInterconnection { [TestClass] public class CommunicationContextUnitTest { [TestMethod] public void ConstructorTest() { AzureDeviceParameters azureParametersFixture = AzureDeviceParameters.ParseRepositoryGroup(String.Empty); Mock IDTOProviderFixture = new Mock(); Assert.ThrowsException(() => new CommunicationContext(null, "qwerty", azureParametersFixture)); Assert.ThrowsException(() => new CommunicationContext(IDTOProviderFixture.Object, "qwerty", null)); CommunicationContext _fixture = new CommunicationContext(IDTOProviderFixture.Object, "qwerty", azureParametersFixture); Assert.ThrowsException(() => _fixture.DisconnectRequest()); } } } ================================================ FILE: Networking/DataRepository/AzureGatewayUnitTest/Diagnostic/AzureGatewaySemanticEventSourceUnitTest.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2020, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using Microsoft.VisualStudio.TestTools.UnitTesting; using System; using System.Collections.Generic; using System.Diagnostics; using System.Diagnostics.Tracing; using System.Linq; using UAOOI.Networking.DataRepository.AzureGateway.Diagnostic; namespace UAOOI.Networking.DataRepository.AzureGateway.Test.Diagnostic { [TestClass] public class AzureGatewaySemanticEventSourceUnitTest { [TestMethod] public void ConstructorTest() { using (AzureGatewaySemanticEventSource itemToTest = AzureGatewaySemanticEventSource.Log()) { Assert.IsNotNull(itemToTest); Assert.IsNull(itemToTest.ConstructionException); Assert.AreEqual(Guid.Parse("BC7E8C08-C708-4E3C-A27E-237F093F175C"), itemToTest.Guid); Assert.AreEqual("UAOOI.Networking.DataRepository.AzureGateway.Diagnostic", itemToTest.Name); Assert.AreEqual(EventSourceSettings.EtwManifestEventFormat, itemToTest.Settings); Assert.IsFalse(itemToTest.IsEnabled()); Assert.AreSame(itemToTest, AzureGatewaySemanticEventSource.Log()); } } [TestMethod] public void DisposeTestMethod() { try { AzureGatewaySemanticEventSource itemToTest = AzureGatewaySemanticEventSource.Log(); itemToTest.Dispose(); Assert.IsNotNull(itemToTest); Assert.AreNotSame(itemToTest, AzureGatewaySemanticEventSource.Log()); } finally { AzureGatewaySemanticEventSource.Log().Dispose(); } } [TestMethod] public void EventListenerTest() { using (AzureGatewaySemanticEventSource itemToTest = AzureGatewaySemanticEventSource.Log()) using (EventListener lisner = new EventListener()) { List sourceList = new List(); List eventsList = new List(); lisner.EventSourceCreated += (o, es) => sourceList.Add(es); lisner.EventWritten += (source, entry) => eventsList.Add(entry); foreach (EventSourceCreatedEventArgs item in sourceList) Debug.WriteLine($"{item.EventSource.Name}:{item.EventSource.Guid}; Is enabled: {item.EventSource.IsEnabled()}"); int esCount = sourceList.Count; Assert.AreEqual(0, eventsList.Count); lisner.EnableEvents(itemToTest, EventLevel.LogAlways, EventKeywords.All); Assert.AreEqual(esCount, sourceList.Count); Assert.AreEqual(0, eventsList.Count); } } [TestMethod] public void ProgramFailureTest() { using (AzureGatewaySemanticEventSource itemToTest = AzureGatewaySemanticEventSource.Log()) using (EventListener lisner = new EventListener()) { List eventsList = new List(); lisner.EventWritten += (source, entry) => eventsList.Add(entry); Assert.AreEqual(0, eventsList.Count); lisner.EnableEvents(itemToTest, EventLevel.LogAlways, EventKeywords.All); itemToTest.ProgramFailure("ClassName", "problem"); Assert.AreEqual(1, eventsList.Count); EventWrittenEventArgs eventArgs = eventsList[0]; Assert.AreEqual(1, eventArgs.EventId); Assert.AreEqual("At ClassName.ProgramFailureTest encountered application failure: problem", String.Format(eventArgs.Message, eventArgs.Payload.Select(x => x.ToString()).ToArray())); Assert.AreEqual(EventChannel.Admin, eventArgs.Channel); Assert.AreEqual(1, eventArgs.EventId); Assert.AreEqual(nameof(AzureGatewaySemanticEventSource.ProgramFailure), eventArgs.EventName); Assert.AreSame(AzureGatewaySemanticEventSource.Log(), eventArgs.EventSource); Assert.IsTrue((AzureGatewaySemanticEventSource.Keywords.Diagnostic & eventArgs.Keywords) > 0); Assert.AreEqual(EventLevel.Error, eventArgs.Level); Assert.AreEqual(EventOpcode.Info, eventArgs.Opcode); Assert.AreEqual(AzureGatewaySemanticEventSource.Tasks.Code, eventArgs.Task); Assert.AreEqual(0x01, eventArgs.Version); } } } } ================================================ FILE: Networking/DataRepository/AzureGatewayUnitTest/Networking.DataRepository.AzureGatewayUnitTest.csproj ================================================  Debug AnyCPU {F7FDDDCC-58C7-44E0-8DE3-6A94E6222D03} Library Properties UAOOI.Networking.DataRepository.AzureGateway.Test UAOOI.Networking.DataRepository.AzureGateway.Test v4.7.2 512 {3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} 15.0 $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) $(ProgramFiles)\Common Files\microsoft shared\VSTT\$(VisualStudioVersion)\UITestExtensionPackages False UnitTest true full false bin\Debug\ DEBUG;TRACE prompt 4 IDE0001,IDE0002,IDE0049 pdbonly true bin\Release\ TRACE prompt 4 true OPCUAOOIKey.snk {e28e0880-03aa-4d1b-a820-41b04e766019} Configuration.Networking {afcca7c9-47fe-4fb6-935e-12d686eec58f} Networking.Core {2238851E-4DB8-46B0-B38D-0E2315FE153E} Networking.ReferenceApplication.Core {7F4DED4E-5933-4229-B9CC-51DA49678904} Networking.SemanticData {3f5cbb26-9142-4e55-8de5-5baf0c3ea1ce} Networking.DataRepository.AzureGateway PreserveNewest ..\..\..\packages\Castle.Core.5.0.0\lib\net462\Castle.Core.dll ..\..\..\packages\CommandLineParser.2.9.1\lib\net461\CommandLine.dll ..\..\..\packages\CommonServiceLocator.2.0.6\lib\net47\CommonServiceLocator.dll ..\..\..\packages\DotNetty.Buffers.0.7.2\lib\net472\DotNetty.Buffers.dll ..\..\..\packages\DotNetty.Codecs.0.7.2\lib\net472\DotNetty.Codecs.dll ..\..\..\packages\DotNetty.Codecs.Mqtt.0.7.2\lib\net472\DotNetty.Codecs.Mqtt.dll ..\..\..\packages\DotNetty.Common.0.7.2\lib\net472\DotNetty.Common.dll ..\..\..\packages\DotNetty.Handlers.0.7.2\lib\net472\DotNetty.Handlers.dll ..\..\..\packages\DotNetty.Transport.0.7.2\lib\net472\DotNetty.Transport.dll ..\..\..\packages\Microsoft.Azure.Amqp.2.5.12\lib\net45\Microsoft.Azure.Amqp.dll ..\..\..\packages\Microsoft.Azure.Devices.Client.1.41.0\lib\net472\Microsoft.Azure.Devices.Client.dll ..\..\..\packages\Microsoft.Azure.Devices.Shared.1.30.1\lib\net472\Microsoft.Azure.Devices.Shared.dll ..\..\..\packages\Microsoft.Azure.KeyVault.Core.3.0.5\lib\net461\Microsoft.Azure.KeyVault.Core.dll ..\..\..\packages\Microsoft.Bcl.AsyncInterfaces.6.0.0\lib\net461\Microsoft.Bcl.AsyncInterfaces.dll ..\..\..\packages\Microsoft.Extensions.Configuration.6.0.1\lib\net461\Microsoft.Extensions.Configuration.dll ..\..\..\packages\Microsoft.Extensions.Configuration.Abstractions.6.0.0\lib\net461\Microsoft.Extensions.Configuration.Abstractions.dll ..\..\..\packages\Microsoft.Extensions.Configuration.Binder.6.0.0\lib\net461\Microsoft.Extensions.Configuration.Binder.dll ..\..\..\packages\Microsoft.Extensions.DependencyInjection.6.0.0\lib\net461\Microsoft.Extensions.DependencyInjection.dll ..\..\..\packages\Microsoft.Extensions.DependencyInjection.Abstractions.6.0.0\lib\net461\Microsoft.Extensions.DependencyInjection.Abstractions.dll ..\..\..\packages\Microsoft.Extensions.Logging.6.0.0\lib\net461\Microsoft.Extensions.Logging.dll ..\..\..\packages\Microsoft.Extensions.Logging.Abstractions.6.0.1\lib\net461\Microsoft.Extensions.Logging.Abstractions.dll ..\..\..\packages\Microsoft.Extensions.Options.6.0.0\lib\net461\Microsoft.Extensions.Options.dll ..\..\..\packages\Microsoft.Extensions.Primitives.6.0.0\lib\net461\Microsoft.Extensions.Primitives.dll ..\..\..\packages\Microsoft.Rest.ClientRuntime.2.3.24\lib\net461\Microsoft.Rest.ClientRuntime.dll ..\..\..\packages\Microsoft.Rest.ClientRuntime.Azure.3.3.19\lib\net461\Microsoft.Rest.ClientRuntime.Azure.dll ..\..\..\packages\MSTest.TestFramework.2.2.10\lib\net45\Microsoft.VisualStudio.TestPlatform.TestFramework.dll ..\..\..\packages\MSTest.TestFramework.2.2.10\lib\net45\Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions.dll ..\..\..\packages\Microsoft.Win32.Primitives.4.3.0\lib\net46\Microsoft.Win32.Primitives.dll True True ..\..\..\packages\Microsoft.Win32.Registry.5.0.0\lib\net461\Microsoft.Win32.Registry.dll ..\..\..\packages\WindowsAzure.Storage.9.3.3\lib\net45\Microsoft.WindowsAzure.Storage.dll ..\..\..\packages\Moq.4.18.1\lib\net462\Moq.dll ..\..\..\packages\Newtonsoft.Json.13.0.1\lib\net45\Newtonsoft.Json.dll ..\..\..\packages\System.AppContext.4.3.0\lib\net463\System.AppContext.dll True True ..\..\..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll ..\..\..\packages\System.Collections.Immutable.6.0.0\lib\net461\System.Collections.Immutable.dll ..\..\..\packages\System.ComponentModel.Annotations.5.0.0\lib\net461\System.ComponentModel.Annotations.dll ..\..\..\packages\System.Configuration.ConfigurationManager.6.0.0\lib\net461\System.Configuration.ConfigurationManager.dll ..\..\..\packages\System.Console.4.3.1\lib\net46\System.Console.dll True True ..\..\..\packages\System.Diagnostics.DiagnosticSource.6.0.0\lib\net461\System.Diagnostics.DiagnosticSource.dll ..\..\..\packages\System.Diagnostics.TraceSource.4.3.0\lib\net46\System.Diagnostics.TraceSource.dll True True ..\..\..\packages\System.Diagnostics.Tracing.4.3.0\lib\net462\System.Diagnostics.Tracing.dll True True ..\..\..\packages\System.Globalization.Calendars.4.3.0\lib\net46\System.Globalization.Calendars.dll True True ..\..\..\packages\System.IO.4.3.0\lib\net462\System.IO.dll True True ..\..\..\packages\System.IO.Compression.4.3.0\lib\net46\System.IO.Compression.dll True True ..\..\..\packages\System.IO.Compression.ZipFile.4.3.0\lib\net46\System.IO.Compression.ZipFile.dll True True ..\..\..\packages\System.IO.FileSystem.4.3.0\lib\net46\System.IO.FileSystem.dll True True ..\..\..\packages\System.IO.FileSystem.Primitives.4.3.0\lib\net46\System.IO.FileSystem.Primitives.dll True True ..\..\..\packages\System.Linq.4.3.0\lib\net463\System.Linq.dll True True ..\..\..\packages\System.Linq.Expressions.4.3.0\lib\net463\System.Linq.Expressions.dll True True ..\..\..\packages\System.Memory.4.5.5\lib\net461\System.Memory.dll ..\..\..\packages\System.Net.Http.4.3.4\lib\net46\System.Net.Http.dll True True ..\..\..\packages\System.Net.Sockets.4.3.0\lib\net46\System.Net.Sockets.dll True True ..\..\..\packages\System.Net.WebSockets.4.3.0\lib\net46\System.Net.WebSockets.dll True True ..\..\..\packages\System.Net.WebSockets.Client.4.3.2\lib\net46\System.Net.WebSockets.Client.dll True True ..\..\..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll ..\..\..\packages\System.Reflection.4.3.0\lib\net462\System.Reflection.dll True True ..\..\..\packages\System.Runtime.4.3.1\lib\net462\System.Runtime.dll True True ..\..\..\packages\System.Runtime.CompilerServices.Unsafe.6.0.0\lib\net461\System.Runtime.CompilerServices.Unsafe.dll ..\..\..\packages\System.Runtime.Extensions.4.3.1\lib\net462\System.Runtime.Extensions.dll True True ..\..\..\packages\System.Runtime.InteropServices.4.3.0\lib\net463\System.Runtime.InteropServices.dll True True ..\..\..\packages\System.Runtime.InteropServices.RuntimeInformation.4.3.0\lib\net45\System.Runtime.InteropServices.RuntimeInformation.dll True True ..\..\..\packages\System.Runtime.Serialization.Primitives.4.3.0\lib\net46\System.Runtime.Serialization.Primitives.dll True True ..\..\..\packages\System.Security.AccessControl.6.0.0\lib\net461\System.Security.AccessControl.dll ..\..\..\packages\System.Security.Cryptography.Algorithms.4.3.1\lib\net463\System.Security.Cryptography.Algorithms.dll True True ..\..\..\packages\System.Security.Cryptography.Encoding.4.3.0\lib\net46\System.Security.Cryptography.Encoding.dll True True ..\..\..\packages\System.Security.Cryptography.Primitives.4.3.0\lib\net46\System.Security.Cryptography.Primitives.dll True True ..\..\..\packages\System.Security.Cryptography.X509Certificates.4.3.2\lib\net461\System.Security.Cryptography.X509Certificates.dll True True ..\..\..\packages\System.Security.Permissions.6.0.0\lib\net461\System.Security.Permissions.dll ..\..\..\packages\System.Security.Principal.Windows.5.0.0\lib\net461\System.Security.Principal.Windows.dll ..\..\..\packages\System.Text.RegularExpressions.4.3.1\lib\net463\System.Text.RegularExpressions.dll True True ..\..\..\packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll ..\..\..\packages\System.ValueTuple.4.5.0\lib\net47\System.ValueTuple.dll ..\..\..\packages\System.Xml.ReaderWriter.4.3.1\lib\net46\System.Xml.ReaderWriter.dll True True ..\..\..\packages\UAOOI.Common.Infrastructure.6.4.7\lib\netstandard2.0\UAOOI.Common.Infrastructure.dll This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. ================================================ FILE: Networking/DataRepository/AzureGatewayUnitTest/PartBindingFactoryUnit.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2020, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using Microsoft.VisualStudio.TestTools.UnitTesting; using System; using System.Collections.Generic; using System.Diagnostics; using System.Diagnostics.Tracing; using System.Linq; using UAOOI.Configuration.Networking.Serialization; using UAOOI.Networking.DataRepository.AzureGateway.Diagnostic; using UAOOI.Networking.SemanticData.DataRepository; namespace UAOOI.Networking.DataRepository.AzureGateway.Test { [TestClass] public class PartBindingFactoryUnit { [TestMethod] public void ConstructorTest() { PartBindingFactory _newInstance = new PartBindingFactory(); Assert.ThrowsException(() => _newInstance.GetDTO("random name")); } [TestMethod] public void GetConsumerBindingSerializationTest() { using (AzureGatewaySemanticEventSource log = AzureGatewaySemanticEventSource.Log()) using (EventListener lisner = new EventListener()) { //setup log instrumentation List eventsList = new List(); lisner.EventWritten += (source, entry) => eventsList.Add(entry); Assert.AreEqual(0, eventsList.Count); lisner.EnableEvents(log, EventLevel.LogAlways, EventKeywords.All); PartBindingFactory newInstance = new PartBindingFactory(); string repositoryName = "RepositoryGroup -tHttp1 -dAzureDeviceId -sAzureScopeId -pAzurePrimaryKey -kAzureSecondaryKey -i2000"; IConsumerBinding binding = newInstance.GetConsumerBinding(repositoryName, "processValueName", new UATypeInfo(BuiltInType.String)); Assert.IsNotNull(binding); binding.Assign2Repository("New value"); string dto = newInstance.GetDTO(repositoryName); Debug.Write(dto); Assert.AreEqual(32, dto.Length); Assert.AreEqual("{\"processValueName\":\"New value\"}", dto); Assert.AreEqual(2, eventsList.Count); EventWrittenEventArgs eventArgs = eventsList[0]; Assert.AreEqual(nameof(AzureGatewaySemanticEventSource.EnteringMethodBinding), eventArgs.EventName); Assert.AreEqual("Entering method PartBindingFactory.GetConsumerBinding", String.Format(eventArgs.Message, eventArgs.Payload.Select(x => x.ToString()).ToArray())); eventArgs = eventsList[1]; Assert.AreEqual(nameof(AzureGatewaySemanticEventSource.EnteringMethodBinding), eventArgs.EventName); Assert.AreEqual("Entering method PartBindingFactory.GetDTO", String.Format(eventArgs.Message, eventArgs.Payload.Select(x => x.ToString()).ToArray())); } } [TestMethod] public void GetProducerBindingTest() { using (AzureGatewaySemanticEventSource log = AzureGatewaySemanticEventSource.Log()) using (EventListener lisner = new EventListener()) { //setup log instrumentation List eventsList = new List(); lisner.EventWritten += (source, entry) => eventsList.Add(entry); Assert.AreEqual(0, eventsList.Count); lisner.EnableEvents(log, EventLevel.LogAlways, EventKeywords.All); //start testing PartBindingFactory newInstance = new PartBindingFactory(); Assert.ThrowsException(() => newInstance.GetProducerBinding("any repository random name", "any process variable random name", new UATypeInfo(BuiltInType.String))); //examine the results Assert.AreEqual(1, eventsList.Count); EventWrittenEventArgs eventArgs = eventsList[0]; Assert.AreEqual(nameof(AzureGatewaySemanticEventSource.EnteringMethodBinding), eventArgs.EventName); Assert.AreEqual("Entering method PartBindingFactory.GetProducerBinding", String.Format(eventArgs.Message, eventArgs.Payload.Select(x => x.ToString()).ToArray())); } } } } ================================================ FILE: Networking/DataRepository/AzureGatewayUnitTest/PartConfigurationFactoryUnitTest.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2021, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using Microsoft.Azure.Devices.Client; using Microsoft.VisualStudio.TestTools.UnitTesting; using System; using System.IO; using UAOOI.Configuration.Networking.Serialization; using UAOOI.Networking.DataRepository.AzureGateway.AzureInterconnection; namespace UAOOI.Networking.DataRepository.AzureGateway.Test { [TestClass] [DeploymentItem(@".\TestingData\ConfigurationDataConsumer.BoilersSet.xml", @".\")] public class PartConfigurationFactoryUnitTest { [TestMethod] [ClassInitialize()] public static void TestingData(TestContext context) { if (context is null) throw new ArgumentNullException(nameof(context)); Assert.IsTrue(File.Exists(_ConfigurationFilePath)); } [TestMethod] public void Constructor() { PartConfigurationFactory configurationFactory = new PartConfigurationFactory(_ConfigurationFilePath); Assert.IsNull(configurationFactory.Configuration); ConfigurationData configuartion = configurationFactory.GetConfiguration(); Assert.IsNotNull(configuartion); Assert.IsNotNull(configurationFactory.Configuration); Assert.AreEqual(4, configuartion.DataSets.Length); } [TestMethod] public void RepositoryGroupTest() { PartConfigurationFactory configurationFactory = new PartConfigurationFactory(_ConfigurationFilePath); ConfigurationData configuartion = configurationFactory.GetConfiguration(); Assert.AreEqual("BoilersArea_Boiler_#1 -tHttp1 -dAzureDeviceId -sAzureScopeId -pAzurePrimaryKey -kAzureSecondaryKey -i2000", configuartion.DataSets[0].RepositoryGroup); AzureDeviceParameters instaneToTest = AzureDeviceParameters.ParseRepositoryGroup(configuartion.DataSets[0].RepositoryGroup); Assert.IsNotNull(instaneToTest); Assert.AreEqual("AzureDeviceId", instaneToTest.AzureDeviceId); Assert.AreEqual("AzurePrimaryKey", instaneToTest.AzurePrimaryKey); Assert.AreEqual("AzureScopeId", instaneToTest.AzureScopeId); Assert.AreEqual("AzureSecondaryKey", instaneToTest.AzureSecondaryKey); Assert.AreEqual(TimeSpan.FromSeconds(2.0), instaneToTest.PublishingInterval()); Assert.AreEqual(TransportType.Http1, instaneToTest.TransportType); Assert.AreEqual("BoilersArea_Boiler_#1", instaneToTest.ResourceGroupName); } private const string _ConfigurationFilePath = @".\ConfigurationDataConsumer.BoilersSet.xml"; } } ================================================ FILE: Networking/DataRepository/AzureGatewayUnitTest/PartDataManagementSetupUnitTest.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2020, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using CommonServiceLocator; using Microsoft.VisualStudio.TestTools.UnitTesting; using Moq; using System.IO; using UAOOI.Common.Infrastructure.Diagnostic; using UAOOI.Networking.Core; using UAOOI.Networking.SemanticData; namespace UAOOI.Networking.DataRepository.AzureGateway.Test { [TestClass] public class PartDataManagementSetupUnitTest { [TestMethod] [DeploymentItem(@"TestingData\")] public void ConstructorTest() { Assert.IsTrue(File.Exists(@"ConfigurationDataConsumer.BoilersSet.xml")); Mock serviceLocatorProviderMock = new Mock(); Mock encodingFactoryMock = new Mock(); Mock messageHandlerFactoryMock = new Mock(); Mock traceSource = new Mock(); serviceLocatorProviderMock.Setup(x => x.GetInstance()).Returns(encodingFactoryMock.Object); serviceLocatorProviderMock.Setup(y => y.GetInstance()).Returns(messageHandlerFactoryMock.Object); serviceLocatorProviderMock.Setup(y => y.GetInstance()).Returns(traceSource.Object); ServiceLocator.SetLocatorProvider(() => serviceLocatorProviderMock.Object); bool _disposingFlag = false; int _dosposingCount = 0; PartDataManagementSetup.ConfigurationFilePath = @"ConfigurationDataConsumer.BoilersSet.xml"; using (PartDataManagementSetup _newInstance = new PartDataManagementSetup()) { _newInstance.DisposeCheck(x => { _disposingFlag = x; _dosposingCount++; }); Assert.IsNotNull(_newInstance.BindingFactory); Assert.IsNotNull(_newInstance.ConfigurationFactory); Assert.IsInstanceOfType(_newInstance.ConfigurationFactory, typeof(PartConfigurationFactory)); Assert.IsNotNull(_newInstance.EncodingFactory); Assert.AreSame(encodingFactoryMock.Object, _newInstance.EncodingFactory); Assert.IsNotNull(_newInstance.MessageHandlerFactory); Assert.AreSame(messageHandlerFactoryMock.Object, _newInstance.MessageHandlerFactory); ServiceLocator.SetLocatorProvider(() => null); } Assert.AreEqual(1, _dosposingCount); Assert.IsTrue(_disposingFlag); } } } ================================================ FILE: Networking/DataRepository/AzureGatewayUnitTest/Properties/AssemblyInfo.cs ================================================ using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; [assembly: AssemblyTitle("AzureGatewayUnitTest")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("HP Inc.")] [assembly: AssemblyProduct("AzureGatewayUnitTest")] [assembly: AssemblyCopyright("Copyright © HP Inc. 2020")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] [assembly: ComVisible(false)] [assembly: Guid("f7fdddcc-58c7-44e0-8de3-6a94e6222d03")] // [assembly: AssemblyVersion("1.0.*")] [assembly: AssemblyVersion("1.0.0.0")] [assembly: AssemblyFileVersion("1.0.0.0")] ================================================ FILE: Networking/DataRepository/AzureGatewayUnitTest/RepositoryGroupUnitTest.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2020, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using Microsoft.VisualStudio.TestTools.UnitTesting; using System; using System.Collections.Generic; using System.Diagnostics; namespace UAOOI.Networking.DataRepository.AzureGateway.Test { [TestClass] public class RepositoryGroupUnitTest { [TestMethod] public void ConstructorTest() { RepositoryGroup _itemToTest = new RepositoryGroup(); Assert.ThrowsException(() => _itemToTest.Add("Key", null)); Assert.ThrowsException(() => _itemToTest.Add(new KeyValuePair("Key", null))); Assert.ThrowsException(() => _itemToTest.Clear()); Assert.ThrowsException(() => _itemToTest.Remove("Random name")); Assert.IsNotNull(_itemToTest.GetEnumerator()); Assert.IsNotNull(_itemToTest.Keys); Assert.AreEqual(0, _itemToTest.Count); } [TestMethod] public void GetConsumerBindingJsonSerializationTest() { RepositoryGroup _itemToTest = new RepositoryGroup(); string processValueName = "processValueName"; Action updater = _itemToTest.AddProperty(processValueName); Assert.IsNotNull(updater); Assert.AreEqual(1, _itemToTest.Count); Assert.AreEqual(default(string), (string)_itemToTest[processValueName]); updater("New value"); Assert.AreEqual("New value", (string)_itemToTest[processValueName]); string dto = _itemToTest.ToString(); Debug.Write(dto); Assert.AreEqual(32, dto.Length); Assert.AreEqual("{\"processValueName\":\"New value\"}", dto); } } } ================================================ FILE: Networking/DataRepository/AzureGatewayUnitTest/TestingData/ConfigurationDataConsumer.BoilersSet.xml ================================================  Consumer BoilersArea_Boiler #1 BoilersArea_Boiler_#1 -tHttp1 -dAzureDeviceId -sAzureScopeId -pAzurePrimaryKey -kAzureSecondaryKey -i2000 http://commsvr.com/UA/Examples/BoilersSet BoilersArea_Boiler #1 CCX001_ControlOut CCX001_ControlOut Double -1 CCX001_Input1 CCX001_Input1 Double -1 CCX001_Input2 CCX001_Input2 Double -1 CCX001_Input3 CCX001_Input3 Double -1 DrumX001_LIX001_Output DrumX001_LIX001_Output Double -1 FCX001_ControlOut FCX001_ControlOut Double -1 FCX001_Measurement FCX001_Measurement Double -1 FCX001_SetPoint FCX001_SetPoint Double -1 PipeX001_FTX001_Output PipeX001_FTX001_Output Double -1 PipeX001_ValveX001_Input PipeX001_ValveX001_Input Double -1 LCX001_ControlOut LCX001_ControlOut Double -1 LCX001_Measurement LCX001_Measurement Double -1 LCX001_SetPoint LCX001_SetPoint Double -1 PipeX002_FTX002_Output PipeX002_FTX002_Output Double -1 Simulation_UpdateRate Simulation_UpdateRate UInt32 -1 e669df1f-3670-4dd4-9ef6-acb0975bf4f8 Binding Description d5p1:BoilerType d5p1:BoilersArea_BoilerAlpha 100 1000 ec1d3d5b-c988-45da-9b6e-8d7f7d5c6089 1 0 Consumer BoilersArea_Boiler #2 BoilersArea_Boiler_#2 -tHttp1 -dAzureDeviceId -sAzureScopeId -pAzurePrimaryKey -kAzureSecondaryKey -i2000 http://commsvr.com/UA/Examples/BoilersSet BoilersArea_Boiler #2 CCX001_ControlOut CCX001_ControlOut Double -1 CCX001_Input1 CCX001_Input1 Double -1 CCX001_Input2 CCX001_Input2 Double -1 CCX001_Input3 CCX001_Input3 Double -1 DrumX001_LIX001_Output DrumX001_LIX001_Output Double -1 FCX001_ControlOut FCX001_ControlOut Double -1 FCX001_Measurement FCX001_Measurement Double -1 FCX001_SetPoint FCX001_SetPoint Double -1 PipeX001_FTX001_Output PipeX001_FTX001_Output Double -1 PipeX001_ValveX001_Input PipeX001_ValveX001_Input Double -1 LCX001_ControlOut LCX001_ControlOut Double -1 LCX001_Measurement LCX001_Measurement Double -1 LCX001_SetPoint LCX001_SetPoint Double -1 PipeX002_FTX002_Output PipeX002_FTX002_Output Double -1 Simulation_UpdateRate Simulation_UpdateRate UInt32 -1 1f5c2bba-b5a7-44d2-93fe-b8736470ee54 Binding Description d5p1:BoilerType d5p1:BoilersArea_BoilerBravo 100 1000 33b3a9b8-595c-4dd6-8915-489cd6057b5b 1 0 Consumer BoilersArea_Boiler #3 BoilersArea_Boiler_#3 -tHttp1 -dAzureDeviceId -sAzureScopeId -pAzurePrimaryKey -kAzureSecondaryKey -i2000 http://commsvr.com/UA/Examples/BoilersSet BoilersArea_Boiler #3 CCX001_ControlOut CCX001_ControlOut Double -1 CCX001_Input1 CCX001_Input1 Double -1 CCX001_Input2 CCX001_Input2 Double -1 CCX001_Input3 CCX001_Input3 Double -1 DrumX001_LIX001_Output DrumX001_LIX001_Output Double -1 FCX001_ControlOut FCX001_ControlOut Double -1 FCX001_Measurement FCX001_Measurement Double -1 FCX001_SetPoint FCX001_SetPoint Double -1 PipeX001_FTX001_Output PipeX001_FTX001_Output Double -1 PipeX001_ValveX001_Input PipeX001_ValveX001_Input Double -1 LCX001_ControlOut LCX001_ControlOut Double -1 LCX001_Measurement LCX001_Measurement Double -1 LCX001_SetPoint LCX001_SetPoint Double -1 PipeX002_FTX002_Output PipeX002_FTX002_Output Double -1 Simulation_UpdateRate Simulation_UpdateRate UInt32 -1 096d553e-c1da-4ca4-9fcc-9d524fa3ca20 Binding Description d5p1:BoilerType d5p1:BoilersArea_BoilerBravo 100 1000 ef63fda7-bb4a-400d-a5e9-517fae8e4ff6 1 0 Consumer BoilersArea_Boiler #4 BoilersArea_Boiler_#4 -tHttp1 -dAzureDeviceId -sAzureScopeId -pAzurePrimaryKey -kAzureSecondaryKey -i2000 http://commsvr.com/UA/Examples/BoilersSet BoilersArea_Boiler #4 CCX001_ControlOut CCX001_ControlOut Double -1 CCX001_Input1 CCX001_Input1 Double -1 CCX001_Input2 CCX001_Input2 Double -1 CCX001_Input3 CCX001_Input3 Double -1 DrumX001_LIX001_Output DrumX001_LIX001_Output Double -1 FCX001_ControlOut FCX001_ControlOut Double -1 FCX001_Measurement FCX001_Measurement Double -1 FCX001_SetPoint FCX001_SetPoint Double -1 PipeX001_FTX001_Output PipeX001_FTX001_Output Double -1 PipeX001_ValveX001_Input PipeX001_ValveX001_Input Double -1 LCX001_ControlOut LCX001_ControlOut Double -1 LCX001_Measurement LCX001_Measurement Double -1 LCX001_SetPoint LCX001_SetPoint Double -1 PipeX002_FTX002_Output PipeX002_FTX002_Output Double -1 Simulation_UpdateRate Simulation_UpdateRate UInt32 -1 78e83ea4-aa0c-43e3-9449-3f2f195f2844 Binding Description d5p1:BoilerType d5p1:BoilersArea_BoilerBravo 100 1000 3b3273c2-c5bc-468d-9c6b-97c6e2a5042d 1 0 UDP 4840,False,127.0.0.1,True Consumer BoilersArea_Boiler #1 100 d80d81dd-96e6-4560-850e-154f9181307c BoilersArea_Boiler #2 1202 d80d81dd-96e6-4560-850e-154f9181307c BoilersArea_Boiler #3 130 d80d81dd-96e6-4560-850e-154f9181307c BoilersArea_Boiler #4 140 d80d81dd-96e6-4560-850e-154f9181307c VariantFieldEncoding ================================================ FILE: Networking/DataRepository/AzureGatewayUnitTest/app.config ================================================  ================================================ FILE: Networking/DataRepository/AzureGatewayUnitTest/packages.config ================================================  ================================================ FILE: Networking/DataRepository/DataLogger/AssemblyInfo.cs ================================================ using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] [assembly: Guid("a5863757-f1fc-4f49-a984-a7d17ac3fb61")] [assembly: InternalsVisibleTo( "UAOOI.Networking.ReferenceApplication.UnitTest, PublicKey=" + "00240000048000009400000006020000002400005253413100040000010001005b97a0972ff6b13a" + "8a9ff9c09503aea0e5e2fe29cb2275a0c0942182f4c3431814b6bc9a556d9fe0d7e7823439c1ba28" + "521f6318e4c936c4461604ef668e9686c2021571b093e1bfba071b373bc56a07a3afdc120c5313d3" + "9a935cda64b759f857ebb3db483641444a5347e1564f8ba6d4fad2f968d3caf9991a4fa6aa019ebe" )] [assembly: InternalsVisibleTo( "UAOOI.Networking.DataRepository.DataLogger.UnitTest, PublicKey=" + "00240000048000009400000006020000002400005253413100040000010001005b97a0972ff6b13a" + "8a9ff9c09503aea0e5e2fe29cb2275a0c0942182f4c3431814b6bc9a556d9fe0d7e7823439c1ba28" + "521f6318e4c936c4461604ef668e9686c2021571b093e1bfba071b373bc56a07a3afdc120c5313d3" + "9a935cda64b759f857ebb3db483641444a5347e1564f8ba6d4fad2f968d3caf9991a4fa6aa019ebe" )] ================================================ FILE: Networking/DataRepository/DataLogger/CompositionSettings.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2020, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ namespace UAOOI.Networking.DataRepository.DataLogger { /// /// Class ConsumerCompositionSettings - provides contracts to be used for composition /// public class ConsumerCompositionSettings { /// /// The configuration file name contract name /// public const string ConfigurationFileNameContract = "DataLogger.ConfigurationFileNameContract"; /// /// The view model contract name /// public const string ViewModelContract = "ConsumerCompositionSettings.ConsumerViewModel"; } } ================================================ FILE: Networking/DataRepository/DataLogger/ConfigurationDataConsumer.xml ================================================  Consumer Simple repositoryGroup https://github.com/mpostol/OPC-UA-OOI DataSymbolicName BoolToggle BoolToggle Boolean -1 ValueInt32 ValueInt32 Int32 -1 Int32Fast Int32Fast Int32 -1 ValueDateTime ValueDateTime DateTime -1 c1f53ffb-6552-4ccc-84c9-f847147cdc85 d5p1:NodeDescriptor 1000 100 1893991b-517c-4a5f-b8a4-1633d2a101c8 1 0 Consumer AllTypes repositoryGroup https://github.com/mpostol/OPC-UA-OOI DataSymbolicName ValueBoolean ValueBoolean Boolean -1 ValueByte ValueByte Byte -1 ValueInt16 ValueInt16 Int16 -1 ValueInt32 ValueInt32 Int32 -1 ValueInt64 ValueInt64 Int64 -1 ValueSByte ValueSByte SByte -1 ValueUInt16 ValueUInt16 UInt16 -1 ValueUInt32 ValueUInt32 UInt32 -1 ValueUInt64 ValueUInt64 UInt64 -1 ValueFloat ValueFloat Float -1 ValueDouble ValueDouble Double -1 ValueString ValueString String -1 ValueByteString ValueByteString ByteString -1 ValueGuid ValueGuid Guid -1 ValueDateTime ValueDateTime DateTime -1 UInt32Array UInt32Array UInt32 1 c1f53ffb-6552-4ccc-84c9-f847147cdc85 d5p1:NodeDescriptor 1000 100 D79E3F84-48AB-48A2-9055-DF589D19E824 1 0 Consumer MassTest repositoryGroup https://github.com/mpostol/OPC-UA-OOI DataSymbolicName MassTest_00 MassTest_00 UInt32 -1 MassTest_01 MassTest_01 UInt32 -1 MassTest_02 MassTest_02 UInt32 -1 MassTest_03 MassTest_03 UInt32 -1 MassTest_04 MassTest_04 UInt32 -1 MassTest_05 MassTest_05 UInt32 -1 MassTest_06 MassTest_06 UInt32 -1 MassTest_07 MassTest_07 UInt32 -1 MassTest_08 MassTest_08 UInt32 -1 MassTest_09 MassTest_09 UInt32 -1 MassTest_10 MassTest_10 UInt32 -1 MassTest_11 MassTest_11 UInt32 -1 MassTest_12 MassTest_12 UInt32 -1 MassTest_13 MassTest_13 UInt32 -1 MassTest_14 MassTest_14 UInt32 -1 MassTest_15 MassTest_15 UInt32 -1 MassTest_16 MassTest_16 UInt32 -1 MassTest_17 MassTest_17 UInt32 -1 MassTest_18 MassTest_18 UInt32 -1 MassTest_19 MassTest_19 UInt32 -1 MassTest_20 MassTest_20 UInt32 -1 MassTest_21 MassTest_21 UInt32 -1 MassTest_22 MassTest_22 UInt32 -1 MassTest_23 MassTest_23 UInt32 -1 MassTest_24 MassTest_24 UInt32 -1 MassTest_25 MassTest_25 UInt32 -1 MassTest_26 MassTest_26 UInt32 -1 MassTest_27 MassTest_27 UInt32 -1 MassTest_28 MassTest_28 UInt32 -1 MassTest_29 MassTest_29 UInt32 -1 MassTest_30 MassTest_30 UInt32 -1 MassTest_31 MassTest_31 UInt32 -1 MassTest_32 MassTest_32 UInt32 -1 MassTest_33 MassTest_33 UInt32 -1 MassTest_34 MassTest_34 UInt32 -1 MassTest_35 MassTest_35 UInt32 -1 MassTest_36 MassTest_36 UInt32 -1 MassTest_37 MassTest_37 UInt32 -1 MassTest_38 MassTest_38 UInt32 -1 MassTest_39 MassTest_39 UInt32 -1 MassTest_40 MassTest_40 UInt32 -1 MassTest_41 MassTest_41 UInt32 -1 MassTest_42 MassTest_42 UInt32 -1 MassTest_43 MassTest_43 UInt32 -1 MassTest_44 MassTest_44 UInt32 -1 MassTest_45 MassTest_45 UInt32 -1 MassTest_46 MassTest_46 UInt32 -1 MassTest_47 MassTest_47 UInt32 -1 MassTest_48 MassTest_48 UInt32 -1 MassTest_49 MassTest_49 UInt32 -1 MassTest_50 MassTest_50 UInt32 -1 MassTest_51 MassTest_51 UInt32 -1 MassTest_52 MassTest_52 UInt32 -1 MassTest_53 MassTest_53 UInt32 -1 MassTest_54 MassTest_54 UInt32 -1 MassTest_55 MassTest_55 UInt32 -1 MassTest_56 MassTest_56 UInt32 -1 MassTest_57 MassTest_57 UInt32 -1 MassTest_58 MassTest_58 UInt32 -1 MassTest_59 MassTest_59 UInt32 -1 MassTest_60 MassTest_60 UInt32 -1 MassTest_61 MassTest_61 UInt32 -1 MassTest_62 MassTest_62 UInt32 -1 MassTest_63 MassTest_63 UInt32 -1 MassTest_64 MassTest_64 UInt32 -1 MassTest_65 MassTest_65 UInt32 -1 MassTest_66 MassTest_66 UInt32 -1 MassTest_67 MassTest_67 UInt32 -1 MassTest_68 MassTest_68 UInt32 -1 MassTest_69 MassTest_69 UInt32 -1 MassTest_70 MassTest_70 UInt32 -1 MassTest_71 MassTest_71 UInt32 -1 MassTest_72 MassTest_72 UInt32 -1 MassTest_73 MassTest_73 UInt32 -1 MassTest_74 MassTest_74 UInt32 -1 MassTest_75 MassTest_75 UInt32 -1 MassTest_76 MassTest_76 UInt32 -1 MassTest_77 MassTest_77 UInt32 -1 MassTest_78 MassTest_78 UInt32 -1 MassTest_79 MassTest_79 UInt32 -1 MassTest_80 MassTest_80 UInt32 -1 MassTest_81 MassTest_81 UInt32 -1 MassTest_82 MassTest_82 UInt32 -1 MassTest_83 MassTest_83 UInt32 -1 MassTest_84 MassTest_84 UInt32 -1 MassTest_85 MassTest_85 UInt32 -1 MassTest_86 MassTest_86 UInt32 -1 MassTest_87 MassTest_87 UInt32 -1 MassTest_88 MassTest_88 UInt32 -1 MassTest_89 MassTest_89 UInt32 -1 MassTest_90 MassTest_90 UInt32 -1 MassTest_91 MassTest_91 UInt32 -1 MassTest_92 MassTest_92 UInt32 -1 MassTest_93 MassTest_93 UInt32 -1 MassTest_94 MassTest_94 UInt32 -1 MassTest_95 MassTest_95 UInt32 -1 MassTest_96 MassTest_96 UInt32 -1 MassTest_97 MassTest_97 UInt32 -1 MassTest_98 MassTest_98 UInt32 -1 MassTest_99 MassTest_99 UInt32 -1 c1f53ffb-6552-4ccc-84c9-f847147cdc85 d5p1:NodeDescriptor 1000 100 C67E4D73-F46E-499C-991F-F86D0E1BEB00 1 0 UDP 4840,False,239.255.255.1,True Consumer Simple 1 d80d81dd-96e6-4560-850e-154f9181307c AllTypes 2 d80d81dd-96e6-4560-850e-154f9181307c MassTest 3 d80d81dd-96e6-4560-850e-154f9181307c ================================================ FILE: Networking/DataRepository/DataLogger/ConfigurationFactory.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2020, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System; using System.Diagnostics; using UAOOI.Configuration.Networking; using UAOOI.Configuration.Networking.Serialization; using UAOOI.Networking.DataRepository.DataLogger.Diagnostic; namespace UAOOI.Networking.DataRepository.DataLogger { /// /// Class ConsumerConfigurationFactory - provides implementation of the for the UA Data consumer. /// Implements the /// /// /// In production environment it shall be replaced by reading a configuration file. internal class ConsumerConfigurationFactory : ConfigurationFactoryBase { #region constructor /// /// Initializes a new instance of the class. /// public ConsumerConfigurationFactory(string configurationFileName) : base(configurationFileName) { _logger.EnteringMethodConfiguration(); //Simulator.Boiler.ProducerConfigurationFactory - review the configuration loading sequence #461 _logger.CreatingConfiguration(configurationFileName); } #endregion constructor #region ConfigurationFactoryBase /// /// Occurs after the association configuration has been changed. /// public override event EventHandler OnAssociationConfigurationChange; /// /// Occurs after the communication configuration has been changed. /// public override event EventHandler OnMessageHandlerConfigurationChange; protected override void RaiseEvents() { _logger.EnteringMethodConfiguration(); OnAssociationConfigurationChange?.Invoke(this, EventArgs.Empty); OnMessageHandlerConfigurationChange?.Invoke(this, EventArgs.Empty); } protected override void TraceData(TraceEventType eventType, int id, object data) { _logger.TraceData(eventType.ToString(), id, data.ToString()); } #endregion ConfigurationFactoryBase #region private private readonly DataLoggerEventSource _logger = DataLoggerEventSource.Log(); #endregion private } } ================================================ FILE: Networking/DataRepository/DataLogger/ConsumerViewModell.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2020, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System; using System.Windows.Input; using UAOOI.Networking.DataRepository.DataLogger.Diagnostic; using UAOOI.Networking.ReferenceApplication.Core.MvvmLight; namespace UAOOI.Networking.DataRepository.DataLogger { /// /// Class ConsumerViewModel -custom implementation of the ViewModel for this DataLogger /// /// public abstract class ConsumerViewModel : ObservableObject { #region ViewModel /// /// Gets or sets the consumer received bytes. /// /// The consumer received bytes. public int ConsumerReceivedBytes { get => b_ConsumerBytesReceived; set { b_ConsumerBytesReceived = value; RaisePropertyChanged("ConsumerReceivedBytes", b_ConsumerBytesReceived, value); } } /// /// Gets or sets the number of consumer received frames . /// /// The consumer frames received. public int ConsumerFramesReceived { get => b_ConsumerFramesReceived; set { b_ConsumerFramesReceived = value; RaisePropertyChanged("ConsumerFramesReceived", b_ConsumerFramesReceived, value); } } /// /// Gets or sets the consumer update configuration command. /// /// The consumer update configuration . public ICommand ConsumerUpdateConfiguration //TODO Remove reference of ConsumerDataManagementSetup System.Windows #239 { get => b_ConsumerUpdateConfiguration; set { b_ConsumerUpdateConfiguration = value; RaisePropertyChanged("ConsumerUpdateConfiguration", b_ConsumerUpdateConfiguration, value); } } /// /// Gets or sets the last consumer error message. /// /// The consumer error message. public string ConsumerErrorMessage { get => b_ConsumerErrorMessage; set { b_ConsumerErrorMessage = value; RaisePropertyChanged("ConsumerErrorMessage", b_ConsumerErrorMessage, value); } } /// /// Add the message to the Log on the UI. /// /// The message to be added to the log on the UI. protected internal abstract void Trace(string message); #endregion ViewModel #region API internal void ChangeProducerCommand(Action action) { _logger.EnteringMethodConfiguration(); ConsumerUpdateConfiguration = new DelegateCommand(action); } #endregion API #region private /// /// The logger - captures the functionality of the global logging infrastructure /// private readonly DataLoggerEventSource _logger = DataLoggerEventSource.Log(); private int b_ConsumerBytesReceived; private int b_ConsumerFramesReceived; private ICommand b_ConsumerUpdateConfiguration; private string b_ConsumerErrorMessage; #endregion private } } ================================================ FILE: Networking/DataRepository/DataLogger/Diagnostic/DataLoggerEventSource.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2020, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System; using System.Diagnostics.Tracing; using System.Runtime.CompilerServices; namespace UAOOI.Networking.DataRepository.DataLogger.Diagnostic { /// /// Class DataLoggerEventSource captures event source functionality supporting semantic par logging. /// Implements the /// /// [EventSource(Name = "UAOOI.Networking.DataRepository.DataLogger.Diagnostic.DataLoggerEventSource", Guid = "B28CBA3C-E2B7-4C5B-A045-E21FD3158D9B")] public class DataLoggerEventSource : EventSource { /// /// Class Tasks - capturing definitions of the tasks that apply to events. /// public class Tasks { /// /// The part behavior event task /// public const EventTask Part = (EventTask)1; /// /// The code behavior event task /// public const EventTask Code = (EventTask)2; /// /// The binding behavior event task /// public const EventTask Binding = (EventTask)3; /// /// The configuration behavior event task /// public const EventTask Configuration = (EventTask)4; /// /// The azure behavior event task /// public const EventTask UserInterface = (EventTask)5; } /// /// Class Keywords - defines the local keywords (flags) that apply to events. /// public class Keywords { /// /// The PackageContent /// public const EventKeywords Setup = (EventKeywords)(1 << 1); /// /// The Diagnostic /// public const EventKeywords Diagnostic = (EventKeywords)(1 << 2); /// /// The Performance /// public const EventKeywords Performance = (EventKeywords)(1 << 3); /// /// The Settings /// public const EventKeywords Settings = (EventKeywords)(1 << 4); } /// /// Gets the log - implements singleton of the . /// /// The log. internal static DataLoggerEventSource Log() { return _singleton.Value; } [Event(1, Message = "At {0}.{1} encountered application failure: {2}", Channel = EventChannel.Admin, Opcode = EventOpcode.Info, Task = Tasks.Code, Level = EventLevel.Error, Keywords = Keywords.Diagnostic, Version = 0x01)] internal void ProgramFailure(string className, string problem, [CallerMemberName] string methodName = nameof(ProgramFailure)) { WriteEvent(1, className, methodName, problem); } [Event(2, Message = "Disposing an object: {0}.{1}.", Channel = EventChannel.Debug, Opcode = EventOpcode.Stop, Task = Tasks.Code, Level = EventLevel.Verbose)] internal void DisposingObject(string className, [CallerMemberName] string methodName = nameof(DisposingObject)) { WriteEvent(2, className, methodName); } [Event(3, Message = "Entering method ConsumerViewModell.{0}", Channel = EventChannel.Debug, Opcode = EventOpcode.Start, Task = Tasks.UserInterface, Level = EventLevel.Verbose, Keywords = EventKeywords.AuditSuccess)] internal void EnteringMethodUserInterface( [CallerMemberName] string methodName = nameof(EnteringMethodUserInterface)) { WriteEvent(3, methodName); } [Event(4, Message = "Entering method PartBindingFactory.{0}", Channel = EventChannel.Debug, Opcode = EventOpcode.Info, Task = Tasks.Binding, Level = EventLevel.Verbose, Keywords = EventKeywords.AuditSuccess)] internal void EnteringMethodBinding([CallerMemberName] string methodName = nameof(EnteringMethodBinding)) { WriteEvent(4, methodName); } [Event(5, Message = "Entering method ConfigurationFactory.{0}", Channel = EventChannel.Debug, Opcode = EventOpcode.Info, Task = Tasks.Configuration, Level = EventLevel.Verbose, Keywords = EventKeywords.AuditSuccess)] internal void EnteringMethodConfiguration([CallerMemberName] string methodName = nameof(EnteringMethodBinding)) { WriteEvent(5, methodName); } [Event(6, Message = "Opening the configuration file {0}", Channel = EventChannel.Debug, Opcode = EventOpcode.Info, Task = Tasks.Configuration, Level = EventLevel.Informational, Keywords = EventKeywords.AuditSuccess)] internal void CreatingConfiguration(string configurationFileName) { WriteEvent(6, configurationFileName); } [Event(7, Message = "Entering method LoggerManagementSetup.{0}", Channel = EventChannel.Debug, Opcode = EventOpcode.Info, Task = Tasks.Part, Level = EventLevel.Verbose, Keywords = EventKeywords.AuditSuccess)] internal void EnteringMethodPart([CallerMemberName] string methodName = nameof(EnteringMethodPart)) { WriteEvent(7, methodName); } [Event(8, Message = "Successfully composed {0} using instance of type {1}", Channel = EventChannel.Debug, Opcode = EventOpcode.Info, Task = Tasks.Part, Level = EventLevel.Informational, Keywords = EventKeywords.AuditSuccess)] internal void Composed(string variable, string typeName) { WriteEvent(8, variable, typeName); } [Event(9, Message = "Setup of the consumer engine has been accomplished and it starts receiving data.", Channel = EventChannel.Debug, Opcode = EventOpcode.Start, Task = Tasks.Part, Level = EventLevel.Informational, Keywords = EventKeywords.AuditSuccess)] internal void PartInitializationCompleted() { WriteEvent(9); } [Event(10, Message = "TraceData of the EventType={0} with id={1} and description={2}", Channel = EventChannel.Analytic, Opcode = EventOpcode.Start, Task = Tasks.Code, Level = EventLevel.Informational, Keywords = EventKeywords.AuditSuccess)] internal void TraceData(string eventType, int id, string data) { WriteEvent(10, eventType, id, data); } #region private private static Lazy _singleton = new Lazy(() => new DataLoggerEventSource()); /// /// Releases the unmanaged resources used by the class and optionally releases the managed resources. /// /// true to release both managed and unmanaged resources; false to release only unmanaged resources. protected override void Dispose(bool disposing) { base.Dispose(disposing); if (disposing) _singleton = new Lazy(() => new DataLoggerEventSource()); } private DataLoggerEventSource() { } #endregion private } } ================================================ FILE: Networking/DataRepository/DataLogger/Diagnostic/DataLoggerEventSourceExtensions.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2020, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System; using System.Runtime.CompilerServices; namespace UAOOI.Networking.DataRepository.DataLogger.Diagnostic { /// /// Class - expanding the /// internal static class DataLoggerEventSourceExtensions { /// /// Logs the exception using . /// /// The event source to be used for problem reporting. /// Name of the class where the exception has been caught. /// The exception to be reported. /// Name of the method. internal static void LogException(this DataLoggerEventSource eventSource, string className, Exception e, [CallerMemberName] string methodName = nameof(LogException)) { Exception _exception = e; string _innerText = "An exception has been caught:"; while (e != null) { eventSource.ProgramFailure(className, methodName, $"{_innerText} of type {_exception.GetType().Name} capturing the message: {e.Message}"); e = e.InnerException; _innerText = "It contains inner exception:"; } } } } ================================================ FILE: Networking/DataRepository/DataLogger/Diagnostic/NetworkingEventSourceProvider.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2020, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System.ComponentModel.Composition; using System.Diagnostics.Tracing; using UAOOI.Networking.Core; namespace UAOOI.Networking.DataRepository.DataLogger.Diagnostic { /// /// Class NetworkingEventSourceProvider - gets access to an instance of to be registered by the logging infrastructure. /// /// [Export(typeof(INetworkingEventSourceProvider))] public class NetworkingEventSourceProvider : INetworkingEventSourceProvider { #region INetworkingEventSourceProvider /// /// Gets the part event source. /// /// Returns an instance of . public EventSource GetPartEventSource() { return DataLoggerEventSource.Log(); } #endregion INetworkingEventSourceProvider } } ================================================ FILE: Networking/DataRepository/DataLogger/LoggerManagementSetup.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2020, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using CommonServiceLocator; using System; using System.ComponentModel.Composition; using System.Diagnostics; using UAOOI.Networking.Core; using UAOOI.Networking.DataRepository.DataLogger.Diagnostic; using UAOOI.Networking.SemanticData; namespace UAOOI.Networking.DataRepository.DataLogger { /// /// Class - custom implementation of the /// This class cannot be inherited. /// Implements the /// [Export] [PartCreationPolicy(CreationPolicy.Shared)] public sealed class LoggerManagementSetup : DataManagementSetup { #region constructor /// /// Initializes a new instance of the class. /// public LoggerManagementSetup() { _logger.EnteringMethodPart(); // get external parts to compose IServiceLocator _serviceLocator = ServiceLocator.Current; string _ConsumerConfigurationFileName = _serviceLocator.GetInstance(ConsumerCompositionSettings.ConfigurationFileNameContract); _ViewModel = _serviceLocator.GetInstance(ConsumerCompositionSettings.ViewModelContract); _logger.Composed(nameof(_ViewModel), _ViewModel.GetType().FullName); EncodingFactory = _serviceLocator.GetInstance(); _logger.Composed(nameof(EncodingFactory), EncodingFactory.GetType().FullName); MessageHandlerFactory = _serviceLocator.GetInstance(); _logger.Composed(nameof(MessageHandlerFactory), MessageHandlerFactory.GetType().FullName); // setup local functionality ConfigurationFactory = new ConsumerConfigurationFactory(_ConsumerConfigurationFileName); _logger.Composed(nameof(ConfigurationFactory), ConfigurationFactory.GetType().FullName); BindingFactory = new PartIBindingFactory(_ViewModel); _logger.Composed(nameof(BindingFactory), BindingFactory.GetType().FullName); } #endregion constructor #region API /// /// Setups this instance. /// public void Setup() { try { _logger.EnteringMethodPart(); _ViewModel.ChangeProducerCommand(Restart); Start(); _ViewModel.ConsumerErrorMessage = "Running"; _logger.PartInitializationCompleted(); } catch (Exception _ex) { _logger.LogException(nameof(LoggerManagementSetup), _ex); _ViewModel.ConsumerErrorMessage = "ERROR"; throw; } } #endregion API #region IDisposable /// /// Releases unmanaged and - optionally - managed resources. /// /// true to release both managed and unmanaged resources; false to release only unmanaged resources. protected override void Dispose(bool disposing) { _logger.DisposingObject(nameof(LoggerManagementSetup)); m_onDispose(disposing); base.Dispose(disposing); if (!disposing || m_disposed) return; m_disposed = true; } #endregion IDisposable #region private /// /// Gets or sets the view model to be used for diagnostic purpose.. /// /// The view model. private ConsumerViewModel _ViewModel; private readonly DataLoggerEventSource _logger = DataLoggerEventSource.Log(); /// /// Gets a value indicating whether this is disposed. /// /// true if disposed; otherwise, false. private bool m_disposed = false; private Action m_onDispose = disposing => { }; private void Restart() { _logger.EnteringMethodPart(); _ViewModel.Trace("Entering Restart"); Start(); } #endregion private #region Unit tests instrumentation [Conditional("DEBUG")] internal void DisposeCheck(Action onDispose) { _logger.EnteringMethodPart(); m_onDispose = onDispose; } #endregion Unit tests instrumentation } } ================================================ FILE: Networking/DataRepository/DataLogger/Networking.DataLogger.csproj ================================================ netstandard2.0 true OPCUAOOIKey.snk UAOOI.Networking.DataRepository.DataLogger UAOOI.Networking.DataRepository.DataLogger 4.0.1 MPostol commsvr.com Object Oriented Internet Semantic Data Reactive Networking based on OPC UA Part 14 Pub/Sub library. Copyright MPostol (c) 2018 https://github.com/mpostol/OPC-UA-OOI/blob/master/license.md https://commsvr.gitbook.io/ooi https://github.com/mpostol/OPC-UA-OOI GitHub Object Oriented Internet, OPC UA, Reactive Networking. 4.0.1.1 bin\Debug\netstandard2.0\UAOOI.Networking.DataLogger.xml 1701;1702;1705;IDE0001;IDE0002;IDE0003 PreserveNewest ================================================ FILE: Networking/DataRepository/DataLogger/PartIBindingFactory.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2020, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System; using UAOOI.Configuration.Networking.Serialization; using UAOOI.Networking.DataRepository.DataLogger.Diagnostic; using UAOOI.Networking.SemanticData; using UAOOI.Networking.SemanticData.DataRepository; namespace UAOOI.Networking.DataRepository.DataLogger { /// /// Class - it is a consumer of the data send over the wire using the UAOOI.Networking.SemanticData framework. /// It is expected that the data is generated according to the requirements defined by the OPCF to proceed interoperability testing. /// internal class PartIBindingFactory : IBindingFactory { #region composition /// /// Initializes a new instance of the class. /// /// The view model used to log data received over wire. internal PartIBindingFactory(ConsumerViewModel viewModel) { _logger.EnteringMethodBinding(); _ViewModel = viewModel; } #endregion composition #region IBindingFactory /// /// Gets the binding captured by an instance of the type used by the consumer to save the data in the data repository. /// /// It is the name of a repository group profiling the configuration behavior, e.g. encoders selection. /// The configuration of the repositories belonging to the same group are handled according to the same profile. /// The name of a variable that is the ultimate destination of the values recovered from messages. /// Must be unique in the context of the group named by . /// The field metadata definition represented as an object of . /// Returns an object implementing the interface that can be used to update selected variable on the factory side. IConsumerBinding IBindingFactory.GetConsumerBinding(string repositoryGroup, string processValueName, UATypeInfo fieldTypeInfo) { _logger.EnteringMethodBinding(); return GetConsumerBinding(processValueName, fieldTypeInfo); } /// /// Gets the binding captured by an instance of the type used by the producer to read from the local data repository. /// /// It is the name of a repository group profiling the configuration behavior, e.g. encoders selection. /// The configuration of the repositories belonging to the same group are handled according to the same profile. /// The name of a variable that is the source of the values forwarded by a message over the network. /// Must be unique in the context of the group named by /// The of the message field encoding. /// Returns an object implementing the interface that can be used to create message and populate it with the data. IProducerBinding IBindingFactory.GetProducerBinding(string repositoryGroup, string processValueName, UATypeInfo fieldTypeInfo) { _logger.EnteringMethodBinding(); NotImplementedException ex = new NotImplementedException($"intentionally the method {nameof(IBindingFactory.GetProducerBinding)} is not implemented."); _logger.LogException(nameof(PartIBindingFactory), ex); throw ex; } #endregion IBindingFactory #region private private ConsumerViewModel _ViewModel; private DataLoggerEventSource _logger = DataLoggerEventSource.Log(); /// /// Helper method that creates the consumer binding. /// /// Name of the variable. /// The encoding. /// IConsumerBinding. /// variableName private IConsumerBinding GetConsumerBinding(string variableName, UATypeInfo typeInfo) { _logger.EnteringMethodBinding(); IConsumerBinding returnValue = null; if (typeInfo.ValueRank == 0 || typeInfo.ValueRank > 1) { ArgumentOutOfRangeException ex = new ArgumentOutOfRangeException(nameof(typeInfo.ValueRank)); _logger.LogException(nameof(PartIBindingFactory), ex); throw ex; } switch (typeInfo.BuiltInType) { case BuiltInType.Boolean: if (typeInfo.ValueRank < 0) returnValue = AddBinding(variableName, typeInfo); else returnValue = AddBinding(variableName, typeInfo); break; case BuiltInType.SByte: if (typeInfo.ValueRank < 0) returnValue = AddBinding(variableName, typeInfo); else returnValue = AddBinding(variableName, typeInfo); break; case BuiltInType.Byte: if (typeInfo.ValueRank < 0) returnValue = AddBinding(variableName, typeInfo); else returnValue = AddBinding(variableName, typeInfo); break; case BuiltInType.Int16: if (typeInfo.ValueRank < 0) returnValue = AddBinding(variableName, typeInfo); else returnValue = AddBinding(variableName, typeInfo); break; case BuiltInType.UInt16: if (typeInfo.ValueRank < 0) returnValue = AddBinding(variableName, typeInfo); else returnValue = AddBinding(variableName, typeInfo); break; case BuiltInType.Int32: if (typeInfo.ValueRank < 0) returnValue = AddBinding(variableName, typeInfo); else returnValue = AddBinding(variableName, typeInfo); break; case BuiltInType.UInt32: if (typeInfo.ValueRank < 0) returnValue = AddBinding(variableName, typeInfo); else returnValue = AddBinding(variableName, typeInfo); break; case BuiltInType.Int64: if (typeInfo.ValueRank < 0) returnValue = AddBinding(variableName, typeInfo); else returnValue = AddBinding(variableName, typeInfo); break; case BuiltInType.UInt64: if (typeInfo.ValueRank < 0) returnValue = AddBinding(variableName, typeInfo); else returnValue = AddBinding(variableName, typeInfo); break; case BuiltInType.Float: if (typeInfo.ValueRank < 0) returnValue = AddBinding(variableName, typeInfo); else returnValue = AddBinding(variableName, typeInfo); break; case BuiltInType.Double: if (typeInfo.ValueRank < 0) returnValue = AddBinding(variableName, typeInfo); else returnValue = AddBinding(variableName, typeInfo); break; case BuiltInType.String: if (typeInfo.ValueRank < 0) returnValue = AddBinding(variableName, typeInfo); else returnValue = AddBinding(variableName, typeInfo); break; case BuiltInType.DateTime: if (typeInfo.ValueRank < 0) returnValue = AddBinding(variableName, typeInfo); else returnValue = AddBinding(variableName, typeInfo); break; case BuiltInType.Guid: if (typeInfo.ValueRank < 0) returnValue = AddBinding(variableName, typeInfo); else returnValue = AddBinding(variableName, typeInfo); break; case BuiltInType.ByteString: if (typeInfo.ValueRank < 0) returnValue = AddBinding(variableName, typeInfo); else returnValue = AddBinding(variableName, typeInfo); break; case BuiltInType.Null: case BuiltInType.XmlElement: case BuiltInType.NodeId: case BuiltInType.ExpandedNodeId: case BuiltInType.StatusCode: case BuiltInType.QualifiedName: case BuiltInType.LocalizedText: case BuiltInType.ExtensionObject: case BuiltInType.DataValue: case BuiltInType.Variant: case BuiltInType.DiagnosticInfo: case BuiltInType.Enumeration: default: throw new ArgumentOutOfRangeException("encoding"); } return returnValue; } private IConsumerBinding AddBinding(string variableName, UATypeInfo typeInfo) { _logger.EnteringMethodBinding(); ConsumerBindingMonitoredValue returnValue = new ConsumerBindingMonitoredValue(typeInfo); returnValue.PropertyChanged += (x, y) => _ViewModel.Trace($"{DateTime.Now.ToLongTimeString()}:{DateTime.Now.Millisecond} {variableName} = {((ConsumerBindingMonitoredValue)x).ToString()}"); return returnValue; } #endregion private } } ================================================ FILE: Networking/DataRepository/DataLogger/README.md ================================================ # `ReferenceApplication` Consumer - Data Logger ## Common Tasks Working through this tutorial gives you an introductory understanding of the steps required to implement `Consumer` role of `OOI Reactive Application`. `DataLogger` is a sample implementation of the `Consumer` part of the `ReferenceApplication`, which is an example application of `Semantic-Data` reactive networking based on [OPC UA Part 14 Pub/Sub](../../../Networking/SemanticData/README.PubSubMTF.md) specification. Here are steps undertook to implement the `Consumer` role in the application: 1. `DataManagementSetup`: this class has been overridden by the `LoggerManagementSetup`class and it initializes the communication and binds data fields recovered form messages to local resources. 1. `IEncodingFactory` and `IMessageHandlerFactory`: has been implemented in external common libraries and `Consumer` doesn't depend on this implementation - current implementation of the interfaces is localized as services using an instance of the `IServiceLocator` interface. 1. `IBindingFactory`: has been implemented in the class `DataConsumer` that is responsible to synchronize the values of the local data repository properties and messages received over the wire. 1. `IConfigurationFactory`: the class `ConsumerConfigurationFactory` implements this interface to be used for the configuration file opening. ## How to Guide ### How to: Implement `DataManagementSetup` The `LoggerManagementSetup` constructor initializes all properties, which are injection points of all parts composing this role. ```C# public sealed class LoggerManagementSetup : DataManagementSetup { public LoggerManagementSetup() { IServiceLocator _serviceLocator = ServiceLocator.Current; string _ConsumerConfigurationFileName = _serviceLocator.GetInstance(ConsumerCompositionSettings.ConfigurationFileNameContract); m_ViewModel = _serviceLocator.GetInstance(ConsumerCompositionSettings.ViewModelContract); ConfigurationFactory = new ConsumerConfigurationFactory(_ConsumerConfigurationFileName); EncodingFactory = _serviceLocator.GetInstance(); BindingFactory = new DataConsumer(m_ViewModel); MessageHandlerFactory = _serviceLocator.GetInstance(); } .... } ``` In this example, it is assumed that [`ServiceLocator`](https://www.nuget.org/packages/CommonServiceLocator) is implemented to resolve references to any external services. Finally the `DataManagementSetup.Start()` method is called to initialize the infrastructure, enable all associations and start pumping the data. ### How to: Implement IBindingFactory Implementation of this interface is a basic step to implement `Consumer` functionality. An instance of the `IBindingFactory` is responsible to create objects implementing `IBinding` that can be used by the `Consumer` to save the data received over the wire in the local data repository. The class `DataConsumer` is a sample implementation of a data logger functionality recording data over time. It consumes the testing data sent and updates properties in the class `ConsumerViewModel` implementing *ViewModel* layer in the *[Model View ViewModel (on MSDN)](https://msdn.microsoft.com/en-us/magazine/dd419663.aspx)* (*MVVM pattern*). The class `DataConsumer` demonstrates how to create bindings interconnecting the data received over the wire and the properties that are the ultimate destination of the data. The user interface provided by the *View* layer implemented in the `UAOOI.Networking.ReferenceApplication.MainWindow` class is dynamically bounded at run time with the `ConsumerViewModel`. To implement the *ViewModel* layer in the *`MVVM pattern* the helper generic class `UAOOI.Networking.SemanticData.DataRepository.ProducerBindingMonitoredValue` is used. ### How to: Implement `IConfigurationFactory` Implementation of this interface is straightforward and based entirely on the library [`UAOOI.Configuration.Networking`](../../../Configuration/Networking/README.MD). In a typical scenario, this implementation should not be considered for further modification. The only open question is how to provide the name of the file containing the configuration of this role. In proposed solution the name is provided by a service defined by the application entry point part and localized using `IServiceLocator` in the class `LoggerManagementSetup` - see code snipped below: ```C# string _ConsumerConfigurationFileName = _serviceLocator.GetInstance(ConsumerCompositionSettings.ConfigurationFileNameContract); ``` This role uses independent configuration file `ConfigurationDataConsumer.xml` attached to the project. This file contains a mirror configuration of the [`Producer`](../../../Networking/SimulatorInteroperabilityTest/README.md) role configuration to log all the generated data. ## Current release > Note; This library is not considered to be published as the NuGet package. ## See also - API Browser: the preliminary code help documentation - [available for sponsors- consider joining](https://github.commsvr.com/AboutPartnershipProgram.md.html) - [OPC UA Makes Complex Data Processing Possible][wordpress.OPCUACD] [wordpress.OPCUACD]:https://mpostol.wordpress.com/2014/05/08/opc-ua-makes-complex-data-access-possible ================================================ FILE: Networking/DataRepository/DataLogger.UnitTest/ConsumerConfigurationFactoryUnitTest.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2020, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using Microsoft.VisualStudio.TestTools.UnitTesting; using System; using System.IO; using UAOOI.Configuration.Networking; namespace UAOOI.Networking.DataRepository.DataLogger { [TestClass] [DeploymentItem(@".\ConfigurationDataConsumer.xml", @".\")] public class ConsumerConfigurationFactoryUnitTest { [TestMethod] public void ConstructorTestMethod() { IConfigurationFactory _configuration = null; Assert.ThrowsException(() => _configuration = new ConsumerConfigurationFactory("Configuration file name")); } [TestMethod] public void ConfigurationFileExistsTest() { FileInfo _configurationFile = new FileInfo("ConfigurationDataConsumer.xml"); Assert.IsTrue(_configurationFile.Exists, $"There is no file in path {Environment.CurrentDirectory}"); } } } ================================================ FILE: Networking/DataRepository/DataLogger.UnitTest/ConsumerViewModelUnit.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2020, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using Microsoft.VisualStudio.TestTools.UnitTesting; using System; using UAOOI.Networking.DataRepository.DataLogger.Instrumentation; namespace UAOOI.Networking.DataRepository.DataLogger { [TestClass] public class ConsumerViewModelUnit { [TestMethod] public void ConstructorTest() { TestConsumerViewModel _viewModel = new TestConsumerViewModel(); } [TestMethod] [ExpectedException(typeof(NotImplementedException))] public void TraceTest() { TestConsumerViewModel _viewModel = new TestConsumerViewModel(); _viewModel.Trace(""); } } } ================================================ FILE: Networking/DataRepository/DataLogger.UnitTest/DataConsumerUnitTest.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2020, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using Microsoft.VisualStudio.TestTools.UnitTesting; using UAOOI.Networking.DataRepository.DataLogger.Instrumentation; namespace UAOOI.Networking.DataRepository.DataLogger { [TestClass] public class DataConsumerUnitTest { [TestMethod] public void ConstructorTest() { TestConsumerViewModel _viewModel = new TestConsumerViewModel(); PartIBindingFactory _DataConsumer = new PartIBindingFactory(_viewModel); } } } ================================================ FILE: Networking/DataRepository/DataLogger.UnitTest/Diagnostic/DataLoggerEventSourceUnitTest.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2020, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using Microsoft.VisualStudio.TestTools.UnitTesting; using System; using System.Collections.Generic; using System.Diagnostics; using System.Diagnostics.Tracing; using System.Linq; namespace UAOOI.Networking.DataRepository.DataLogger.Diagnostic { [TestClass] public class DataLoggerEventSourceUnitTest { [TestMethod] public void ConstructorTest() { using (DataLoggerEventSource itemToTest = DataLoggerEventSource.Log()) { Assert.IsNotNull(itemToTest); Assert.IsNull(itemToTest.ConstructionException); Assert.AreEqual(Guid.Parse("B28CBA3C-E2B7-4C5B-A045-E21FD3158D9B"), itemToTest.Guid); Assert.AreEqual("UAOOI.Networking.DataRepository.DataLogger.Diagnostic.DataLoggerEventSource", itemToTest.Name); Assert.AreEqual(EventSourceSettings.EtwManifestEventFormat, itemToTest.Settings); Assert.IsFalse(itemToTest.IsEnabled()); Assert.AreSame(itemToTest, DataLoggerEventSource.Log()); } } [TestMethod] public void DisposeTestMethod() { try { DataLoggerEventSource itemToTest = DataLoggerEventSource.Log(); itemToTest.Dispose(); Assert.IsNotNull(itemToTest); Assert.AreNotSame(itemToTest, DataLoggerEventSource.Log()); } finally { DataLoggerEventSource.Log().Dispose(); } } [TestMethod] public void EventListenerTest() { using (DataLoggerEventSource itemToTest = DataLoggerEventSource.Log()) using (EventListener lisner = new EventListener()) { List sourceList = new List(); List eventsList = new List(); lisner.EventSourceCreated += (o, es) => sourceList.Add(es); lisner.EventWritten += (source, entry) => eventsList.Add(entry); foreach (EventSourceCreatedEventArgs item in sourceList) Debug.WriteLine($"{item.EventSource.Name}:{item.EventSource.Guid}; Is enabled: {item.EventSource.IsEnabled()}"); int esCount = sourceList.Count; Assert.AreEqual(0, eventsList.Count); lisner.EnableEvents(itemToTest, EventLevel.LogAlways, EventKeywords.All); Assert.AreEqual(esCount, sourceList.Count); Assert.AreEqual(0, eventsList.Count); } } [TestMethod] public void ProgramFailureTest() { using (DataLoggerEventSource itemToTest = DataLoggerEventSource.Log()) using (EventListener lisner = new EventListener()) { List eventsList = new List(); lisner.EventWritten += (source, entry) => eventsList.Add(entry); Assert.AreEqual(0, eventsList.Count); lisner.EnableEvents(itemToTest, EventLevel.LogAlways, EventKeywords.All); itemToTest.ProgramFailure("ClassName", "problem"); Assert.AreEqual(1, eventsList.Count); EventWrittenEventArgs eventArgs = eventsList[0]; Assert.AreEqual(1, eventArgs.EventId); Assert.AreEqual("At ClassName.ProgramFailureTest encountered application failure: problem", String.Format(eventArgs.Message, eventArgs.Payload.Select(x => x.ToString()).ToArray())); Assert.AreEqual(EventChannel.Admin, eventArgs.Channel); Assert.AreEqual(1, eventArgs.EventId); Assert.AreEqual(nameof(DataLoggerEventSource.ProgramFailure), eventArgs.EventName); Assert.AreSame(DataLoggerEventSource.Log(), eventArgs.EventSource); Assert.IsTrue((DataLoggerEventSource.Keywords.Diagnostic & eventArgs.Keywords) > 0); Assert.AreEqual(EventLevel.Error, eventArgs.Level); Assert.AreEqual(EventOpcode.Info, eventArgs.Opcode); Assert.AreEqual(DataLoggerEventSource.Tasks.Code, eventArgs.Task); Assert.AreEqual(0x01, eventArgs.Version); } } } } ================================================ FILE: Networking/DataRepository/DataLogger.UnitTest/Instrumentation/TestConsumerViewModel.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2020, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System; namespace UAOOI.Networking.DataRepository.DataLogger.Instrumentation { internal class TestConsumerViewModel : ConsumerViewModel { protected internal override void Trace(string message) { throw new NotImplementedException(); } } } ================================================ FILE: Networking/DataRepository/DataLogger.UnitTest/Networking.DataLogger.UnitTest.csproj ================================================  Debug AnyCPU {45BE72F2-3F5B-4D13-B931-0CA62F404D4C} Library Properties UAOOI.Networking.DataRepository.DataLogger UAOOI.Networking.DataRepository.DataLogger.UnitTest v4.7.2 512 {3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} 15.0 $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) $(ProgramFiles)\Common Files\microsoft shared\VSTT\$(VisualStudioVersion)\UITestExtensionPackages False UnitTest true full false bin\Debug\ DEBUG;TRACE prompt 4 IDE0001 pdbonly true bin\Release\ TRACE prompt 4 true OPCUAOOIKey.snk ..\..\..\packages\CommonServiceLocator.2.0.6\lib\net47\CommonServiceLocator.dll ..\..\..\packages\MSTest.TestFramework.2.2.10\lib\net45\Microsoft.VisualStudio.TestPlatform.TestFramework.dll ..\..\..\packages\MSTest.TestFramework.2.2.10\lib\net45\Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions.dll ..\..\..\packages\System.Diagnostics.TraceSource.4.3.0\lib\net46\System.Diagnostics.TraceSource.dll True True {e28e0880-03aa-4d1b-a820-41b04e766019} Configuration.Networking {2238851e-4db8-46b0-b38d-0e2315fe153e} Networking.ReferenceApplication.Core {3781b8ca-3128-45dc-89c9-981740357630} Networking.DataLogger This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. ================================================ FILE: Networking/DataRepository/DataLogger.UnitTest/Properties/AssemblyInfo.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System.Reflection; using System.Runtime.InteropServices; [assembly: AssemblyTitle("Networking.DataLogger.UnitTest")] [assembly: AssemblyDescription("Networking DataLogger UnitTest")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("commsvr.com")] [assembly: AssemblyProduct("Networking.DataLogger.UnitTest")] [assembly: AssemblyCopyright("Copyright © 2018")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] [assembly: ComVisible(false)] [assembly: Guid("45be72f2-3f5b-4d13-b931-0ca62f404d4c")] [assembly: AssemblyVersion("4.0.1.*")] [assembly: AssemblyFileVersion("4.0.1.0")] ================================================ FILE: Networking/DataRepository/DataLogger.UnitTest/app.config ================================================  ================================================ FILE: Networking/DataRepository/DataLogger.UnitTest/packages.config ================================================  ================================================ FILE: Networking/Encoding/EncodingFactoryBinarySimple.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2018, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System; using System.ComponentModel.Composition; using UAOOI.Configuration.Networking.Serialization; using UAOOI.Networking.SemanticData; using UAOOI.Networking.SemanticData.DataRepository; //TODO Networking.SemanticData dependency on Networking.Encoding should be removed #323: IBinding using UAOOI.Networking.SemanticData.Encoding; namespace UAOOI.Networking.Encoding { /// /// Class EncodingFactoryBinarySimple - provides functionality limited to encoding simple data only. /// /// [Export(typeof(IEncodingFactory))] [PartCreationPolicy(CreationPolicy.Shared)] //TODO Networking.SemanticData dependency on Networking.Encoding should be removed #323: IEncodingFactory public class EncodingFactoryBinarySimple : IEncodingFactory { #region IEncodingFactory /// /// Updates the value converter. /// /// An object responsible to transfer the value between the message and ultimate destination in the repository. /// The repository group. /// The source encoding. /// /// binding /// void IEncodingFactory.UpdateValueConverter(IBinding binding, string repositoryGroup, UATypeInfo sourceEncoding) { if (sourceEncoding.BuiltInType != binding.Encoding.BuiltInType) throw new ArgumentOutOfRangeException(nameof(binding)); } /// /// Gets the ua decoder. /// /// The ua decoder. IUAEncoder IEncodingFactory.UAEncoder { get; } = new UABinaryEncoderImplementation(); /// /// Gets the decoder that provides methods to be used to decode OPC UA Built-in types. /// /// The object implementing interface. /// IUADecoder IEncodingFactory.UADecoder { get; } = new UABinaryDecoderImplementation(); #endregion } } ================================================ FILE: Networking/Encoding/Networking.Encoding.csproj ================================================  netstandard2.0 true OPCUAOOIKey.snk UAOOI.Networking.Encoding UAOOI.Networking.Encoding 4.0.2 MPostol commsvr.com Object Oriented Internet This part provides functionality to lookup a dictionary containing value converters. The interface is used for late binding to inject dependency on the external library. This library provides IEncodingFactory functionality limited to encoding simple data types only for the testing purpose only. Copyright MPostol (c) 2018 https://commsvr.gitbook.io/ooi https://github.com/mpostol/OPC-UA-OOI GitHub Object Oriented Internet, OPC UA, CommServer, Reactive Networking. Main purpose of this release is to support implementation of the interoperability tests defined by the OPC Foundation. In the production environment, you may simply replace this library by a custom one providing unlimited encoding functionality. 4.0.2.0 false True True Networking.Encoding.nuspec.tt TextTemplatingFileGenerator Networking.Encoding.nuspec.nuspec ================================================ FILE: Networking/Encoding/Networking.Encoding.nuspec.nuspec ================================================  UAOOI.Networking.Encoding 4.0.2 Object Oriented Internet Networking Encoding Mariusz Postol Mariusz Postol false MIT https://github.com/mpostol/OPC-UA-OOI logo.png This part provides implementation of the IEncodingFactory to lookup a dictionary containing value converters. The interface is used for late binding to inject dependency on the external library. This library provides IEncodingFactory functionality limited to encoding simple data types only for the testing purpose only. Main purpose of this release is to support implementation of the interoperability tests defined by the OPC Foundation. In the production environment, you may simply replace this library by a custom one providing unlimited encoding functionality. IEncodingFactory implementation. Copyright (C) 2022 Mariusz Postol LODZ POLAND Object Oriented Internet, OPC UA, Information Model, IoT, M2M, DOA, Copyright (C) 2022 Mariusz Postol LODZ POLAND ================================================ FILE: Networking/Encoding/Networking.Encoding.nuspec.tt ================================================ <#@ template debug="false" hostspecific="false" language="C#" #> <#@ output extension=".nuspec" #> UAOOI.Networking.Encoding 4.0.2 <#=NetworkingDataProduct#> Networking Encoding <#=AssemblyCompany#> <#=Owner#> false MIT <#=Url#> logo.png This part provides implementation of the IEncodingFactory to lookup a dictionary containing value converters. The interface is used for late binding to inject dependency on the external library. This library provides IEncodingFactory functionality limited to encoding simple data types only for the testing purpose only. Main purpose of this release is to support implementation of the interoperability tests defined by the OPC Foundation. In the production environment, you may simply replace this library by a custom one providing unlimited encoding functionality. IEncodingFactory implementation. <#=AssemblyCopyright#> Object Oriented Internet, OPC UA, Information Model, IoT, M2M, DOA, <#=AssemblyCopyright#> <#@ include file = "..\..\CommonResources\T4Definitions\Model.t4" #> ================================================ FILE: Networking/Encoding/README.md ================================================ # Encoding Library ## Getting Started This library is a loosely coupled part of the `ReferenceApplication` described in the section [Reference Application Graphical User Interface](../ReferenceApplication/README.MD). The main purpose of this library is the interoperability testing and diagnostic. It provides `UAOOI.Networking.SemanticData.IEncodingFactory` limited implementation in the class `EncodingFactoryBinarySimple`. Using this implementation the library can encode/decode only simple data types. The `ReferenceApplication` uses implementation of this class for late binding to inject dependency on the encoding functionality. The implementation of the `UAOOI.Networking.SemanticData.Encoding.IUADecoder` interface is provided by the `UABinaryDecoderImplementation`. The implementation of the `UAOOI.Networking.SemanticData.Encoding.IUAEncoder` interface is provided in the `UABinaryEncoderImplementation`; This `UpdateValueConverter` method is responsible to lookup a dictionary containing value converters and if any assigns it to `IBinding.Converter` property. This method doesn't support this functionality and left the property unassigned. This library may be easily replaced by a custom one - change the composition contract in: - `UAOOI.Networking.DataLogger.LoggerManagementSetup` - `UAOOI.Networking.SimulatorInteroperabilityTest.SimulatorDataManagementSetup` ## Current release This library has been released as the NuGet package [UAOOI.Networking.Encoding](https://www.nuget.org/packages/UAOOI.Networking.Encoding). Main purpose of this release is to support implementation of the interoperability tests defined by the OPC Foundation. In the production environment, you may simply replace this library by a custom one providing unlimited encoding functionality. ## Contributing Please read CONTRIBUTING.md for details on our code of conduct, and the process for submitting pull requests to us. Consider expanding functionality in this library by implementing the methods in classes: `UABinaryDecoderImplementation` and `UABinaryEncoderImplementation`. ## Running tests The library is not Unit Tested. ## See also - [Reference Application Graphical User Interface](../ReferenceApplication/README.MD) - [Reference Application Consumer - Data Logger](../DataRepository/DataLogger/README.md) - [Reference Application Producer - Interoperability Test Data Generator](../SimulatorInteroperabilityTest/README.md) ================================================ FILE: Networking/Encoding/README.nupkg.md ================================================ # Encoding Library ## Getting Started This library is a loosely coupled part of the `ReferenceApplication` described in the document [Walk-through ReferenceApplication](https://commsvr.gitbook.io/ooi/reactive-communication/referenceapplication). The main purpose of this library is the interoperability testing and diagnostic. Check out the `Source repository` to get detailed description. It provides `UAOOI.Networking.SemanticData.IEncodingFactory` implementation in the class `EncodingFactoryBinarySimple`. Using this implementation the library can encode/decode only simple data types. The `ReferenceApplication` uses implementation of this class for late binding to inject dependency on the encoding functionality. The implementation of the `UAOOI.Networking.SemanticData.Encoding.IUADecoder` interface is provided by the `UABinaryDecoderImplementation`. The implementation of the `UAOOI.Networking.SemanticData.Encoding.IUAEncoder` interface is provided in the `UABinaryEncoderImplementation`; This `UpdateValueConverter` method is responsible to lookup a dictionary containing value converters and if any assigns it to `IBinding.Converter` property. This library may be easily replaced by a custom one - change the composition contract in: - `UAOOI.Networking.DataLogger.LoggerManagementSetup` - `UAOOI.Networking.SimulatorInteroperabilityTest.SimulatorDataManagementSetup` ================================================ FILE: Networking/Encoding/UABinaryDecoderImplementation.cs ================================================  using System; using System.Xml; using UAOOI.Networking.SemanticData.Encoding; namespace UAOOI.Networking.Encoding { /// /// Class UABinaryDecoderImplementation - limited implementation of the for the testing purpose only. /// internal class UABinaryDecoderImplementation : UABinaryDecoder { /// /// If implemented by a derived class reads an instance of from UA Binary encoded stream. /// /// The decoder to be used to read form the stream. /// The decoded from the UA binary stream of bytes. /// public override IDataValue ReadDataValue(IBinaryDecoder decoder) { throw new NotImplementedException(); } /// /// If implemented by a derived class reads an instance of from UA Binary encoded stream. /// /// The decoder to be used to read form the stream. /// The decoded from the UA binary stream of bytes. /// public override IDiagnosticInfo ReadDiagnosticInfo(IBinaryDecoder decoder) { throw new NotImplementedException(); } /// /// If implemented by a derived class reads an instance of from UA Binary encoded stream. /// /// The decoder to be used to read form the stream. /// The decoded from the UA binary stream of bytes. /// public override IExpandedNodeId ReadExpandedNodeId(IBinaryDecoder decoder) { throw new NotImplementedException(); } /// /// If implemented by a derived class reads an instance of from UA Binary encoded stream. /// /// The decoder to be used to read form the stream. /// The decoded from the UA binary stream of bytes. /// public override IExtensionObject ReadExtensionObject(IBinaryDecoder decoder) { throw new NotImplementedException(); } /// /// If implemented by a derived class reads an instance of from UA Binary encoded stream. /// /// The decoder to be used to read form the stream. /// The decoded from the UA binary stream of bytes. /// public override ILocalizedText ReadLocalizedText(IBinaryDecoder decoder) { throw new NotImplementedException(); } /// /// If implemented by a derived class reads an instance of from UA Binary encoded stream. /// /// The decoder to be used to read form the stream. /// The decoded from the UA binary stream of bytes. /// public override INodeId ReadNodeId(IBinaryDecoder decoder) { throw new NotImplementedException(); } /// /// If implemented by a derived class reads an instance of from UA Binary encoded stream. /// /// The decoder to be used to read form the stream. /// The decoded from the UA binary stream of bytes. /// public override IQualifiedName ReadQualifiedName(IBinaryDecoder decoder) { throw new NotImplementedException(); } /// /// If implemented by a derived class reads an instance of from UA Binary encoded stream. /// /// The decoder to be used to read form the stream. /// The decoded from the UA binary stream of bytes. /// public override IStatusCode ReadStatusCode(IBinaryDecoder decoder) { throw new NotImplementedException(); } /// /// If implemented by a derived class reads an instance of from UA Binary encoded stream. /// /// The decoder to be used to read form the stream. /// The decoded from the UA binary stream of bytes. /// public override XmlElement ReadXmlElement(IBinaryDecoder decoder) { throw new NotImplementedException(); } } } ================================================ FILE: Networking/Encoding/UABinaryEncoderImplementation.cs ================================================  using System; using System.Xml; using UAOOI.Networking.SemanticData.Encoding; namespace UAOOI.Networking.Encoding { /// /// Class UABinaryEncoderImplementation - limited implementation of the for the testing purpose only. /// internal class UABinaryEncoderImplementation : UABinaryEncoder { /// /// Writes using the provided encoder . /// /// The encoder - an object implementing the interface. /// The value to be encoded. /// public override void Write(IBinaryEncoder encoder, IDataValue value) { throw new NotImplementedException(); } /// /// Writes using the provided encoder . /// /// The encoder - an object implementing the interface. /// The value to be encoded. /// public override void Write(IBinaryEncoder encoder, IDiagnosticInfo value) { throw new NotImplementedException(); } /// /// Writes using the provided encoder . /// /// The encoder - an object implementing the interface. /// The value to be encoded. /// public override void Write(IBinaryEncoder encoder, IExpandedNodeId value) { throw new NotImplementedException(); } /// /// Writes using the provided encoder . /// /// The encoder - an object implementing the interface. /// The value to be encoded. /// public override void Write(IBinaryEncoder encoder, IExtensionObject value) { throw new NotImplementedException(); } /// /// Writes using the provided encoder . /// /// The encoder - an object implementing the interface. /// The value to be encoded. /// public override void Write(IBinaryEncoder encoder, ILocalizedText value) { throw new NotImplementedException(); } /// /// Writes using the provided encoder . /// /// The encoder - an object implementing the interface. /// The value to be encoded. /// public override void Write(IBinaryEncoder encoder, INodeId value) { throw new NotImplementedException(); } /// /// Writes using the provided encoder . /// /// The encoder - an object implementing the interface. /// The value to be encoded. /// public override void Write(IBinaryEncoder encoder, IQualifiedName value) { throw new NotImplementedException(); } /// /// Writes using the provided encoder . /// /// The encoder - an object implementing the interface. /// The value to be encoded. /// public override void Write(IBinaryEncoder encoder, IStatusCode value) { throw new NotImplementedException(); } /// /// Writes using the provided encoder . /// /// The encoder - an object implementing the interface. /// The value to be encoded. /// public override void Write(IBinaryEncoder encoder, XmlElement value) { throw new NotImplementedException(); } } } ================================================ FILE: Networking/NetworkingCodeMap.dgml ================================================  ================================================ FILE: Networking/README.MD ================================================ # Internet of Things (IoT) Communication ## Introduction This folder contains library empowering the Industrial Internet of Things \(IIOT\) and Industry 4.0. as the result of using reactive networking paradigm. Intentionally it is designed on top of OPC UA Part 14 Pub/Sub protocol supporting interoperability with any product compliant with this specification. Seamless integration with AMQP, MQTT, etc. allows meaningful data transfer in the context of semantics defined using OPC UA Information Model. ## Goals Main goals of this document are: * description of the IoT and the main difference between OPC UA client-server model and Object Oriented Internet Reactive Networking. * description how this project addresses the IoT paradigms, * instruction on how to build commercial products, * instruction on how to integrate the proposed solution with other existing on the marked, i.e. AMQP, MQTT, etc. ## Projects This [folder](https://github.com/mpostol/OPC-UA-OOI/tree/master/Networking) contains the projects in concern. ## IoT paradigms description The starting point for this description is available at: [IoT versus SCADA/DCS Data Acquisition Patterns](https://mpostol.wordpress.com/2017/09/19/iot-versus-scadadcs/) ## Scope * description of **IoT/IIoT** paradigms. * Object Oriented Internet Networking is empowering the Industrial Internet of Things \(IIOT\) and Industries 4.0. * The role of MQTT and AMQP - How to get them together in a consistent meaningful way. ## How to get started The latest [release](https://github.com/mpostol/OPC-UA-OOI/releases) contains the ready to use binaries of the `ReferenceApplication`. Unzip it and run `.exe` file to get started. ================================================ FILE: Networking/README.MessageCentricCommunication.md ================================================ # Semantic-Data Message Centric Communication To realize the [Semantic-Data](../SemanticData/README.MD) paradigm in practice `OOI Reactive Application` must get access to the data in the context of type definition in compliance with the OPC UA *Information Model*. This article summarizes research on the architecture of infrastructure supporting access to the data using a *Message Centric* communication pattern. The proposed architecture is presented in the following figure. ![Domain Model](../CommonResources//Media/MessageCentricCommunication.Domain.png) The architecture contains the following classes directly involved in the data processing: 1. `OOI Reactive Application` - a program application that processes OPC UA Data available out of band, i.e. without the necessity of creating an OPC UA session. 2. `UA Client` - a program application that processes OPC UA Data available throughout the created OPC UA session using standard services. 3. `UA Server Services` - a typical part of any OPC UA server that provides standard services. 4. `Address Space Management` - a typical part of any OPC UA server that manages the nodes in the *Address Space*. `OOI Reactive Application` is an application program processing the data in the context of the OPC UA metadata outside the OPC UA server session. In the presented architecture it gets access to the **Semantic-Data** using the underlying **Transport** supporting networking services compliant with the *Message Centric* communication pattern standardized in [OPC Unified Architecture Specification Part 14 PubSub](https://opcfoundation.org/developer-tools/specifications-unified-architecture/part-14-pubsub/). As opposed to OPC UA *Session Centric* communication the **Transport** by design is not responsible for distributing type definitions at run time. To realize the **UA Semantic Data** paradigm, the data sent over the network must, therefore, be decorated with an unique identifier to find the context prepared in advance against the type definition (semantics), e.g. a picture to display the data, an algorithm to calculate new values, a key to encrypt the message payload, etc. For example, `OOI Reactive Application` may be any remote mobile device according to the *Internet of Things* architecture concept, interested in publishing process data using the remote OPC UA server. It's even possible to connect household appliances, sensors and other devices to a central application. For example, it could browse a message broker (**Transport**) against defined topics, like a definition, that represent data to be published in the OPC UA *Address Space*. For example, IEC61850-enabled IEDs that get digitalized power grid condition data via process bus and merge units. **UA Server Services** class is an embedded part of any OPC UA server. **UA Server Services** shall be compliant with OPC UA Specification Part 4, i.e. it must be tested against interoperability for selected standard profile. **Address Space Management** is also a typical part of any OPC UA server. It is responsible for creation and management of the OPC UA *Address Space*. Optionally, the server *Address Space* could expose *Information Models* defined by companion specifications, organizations and users. To leverage [processing of the OPC UA Data outside the OPC UA session](../SemanticData/README.MD#opc-ua-data-processing-outside-the-server) using data networking, the above mentioned classes shall support *Message Centric* data exchange pattern using a selected underlying network transport. In this case, the following additional optional roles may be considered for them: 1. Data producer: supported by the writer component populating the messages with the locally obtained data and sending them over the underlying network **Transport**. 2. Data consumer: supported by the reader component receiving messages from the network **Transport** and recovering the UA Data from the messages. To promote interoperability it has to be assumed that producers and consumers must be compliant with an industrial standard. It is proposed to meet this requirement applying the emerging [OPC UA Standard Part 14 PubSub](https://opcfoundation.org/developer-tools/specifications-unified-architecture/part-14-pubsub/). The possibility of implementing `Semantic-Data` networking according to the presented architecture may be recognized as a proof of concept for that standard. Interoperability rules must create a common foundation for: 1. Messages encoding, decoding and protecting against malicious users. 2. Association of the data with the data meaning – semantics. Encoding means that data is represented as a stream of bits according to selected data type, for example long, float, string, structure, etc. Semantic rules are used to find an appropriate semantics context (object type definition) for further processing, for example recognize the data as an output temperature of a boiler. The **UA Server Writer** (data producer role) and **UA Server Reader** (data consumer role) may support out of band interconnection of the nodes exposed in the *Address Space* and applications using the *Message Centric* communication pattern. In this context out of band means that the applications do not need to establish a session to exchange data. The data is distributed by transmitting messages over the underlying **Transport**. Data exchange between nodes in the *Address Space* and *Message Centric* environment resembles the data exchange with the underlying process using a field level protocol, for example Modbus. The main difference is that from the process perspective (not shown in the figure above) any new value of a *Variable* node is usually injected into the process as a new control value with the purpose of changing its behavior. From the networking perspective, values representing measurements and control signals are treated equally. The **UA Client Writer** (data producer role) and **UA Client Reader** (data consumer role) associated with the OPC **UA Client** may be used to create a communication bridge between *Session Centric* and *Message Centric* environments. In the presented architecture OPC **UA Client** is a functional class that shall be compliant with OPC UA Specification Part 4. In the bridge scenario data may, additionally, be converted to different syntax and semantics rules leveraging integration of different Industrial IT systems. The main advantage of this archetype is its passive nature, i.e. the possibility of using it in the existing environment. The **UA Message Writer** (data producer role) and **UA Message Reader** (data consumer role) writes and reads messages from the underlying **Transport**. It is assumed that messages contain current values of the selected *Variable* nodes exposed by an OPC UA server in the *Address Space*. It is worth noting that data meaning, i.e. data semantics, but not where the data come from, is the most important thing in this processing scenario. The **UA Message Reader** by design is responsible for recovering the information from the message and matching appropriate context for further processing. This operation is called process data binding. To make the data recognizable in the context of a definition in the selected OPC UA *Information Model*, the **UA Message Writer** by design is responsible for decorating the populated message using local data with a definition identifier. Using the information, for example, the **UA Server Reader** associates the *Variable* nodes and data items recovered from the message. The main role of the **Transport** layer is to transfer messages containing OPC UA data from the source to ultimate destination node. The following communication patterns can be applied: * Publish-subscribe (PubSub): senders of messages, called publishers, do not program the messages to be sent directly to specific receivers (no direct addressing, alternatively topics/threads/queues are used), called subscribers. * Forwarding: senders directly address a receiver (unicasting) or receivers (multicasting) of the message. If a receiver has not requested the message in advance it is unsolicited communication. Simplifying, the PubSub pattern resembles RSS, while forwarding resembles an email. ================================================ FILE: Networking/ReferenceApplication/App.BilersSet.xml ================================================ 
ConfigurationEditor\UAOOI.Configuration.DataBindings.dll 4840 localhost 4840 239.255.255.1 False True ConfigurationDataConsumer.BoilersSet.xml UAOOI.Networking.UDPMessageHandler.dll ReferenceApplication.log ConfigurationDataProducer.BoilersSet.xml UAOOI.Networking.Simulator.Boiler.dll C1F53FFB-6552-4CCC-84C9-F847147CDC85 d80d81dd-96e6-4560-850e-154f9181307c ConfigurationDataConsumer.xml ConfigurationDataProducer.xml ================================================ FILE: Networking/ReferenceApplication/App.config ================================================ 
ConfigurationEditor\UAOOI.Configuration.DataBindings.dll 4840 localhost 4840 239.255.255.1 False True ConfigurationDataConsumer.xml UAOOI.Networking.UDPMessageHandler.dll ReferenceApplication.log ConfigurationDataProducer.xml UAOOI.Networking.SimulatorInteroperabilityTest.dll C1F53FFB-6552-4CCC-84C9-F847147CDC85 d80d81dd-96e6-4560-850e-154f9181307c ConfigurationDataConsumer.xml ConfigurationDataProducer.xml ================================================ FILE: Networking/ReferenceApplication/App.xaml ================================================ ================================================ FILE: Networking/ReferenceApplication/App.xaml.cs ================================================  using System.Windows; using UAOOI.Networking.ReferenceApplication.Properties; namespace UAOOI.Networking.ReferenceApplication { /// /// Interaction logic for App.xaml /// public partial class App : Application { /// /// Handles the Startup event of the App control. /// /// The source of the event. /// The instance containing the event data. private void App_Startup(object sender, StartupEventArgs e) { m_Bootstrapper.Run(); } /// /// Handles the Exit event of the App control. /// /// The source of the event. /// The instance containing the event data. private void App_Exit(object sender, ExitEventArgs e) { m_Bootstrapper.Dispose(); Settings.Default.Save(); } AppBootstrapper m_Bootstrapper = new AppBootstrapper(); } } ================================================ FILE: Networking/ReferenceApplication/AppBootstrapper.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2020, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using Microsoft.Practices.EnterpriseLibrary.SemanticLogging; using System; using System.Collections.Generic; using System.ComponentModel.Composition.Hosting; using System.Diagnostics; using System.Reactive.Disposables; using System.Windows; using UAOOI.Networking.DataRepository.DataLogger; using UAOOI.Networking.ReferenceApplication.Core; using UAOOI.Networking.ReferenceApplication.Core.Diagnostic; using UAOOI.Networking.ReferenceApplication.MEF; using UAOOI.Networking.ReferenceApplication.Properties; namespace UAOOI.Networking.ReferenceApplication { internal class AppBootstrapper : MefBootstrapper { #region MefBootstrapper /// /// Run the bootstrapper process. /// /// if set to true run with default configuration. public override void Run(bool runWithDefaultConfiguration) { base.Run(runWithDefaultConfiguration); } protected override void ConfigureContainer() { base.ConfigureContainer(); this.AggregateCatalog.Catalogs.Add(new AssemblyCatalog(Settings.Default.MessageHandlerProvider)); this.AggregateCatalog.Catalogs.Add(new AssemblyCatalog(Settings.Default.DataProducerProvider)); } /// /// Initializes the shell. /// /// The base implementation ensures the shell is composed in the container. protected override void InitializeShell() { base.InitializeShell(); Application.Current.MainWindow = (MainWindow)this.Shell; Application.Current.MainWindow.Show(); } /// /// Creates the shell or main window of the application. /// /// The shell of the application as an exported instance of the protected override DependencyObject CreateShell() { return this.Container.GetExportedValue(); } protected override void OnInitialized() { try { base.OnInitialized(); m_EventSourceBootstrapper = Container.GetExportedValue(); m_EventSourceBootstrapper.Run(EventEntry => m_Log.Add(EventEntry)); ReferenceApplicationEventSource.Log.StartingApplication(Settings.Default.MessageHandlerProvider); LoggerManagementSetup m_ConsumerConfigurationFactory = Container.GetExportedValue(); m_ConsumerConfigurationFactory.Setup(); m_Components.Add(m_ConsumerConfigurationFactory); ReferenceApplicationEventSource.Log.PartCreated(nameof(LoggerManagementSetup)); IDataRepositoryStartup m_Producer = Container.GetExportedValue(); m_Producer.Setup(); m_Components.Add(m_Producer); ReferenceApplicationEventSource.Log.PartCreated(nameof(IDataRepositoryStartup)); } catch (Exception _ex) { ReferenceApplicationEventSource.Log.EnteringMethod(nameof(AppBootstrapper), $"{nameof(AppBootstrapper)} at catch (Exception _ex)"); ReferenceApplicationEventSource.Log.LogException(_ex); throw; } } #endregion MefBootstrapper #region IDisposable protected override void Dispose(bool disposing) { try { ReferenceApplicationEventSource.Log.EnteringDispose(nameof(AppBootstrapper.Dispose), disposing); m_Components.Dispose(); base.Dispose(disposing); //to keep logging it must be disposed as the last operation. m_EventSourceBootstrapper.Dispose(); Logger.TraceData(TraceEventType.Information, 86, $"{nameof(AppBootstrapper.Dispose)} has been accomplished successfully."); } catch (Exception _ex) { MasterTraceException(_ex, false); } } private void MasterTraceException(Exception ex, bool inner) { if (ex == null) throw new ArgumentNullException(nameof(ex), $"Calling {nameof(MasterTraceException)} with null exception doesn't make sense."); string _innerText = inner ? "inner" : ""; Logger.TraceData(TraceEventType.Information, 86, $"During {nameof(AppBootstrapper.Dispose)} an {_innerText} exeption been thrown: {ex.ToString()}."); if (ex.InnerException == null) return; MasterTraceException(ex.InnerException, true); } #endregion IDisposable #region private private List m_Log = new List(); private CompositeDisposable m_Components = new CompositeDisposable(); private EventSourceBootstrapper m_EventSourceBootstrapper; private static void AppDomainUnhandledException(object sender, UnhandledExceptionEventArgs e) { ReferenceApplicationEventSource.Log.EnteringMethod(nameof(AppBootstrapper), nameof(AppDomainUnhandledException)); Exception _ex = e.ExceptionObject as Exception; ReferenceApplicationEventSource.Log.LogException(_ex); HandleException(_ex); } private static void HandleException(Exception ex) { if (ex == null) return; MessageBox.Show(Properties.Resources.UnhandledException, "Unhandled Exception", MessageBoxButton.OK, MessageBoxImage.Error); Environment.Exit(1); } #endregion private } } ================================================ FILE: Networking/ReferenceApplication/ApplicationSettings.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2018, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System.ComponentModel.Composition; using UAOOI.Networking.DataRepository.DataLogger; using UAOOI.Networking.ReferenceApplication.Core; namespace UAOOI.Networking.ReferenceApplication { [Export] [PartCreationPolicy(CreationPolicy.Shared)] public class ApplicationSettings { [Export(CompositionSettings.ConfigurationFileNameContract)] public string ProducerConfigurationFileName => Properties.Settings.Default.ProducerConfigurationFileName; [Export(ConsumerCompositionSettings.ConfigurationFileNameContract)] public string ConsumerConfigurationFileName => Properties.Settings.Default.ConsumerConfigurationFileName; } } ================================================ FILE: Networking/ReferenceApplication/ConfigurationEditor/Readme.txt ================================================ It is place holder of the configuration editor. Configuration editor is an assembly implementing CAS.UA.IServerConfiguration.IConfiguration The definition is provided by the package: For example this interface is implemented by the class UAOOI.Configuration.DataBindings.UANetworkingConfigurationEditor ================================================ FILE: Networking/ReferenceApplication/Consumer/DataLoggerViewModel.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2020, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System.Collections.ObjectModel; using System.ComponentModel.Composition; using System.Windows; using System.Windows.Threading; using UAOOI.Networking.DataRepository.DataLogger; namespace UAOOI.Networking.ReferenceApplication.Consumer { [Export(ConsumerCompositionSettings.ViewModelContract, typeof(ConsumerViewModel))] internal class DataLoggerViewModel : ConsumerViewModel { #region ViewModel public ObservableCollection ConsumerLog { get => b_ConsumerLog; set { b_ConsumerLog = value; RaisePropertyChanged>("ConsumerLog", b_ConsumerLog, value); } } #endregion ViewModel #region private /// /// Add the message to the . /// /// The message to be added to the log . protected override void Trace(string message) { Application.Current.Dispatcher.Invoke(() => ConsumerLog.Insert(0, message), DispatcherPriority.Normal); } private ObservableCollection b_ConsumerLog = new ObservableCollection(); #endregion private } } ================================================ FILE: Networking/ReferenceApplication/Controls/ConfigurationEditorOpenCommand.cs ================================================  using System; using System.Diagnostics; using System.IO; using System.Reflection; using System.Windows; using System.Windows.Input; using UAOOI.Configuration.Core; namespace UAOOI.Networking.ReferenceApplication.Controls { /// /// Class ConfigurationEditorOpenCommand - Implements open an external configuration editor. /// If external editor cannot be found associated process is executed. /// /// public class ConfigurationEditorOpenCommand : ICommand { /// /// Initializes a new instance of the class. /// /// Name of the file to be edited. /// Delegate capturing functionality to go back to the caller and collect information if and where the modified configuration is to be saved. /// If the function return null the save operation must be skipped. public ConfigurationEditorOpenCommand(string fileName, Func saveResponse) { m_FileName = fileName; m_SaveResponse = saveResponse; } #region ICommand /// /// Occurs when changes occur that affect whether or not the command should execute. /// public event EventHandler CanExecuteChanged; /// /// Defines the method that determines whether the command can execute in its current state. /// /// Data used by the command. If the command does not require data to be passed, this object can be set to null. /// true if this command can be executed; otherwise, false. public bool CanExecute(object parameter) { return true; } /// /// Defines the method to be called when the command is invoked. /// /// Data used by the command. If the command does not require data to be passed, this object can be set to null. public void Execute(object parameter) { string _filePath = string.Empty; IConfiguration _editor = null; try { string _assemblyLocatioen = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); _filePath = Path.Combine(_assemblyLocatioen, m_FileName); FileInfo _configurationFileInfo = new FileInfo(_filePath); if (!_configurationFileInfo.Exists) throw new FileNotFoundException(); string _editorPath = Path.Combine(_assemblyLocatioen, Properties.Settings.Default.ConfigurationEditorPlugInFilePath); FileInfo _editorFileInfo = new FileInfo(_editorPath); if (_editorFileInfo.Exists) _editor = CreateInstance(_editorFileInfo); if (_editor != null) { bool _configurationChanged = false; _editor.ReadConfiguration(_configurationFileInfo); _editor.OnModified += (x, y) => _configurationChanged = true; _editor.EditConfiguration(); if (_configurationChanged) { FileInfo _res = m_SaveResponse(_configurationFileInfo); if (_res != null) _editor.SaveConfiguration(String.Empty, _res); } } else using (Process process = Process.Start(_filePath)) { } } catch (Exception _ex) { MessageBox.Show($"An error occurs during opening the file {_filePath}. Error message: {_ex}", "Problem with opening a file !", MessageBoxButton.OK, MessageBoxImage.Error); return; } finally { IDisposable _toDispose = _editor as IDisposable; if (_toDispose != null) _toDispose.Dispose(); } } #endregion #region private private string m_FileName; private Func m_SaveResponse; private static IConfiguration CreateInstance(FileInfo assemblyFile) { Assembly _pluginAssembly = Assembly.LoadFrom(assemblyFile.FullName); IConfiguration _serverConfiguration; string iName = typeof(IConfiguration).ToString(); _serverConfiguration = null; foreach (Type pluginType in _pluginAssembly.GetExportedTypes()) //Only look at public types if (pluginType.IsPublic && !pluginType.IsAbstract && pluginType.GetInterface(iName) != null) { _serverConfiguration = (IConfiguration)Activator.CreateInstance(pluginType); break; } return _serverConfiguration; } #endregion } } ================================================ FILE: Networking/ReferenceApplication/Controls/INotification.cs ================================================ namespace UAOOI.Networking.ReferenceApplication.Controls { /// /// Represents an interaction request used for notifications. /// public interface INotification { /// /// Gets or sets the content of the notification. /// /// The content of the interaction control. object Content { get; set; } /// /// Gets or sets the title to use for the notification. /// /// The title of the interaction control. string Title { get; set; } } } ================================================ FILE: Networking/ReferenceApplication/Controls/InteractionRequestedEventArgs.cs ================================================ using System; namespace UAOOI.Networking.ReferenceApplication.Controls { // // Summary: // Event args for the Prism.Interactivity.InteractionRequest.IInteractionRequest.Raised // event. public class InteractionRequestedEventArgs : EventArgs { // // Summary: // Constructs a new instance of Prism.Interactivity.InteractionRequest.InteractionRequestedEventArgs // // Parameters: // context: // // callback: public InteractionRequestedEventArgs(INotification context, Action callback) { Callback = callback; Context = context; } // // Summary: // Gets the callback to execute when an interaction is completed. public Action Callback { get; } // // Summary: // Gets the context for a requested interaction. public INotification Context { get; } } } ================================================ FILE: Networking/ReferenceApplication/Controls/OpenFileCommand.cs ================================================  using System; using System.Diagnostics; using System.IO; using System.Reflection; using System.Windows; using System.Windows.Input; namespace UAOOI.Networking.ReferenceApplication.Controls { /// /// Class OpenFileCommand - open selected file using external /// /// public class OpenFileCommand : ICommand { /// /// Initializes a new instance of the class. /// /// Name of the file. public OpenFileCommand(string fileName) { m_FileName = fileName; } #region ICommand /// /// Occurs when changes occur that affect whether or not the command should execute. /// public event EventHandler CanExecuteChanged; /// /// Defines the method that determines whether the command can execute in its current state. /// /// Data used by the command. If the command does not require data to be passed, this object can be set to null. /// true if this command can be executed; otherwise, false. public bool CanExecute(object parameter) { return true; } /// /// Defines the method to be called when the command is invoked. /// /// Data used by the command. If the command does not require data to be passed, this object can be set to null. public void Execute(object parameter) { string path = string.Empty; try { path = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); using (Process process = Process.Start(Path.Combine(path, m_FileName))) { } } catch (Exception _ex) { MessageBox.Show($"An error occurs during opening the file {path}. Error message: {_ex}", "Problem with opening a file !", MessageBoxButton.OK, MessageBoxImage.Error); return; } } #endregion #region private private string m_FileName; #endregion } } ================================================ FILE: Networking/ReferenceApplication/MEF/BootstrapperBase.cs ================================================  using System.Windows; using CommonServiceLocator; using UAOOI.Common.Infrastructure.Diagnostic; namespace UAOOI.Networking.ReferenceApplication.MEF { /// /// Base class that provides a basic bootstrapping sequence and hooks that specific implementations can override. /// /// /// This class must be overridden to provide application specific configuration. /// public abstract class BootstrapperBase { /// /// Runs the bootstrapper process. /// public void Run() { this.Run(true); this.OnInitialized(); } /// /// Run the bootstrapper process. /// /// If true registers default Library services in the container. This is the default behavior. /// public abstract void Run(bool runWithDefaultConfiguration); /// /// Gets the current for the application. /// /// A instance. protected ITraceSource Logger { get; set; } = null; /// /// Gets the shell user interface /// /// The shell user interface. protected DependencyObject Shell { get; set; } = null; /// /// Create the used by the bootstrapper. /// /// /// The base implementation returns a new . /// protected virtual ITraceSource CreateLogger() { return new TraceSourceBase(); } /// /// Registers the s of the Exceptions that are not considered /// root exceptions by the . /// protected virtual void RegisterFrameworkExceptionTypes() { ExceptionExtensions.RegisterFrameworkExceptionType(typeof(ActivationException)); } /// /// Creates the shell or main window of the application. /// /// The shell of the application as an instance of the protected virtual DependencyObject CreateShell() { return null; } /// /// Initializes the shell. /// protected virtual void InitializeShell() { } /// /// Contains actions that should occur last. /// protected virtual void OnInitialized() { } } } ================================================ FILE: Networking/ReferenceApplication/MEF/DefaultServiceRegistrar.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2018, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System.Collections.Generic; using System.ComponentModel.Composition.Hosting; using System.ComponentModel.Composition.Primitives; using System.Reflection; using UAOOI.Networking.DataRepository.DataLogger; using UAOOI.Networking.Encoding; using UAOOI.Networking.ReferenceApplication.Core.Diagnostic; using UAOOI.Networking.SemanticData; namespace UAOOI.Networking.ReferenceApplication.MEF { internal static class DefaultServiceRegistrar { /// /// Registers the required services. /// /// The additional catalog to be considered for composition. /// An instance of . public static AggregateCatalog RegisterServices(ComposablePartCatalog additionalCatalog) { List _catalog = GetDefaultComposablePartCatalog(); if (additionalCatalog != null) _catalog.Add(additionalCatalog); return new AggregateCatalog(_catalog); } private static List GetDefaultComposablePartCatalog() { return new List(new ComposablePartCatalog[] { new AssemblyCatalog(Assembly.GetAssembly(typeof(AppBootstrapper))), new AssemblyCatalog(Assembly.GetAssembly(typeof(NetworkingEventSourceProvider))), new AssemblyCatalog(Assembly.GetAssembly(typeof(DataManagementSetup))), new AssemblyCatalog(Assembly.GetAssembly(typeof(EncodingFactoryBinarySimple))), new AssemblyCatalog(Assembly.GetAssembly(typeof(ConsumerCompositionSettings))), } ); } } } ================================================ FILE: Networking/ReferenceApplication/MEF/EventSourceBootstrapper.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2020, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using Microsoft.Practices.EnterpriseLibrary.SemanticLogging; using Microsoft.Practices.EnterpriseLibrary.SemanticLogging.Sinks; using System; using System.Collections.Generic; using System.ComponentModel.Composition; using System.Diagnostics.Tracing; using System.Linq; using System.Reactive.Concurrency; using System.Reactive.Disposables; using System.Reactive.Linq; using UAOOI.Networking.Core; using UAOOI.Networking.ReferenceApplication.Core.Diagnostic; namespace UAOOI.Networking.ReferenceApplication.MEF { [Export(typeof(EventSourceBootstrapper))] public class EventSourceBootstrapper : IDisposable { #region composition [ImportMany(typeof(INetworkingEventSourceProvider))] public IEnumerable EventSources { get; set; } #endregion composition #region API internal void Run(Action action) { CompositeDisposable _listenersDisposable = new CompositeDisposable(); if (EventSources != null) foreach (INetworkingEventSourceProvider _eventSources in EventSources) { ObservableEventListener _newEventListener = new ObservableEventListener(); _newEventListener.EnableEvents(_eventSources.GetPartEventSource(), EventLevel.LogAlways, Keywords.All); _listenersDisposable.Add(_newEventListener); } if (_listenersDisposable.Count == 0) return; IObservable _last = _listenersDisposable.Cast>().Merge(); m_FileSubscription = _last.ObserveOn(Scheduler.Default).Do(action).LogToFlatFile(Properties.Settings.Default.LogFilePath); } #endregion API #region IDisposable Support private bool disposedValue = false; // To detect redundant calls protected virtual void Dispose(bool disposing) { if (disposedValue) return; ReferenceApplicationEventSource.Log.EnteringDispose(nameof(EventSourceBootstrapper), disposing); if (disposing) { m_FileSubscription?.Sink.FlushAsync(); m_FileSubscription?.Dispose(); m_FileSubscription = null; } disposedValue = true; } // This code added to correctly implement the disposable pattern. public void Dispose() { // Do not change this code. Put cleanup code in Dispose(bool disposing) above. Dispose(true); } #endregion IDisposable Support #region private private SinkSubscription m_FileSubscription; #endregion private } } ================================================ FILE: Networking/ReferenceApplication/MEF/ExceptionExtensions.cs ================================================  using System; using System.Collections.Generic; namespace UAOOI.Networking.ReferenceApplication.MEF { /// /// Class that provides extension methods for the Exception class. These extension methods provide /// a mechanism for developers to get more easily to the root cause of an exception, especially in combination with /// DI-containers such as Unity. /// internal static class ExceptionExtensions { /// /// Register the type of an Exception that is thrown by the framework. The method uses /// this list of Exception types to find out if something has gone wrong. /// /// The type of exception to register. public static void RegisterFrameworkExceptionType(Type frameworkExceptionType) { if (frameworkExceptionType == null) throw new ArgumentNullException(nameof(frameworkExceptionType)); if (!m_FrameworkExceptionTypes.Contains(frameworkExceptionType)) m_FrameworkExceptionTypes.Add(frameworkExceptionType); } /// /// Determines whether the exception type is already registered using the /// method /// /// The type of framework exception to find. /// /// true if the exception type is already registered; otherwise, false. /// public static bool IsFrameworkExceptionRegistered(Type frameworkExceptionType) { return m_FrameworkExceptionTypes.Contains(frameworkExceptionType); } /// /// Looks at all the inner exceptions of the parameter to find the /// most likely root cause of the exception. This works by skipping all registered exception types. /// /// /// This method is not 100% accurate and should only be used to point a developer into the most likely direction. /// It should not be used to replace the Inner Exception stack of an exception, because this might hide required exception /// information. /// /// The exception that will provide the list of inner exceptions to examine. /// /// The exception that most likely caused the exception to occur. If it can't find the root exception, it will return the /// value itself. /// [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes", Justification = "We have to catch exception. This method is used in exception handling code, so it must not fail.")] public static Exception GetRootException(this Exception exception) { Exception _rootException = exception; try { while (true) { if (_rootException == null) { _rootException = exception; break; } if (!IsFrameworkException(_rootException)) break; _rootException = _rootException.InnerException; } } catch (Exception) { _rootException = exception; } return _rootException; } #region private private static List m_FrameworkExceptionTypes = new List(); private static bool IsFrameworkException(Exception exception) { bool _isFrameworkException = m_FrameworkExceptionTypes.Contains(exception.GetType()); bool _childIsFrameworkException = false; if (exception.InnerException != null) _childIsFrameworkException = m_FrameworkExceptionTypes.Contains(exception.InnerException.GetType()); return _isFrameworkException || _childIsFrameworkException; } #endregion } } ================================================ FILE: Networking/ReferenceApplication/MEF/MefBootstrapper.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2020, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using CommonServiceLocator; using System; using System.ComponentModel.Composition; using System.ComponentModel.Composition.Hosting; using System.Diagnostics; using UAOOI.Common.Infrastructure.Diagnostic; using UAOOI.Networking.ReferenceApplication.Core.Diagnostic; namespace UAOOI.Networking.ReferenceApplication.MEF { internal abstract class MefBootstrapper : BootstrapperBase, IDisposable { #region BootstrapperBase /// /// Run the bootstrapper process. /// public override void Run(bool runWithDefaultConfiguration) { this.Logger = this.CreateLogger(); if (this.Logger == null) throw new InvalidOperationException("Null Logger Exception"); this.Logger.TraceData(TraceEventType.Verbose, 33, "Logger Was Created Successfully"); this.Logger.TraceData(TraceEventType.Verbose, 33, "Creating Catalog For MEF"); this.AggregateCatalog = this.CreateAggregateCatalog(); this.Logger.TraceData(TraceEventType.Verbose, 33, "Configuring Catalog For MEF"); this.ConfigureAggregateCatalog(); this.Logger.TraceData(TraceEventType.Verbose, 33, "Register Default Types If Missing"); this.RegisterDefaultTypesIfMissing(); this.Logger.TraceData(TraceEventType.Verbose, 33, "Creating Mef Container"); this.Container = this.CreateContainer(); if (this.Container == null) throw new InvalidOperationException("Null Composition Container Exception"); this.Logger.TraceData(TraceEventType.Verbose, 33, "Configuring Mef Container"); this.ConfigureContainer(); this.Logger.TraceData(TraceEventType.Verbose, 33, "Configuring Service Locator Singleton"); this.ConfigureServiceLocator(); this.Logger.TraceData(TraceEventType.Verbose, 33, "Registering Framework Exception Types"); this.RegisterFrameworkExceptionTypes(); this.Logger.TraceData(TraceEventType.Verbose, 33, "Creating Shell"); this.Shell = this.CreateShell(); this.Logger.TraceData(TraceEventType.Verbose, 33, "Initializing Shell"); this.InitializeShell(); this.Logger.TraceData(TraceEventType.Verbose, 33, "Bootstrapper Sequence Completed"); } /// /// Configures the . /// /// /// The base implementation also sets the ServiceLocator provider singleton. /// protected void ConfigureServiceLocator() { IServiceLocator _serviceLocator = this.Container.GetExportedValue(); ServiceLocator.SetLocatorProvider(() => _serviceLocator); } #endregion #region private /// /// Gets or sets the default for the application. /// /// The default instance. protected AggregateCatalog AggregateCatalog { get; private set; } /// /// Gets the default for the application. /// /// The default instance. protected CompositionContainer Container { get; private set; } /// /// Configures the used by MEF. /// /// /// The base implementation returns a new AggregateCatalog. /// /// An to be used by the bootstrapper. protected virtual AggregateCatalog CreateAggregateCatalog() { return new AggregateCatalog(); } /// /// Configures the used by MEF. /// /// /// The base implementation does nothing. /// protected virtual void ConfigureAggregateCatalog() { } /// /// Creates the that will be used as the default container. /// /// A new instance of . /// /// The base implementation registers a default MEF catalog of exports of key types. /// Exporting your own types will replace these defaults. /// [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Reliability", "CA2000:Dispose objects before losing scope", Justification = "The default export provider is in the container and disposed by MEF.")] protected virtual CompositionContainer CreateContainer() { CompositionContainer _container = new CompositionContainer(this.AggregateCatalog); return _container; } /// /// Configures the . /// May be overwritten in a derived class to add specific type mappings required by the application. /// /// /// The base implementation registers all the types direct instantiated by the bootstrapper with the container. /// If the method is overwritten, the new implementation should call the base class version. /// protected virtual void ConfigureContainer() { this.RegisterBootstrapperProvidedTypes(); } /// /// Helper method for configuring the . /// Registers defaults for all the types necessary for the infrastructure to work, if they are not already registered. /// public virtual void RegisterDefaultTypesIfMissing() { this.AggregateCatalog = DefaultServiceRegistrar.RegisterServices(this.AggregateCatalog); } /// /// Helper method for configuring the . /// Registers all the types direct instantiated by the bootstrapper with the container. /// protected virtual void RegisterBootstrapperProvidedTypes() { this.Container.ComposeExportedValue(this.Logger); this.Container.ComposeExportedValue(new ServiceLocatorAdapter(this.Container)); this.Container.ComposeExportedValue(this.AggregateCatalog); } #region IDisposable Support private bool disposedValue = false; // To detect redundant calls /// /// Releases unmanaged and - optionally - managed resources. /// /// true to release both managed and unmanaged resources; false to release only unmanaged resources. protected virtual void Dispose(bool disposing) { if (disposedValue) return; ReferenceApplicationEventSource.Log.EnteringDispose(nameof(MefBootstrapper), disposing); if (disposing) { this.AggregateCatalog.Dispose(); this.Container.Dispose(); } disposedValue = true; } /// /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. /// public void Dispose() { // Do not change this code. Put cleanup code in Dispose(bool disposing) above. Dispose(true); } #endregion #endregion } } ================================================ FILE: Networking/ReferenceApplication/MEF/ServiceLocatorAdapter.cs ================================================  using System; using System.Collections.Generic; using System.ComponentModel.Composition; using System.ComponentModel.Composition.Hosting; using System.Linq; using CommonServiceLocator; namespace UAOOI.Networking.ReferenceApplication.MEF { /// /// Provides service location utilizing the Managed Extensibility Framework container. /// public class ServiceLocatorAdapter : ServiceLocatorImplBase { /// /// Initializes a new instance of the class. /// /// The MEF composition container. public ServiceLocatorAdapter(CompositionContainer compositionContainer) { this.compositionContainer = compositionContainer; } /// /// Resolves the instance of the requested service. /// /// Type of instance requested. /// The requested service instance. protected override IEnumerable DoGetAllInstances(Type serviceType) { List instances = new List(); IEnumerable> exports = this.compositionContainer.GetExports(serviceType, null, null); if (exports != null) instances.AddRange(exports.Select(export => export.Value)); return instances; } /// /// Resolves all the instances of the requested service. /// /// Type of service requested. /// Name of registered service you want. May be null. /// Sequence of service instance objects. protected override object DoGetInstance(Type serviceType, string key) { IEnumerable> exports = this.compositionContainer.GetExports(serviceType, null, key); if ((exports != null) && (exports.Count() > 0)) { // If there is more than one value, this will throw an InvalidOperationException, // which will be wrapped by the base class as an ActivationException. return exports.Single().Value; } throw new ActivationException(this.FormatActivationExceptionMessage(new CompositionException("Export not found"), serviceType, key)); } private readonly CompositionContainer compositionContainer; } } ================================================ FILE: Networking/ReferenceApplication/MainWindow.xaml ================================================  ! ================================================ FILE: Networking/ReferenceApplication/MainWindow.xaml.cs ================================================  using Microsoft.Win32; using System.ComponentModel.Composition; using System.Windows; using UAOOI.Networking.ReferenceApplication.Controls; namespace UAOOI.Networking.ReferenceApplication { /// /// Interaction logic for MainWindow.xaml /// [Export()] public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } [Import] internal MainWindowViewModel MainWindowViewModel { set { DataContext = value; } get { return DataContext as MainWindowViewModel; } } private void CommandBinding_Executed(object sender, System.Windows.Input.ExecutedRoutedEventArgs e) { this.Close(); } private void CommandBinding_CanExecute(object sender, System.Windows.Input.CanExecuteRoutedEventArgs e) { e.CanExecute = true; } private void Window_Loaded(object sender, RoutedEventArgs e) { MainWindowViewModel _vm = this.DataContext as MainWindowViewModel; if (_vm == null) return; _vm.SaveFileInteractionEvent += _vmSaveFileInteractionEvent; } private void _vmSaveFileInteractionEvent(object sender, InteractionRequestedEventArgs e) { SaveFileConfirmation _confirmation = e.Context as SaveFileConfirmation; if (_confirmation == null) return; string _msg = $"Click Yes to save configuration to {_confirmation.FilePath}, No to slecet new file, Cancel to cancel"; //switch (MessageBox.Show(_confirmation.Title, _msg, MessageBoxButton.YesNoCancel, MessageBoxImage.Question, MessageBoxResult.Cancel)) switch (MessageBox.Show(_msg, _confirmation.Title, MessageBoxButton.YesNoCancel, MessageBoxImage.Question, MessageBoxResult.Cancel)) { case MessageBoxResult.None: case MessageBoxResult.OK: case MessageBoxResult.Yes: break; case MessageBoxResult.Cancel: _confirmation.FilePath = string.Empty; break; case MessageBoxResult.No: OpenFileDialog _dialog = new OpenFileDialog() { AddExtension = true, CheckPathExists = true, DefaultExt = ".xml", Filter = "Configuration (.xml)|*.xml", FileName = _confirmation.FilePath, Title = "Save file as ..", CheckFileExists = false, ValidateNames = true, }; _confirmation.FilePath = _dialog.ShowDialog().GetValueOrDefault(false) ? _dialog.FileName : string.Empty; e.Callback(); break; default: break; } } } } ================================================ FILE: Networking/ReferenceApplication/MainWindowViewModel.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2020, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System; using System.ComponentModel; using System.ComponentModel.Composition; using System.Diagnostics; using System.IO; using System.Reflection; using System.Windows; using System.Windows.Input; using UAOOI.Networking.DataRepository.DataLogger; using UAOOI.Networking.ReferenceApplication.Controls; using UAOOI.Networking.ReferenceApplication.Core; using UAOOI.Networking.ReferenceApplication.Core.MvvmLight; using UAOOI.Networking.ReferenceApplication.Properties; namespace UAOOI.Networking.ReferenceApplication { /// /// Class MainWindowViewModel - this class demonstrates how to create bindings to the properties that are holders of OPC UA values in the /// Model View ViewModel pattern. /// [Export()] [PartCreationPolicy(CreationPolicy.Shared)] internal class MainWindowViewModel : ObservableObject { #region constructors /// /// Initializes a new instance of the class. /// public MainWindowViewModel() { //Menu Files b_ConfigurationFolder = new DelegateCommand(ProcessOpenFileInExecutingAssemblyLocation); b_HelpDocumentation = new DelegateCommand(() => ProcessStart(Resources.HelpDocumentationUrl)); //Menu Actions b_OpenConsumerConfiguration = new ConfigurationEditorOpenCommand(Properties.Resources.ConfigurationDataConsumerFileName, SaveResponse); b_OpenProducerConfiguration = new ConfigurationEditorOpenCommand(Properties.Resources.ConfigurationDataProducerFileName, SaveResponse); //Menu Help b_ReadMe = new DelegateCommand(() => ProcessStart(Resources.ReadMeFileName)); b_TermsOfService = new DelegateCommand(() => ProcessStart(Resources.TermsOfServiceUrl)); b_ViewLicense = new DelegateCommand(() => ProcessStart(Resources.ViewLicenseUrl)); string _version = Assembly.GetExecutingAssembly().GetName().Version.ToString(); b_WindowTitle = $"OPC UA Reactive Networking Example Application Rel. {_version} supporting PubSup protocol 1.10"; } #endregion constructors #region Window public string WindowTitle { get => b_WindowTitle; set { b_WindowTitle = value; this.RaisePropertyChanged("WindowTitle", b_WindowTitle, value); } } internal event EventHandler SaveFileInteractionEvent; private string b_WindowTitle; #endregion Window #region menu public ICommand OpenConsumerConfiguration { get => b_OpenConsumerConfiguration; set { b_OpenConsumerConfiguration = value; RaisePropertyChanged("OpenConsumerConfiguration", b_OpenConsumerConfiguration, value); } } public ICommand OpenProducerConfiguration { get => b_OpenProducerConfiguration; set { b_OpenProducerConfiguration = value; RaisePropertyChanged("OpenProducerConfiguration", b_OpenProducerConfiguration, value); } } public ICommand HelpDocumentation { get => b_HelpDocumentation; set { b_HelpDocumentation = value; RaisePropertyChanged("HelpDocumentation", b_HelpDocumentation, value); } } public ICommand ConfigurationFolder { get => b_ConfigurationFolder; set { b_ConfigurationFolder = value; RaisePropertyChanged("ConfigurationFolder", b_ConfigurationFolder, value); } } public ICommand ReadMe { get => b_ReadMe; set { b_ReadMe = value; RaisePropertyChanged("ReadMe", b_ReadMe, value); } } public ICommand ViewLicense { get => b_ViewLicense; set { b_ViewLicense = value; RaisePropertyChanged("ViewLicense", b_ViewLicense, value); } } public ICommand TermsOfService { get => b_TermsOfService; set { b_TermsOfService = value; RaisePropertyChanged("TermsOfService", b_TermsOfService, value); } } //private private ICommand b_TermsOfService; private ICommand b_ViewLicense; private ICommand b_ReadMe; private ICommand b_OpenProducerConfiguration; private ICommand b_OpenConsumerConfiguration; private ICommand b_ConfigurationFolder; private ICommand b_HelpDocumentation; #endregion menu #region Consumer ViewModel /// /// Gets or sets the producer view model. /// /// The producer view model. [Import(ConsumerCompositionSettings.ViewModelContract)] public object ConsumerViewModel { get; set; } #endregion Consumer ViewModel #region Producer ViewModel /// /// Gets or sets the producer view model. /// /// The producer view model. [Import(typeof(ProducerViewModel))] public ProducerViewModel ProducerViewModel { get; set; } public int BytesSent { get => b_BytesSent; set { b_BytesSent = value; RaisePropertyChanged("BytesSent", b_BytesSent, value); } } public int PackagesSent { get => b_PackagesSent; set { b_PackagesSent = value; RaisePropertyChanged("PackagesSent", b_PackagesSent, value); } } #endregion Producer ViewModel #region private private int b_BytesSent; private int b_PackagesSent; private void ProcessStart(string parameter) { try { using (Process process = Process.Start(parameter)) { } } catch (Exception _ex) { MessageBox.Show($"An error occurs during opening the web page at: {_ex}", "Problem with the website!", MessageBoxButton.OK, MessageBoxImage.Error); return; } } private void ProcessOpenFileInExecutingAssemblyLocation() { string path = string.Empty; try { path = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); using (Process process = Process.Start(@path)) { } } catch (Win32Exception) { MessageBox.Show($"No folder exists at: {path}.", "Folder error !", MessageBoxButton.OK, MessageBoxImage.Stop); return; } catch (Exception _ex) { MessageBox.Show($"An error occurs during opening the file {_ex}", "Problem with the file !", MessageBoxButton.OK, MessageBoxImage.Error); return; } } private FileInfo SaveResponse(FileInfo arg) { FileInfo _ret = null; SaveFileConfirmation _newFileInfo = new SaveFileConfirmation() { Title = "Save configuration file", FilePath = arg.FullName }; SaveFileInteractionEvent?.Invoke(this, new InteractionRequestedEventArgs(_newFileInfo, () => _ret = string.IsNullOrEmpty(_newFileInfo.FilePath) ? null : new FileInfo(_newFileInfo.FilePath))); return _ret; } #endregion private } } ================================================ FILE: Networking/ReferenceApplication/Networking.ReferenceApplication.csproj ================================================  Debug AnyCPU {F0ACCB28-AE0D-4E19-94FA-7BE3044F1EEB} WinExe Properties UAOOI.Networking.ReferenceApplication UAOOI.Networking.ReferenceApplication v4.7.2 512 {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} 4 true false publish\ true Disk false Foreground 7 Days false false true 0 1.0.0.%2a false true AnyCPU true full false bin\Debug\ DEBUG;TRACE prompt 4 IDE0001,IDE0002,IDE0003,CS0067 false AnyCPU pdbonly true bin\Release\ TRACE prompt 4 false UAOOI.Networking.ReferenceApplication.App PrepareProcess.ico true OPCUAOOIKey.snk ..\..\packages\CommonServiceLocator.2.0.6\lib\net47\CommonServiceLocator.dll ..\..\packages\EnterpriseLibrary.SemanticLogging.2.0.1406.1\lib\net45\Microsoft.Practices.EnterpriseLibrary.SemanticLogging.dll ..\..\packages\EnterpriseLibrary.SemanticLogging.TextFile.2.0.1406.1\lib\net45\Microsoft.Practices.EnterpriseLibrary.SemanticLogging.TextFile.dll ..\..\packages\Newtonsoft.Json.13.0.1\lib\net45\Newtonsoft.Json.dll ..\..\packages\System.Diagnostics.TraceSource.4.3.0\lib\net46\System.Diagnostics.TraceSource.dll True True ..\..\packages\System.Reactive.5.0.0\lib\net472\System.Reactive.dll ..\..\packages\System.Reactive.Core.5.0.0\lib\net472\System.Reactive.Core.dll ..\..\packages\System.Reactive.Interfaces.5.0.0\lib\net472\System.Reactive.Interfaces.dll ..\..\packages\System.Reactive.Linq.5.0.0\lib\net472\System.Reactive.Linq.dll ..\..\packages\System.Runtime.CompilerServices.Unsafe.6.0.0\lib\net461\System.Runtime.CompilerServices.Unsafe.dll ..\..\packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll ..\..\packages\System.ValueTuple.4.5.0\lib\net47\System.ValueTuple.dll 4.0 ..\..\packages\UAOOI.Common.Infrastructure.6.4.7\lib\netstandard2.0\UAOOI.Common.Infrastructure.dll MSBuild:Compile Designer True True AssemblyInfo.tt MSBuild:Compile Designer App.xaml Code MainWindow.xaml Code True True Resources.resx True Settings.settings True ResXFileCodeGenerator Resources.Designer.cs Always SettingsSingleFileGenerator Settings.Designer.cs False Microsoft .NET Framework 4.6 %28x86 and x64%29 true False .NET Framework 3.5 SP1 false True True ReadMe.tt PreserveNewest PreserveNewest TextTemplatingFileGenerator AssemblyInfo.cs TextTemplatingFileGenerator ReadMe.txt {0a2fb856-d50c-463d-8218-063a36942188} Configuration.Core {afcca7c9-47fe-4fb6-935e-12d686eec58f} Networking.Core {3781B8CA-3128-45DC-89C9-981740357630} Networking.DataLogger {2492aa3b-cf67-477a-b29e-14a1e348b939} Networking.Encoding {2238851E-4DB8-46B0-B38D-0E2315FE153E} Networking.ReferenceApplication.Core {7f4ded4e-5933-4229-b9cc-51da49678904} Networking.SemanticData {5d2a0688-95e3-400a-b789-49052389d2b1} Networking.SimulatorInteroperabilityTest {D2EB89F9-321E-46E4-BA79-679138B82B23} Networking.UDPMessageHandler ================================================ FILE: Networking/ReferenceApplication/Properties/AssemblyInfo.cs ================================================  using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Windows; [assembly: AssemblyTitle("UAOOI.UANetworkingReferenceApplication")] [assembly: AssemblyDescription("Object Oriented Internet: Reactive Networking of Semantic-Data Library WPF GUI.")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("Mariusz Postol")] [assembly: AssemblyProduct("Object Oriented Internet")] [assembly: AssemblyCopyright("Copyright (C) 2022 Mariusz Postol LODZ POLAND")] [assembly: AssemblyTrademark("Object Oriented Internet")] [assembly: AssemblyCulture("")] [assembly: ComVisible(false)] [assembly: AssemblyVersion("4.0.2.*")] [assembly: AssemblyFileVersion("4.0.2")] [assembly: InternalsVisibleTo( "UAOOI.Networking.ReferenceApplication.UnitTest, PublicKey=" + "00240000048000009400000006020000002400005253413100040000010001005b97a0972ff6b13a" + "8a9ff9c09503aea0e5e2fe29cb2275a0c0942182f4c3431814b6bc9a556d9fe0d7e7823439c1ba28" + "521f6318e4c936c4461604ef668e9686c2021571b093e1bfba071b373bc56a07a3afdc120c5313d3" + "9a935cda64b759f857ebb3db483641444a5347e1564f8ba6d4fad2f968d3caf9991a4fa6aa019ebe" )] //In order to begin building localizable applications, set //CultureYouAreCodingWith in your .csproj file //inside a . For example, if you are using US english //in your source files, set the to en-US. Then uncomment //the NeutralResourceLanguage attribute below. Update the "en-US" in //the line below to match the UICulture setting in the project file. //[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)] [assembly: ThemeInfo( ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located //(used if a resource is not found in the page, // or application resource dictionaries) ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located //(used if a resource is not found in the page, // app, or any theme specific resource dictionaries) )] ================================================ FILE: Networking/ReferenceApplication/Properties/AssemblyInfo.tt ================================================ <#@ template debug="false" hostspecific="false" language="C#" #> <#@ output extension=".cs" #> using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Windows; [assembly: AssemblyTitle("<#=m_AssemblyTitle#>")] [assembly: AssemblyDescription("<#=NetworkingDataProduct#>: Reactive Networking of Semantic-Data Library WPF GUI.")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("<#=AssemblyCompany#>")] [assembly: AssemblyProduct("<#=NetworkingDataProduct#>")] [assembly: AssemblyCopyright("<#=AssemblyCopyright#>")] [assembly: AssemblyTrademark("<#=ProductTrademark#>")] [assembly: AssemblyCulture("")] [assembly: ComVisible(false)] [assembly: AssemblyVersion("<#= NetworkingDataVersion #>.*")] [assembly: AssemblyFileVersion("<#= NetworkingDataVersion #>")] [assembly: InternalsVisibleTo( "UAOOI.Networking.ReferenceApplication.UnitTest, PublicKey=" + "00240000048000009400000006020000002400005253413100040000010001005b97a0972ff6b13a" + "8a9ff9c09503aea0e5e2fe29cb2275a0c0942182f4c3431814b6bc9a556d9fe0d7e7823439c1ba28" + "521f6318e4c936c4461604ef668e9686c2021571b093e1bfba071b373bc56a07a3afdc120c5313d3" + "9a935cda64b759f857ebb3db483641444a5347e1564f8ba6d4fad2f968d3caf9991a4fa6aa019ebe" )] //In order to begin building localizable applications, set //CultureYouAreCodingWith in your .csproj file //inside a . For example, if you are using US english //in your source files, set the to en-US. Then uncomment //the NeutralResourceLanguage attribute below. Update the "en-US" in //the line below to match the UICulture setting in the project file. //[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)] [assembly: ThemeInfo( ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located //(used if a resource is not found in the page, // or application resource dictionaries) ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located //(used if a resource is not found in the page, // app, or any theme specific resource dictionaries) )] <#@ include file = "..\..\..\CommonResources\T4Definitions\Model.t4" #> <#+ string m_AssemblyTitle = "UAOOI.UANetworkingReferenceApplication"; #> ================================================ FILE: Networking/ReferenceApplication/Properties/Resources.Designer.cs ================================================ //------------------------------------------------------------------------------ // // This code was generated by a tool. // Runtime Version:4.0.30319.42000 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. // //------------------------------------------------------------------------------ namespace UAOOI.Networking.ReferenceApplication.Properties { using System; /// /// A strongly-typed resource class, for looking up localized strings, etc. /// // This class was auto-generated by the StronglyTypedResourceBuilder // class via a tool like ResGen or Visual Studio. // To add or remove a member, edit your .ResX file then rerun ResGen // with the /str option, or rebuild your VS project. [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] internal class Resources { private static global::System.Resources.ResourceManager resourceMan; private static global::System.Globalization.CultureInfo resourceCulture; [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] internal Resources() { } /// /// Returns the cached ResourceManager instance used by this class. /// [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] internal static global::System.Resources.ResourceManager ResourceManager { get { if (object.ReferenceEquals(resourceMan, null)) { global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("UAOOI.Networking.ReferenceApplication.Properties.Resources", typeof(Resources).Assembly); resourceMan = temp; } return resourceMan; } } /// /// Overrides the current thread's CurrentUICulture property for all /// resource lookups using this strongly typed resource class. /// [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] internal static global::System.Globalization.CultureInfo Culture { get { return resourceCulture; } set { resourceCulture = value; } } /// /// Looks up a localized string similar to ConfigurationDataConsumer.xml. /// internal static string ConfigurationDataConsumerFileName { get { return ResourceManager.GetString("ConfigurationDataConsumerFileName", resourceCulture); } } /// /// Looks up a localized string similar to ConfigurationDataProducer.xml. /// internal static string ConfigurationDataProducerFileName { get { return ResourceManager.GetString("ConfigurationDataProducerFileName", resourceCulture); } } /// /// Looks up a localized string similar to https://commsvr.gitbook.io/ooi. /// internal static string HelpDocumentationUrl { get { return ResourceManager.GetString("HelpDocumentationUrl", resourceCulture); } } /// /// Looks up a localized string similar to ReadMe.txt. /// internal static string ReadMeFileName { get { return ResourceManager.GetString("ReadMeFileName", resourceCulture); } } /// /// Looks up a localized string similar to https://help.github.com/articles/github-terms-of-service/. /// internal static string TermsOfServiceUrl { get { return ResourceManager.GetString("TermsOfServiceUrl", resourceCulture); } } /// /// Looks up a localized string similar to An unhandled exception occurred, and the application is terminating. For more information, see your Application log.. /// internal static string UnhandledException { get { return ResourceManager.GetString("UnhandledException", resourceCulture); } } /// /// Looks up a localized string similar to https://github.com/mpostol/OPC-UA-OOI/blob/master/license.md. /// internal static string ViewLicenseUrl { get { return ResourceManager.GetString("ViewLicenseUrl", resourceCulture); } } } } ================================================ FILE: Networking/ReferenceApplication/Properties/Resources.resx ================================================  text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 ConfigurationDataConsumer.xml ConfigurationDataProducer.xml https://commsvr.gitbook.io/ooi ReadMe.txt https://help.github.com/articles/github-terms-of-service/ An unhandled exception occurred, and the application is terminating. For more information, see your Application log. https://github.com/mpostol/OPC-UA-OOI/blob/master/license.md ================================================ FILE: Networking/ReferenceApplication/Properties/Settings.Designer.cs ================================================ //------------------------------------------------------------------------------ // // This code was generated by a tool. // Runtime Version:4.0.30319.42000 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. // //------------------------------------------------------------------------------ namespace UAOOI.Networking.ReferenceApplication.Properties { [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.9.0.0")] internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); public static Settings Default { get { return defaultInstance; } } [global::System.Configuration.ApplicationScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Configuration.DefaultSettingValueAttribute("ConfigurationDataConsumer.xml")] public string ConsumerConfigurationFileName { get { return ((string)(this["ConsumerConfigurationFileName"])); } } [global::System.Configuration.UserScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Configuration.DefaultSettingValueAttribute("ConfigurationEditor\\UAOOI.Configuration.DataBindings.dll")] public string ConfigurationEditorPlugInFilePath { get { return ((string)(this["ConfigurationEditorPlugInFilePath"])); } set { this["ConfigurationEditorPlugInFilePath"] = value; } } [global::System.Configuration.ApplicationScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Configuration.DefaultSettingValueAttribute("UAOOI.Networking.UDPMessageHandler.dll")] public string MessageHandlerProvider { get { return ((string)(this["MessageHandlerProvider"])); } } [global::System.Configuration.ApplicationScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Configuration.DefaultSettingValueAttribute("ReferenceApplication.log")] public string LogFilePath { get { return ((string)(this["LogFilePath"])); } } [global::System.Configuration.ApplicationScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Configuration.DefaultSettingValueAttribute("ConfigurationDataProducer.xml")] public string ProducerConfigurationFileName { get { return ((string)(this["ProducerConfigurationFileName"])); } } [global::System.Configuration.ApplicationScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Configuration.DefaultSettingValueAttribute("UAOOI.Networking.SimulatorInteroperabilityTest.dll")] public string DataProducerProvider { get { return ((string)(this["DataProducerProvider"])); } } } } ================================================ FILE: Networking/ReferenceApplication/Properties/Settings.settings ================================================  ConfigurationDataConsumer.xml ConfigurationEditor\UAOOI.Configuration.DataBindings.dll UAOOI.Networking.UDPMessageHandler.dll ReferenceApplication.log ConfigurationDataProducer.xml UAOOI.Networking.SimulatorInteroperabilityTest.dll ================================================ FILE: Networking/ReferenceApplication/Properties/app.manifest ================================================  ================================================ FILE: Networking/ReferenceApplication/README.MD ================================================ # Walk-through `ReferenceApplication` ## Introduction The topics contained in the document [Getting Started Tutorial](../../Networking/SemanticData/READMEGettingStartedTutorial.md) are intended to give you quick exposure to the `OOI Reactive Application` network-based data exchange programming experience. Working through this tutorial gives you an introductory understanding of the steps required to customize existing `OOI Reactive Application`. This project is aimed at implementation of an example of the `OOI Reactive Application` supporting producer and consumer roles simultaneously. The purpose of the `ReferenceApplication` is to demonstrate the concepts and architecture of the reactive networking application implementation, rather than to necessarily provide a realistic scenario for its use. For more extensive examples, see the [Semantic-Data Processing Architecture](../../SemanticData/README.MD). The `ReferenceApplication` hosts parts offering `Producer` and `Consumer` functionality. Both roles are implemented as independent threads that have a common graphical user interface (GUI) for diagnostic and configuration purpose. The `Producer` sends messages containing the fields defined in the configuration file using UDP communication stack. The values are simulated. The `Consumer` is configured to receive these messages from the UDP protocol stack. The `Consumer`to correctly decode the messages must have configuration defining the same set of fields. The data is encoded using *Variant* encoding. The detailed description of the `Consumer` is covered by the document [`ReferenceApplication` Consumer - Data Logger](../../Networking/DataRepository/DataLogger/README.md). The detailed description of the `Producer` is covered by the document [`ReferenceApplication` Producer - Interoperability Test Data Generator](../../Networking/SimulatorInteroperabilityTest/README.md). Each role uses independent configuration file. The detailed description of the configuration maintenance is captured in the document [UA Data Networking Configuration](../../Configuration/Networking/README.MD#ua-data-networking-configuration). ## Architecture The diagram below presents main parts making up the `ReferenceApplication` - an example application compliant with the *Object Oriented Internet* concept. ![ReferenceApplication Architecture 4.0.0](../../CommonResources/Media/UAOOI.Networking.ReferenceApplication.Layers..png) - `ReferenceApplication`: Reactive Networking of Semantic-Data Library WPF GUI layer - it exposes the startup entry point to the runtime environment. - `DataLogger`: is an example of the `Consumer` part of the `ReferenceApplication`. - `SimulatorInteroperabilityTest`: `Producer` implementation of a data generator to be used for testing purpose. - `UDPMessageHandler`: proprietary UDP `IMessageHandlerFactory` implementation. - `Encoding`: IEncodingFactory functionality implementation limited to encoding simple data types for the testing purpose only. - `ReferenceApplication.Core`: this library provides an implementation of a core functionality required by the `ReferenceApplication` and all its components that are helpful in writing well-structured and maintainable applications. - `SemanticData`: *Reactive Networking of Semantic-Data Library* library based on [OPC UA Part 14 Pub/Sub](../../Networking/SemanticData/README.PubSubMTF.md). ## How to: Get Started ### Application Installation The application is located on the GitHub at [OPC-UA-OOI](https://github.com/mpostol/OPC-UA-OOI) and maintained as the project `Networking.ReferenceApplication` of the solution `UAObjectOrientedInternet.sln`. The current binary release containing ready to use application is available on the repository [Releases][OOI.Releases] page. Download and run the downloaded .exe file to unzip the content to selected folder. Now you may run the application file `UAOOI.Networking.ReferenceApplication.exe` to get started. ### Version History Detailed description is available in file [ReadMe.txt](ReadMe.txt) ## Prerequisites By design, thi library depends on a logger functionality implementing the interface ```txt UAOOI.Common.Infrastructure.Diagnostic.ITraceSource ``` defined in the `UAOOI.Common.Infrastructure` package. It is used to trace the behavior of libraries at run-time. To get an instance implementing this interface the `CommonServiceLocator` is used. The functionality required by the `CommonServiceLocator` has to be provided by the hosting application. Usually, it is provided by the composition container that is built at the application bootstrap stage. To get more visit this library home page [Microsoft.Practices.ServiceLocation at GitHub](https://github.com/unitycontainer/commonservicelocator). > If the `CommonServiceLocator` is not available a default logger (do nothing) is used. ### Troubleshooting For the diagnostic purpose, the application supports network transfer tracing that provides access to information about method invocations and network traffic generated by the application. This feature is useful for debugging applications under development as well as for analyzing deployed applications. The output provided by network tracing is customizable to support different usage scenarios at development time and in the production environment. Traces are to publish specific messages that are generated during application execution. To learn more about a configuration of the tracing visit the documentation at [Network Tracing in the .NET Framework](https://msdn.microsoft.com/en-us/library/hyb3xww8.aspx). The log file `UANetworkingReferenceApplication.log` captures output messages from some public methods of the `Socket`, `TcpListener`, `TcpClient`, and `Dns` classes. To find the log file location click the `Actions.Open Configuration folder` menu entry. [OOI.Releases]:https://github.com/mpostol/OPC-UA-OOI/releases ## See also - [Microsoft.Practices.ServiceLocation at GitHub](https://github.com/unitycontainer/commonservicelocator) - [Network Tracing in the .NET Framework](https://msdn.microsoft.com/en-us/library/hyb3xww8.aspx) ================================================ FILE: Networking/ReferenceApplication/ReadMe.old ================================================ Version History Assembly Version: 3.0.1-Echo Assembly Date: 28.01.2018 The main changes and new functionalities are listed below: 1. Add consistent tracing infrastructure 2. MEF has been used to compose the Reference Application 3. IMessageHandlerFactory - moved implementation to separate library 4. Used Nuget packages for components required by Reference Application. 5. fixed some errors. Assembly Version: 2.0.0-Charlie Assembly Date: 2016-06-19 The main changes and new functionalities are listed below: 1. Updated the library up to new Pub/Sub Draft 14 with new protocol revision 140 2. Added support of many published (different PublisherId) by an application at the same time. Changed the configuration schema. 3. Added support for any external configuration file editor. Released and tested with CAS.CommServerUAOOI.ConfigurationEditor.dll 4. Improved plug-in functionality for external logging component. 5. Rearranged project folders structure and improved documentation. 6. Many bug fixes and improvements. Assembly Version: 1.00.16 Assembly Date: 2016-01-09 The main changes and new functionalities are listed below: 1. IP Multi-cast support - it is configurable on the UI 2. Arrays and `ByteString` support - array can be configured in the configuration file 3. Configuration updated to meet the interoperability testing requirements 4. Improved diagnostic - added log file tracing details related to the UDP protocol communication 5. Added new unit tests 5. Improved tracking to the text list available on the user interface. 7. Fixed problems with reloading Nuget packages 6. fixed many errors. Assembly Version: 1.00.13 Assembly Date: 2015-12-23 The main changes and new functionalities are listed below: 1. It is bug fix release: - Raise condition if there are many DataSets - Improved documentation and application user intrface Assembly Version: 1.00.11 Assembly Date: 2015-12-18 The main changes and new functionalities are listed below: 1. It is bug fix release - DataSetWriter must be encoded as UInt16 (https://github.com/mpostol/OPC-UA-OOI/issues/144). Assembly Version: 1.00.10 Assembly Date: 2015-12-15 The main changes and new functionalities are listed below: 1. It supports the protocol version 1.10. Assembly Version: 1.00.09 Assembly Date: 2015-12-13 The main changes and new functionalities are listed below: 1. Initial release 2. It support the protocol version 1.09 ================================================ FILE: Networking/ReferenceApplication/ReadMe.tt ================================================ <#@ template debug="false" hostspecific="false" language="C#" #> <#@ assembly name="System.Core" #> <#@ import namespace="System.Linq" #> <#@ import namespace="System.Text" #> <#@ import namespace="System.Collections.Generic" #> <#@ output extension=".txt" #> Current release: Assembly Title: <#=NetworkingDataProduct#> Assembly Description: UAOOI Reactive Networking of Semantic-Data Library. Assembly Company: <#=AssemblyCompany#> Assembly Product: <#=SemanticDataProduct#> Assembly Copyright: <#=AssemblyCopyright#> Assembly Trademark: <#=ProductTrademark#> Assembly Version: <#=NetworkingDataVersion#><#=NetworkingDataPrerelease#> Assembly Date: <#=m_Date#> The main changes and new functionalities are listed below: Detailed description is available at: https://github.com/mpostol/OPC-UA-OOI/commits/master _____________________________________________________________________________________________ For assistance, contact: Mariusz Postol CAS mailto://mpostol@cas.eu Copyright (C) 2015, commsvr.com LODZ POLAND mailto://commserver@cas.eu http://www.commsvr.com/ <#@ include file = "Readme.old" #> <#@ include file = "..\..\CommonResources\T4Definitions\Model.t4" #> <#+ string m_Date = System.DateTime.Today.ToShortDateString(); #> ================================================ FILE: Networking/ReferenceApplication/ReadMe.txt ================================================  Current release: Assembly Title: Object Oriented Internet Assembly Description: UAOOI Reactive Networking of Semantic-Data Library. Assembly Company: Mariusz Postol Assembly Product: Object Oriented Internet Assembly Copyright: Copyright (C) 2022 Mariusz Postol LODZ POLAND Assembly Trademark: Object Oriented Internet Assembly Version: 4.0.2 Assembly Date: 7/18/2022 The main changes and new functionalities are listed below: Detailed description is available at: https://github.com/mpostol/OPC-UA-OOI/commits/master _____________________________________________________________________________________________ For assistance, contact: Mariusz Postol CAS mailto://mpostol@cas.eu Copyright (C) 2015, commsvr.com LODZ POLAND mailto://commserver@cas.eu http://www.commsvr.com/ Version History Assembly Version: 3.0.1-Echo Assembly Date: 28.01.2018 The main changes and new functionalities are listed below: 1. Add consistent tracing infrastructure 2. MEF has been used to compose the Reference Application 3. IMessageHandlerFactory - moved implementation to separate library 4. Used Nuget packages for components required by Reference Application. 5. fixed some errors. Assembly Version: 2.0.0-Charlie Assembly Date: 2016-06-19 The main changes and new functionalities are listed below: 1. Updated the library up to new Pub/Sub Draft 14 with new protocol revision 140 2. Added support of many published (different PublisherId) by an application at the same time. Changed the configuration schema. 3. Added support for any external configuration file editor. Released and tested with CAS.CommServerUAOOI.ConfigurationEditor.dll 4. Improved plug-in functionality for external logging component. 5. Rearranged project folders structure and improved documentation. 6. Many bug fixes and improvements. Assembly Version: 1.00.16 Assembly Date: 2016-01-09 The main changes and new functionalities are listed below: 1. IP Multi-cast support - it is configurable on the UI 2. Arrays and `ByteString` support - array can be configured in the configuration file 3. Configuration updated to meet the interoperability testing requirements 4. Improved diagnostic - added log file tracing details related to the UDP protocol communication 5. Added new unit tests 5. Improved tracking to the text list available on the user interface. 7. Fixed problems with reloading Nuget packages 6. fixed many errors. Assembly Version: 1.00.13 Assembly Date: 2015-12-23 The main changes and new functionalities are listed below: 1. It is bug fix release: - Raise condition if there are many DataSets - Improved documentation and application user intrface Assembly Version: 1.00.11 Assembly Date: 2015-12-18 The main changes and new functionalities are listed below: 1. It is bug fix release - DataSetWriter must be encoded as UInt16 (https://github.com/mpostol/OPC-UA-OOI/issues/144). Assembly Version: 1.00.10 Assembly Date: 2015-12-15 The main changes and new functionalities are listed below: 1. It supports the protocol version 1.10. Assembly Version: 1.00.09 Assembly Date: 2015-12-13 The main changes and new functionalities are listed below: 1. Initial release 2. It support the protocol version 1.09 ================================================ FILE: Networking/ReferenceApplication/SaveFileConfirmation.cs ================================================ using UAOOI.Networking.ReferenceApplication.Controls; namespace UAOOI.Networking.ReferenceApplication { internal class SaveFileConfirmation : INotification { #region INotification /// /// Gets or sets the content of the notification. /// /// The content of the interaction control. public object Content { get; set; } /// /// Gets or sets the title to use for the notification. /// /// The title of the interaction control. public string Title { get; set; } /// /// Gets or sets the file path. /// /// The file path. public string FilePath { get; set; } #endregion } } ================================================ FILE: Networking/ReferenceApplication/packages.config ================================================  ================================================ FILE: Networking/ReferenceApplication.Core/CompositionSettings.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2018, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ namespace UAOOI.Networking.ReferenceApplication.Core { /// /// Class CompositionSettings provides contract names to be used by the parts composition /// public static class CompositionSettings { /// /// The configuration file name contract name /// public const string ConfigurationFileNameContract = "SimulatorCompositionSettings.ConfigurationFileName"; } } ================================================ FILE: Networking/ReferenceApplication.Core/Diagnostic/NetworkingEventSourceProvider.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System.ComponentModel.Composition; using System.Diagnostics.Tracing; using UAOOI.Networking.Core; namespace UAOOI.Networking.ReferenceApplication.Core.Diagnostic { /// /// Class NetworkingEventSourceProvider - gets access to an instance of to be registered by the logging infrastructure. /// /// [Export(typeof(INetworkingEventSourceProvider))] public class NetworkingEventSourceProvider : INetworkingEventSourceProvider { #region INetworkingEventSourceProvider /// /// Gets the part event source. /// /// Returns an instance of . public EventSource GetPartEventSource() { return ReferenceApplicationEventSource.Log; } #endregion INetworkingEventSourceProvider } } ================================================ FILE: Networking/ReferenceApplication.Core/Diagnostic/ReferenceApplicationEventSource.cs ================================================ using System.Diagnostics.Tracing; namespace UAOOI.Networking.ReferenceApplication.Core.Diagnostic { [EventSource(Name = "UAOOI-Networking-ReferenceApplication-Diagnostic", Guid = "D8637D00-5EAD-4538-9286-8C6DE346D8C8")] public class ReferenceApplicationEventSource : EventSource { ///// ///// Class Keywords - defines the local keywords (flags) that apply to events. ///// //internal class Keywords //{ // public const EventKeywords Setup = (EventKeywords)1; // public const EventKeywords Configuration = (EventKeywords)2; // public const EventKeywords Diagnostic = (EventKeywords)4; //} /// /// Class Tasks. /// public class Tasks { public const EventTask Consumer = (EventTask)1; public const EventTask Producer = (EventTask)2; public const EventTask Stack = (EventTask)3; public const EventTask Infrastructure = (EventTask)4; } /// /// Gets the log - implements singleton of the . /// /// The log. public static ReferenceApplicationEventSource Log { get; } = new ReferenceApplicationEventSource(); [Event(1, Message = "Application Failure: {0}", Opcode = EventOpcode.Info, Task = Tasks.Infrastructure, Level = EventLevel.Error/*, Keywords = Keywords.Diagnostic*/)] internal void Failure(string message) { this.WriteEvent(1, message); } [Event(2, Message = "The application has been started using the message handling provider {0}.", Opcode = EventOpcode.Start, Task = Tasks.Infrastructure, /*Keywords = Keywords.Setup,*/ Level = EventLevel.Informational)] public void StartingApplication(string transportName) { this.WriteEvent(2, transportName); } [Event(3, Message = "The part {0} has been just created and configured.", Opcode = EventOpcode.Start, Task = Tasks.Infrastructure, Level = EventLevel.Informational/*, Keywords = Keywords.Setup*/ )] public void PartCreated(string partName) { this.WriteEvent(3, partName); } [Event(4, Message = "Initialization of {0}", Opcode = EventOpcode.Start, Task = Tasks.Infrastructure, Level = EventLevel.Informational /*, Keywords = Keywords.Setup,*/ )] public void Initialization(string message) { this.WriteEvent(4, message); } [Event(5, Message = "Entering method {0}.{1}", Opcode = EventOpcode.Start, Task = Tasks.Infrastructure, /*Keywords = Keywords.Diagnostic,*/ Level = EventLevel.Verbose)] public void EnteringMethod(string className, string methodName) { this.WriteEvent(5, className, methodName); } [Event(6, Message = "Entering Dispose method in {0} class disposing = {1}", Opcode = EventOpcode.Start, Task = Tasks.Infrastructure, /*Keywords = Keywords.Diagnostic,*/ Level = EventLevel.Informational)] public void EnteringDispose(string className, bool disposing) { this.WriteEvent(6, className, disposing); } private ReferenceApplicationEventSource() { } } } ================================================ FILE: Networking/ReferenceApplication.Core/Diagnostic/ReferenceApplicationEventSourceExtensions.cs ================================================  using System; namespace UAOOI.Networking.ReferenceApplication.Core.Diagnostic { /// /// Class ReferenceApplicationEventSourceExtensions - expanding the /// public static class ReferenceApplicationEventSourceExtensions { /// /// Logs the exception using . /// /// The event source source to be used for problem reporting. /// The exception to be reported. public static void LogException (this ReferenceApplicationEventSource eventSource, Exception e) { Exception _exception = e; string _innerText = "An exception has benn caught:"; while (e != null) { eventSource.Failure($"{_innerText} of type {_exception.GetType().Name} capturing the message: {e.Message}"); e = e.InnerException; _innerText = "It contains inner exception:"; } } } } ================================================ FILE: Networking/ReferenceApplication.Core/IDataRepositoryStartup.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2020, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System; namespace UAOOI.Networking.ReferenceApplication.Core { /// /// Interface IDataRepositoryStartup - a contract to be used by IoC container to get DataRepository parts. /// Implements the /// /// public interface IDataRepositoryStartup : IDisposable { void Setup(); } } ================================================ FILE: Networking/ReferenceApplication.Core/MvvmLight/DelegateCommand.cs ================================================ using System; using System.Linq.Expressions; using System.Reflection; using System.Threading.Tasks; namespace UAOOI.Networking.ReferenceApplication.Core.MvvmLight { /// /// An whose delegates can be attached for and . /// /// Parameter type. /// /// The constructor deliberately prevents the use of value types. /// Because ICommand takes an object, having a value type for T would cause unexpected behavior when CanExecute(null) is called during XAML initialization for command bindings. /// Using default(T) was considered and rejected as a solution because the implementor would not be able to distinguish between a valid and defaulted values. /// /// Instead, callers should support a value type by using a nullable value type and checking the HasValue property before using the Value property. /// /// /// public MyClass() /// { /// this.submitCommand = new DelegateCommand<int?>(this.Submit, this.CanSubmit); /// } /// /// private bool CanSubmit(int? customerId) /// { /// return (customerId.HasValue && customers.Contains(customerId.Value)); /// } /// /// /// public class DelegateCommand : DelegateCommandBase { /// /// Initializes a new instance of . /// /// Delegate to execute when Execute is called on the command. This can be null to just hook up a CanExecute delegate. /// will always return true. public DelegateCommand(Action executeMethod) : this(executeMethod, (o) => true) { } /// /// Initializes a new instance of . /// /// Delegate to execute when Execute is called on the command. This can be null to just hook up a CanExecute delegate. /// Delegate to execute when CanExecute is called on the command. This can be null. /// When both and ar . public DelegateCommand(Action executeMethod, Func canExecuteMethod) : base((o) => executeMethod((T)o), (o) => canExecuteMethod((T)o)) { if (executeMethod == null || canExecuteMethod == null) throw new ArgumentNullException(nameof(executeMethod), Resources.DelegateCommandDelegatesCannotBeNull); TypeInfo _genericTypeInfo = typeof(T).GetTypeInfo(); // DelegateCommand allows object or Nullable<>. // note: Nullable<> is a struct so we cannot use a class constraint. if (_genericTypeInfo.IsValueType) { if ((!_genericTypeInfo.IsGenericType) || (!typeof(Nullable<>).GetTypeInfo().IsAssignableFrom(_genericTypeInfo.GetGenericTypeDefinition().GetTypeInfo()))) { throw new InvalidCastException(Resources.DelegateCommandInvalidGenericPayloadType); } } } /// /// Observes a property that implements INotifyPropertyChanged, and automatically calls DelegateCommandBase.RaiseCanExecuteChanged on property changed notifications. /// /// The object type containing the property specified in the expression. /// The property expression. Example: ObservesProperty(() => PropertyName). /// The current instance of DelegateCommand public DelegateCommand ObservesProperty(Expression> propertyExpression) { ObservesPropertyInternal(propertyExpression); return this; } /// /// Observes a property that is used to determine if this command can execute, and if it implements INotifyPropertyChanged it will automatically call DelegateCommandBase.RaiseCanExecuteChanged on property changed notifications. /// /// The property expression. Example: ObservesCanExecute((o) => PropertyName). /// The current instance of DelegateCommand public DelegateCommand ObservesCanExecute(Expression> canExecuteExpression) { ObservesCanExecuteInternal(canExecuteExpression); return this; } /// ///Determines if the command can execute by invoked the provided during construction. /// ///Data used by the command to determine if it can execute. /// /// if this command can be executed; otherwise, . /// public virtual bool CanExecute(T parameter) { return base.CanExecute(parameter); } /// ///Executes the command and invokes the provided during construction. /// ///Data used by the command. public virtual Task Execute(T parameter) { return base.Execute(parameter); } #region private constructors protected DelegateCommand(Func executeMethod) : this(executeMethod, (o) => true) { } protected DelegateCommand(Func executeMethod, Func canExecuteMethod) : base((o) => executeMethod((T)o), (o) => canExecuteMethod((T)o)) { if (executeMethod == null || canExecuteMethod == null) throw new ArgumentNullException(nameof(executeMethod), Resources.DelegateCommandDelegatesCannotBeNull); } #endregion } /// /// An whose delegates do not take any parameters for and . /// /// /// public class DelegateCommand : DelegateCommandBase { #region constructors /// /// Creates a new instance of with the to invoke on execution. /// /// The to invoke when is called. public DelegateCommand(Action executeMethod) : this(executeMethod, () => true) { } /// /// Creates a new instance of with the to invoke on execution /// and a to query for determining if the command can execute. /// /// The to invoke when is called. /// The to invoke when is called public DelegateCommand(Action executeMethod, Func canExecuteMethod) : base((o) => executeMethod(), (o) => canExecuteMethod()) { if (executeMethod == null || canExecuteMethod == null) throw new ArgumentNullException(nameof(executeMethod), Resources.DelegateCommandDelegatesCannotBeNull); } #endregion /// /// Observes a property that implements INotifyPropertyChanged, and automatically calls DelegateCommandBase.RaiseCanExecuteChanged on property changed notifications. /// /// The object type containing the property specified in the expression. /// The property expression. Example: ObservesProperty(() => PropertyName). /// The current instance of DelegateCommand public DelegateCommand ObservesProperty(Expression> propertyExpression) { ObservesPropertyInternal(propertyExpression); return this; } /// /// Observes a property that is used to determine if this command can execute, and if it implements INotifyPropertyChanged it will automatically call DelegateCommandBase.RaiseCanExecuteChanged on property changed notifications. /// /// The property expression. Example: ObservesCanExecute((o) => PropertyName). /// The current instance of DelegateCommand public DelegateCommand ObservesCanExecute(Expression> canExecuteExpression) { ObservesCanExecuteInternal(canExecuteExpression); return this; } /// /// Executes the command. /// public virtual Task Execute() { return Execute(null); } /// /// Determines if the command can be executed. /// /// Returns if the command can execute, otherwise returns . public virtual bool CanExecute() { return CanExecute(null); } #region private constructors protected DelegateCommand(Func executeMethod) : this(executeMethod, () => true) { } protected DelegateCommand(Func executeMethod, Func canExecuteMethod) : base((o) => executeMethod(), (o) => canExecuteMethod()) { if (executeMethod == null || canExecuteMethod == null) throw new ArgumentNullException(nameof(executeMethod), Resources.DelegateCommandDelegatesCannotBeNull); } #endregion } internal static class Resources { internal static readonly string DelegateCommandDelegatesCannotBeNull = "Neither the executeMethod nor the canExecuteMethod delegates can be null."; internal static readonly string DelegateCommandInvalidGenericPayloadType = @"T for DelegateCommand is not an object nor Nullable."; internal static readonly string PropertySupport_NotMemberAccessExpression_Exception = "The expression is not a member access expression."; internal static readonly string PropertySupport_ExpressionNotProperty_Exception = "The member access expression does not access a property."; internal static readonly string PropertySupport_StaticExpression_Exception ="The referenced property is a static property."; } } ================================================ FILE: Networking/ReferenceApplication.Core/MvvmLight/DelegateCommandBase.cs ================================================ using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq.Expressions; using System.Threading.Tasks; using System.Windows.Input; using System.Threading; namespace UAOOI.Networking.ReferenceApplication.Core.MvvmLight { /// /// An whose delegates can be attached for and . /// public abstract class DelegateCommandBase : ICommand { #region constructors /// /// Creates a new instance of a , specifying both the execute action and the can execute function. /// /// The to execute when is invoked. /// The to invoked when is invoked. protected DelegateCommandBase(Action executeMethod, Func canExecuteMethod) { if (executeMethod == null || canExecuteMethod == null) throw new ArgumentNullException(nameof(executeMethod), Resources.DelegateCommandDelegatesCannotBeNull); m_ExecuteMethod = (arg) => { executeMethod(arg); return Task.Delay(0); }; m_CanExecuteMethod = canExecuteMethod; m_SynchronizationContext = SynchronizationContext.Current; } /// /// Creates a new instance of a , specifying both the Execute action as an awaitable Task and the CanExecute function. /// /// The to execute when is invoked. /// The to invoked when is invoked. protected DelegateCommandBase(Func executeMethod, Func canExecuteMethod) { if (executeMethod == null || canExecuteMethod == null) throw new ArgumentNullException(nameof(executeMethod), Resources.DelegateCommandDelegatesCannotBeNull); m_ExecuteMethod = executeMethod; m_CanExecuteMethod = canExecuteMethod; m_SynchronizationContext = SynchronizationContext.Current; } #endregion #region ICommand /// /// Occurs when changes occur that affect whether or not the command should execute. /// public virtual event EventHandler CanExecuteChanged; /// /// Raises so every command invoker can requery to check if the command can execute. /// Note that this will trigger the execution of once for each invoker. /// public void RaiseCanExecuteChanged() { OnCanExecuteChanged(); } /// /// Defines the method to be called when the command is invoked. /// /// Data used by the command. If the command does not require data to be passed, this object can be set to null. async void ICommand.Execute(object parameter) { await Execute(parameter); } bool ICommand.CanExecute(object parameter) { return CanExecute(parameter); } #endregion #region private protected readonly Func m_ExecuteMethod; protected Func m_CanExecuteMethod; /// /// Executes the command with the provided parameter by invoking the supplied during construction. /// /// protected virtual async Task Execute(object parameter) { await m_ExecuteMethod(parameter); } /// /// Determines if the command can execute with the provided parameter by invoking the supplied during construction. /// /// The parameter to use when determining if this command can execute. /// Returns if the command can execute. otherwise. protected virtual bool CanExecute(object parameter) { return m_CanExecuteMethod(parameter); } /// /// Observes a property that implements INotifyPropertyChanged, and automatically calls DelegateCommandBase.RaiseCanExecuteChanged on property changed notifications. /// /// The object type containing the property specified in the expression. /// The property expression. Example: ObservesProperty(() => PropertyName). /// The current instance of DelegateCommand /// /// Raises so every command invoker can requery . /// protected virtual void OnCanExecuteChanged() { EventHandler handler = CanExecuteChanged; if (handler != null) { if (m_SynchronizationContext != null && m_SynchronizationContext != SynchronizationContext.Current) m_SynchronizationContext.Post((o) => handler.Invoke(this, EventArgs.Empty), null); else handler.Invoke(this, EventArgs.Empty); } } protected internal void ObservesPropertyInternal(Expression> propertyExpression) { AddPropertyToObserve(PropertySupport.ExtractPropertyName(propertyExpression)); HookInpc(propertyExpression.Body as MemberExpression); } /// /// Observes a property that is used to determine if this command can execute, and if it implements INotifyPropertyChanged it will automatically call DelegateCommandBase.RaiseCanExecuteChanged on property changed notifications. /// /// The property expression. Example: ObservesCanExecute((o) => PropertyName). /// The current instance of DelegateCommand protected internal void ObservesCanExecuteInternal(Expression> canExecuteExpression) { m_CanExecuteMethod = canExecuteExpression.Compile(); AddPropertyToObserve(PropertySupport.ExtractPropertyNameFromLambda(canExecuteExpression)); HookInpc(canExecuteExpression.Body as MemberExpression); } protected void HookInpc(MemberExpression expression) { if (expression == null) return; if (m_NotifyPropertyChangedInstance == null) { ConstantExpression constantExpression = expression.Expression as ConstantExpression; if (constantExpression != null) { m_NotifyPropertyChangedInstance = constantExpression.Value as INotifyPropertyChanged; if (m_NotifyPropertyChangedInstance != null) m_NotifyPropertyChangedInstance.PropertyChanged += Inpc_PropertyChanged; } } } protected void AddPropertyToObserve(string property) { if (m_PropertiesToObserve.Contains(property)) throw new ArgumentException(String.Format("{0} is already being observed.", property)); m_PropertiesToObserve.Add(property); } private void Inpc_PropertyChanged(object sender, PropertyChangedEventArgs e) { if (m_PropertiesToObserve.Contains(e.PropertyName)) RaiseCanExecuteChanged(); } private SynchronizationContext m_SynchronizationContext = null; readonly HashSet m_PropertiesToObserve = new HashSet(); private INotifyPropertyChanged m_NotifyPropertyChangedInstance = null; #endregion } } ================================================ FILE: Networking/ReferenceApplication.Core/MvvmLight/ObservableObject.cs ================================================  using System; using System.ComponentModel; using System.Diagnostics; using System.Reflection; using System.Linq.Expressions; using System.Linq; using System.Collections.Generic; using System.Runtime.CompilerServices; namespace UAOOI.Networking.ReferenceApplication.Core.MvvmLight { /// /// A base class for objects of which the properties must be observable. /// public class ObservableObject : INotifyPropertyChanged { #region INotifyPropertyChanged /// /// Occurs after a property value changes. /// public event PropertyChangedEventHandler PropertyChanged; #endregion /// /// Occurs before a property value changes. /// public event PropertyChangingEventHandler PropertyChanging; /// /// Verifies that a property name exists in this ViewModel. This method /// can be called before the property is used, for instance before /// calling RaisePropertyChanged. It avoids errors when a property name /// is changed but some places are missed. /// /// This method is only active in DEBUG mode. /// The name of the property that will be checked. [Conditional("DEBUG")] public void VerifyPropertyName(string propertyName) { Type _Type = GetType(); if (!string.IsNullOrEmpty(propertyName) && _Type.GetProperty(propertyName) == null) { ICustomTypeDescriptor _descriptor = this as ICustomTypeDescriptor; if (_descriptor != null) { if (_descriptor.GetProperties().Cast().Any(property => property.Name == propertyName)) return; } throw new ArgumentException("Property not found", propertyName); } } /// /// Raises the PropertyChanging event if needed. /// /// If the propertyName parameter /// does not correspond to an existing property on the current class, an /// exception is thrown in DEBUG configuration only. /// The name of the property that /// changed. public virtual void RaisePropertyChanging(string propertyName) { VerifyPropertyName(propertyName); PropertyChanging?.Invoke(this, new PropertyChangingEventArgs(propertyName)); } /// /// Raises the PropertyChanged event if needed. /// /// If the propertyName parameter /// does not correspond to an existing property on the current class, an /// exception is thrown in DEBUG configuration only. /// The name of the property that /// changed. public virtual void RaisePropertyChanged(string propertyName) { VerifyPropertyName(propertyName); PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } /// /// Raises the PropertyChanging event if needed. /// /// The type of the property that /// changes. /// An expression identifying the property /// that changes. public virtual void RaisePropertyChanging(Expression> propertyExpression) { PropertyChangingEventHandler handler = PropertyChanging; if (handler != null) { string propertyName = GetPropertyName(propertyExpression); handler(this, new PropertyChangingEventArgs(propertyName)); } } /// /// Raises the PropertyChanged event if needed. /// /// The type of the property that /// changed. /// An expression identifying the property that changed. public virtual void RaisePropertyChanged(Expression> propertyExpression) { PropertyChangedEventHandler handler = PropertyChanged; if (handler == null) return; string propertyName = GetPropertyName(propertyExpression); if (!string.IsNullOrEmpty(propertyName)) RaisePropertyChanged(propertyName); } /// /// Raises the PropertyChanged event if needed, and broadcasts a /// PropertyChangedMessage using the Messenger instance (or the /// static default instance if no Messenger instance is available). /// /// The type of the property that /// changed. /// The name of the property that /// changed. /// The property's value before the change /// occurred. /// The property's value after the change /// occurred. public virtual void RaisePropertyChanged([CallerMemberName] string propertyName = null, T oldValue = default(T), T newValue = default(T)) { if (string.IsNullOrEmpty(propertyName)) throw new ArgumentException("This method cannot be called with an empty string", "propertyName"); RaisePropertyChanged(propertyName); } /// /// Raises the PropertyChanged event if needed, and broadcasts a /// PropertyChangedMessage using the Messenger instance (or the /// static default instance if no Messenger instance is available). /// /// The type of the property that /// changed. /// An expression identifying the property /// that changed. /// The property's value before the change /// occurred. /// The property's value after the change /// occurred. public virtual void RaisePropertyChanged(Expression> propertyExpression, T oldValue, T newValue) { RaisePropertyChanged(propertyExpression); } /// /// Assigns a new value to the property. Then, raises the /// PropertyChanged event if needed, and broadcasts a /// PropertyChangedMessage using the Messenger instance (or the /// static default instance if no Messenger instance is available). /// /// The type of the property that /// changed. /// An expression identifying the property /// that changed. /// The field storing the property's value. /// The property's value after the change /// occurred. protected bool Set(Expression> propertyExpression, ref T field, T newValue) { if (EqualityComparer.Default.Equals(field, newValue)) return false; RaisePropertyChanging(propertyExpression); T oldValue = field; field = newValue; RaisePropertyChanged(propertyExpression, oldValue, field); return true; } /// /// Assigns a new value to the property. Then, raises the /// PropertyChanged event if needed, and broadcasts a /// PropertyChangedMessage using the Messenger instance (or the /// static default instance if no Messenger instance is available). /// /// The type of the property that /// changed. /// The name of the property that /// changed. /// The field storing the property's value. /// The property's value after the change /// occurred. protected bool Set(string propertyName, ref T field, T newValue = default(T)) { if (EqualityComparer.Default.Equals(field, newValue)) return false; RaisePropertyChanging(propertyName); var oldValue = field; field = newValue; RaisePropertyChanged(propertyName, oldValue, field); return true; } /// /// Extracts the name of a property from an expression. /// /// The type of the property. /// An expression returning the property's name. /// The name of the property returned by the expression. /// If the expression is null. /// If the expression does not represent a property. protected static string GetPropertyName(Expression> propertyExpression) { if (propertyExpression == null) throw new ArgumentNullException("propertyExpression"); MemberExpression body = propertyExpression.Body as MemberExpression; if (body == null) throw new ArgumentException("Invalid argument", "propertyExpression"); PropertyInfo property = body.Member as PropertyInfo; if (property == null) throw new ArgumentException("Argument is not a property", "propertyExpression"); return property.Name; } } } ================================================ FILE: Networking/ReferenceApplication.Core/MvvmLight/PropertySupport.cs ================================================ using System; using System.Linq.Expressions; using System.Reflection; namespace UAOOI.Networking.ReferenceApplication.Core.MvvmLight { /// /// Provides support for extracting property information based on a property expression. /// public static class PropertySupport { /// /// Extracts the property name from a property expression. /// /// The object type containing the property specified in the expression. /// The property expression (e.g. p => p.PropertyName) /// The name of the property. /// Thrown if the is null. /// Thrown when the expression is:
/// Not a
/// The does not represent a property.
/// Or, the property is static. ///
public static string ExtractPropertyName(Expression> propertyExpression) { if (propertyExpression == null) throw new ArgumentNullException(nameof(propertyExpression)); return ExtractPropertyNameFromLambda(propertyExpression); } /// /// Extracts the property name from a LambdaExpression. /// /// The LambdaExpression /// The name of the property. /// Thrown if the is null. /// Thrown when the expression is:
/// The does not represent a property.
/// Or, the property is static. ///
internal static string ExtractPropertyNameFromLambda(LambdaExpression expression) { if (expression == null) throw new ArgumentNullException(nameof(expression)); MemberExpression memberExpression = expression.Body as MemberExpression; if (memberExpression == null) throw new ArgumentException(Resources.PropertySupport_NotMemberAccessExpression_Exception, nameof(expression)); PropertyInfo property = memberExpression.Member as PropertyInfo; if (property == null) throw new ArgumentException(Resources.PropertySupport_ExpressionNotProperty_Exception, nameof(expression)); MethodInfo getMethod = property.GetMethod; if (getMethod.IsStatic) throw new ArgumentException(Resources.PropertySupport_StaticExpression_Exception, nameof(expression)); return memberExpression.Member.Name; } } } ================================================ FILE: Networking/ReferenceApplication.Core/Networking.ReferenceApplication.Core.csproj ================================================ netstandard2.0 UAOOI.Networking.ReferenceApplication.Core UAOOI.Networking.ReferenceApplication.Core 4.0.1 true OPCUAOOIKey.snk Object Oriented Internet Copyright MPostol (c) 2018 commsvr.com MPostol https://github.com/mpostol/OPC-UA-OOI/blob/master/license.md https://commsvr.gitbook.io/ooi https://github.com/mpostol/OPC-UA-OOI OOI Reference Application, Object Oriented Internet, OPC UA, Reactive Networking. This library provides an implementation of a core functionality required by the `ReferenceApplication` and all its components that are helpful in writing well-structured and maintainable applications, including: - MVVM pattern - logging 4.0.1.1 1701;1702;1705;IDE0001;IDE0002;IDE0003 ================================================ FILE: Networking/ReferenceApplication.Core/ProducerViewModel.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2018, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System; using System.ComponentModel.Composition; using System.Windows.Input; using UAOOI.Networking.ReferenceApplication.Core.MvvmLight; namespace UAOOI.Networking.ReferenceApplication.Core { /// /// class ProducerViewModel - defines a ViewModel part to be used by the producer to expose diagnostic information on the UI. /// [Export()] [PartCreationPolicy(CreationPolicy.Shared)] public class ProducerViewModel : ObservableObject { #region API /// /// Initializes a new instance of the class. /// public ProducerViewModel() { ProducerRestartCommand = new DelegateCommand(() => { }); } /// /// Gets or sets the producer error message. /// /// The producer error message. public string ProducerErrorMessage { get { return b_ProducerErrorMessage; } set { b_ProducerErrorMessage = value; RaisePropertyChanged("ProducerErrorMessage", b_ProducerErrorMessage, value); } } /// /// Gets or sets the producer restart command. While assigned by /// /// The producer restart command. public ICommand ProducerRestartCommand { get { return b_ProducerRestartCommand; } set { b_ProducerRestartCommand = value; RaisePropertyChanged("ProducerRestartCommand", b_ProducerRestartCommand, value); } } /// /// Changes the producer command. /// /// The action to be executed in case of event. public void ChangeProducerCommand(Action action) { ProducerRestartCommand = new DelegateCommand(action); } #endregion #region private private string b_ProducerErrorMessage; private ICommand b_ProducerRestartCommand; #endregion } } ================================================ FILE: Networking/ReferenceApplication.Core/README.md ================================================ # `ReferenceApplication` Utilities ## Getting Started The library `UAOOI.Networking.ReferenceApplication.Core` provides an implementation of a core functionality required by the `ReferenceApplication` and all its components that are helpful in writing well-structured and maintainable applications, including: - MVVM pattern - logging ## Current release > Note; This library is not considered to be published as the NuGet package. ================================================ FILE: Networking/SemanticData/Association.cd ================================================  AAAAAQAMBAgAAQQEAAAAAEAAAAAEAAAAAEAABAAAQAA= Association.cs AAAAAAAEBAgAAAAAEAAAAAAAAQAEAAAAAAAAAAAoAAA= ConsumerAssociation.cs AAAAAAAEBCgAEAAAAGBAAAgICAAEAQABEAAAAgQkAAQ= ProducerAssociation.cs AssociationsCollection.cs AAQAAAAAAAgAAQAAAAAAAAAAEAAAAAAAAAAAAAAAAAA= AssociationsCollection.cs AAAQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAA= DataRepository\IProducerBinding.cs AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAA= DataRepository\IConsumerBinding.cs AAAIAAAARAAAAAAAAAAAAAAAgQAUAAAAAAAAAAAAAAA= DataRepository\IBinding.cs ================================================ FILE: Networking/SemanticData/Association.cs ================================================ //____________________________________________________________________________ // // Copyright (C) 2020, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //____________________________________________________________________________ using System; using UAOOI.Configuration.Networking.Serialization; using UAOOI.Networking.Core; using UAOOI.Networking.SemanticData.Common; using UAOOI.Networking.SemanticData.Diagnostics; using UAOOI.Networking.SemanticData.MessageHandling; namespace UAOOI.Networking.SemanticData { /// /// Class Association - provides basic implementation of the association between the data set and message centric communication infrastructure. /// It represents configuration and bindings to the external resources. /// internal abstract class Association : IComparable { #region constructor /// /// Initializes a new instance of the class. /// The class captures all bindings between the message content and local resources. /// /// The UA Semantic Data triple representation. It id not used by current implementation. /// A readable alias name for this instance to be used on User Interface. /// Depending on the implementation this name is used to filter packets against the destination. /// data argument must not be null /// or /// aliasName argument must not be null /// data argument must not be null /// or /// aliasName argument must not be null /// The DataSet has the following identifiers internal Association(ISemanticData data, string aliasName) { DataDescriptor = data ?? throw new NullReferenceException("data argument must not be null"); if (string.IsNullOrEmpty(aliasName)) throw new NullReferenceException("aliasName argument must not be null"); m_AliasName = aliasName; p_State = new AssociationStateNoConfiguration(this); } #endregion constructor #region API /// /// Occurs when state of this instance changed. /// internal event EventHandler StateChangedEventHandler; /// /// Gets the data descriptor captured by an instance. /// /// The instance representing UA Semantic Data triple https://github.com/mpostol/OPC-UA-OOI/blob/master/SemanticData/README.MD. internal ISemanticData DataDescriptor { get; private set; } /// /// Gets the current operational state of this instance /// /// The state of this instance . internal IAssociationState State { get => p_State; private set { p_State = value; RaiseStateChangedEventHandler(new AssociationStateChangedEventArgs(value.State)); } } /// /// Initializes this instance. /// internal void Initialize() { try { InitializeCommunication(); State = new AssociationStateDisabled(this); } catch (Exception _ex) { Diagnostics.ReactiveNetworkingEventSource.Log.LogException(nameof(Association), nameof(Initialize), _ex); State = new AssociationStateError(this); } } /// /// Adds the message handler. It must initialize binding between the and the local data resources. /// /// /// The Subscriber may have configured filters (like a PublisherId, DataSetWriterId or a DataSetClassId) so that it can drop all messages that do not match the filter /// /// The message handler. /// The configuration. protected internal virtual void AddMessageHandler(IMessageHandler messageHandler, AssociationConfiguration configuration) { //TODO How to configure ProducerId #148 DataSetId = new DataSelector() { DataSetWriterId = configuration.DataSetWriterId, PublisherId = configuration.PublisherId }; } #endregion API #region IComparable /// /// Compares the current instance with another object of the same type and returns an integer that indicates whether the current instance precedes, follows, or occurs in the same position in the sort order as the other object. /// /// An object to compare with this instance. /// A value that indicates the relative order of the objects being compared. The return value has these meanings: Value Meaning Less than zero This instance precedes in the sort order. Zero This instance occurs in the same position in the sort order as . Greater than zero This instance follows in the sort order. public int CompareTo(object obj) { return DataDescriptor.Guid.CompareTo(((Association)obj).DataDescriptor.Guid); } #endregion IComparable #region override Object /// /// Returns a that represents this object alias name. /// /// A that represents this instance alias name. public override string ToString() { return m_AliasName; } #endregion override Object #region private //class private abstract class AssociationStateBase : IAssociationState { public AssociationStateBase(Association host) { Host = host; } public abstract HandlerState State { get; } public virtual void Enable() { Host.OnEnabling(); Host.State = new AssociationStateOperational(Host); } public virtual void Disable() { Host.OnDisabling(); Host.State = new AssociationStateDisabled(Host); } protected Association Host { get; private set; } } private class AssociationStateDisabled : AssociationStateBase { public AssociationStateDisabled(Association host) : base(host) { } public override HandlerState State => HandlerState.Disabled; public override void Enable() { base.Enable(); } public override void Disable() { throw new InvalidOperationException("Disable call is not allowed in the Disabled state"); } } private class AssociationStateOperational : AssociationStateBase { public AssociationStateOperational(Association host) : base(host) { } public override HandlerState State => HandlerState.Operational; public override void Enable() { throw new InvalidOperationException("Enable call is not allowed in the Operational state."); } public override void Disable() { base.Disable(); } } private class AssociationStateNoConfiguration : AssociationStateBase { public AssociationStateNoConfiguration(Association host) : base(host) { } public override HandlerState State => HandlerState.NoConfiguration; public override void Enable() { throw new InvalidOperationException("Enable call is not allowed in the NoConfiguration state."); } public override void Disable() { throw new InvalidOperationException("Disable call is not allowed in the NoConfiguration state."); } } private class AssociationStateError : AssociationStateBase { public AssociationStateError(Association host) : base(host) { } public override HandlerState State => HandlerState.Error; public override void Enable() { throw new InvalidOperationException("Enable call is not allowed in the Error state."); } public override void Disable() { throw new InvalidOperationException("Disable call is not allowed in the Error state."); } } //var private IAssociationState p_State = null; private readonly string m_AliasName = string.Empty; #endregion private #region protected /// /// Gets the data set identifier. /// /// The data set identifier. protected DataSelector DataSetId { get; private set; } /// /// Raises the state changed event handler. /// /// The instance containing the event data. protected void RaiseStateChangedEventHandler(AssociationStateChangedEventArgs args) { EventHandler _locEven = StateChangedEventHandler; if (_locEven == null) return; _locEven(this, args); } /// /// Initializes the communication. /// protected abstract void InitializeCommunication(); /// /// Called when the association is enabling. /// protected abstract void OnEnabling(); /// /// Called when the association is disabling. /// protected abstract void OnDisabling(); #endregion protected } } ================================================ FILE: Networking/SemanticData/AssociationsCollection.cs ================================================  using System; using System.Collections.Generic; using UAOOI.Configuration.Networking.Serialization; using UAOOI.Networking.SemanticData.Common; using UAOOI.Networking.SemanticData.Diagnostics; using UAOOI.Networking.SemanticData.MessageHandling; namespace UAOOI.Networking.SemanticData { /// /// Class AssociationsCollection - a dictionary containing all instances /// /// /// Current implementation does not support deletion of the . If the association is not longer needed call Disable on the object. /// /// /// Current implementation does not support handling of the configuration changes. /// internal class AssociationsCollection : Dictionary { #region interna API /// /// Creates the associations and populates the new dictionary with the associations instances created using the configuration . /// /// The configuration used to populate the collection. /// The binding factory responsible to create and return instance for each association. /// The encoding factory responsible to updated the created by provisioning all information necessary for encoding/decoding including . /// New dictionary of type . /// Alias; Alias of any must be unique. internal static AssociationsCollection CreateAssociations(DataSetConfiguration[] configuration, IBindingFactory bindingFactory, IEncodingFactory encodingFactory) { AssociationsCollection _collection = new AssociationsCollection(); Association _newAssociation = null; foreach (DataSetConfiguration _dataSet in configuration) { if (_collection.ContainsKey(_dataSet.AssociationName)) throw new ArgumentOutOfRangeException("Alias", "Alias of any Association must be unique"); SemanticData _newSemanticData = new SemanticData(new Uri(_dataSet.InformationModelURI), _dataSet.DataSymbolicName, null, _dataSet.Id); switch (_dataSet.AssociationRole) { case AssociationRole.Consumer: _newAssociation = new ConsumerAssociation(_newSemanticData, _dataSet, bindingFactory, encodingFactory); break; case AssociationRole.Producer: _newAssociation = new ProducerAssociation(_newSemanticData, _dataSet.AssociationName, _dataSet, bindingFactory, encodingFactory); break; default: break; } _collection.Add(_dataSet.AssociationName, _newAssociation); } return _collection; } /// /// Adds the message handler to the selected by the . /// /// The message handler to be associated. /// The configuration. /// If this dictionary does not contain the key the request is skipped - no action is undertaken. internal void AddMessageHandler(IMessageHandler messageHandler, AssociationConfiguration configuration) { if (!this.ContainsKey(configuration.AssociationName)) return; Association _ass = this[configuration.AssociationName]; _ass.AddMessageHandler(messageHandler, configuration); } /// /// Handles the configuration modifications. /// /// The sender of the modification. /// The instance containing the event data. /// /// Limitation: It is intentionally not implemented - it is placeholder for further development in case there need be. /// This handler could be called after recognition of of any modification over the out of bound communication, e.g. OPC UA Client/Server session or configuration file. /// /// It is intentionally not implemented - it is placeholder for further development in case there need be. internal static void OnConfigurationChangeHandler(object sender, EventArgs e) { throw new NotImplementedException("It is intentionally not implemented"); } /// /// Initializes this instance - initializes and enables all the object in this collection. /// internal void Initialize() { foreach (Association _ax in this.Values) { try { _ax.Initialize(); _ax.State.Enable(); } catch (Exception _ex) { Diagnostics.ReactiveNetworkingEventSource.Log.LogException(nameof(AssociationsCollection), nameof(Initialize), _ex); throw; } }; } #endregion #region private /// /// Class SemanticData - private implementation of the /// //TODO consider internal implementation private class SemanticData : ISemanticData { public SemanticData(Uri identifier, string symbolicName, IComparable nodeId, Guid guid) { Identifier = identifier; SymbolicName = symbolicName; NodeId = NodeId; Guid = guid; } public Uri Identifier { get; private set; } public string SymbolicName { get; private set; } public IComparable NodeId { get; private set; } public Guid Guid { get; private set; } } private AssociationsCollection() { } #endregion } } ================================================ FILE: Networking/SemanticData/Common/AssociationStateChangedEventArgs.cs ================================================ //____________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //____________________________________________________________________________ using System; using UAOOI.Networking.Core; namespace UAOOI.Networking.SemanticData.Common { /// /// Class AssociationStateChangedEventArgs represents the class containing event data representing current configurable object state . /// public class AssociationStateChangedEventArgs : EventArgs { /// /// Initializes a new instance of the class. /// /// The state of the configurable object state . public AssociationStateChangedEventArgs(HandlerState state) { State = state; } /// /// Gets current state of the configurable object. /// /// The state . public HandlerState State { get; private set; } } } ================================================ FILE: Networking/SemanticData/Common/IDataUniqueIdentifier.cs ================================================  using System; namespace UAOOI.Networking.SemanticData.Common { /// /// Class IDataUniqueIdentifier - instance of this interface provides globally unique identifier (GUID) of the data. /// public interface IDataUniqueIdentifier { /// /// Gets the globally unique identifier (GUID) of the data set. /// /// The globally unique identifier of the data set as a collection of values. Guid Guid { get; } } } ================================================ FILE: Networking/SemanticData/Common/ISemanticData.cs ================================================  using System; namespace UAOOI.Networking.SemanticData.Common { /// /// Interface ISemanticData - represents a data item conforming to the UA Semantic Data paradigm. /// public interface ISemanticData : IDataUniqueIdentifier { /// /// Gets the global unique identifier of the Information Model providing definition of the /// Semantic Data as an object representation a uniform resource identifier . /// /// /// Using the URI as a standard for global identifiers allows for a worldwide reference for any data defined by the OPC UA Information Model. /// This means that we can tell when any two applications anywhere in the world are referring to the same data. /// Using URI, therefore, we can introduce the notion of the global data identity. The data identity allows creation of variety of dictionaries collecting /// supplementary information independently and outside of the server Address Space context. /// /// An object of capturing the global unique identifier of this data instance. Uri Identifier { get; } /// /// Gets the symbolic name of the instance node that is root of hierarchy of nodes creating the Semantic Data. /// /// /// /// The symbolic name of each node is its BrowseName, or, when it is part of another node, the BrowseName of the other node, a "_", and the BrowseName of itself. /// "Part of” means that the whole has a HasProperty or HasComponent reference to its part. Since all nodes not being part of another node have a unique name, the symbolic name is unique. /// /// /// Root element must not be an instance declaration. /// /// /// The representing the symbolic name of the root instance node. string SymbolicName { get; } /// /// Stores an identifier for a node in a server's address space. /// /// /// /// Please refer to OPC Specifications: /// /// Address Space Model section 8.2 /// Address Space Model section 5.2.2 /// /// /// /// Stores the id of a Node, which resides within the server's address space. ///
/// /// The NodeId can be either: /// /// /// /// /// [] /// ///
/// /// Important: Keep in mind that the NodeId should be unique such that no two nodes within an address-space share the same value. /// /// /// In the Address Space of the server the NodeId can be assigned to a particular namespace index. The assumption is /// that the host of this object will manage that directly using the . ///
///
IComparable NodeId { get; } } } ================================================ FILE: Networking/SemanticData/ConsumerAssociation.cs ================================================ //____________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //____________________________________________________________________________ using System; using System.Linq; using UAOOI.Networking.SemanticData.DataRepository; using UAOOI.Networking.SemanticData.MessageHandling; using UAOOI.Configuration.Networking.Serialization; using UAOOI.Networking.SemanticData.Common; using UAOOI.Networking.Core; namespace UAOOI.Networking.SemanticData { /// /// Class ConsumerAssociation - implements the association for the consumer side. /// internal class ConsumerAssociation : Association { #region constructors /// /// Initializes a new instance of the class. /// /// The data. /// The members. /// The binding factory. /// The encoding factory. internal ConsumerAssociation(ISemanticData data, DataSetConfiguration dataSet, IBindingFactory bindingFactory, IEncodingFactory encodingFactory) : base(data, dataSet.AssociationName) { m_DataSetBindings = dataSet.DataSet.Select(x => x.GetConsumerBinding4DataMember(dataSet.RepositoryGroup, bindingFactory, encodingFactory)).ToArray(); } #endregion #region API internal void AddMessageReader(IMessageReader messageReader) { if (messageReader == null) throw new ArgumentNullException("messageReader"); messageReader.ReadMessageCompleted += MessageHandler; } internal void RemoveMessageReader(IMessageReader messageReader) { if (messageReader == null) throw new ArgumentNullException("messageReader"); messageReader.ReadMessageCompleted -= MessageHandler; } #endregion #region Association protected override void InitializeCommunication() { //Do nothing; } protected internal override void AddMessageHandler(IMessageHandler messageHandler, AssociationConfiguration configuration) { base.AddMessageHandler(messageHandler, configuration); AddMessageReader(messageHandler as IMessageReader); } protected override void OnEnabling() { foreach (IBinding _va in m_DataSetBindings) _va.OnEnabling(); } protected override void OnDisabling() { foreach (IBinding _va in m_DataSetBindings) _va.OnDisabling(); } #endregion #region private private IConsumerBinding[] m_DataSetBindings = null; private void MessageHandler(object sender, MessageEventArg messageArg) { //TODO ConsumerAssociation - skip message if not operational #133 if (this.State.State != HandlerState.Operational) return; //TODO Skip message if no one is interested to process it #135 //TODO How to configure ProducerId #148 if ((messageArg.DataSetId) != DataSetId.DataSetWriterId || (messageArg.ProducerId != DataSetId.PublisherId)) return; messageArg.MessageContent.UpdateMyValues(x => m_DataSetBindings[x], m_DataSetBindings.Length); } #endregion } } ================================================ FILE: Networking/SemanticData/DataManagementSetup.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2018, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System; using UAOOI.Configuration.Networking; using UAOOI.Configuration.Networking.Serialization; using UAOOI.Networking.SemanticData.MessageHandling; using UAOOI.Networking.SemanticData.Diagnostics; using UAOOI.Networking.Core; namespace UAOOI.Networking.SemanticData { /// /// Class DataManagementSetup - it is place holder to gather all external injection points used to initialize /// the communication and bind to local resources. /// public abstract class DataManagementSetup : IDisposable { #region Injection points /// /// Gets or sets the binding factory. /// /// The binding factory. public IBindingFactory BindingFactory { get; set; } /// /// Gets or sets the encoding factory. /// /// The encoding factory. public IEncodingFactory EncodingFactory { get; set; } /// /// Gets or sets the message handler factory. /// /// The message handler factory. public IMessageHandlerFactory MessageHandlerFactory { get; set; } /// /// Gets or sets the configuration factory. /// /// The configuration factory. public IConfigurationFactory ConfigurationFactory { get; set; } #endregion #region Internal control entry points /// /// Gets the associations collection. /// /// The associations collection. internal AssociationsCollection AssociationsCollection { get; private set; } /// /// Gets the message handlers collection. /// /// The message handlers collection. internal MessageHandlersCollection MessageHandlersCollection { get; private set; } #endregion #region private /// /// Starts this instance - Initializes the data set infrastructure, enable all associations and starts pumping the data; /// /// /// BindingFactory /// or /// EncodingFactory /// or /// MessageHandlerFactory /// or /// ConfigurationFactory /// protected void Start() { try { Initialize(); Run(); } catch (Exception _ex) { Diagnostics.ReactiveNetworkingEventSource.Log.LogException(nameof(DataManagementSetup), nameof(Start), _ex); throw; } } /// /// Initializes the data set infrastructure. /// private void Initialize() { if (BindingFactory == null) throw new ArgumentNullException(nameof(BindingFactory)); if (EncodingFactory == null) throw new ArgumentNullException(nameof(EncodingFactory)); if (MessageHandlerFactory == null) throw new ArgumentNullException(nameof(MessageHandlerFactory)); if (ConfigurationFactory == null) throw new ArgumentNullException(nameof(ConfigurationFactory)); DisposeMessageHandlersCollection(); ConfigurationData _configuration = ConfigurationFactory.GetConfiguration(); AssociationsCollection = AssociationsCollection.CreateAssociations(_configuration.DataSets, BindingFactory, EncodingFactory); ConfigurationFactory.OnAssociationConfigurationChange += AssociationsCollection.OnConfigurationChangeHandler; MessageHandlersCollection = MessageHandlersCollection.CreateMessageHandlers(_configuration.MessageHandlers, MessageHandlerFactory, EncodingFactory, AssociationsCollection.AddMessageHandler); ConfigurationFactory.OnMessageHandlerConfigurationChange += MessageHandlersCollection.OnConfigurationChangeHandler; } /// /// Initialize and enable all associations ans start pumping the data /// private void Run() { if (AssociationsCollection == null) throw new ArgumentNullException(nameof(AssociationsCollection)); if (MessageHandlersCollection == null) throw new ArgumentNullException(nameof(MessageHandlersCollection)); this.AssociationsCollection.Initialize(); this.MessageHandlersCollection.Run(); } #endregion #region IDisposable Support private bool disposedValue = false; // To detect redundant calls protected virtual void Dispose(bool disposing) { if (disposedValue) return; if (disposing) { DisposeMessageHandlersCollection(); } // TODO: free unmanaged resources (unmanaged objects) and override a finalizer below. // TODO: set large fields to null. disposedValue = true; } private void DisposeMessageHandlersCollection() { if (MessageHandlersCollection == null) return; foreach (IMessageHandler _handler in MessageHandlersCollection.Values) _handler.Dispose(); MessageHandlersCollection = null; //to make sure no one will use them anymore. } // This code added to correctly implement the disposable pattern. public void Dispose() { // Do not change this code. Put cleanup code in Dispose(bool disposing) above. Dispose(true); } #endregion } } ================================================ FILE: Networking/SemanticData/DataMemberConfiguration.helpers.cs ================================================ using UAOOI.Networking.SemanticData.DataRepository; using UAOOI.Configuration.Networking.Serialization; namespace UAOOI.Networking.SemanticData { internal static class DataMemberConfigurationHelpers { /// /// Gets the instance for data member. /// /// The field description captured by object of type . /// The repository group. /// The binding factory. /// The encoding factory. /// An instance of type. internal static IConsumerBinding GetConsumerBinding4DataMember(this FieldMetaData member, string repositoryGroup, IBindingFactory bindingFactory, IEncodingFactory encodingFactory) { IConsumerBinding _binding = bindingFactory.GetConsumerBinding(repositoryGroup, member.ProcessValueName, member.TypeInformation); encodingFactory.UpdateValueConverter(_binding, repositoryGroup, member.TypeInformation); return _binding; } /// /// Gets the consumer binding for data member. /// /// The field description captured bu object of type . /// The repository group. /// The binding factory. /// The encoding factory. /// An instance of type. internal static IProducerBinding GetProducerBinding4DataMember(this FieldMetaData member, string repositoryGroup, IBindingFactory bindingFactory, IEncodingFactory encodingFactory) { IProducerBinding _binding = bindingFactory.GetProducerBinding(repositoryGroup, member.ProcessValueName, member.TypeInformation); encodingFactory.UpdateValueConverter(_binding, repositoryGroup, member.TypeInformation); return _binding; } } } ================================================ FILE: Networking/SemanticData/DataRepository/Binding.cs ================================================ //____________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //____________________________________________________________________________ using System; using System.Globalization; using UAOOI.Configuration.Networking.Serialization; using UAOOI.Networking.Core; using UAOOI.Networking.SemanticData.Common; namespace UAOOI.Networking.SemanticData.DataRepository { /// /// Class Binding - a generic implementation of the interface. /// The instance of this class is used to update a destination variable by an owner of this object. /// It captures an association targeted a variable that is to be updated by the user of this instance. /// It is assumed that the repository implements the interface and is the factory of this instance. /// public class Binding : IBinding { #region constructor /// /// Initializes a new instance of the class. /// /// The of the message field encoding. public Binding(UATypeInfo encoding) { m_MessageEncoding = encoding; } #endregion #region IBinding /// /// Gets the type of the message field encoding. /// /// The of the message field encoding. public UATypeInfo Encoding { get { return m_MessageEncoding; } } /// /// Sets the converter, which is used to provide a way to apply custom logic to a binding. /// /// The converter as an instance of the . IValueConverter IBinding.Converter { set { Converter = value; } } /// /// Gets or sets an optional parameter to be used in the converter logic or serialization process. /// /// The parameter to be used by the or by serialization process. object IBinding.Parameter { set { Parameter = value; } get { return Parameter; } } Object IBinding.FallbackValue { set { FallbackValue = value; } } /// /// Sets the culture of the conversion. /// /// The culture as an instance of the to be used by the . CultureInfo IBinding.Culture { set { Culture = value; } } /// /// Marks the process value enabled - signal that the update of the value is expected. /// void IBinding.OnEnabling() { RaiseHandlerState(HandlerState.Operational); } /// /// Marks the process value disabled - signal that the value will not be updated. /// void IBinding.OnDisabling() { RaiseHandlerState(HandlerState.Disabled); } #endregion #region public API /// /// Occurs when state changes]. /// public event EventHandler StateChangedEventHandler; #endregion #region private private readonly UATypeInfo m_MessageEncoding = null; /// /// Sets the converter, which is used to provide a way to apply custom logic to a binding. /// /// The converter as an instance of the . protected IValueConverter Converter { get; private set; } = null; /// /// Gets the culture. /// /// The culture. protected CultureInfo Culture { get; private set; } = null; /// /// Sets an optional parameter to be used in the converter logic. /// /// The parameter to be used by the . protected object Parameter { get; private set; } = null; /// /// Sets the value to use when the binding is unable to return a value. /// /// The fallback value. protected object FallbackValue { get; private set; } private void RaiseHandlerState(HandlerState state) { StateChangedEventHandler?.Invoke(this, new AssociationStateChangedEventArgs(state)); } #endregion } } ================================================ FILE: Networking/SemanticData/DataRepository/ConsumerBinding.cs ================================================  using System; using UAOOI.Configuration.Networking.Serialization; namespace UAOOI.Networking.SemanticData.DataRepository { /// /// Class ConsumerBinding - provide a basic implementation of the interface. /// It is an helper class to construct an object used by the consumer to save the data in the data repository. /// /// The type of the type. public class ConsumerBinding : Binding, IConsumerBinding { /// /// Initializes a new instance of the class. /// /// Captures a delegate used to assign new value to local resources. /// The of the message field encoding. public ConsumerBinding(Action assign, UATypeInfo encoding) : base(encoding) { AssignValueToRepository = assign; } #region IConsumerBinding /// /// Assigns the to the associated variable hosted by the target repository. /// /// The value to be assigned to the precess variable. void IConsumerBinding.Assign2Repository(object value) { if (this.Converter == null) AssignValueToRepository((type)value); else AssignValueToRepository((type)Converter.Convert(value, typeof(type), FallbackValue, Parameter, Culture)); } #endregion #region private /// /// Gets or sets the assign value to repository delegate. /// /// The assign value to repository. protected virtual Action AssignValueToRepository { set; get; } /// /// Initializes a new instance of the class. /// /// The of the message field encoding. protected ConsumerBinding(UATypeInfo encoding) : this(x => { }, encoding) { } #endregion } } ================================================ FILE: Networking/SemanticData/DataRepository/ConsumerBindingMonitoredValue.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2018, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using UAOOI.Configuration.Networking.Serialization; namespace UAOOI.Networking.SemanticData.DataRepository { /// /// Class ConsumerBindingMonitoredValue. This class cannot be inherited. /// It is helper class that implements a property ready to be used in the ViewModel class according to the MVVM pattern. /// The view model is an abstraction of the view that exposes public properties and commands. /// /// The type of property value. public sealed class ConsumerBindingMonitoredValue : ConsumerBinding, INotifyPropertyChanged { #region Model View ViewModel implementation /// /// Gets or sets the value. It is value holder to be used in the ViewModel class according to the MVVM pattern. /// The view model is an abstraction of the view that exposes public properties and commands. /// /// The value. public type Value { get { return b_Value; } set { PropertyChanged.RaiseHandler(value, ref b_Value, "Value", this); } } #endregion #region INotifyPropertyChanged /// /// Occurs when a property value changes. It is required for the ViewModel class according to the MVVM pattern. /// The view model is an abstraction of the view that exposes public properties and commands. /// public event PropertyChangedEventHandler PropertyChanged; #endregion #region creator /// /// Initializes a new instance of the class. /// It is used if the GetActionDelegate of teh base class is overridden. /// public ConsumerBindingMonitoredValue(UATypeInfo targetType) : base(targetType) { } /// /// Gets or sets the get a delegate encapsulating operation called to assign new value to the destination variable by the binding machine. /// /// The get action delegate. protected override Action AssignValueToRepository { get { return x => Value = x; } set { base.AssignValueToRepository = value; } } #endregion #region override object /// /// Returns a that represents this instance. /// /// A that represents this instance. public override string ToString() { string _ret = string.Empty; if (Encoding.ValueRank < 0) _ret = ToString(Encoding.BuiltInType, Value); else { Array _value = (Array)(object)Value; string _rankString = $"Rank={_value.Rank}"; List _valuesString = new List(); int _index = 0; foreach (object _item in _value) { _valuesString.Add(_item.ToString()); _index++; if (_index >= 80) break; } string _values = $"Values [{String.Join(", ", _valuesString.ToArray())}]"; _ret = $"Array {_rankString} {_values}"; } return _ret; } #endregion #region private private type b_Value; private string ToString(BuiltInType encoding, type value) { switch (encoding) { case BuiltInType.Null: case BuiltInType.Boolean: case BuiltInType.SByte: case BuiltInType.Byte: case BuiltInType.Int16: case BuiltInType.UInt16: case BuiltInType.Int32: case BuiltInType.UInt32: case BuiltInType.Int64: case BuiltInType.UInt64: case BuiltInType.Float: case BuiltInType.Double: case BuiltInType.String: case BuiltInType.DateTime: case BuiltInType.Guid: case BuiltInType.XmlElement: case BuiltInType.NodeId: case BuiltInType.ExpandedNodeId: case BuiltInType.StatusCode: case BuiltInType.QualifiedName: case BuiltInType.LocalizedText: case BuiltInType.ExtensionObject: case BuiltInType.DataValue: case BuiltInType.Variant: case BuiltInType.DiagnosticInfo: case BuiltInType.Enumeration: return value.ToString(); case BuiltInType.ByteString: byte[] _value = (byte[])(object)value; return $"[{String.Join(", ", new ArraySegment(_value, 0, Math.Min(_value.Length, 80)).Select(x => x.ToString("X")).ToArray())}]"; } return base.ToString(); } #endregion } } ================================================ FILE: Networking/SemanticData/DataRepository/Extensions.cs ================================================  using System; using System.ComponentModel; namespace UAOOI.Networking.SemanticData.DataRepository { /// /// Class Extensions - provides a set of static helper methods for this library. /// internal static class Extensions { /// /// Extension method that sets a new value in a variable and then executes the event handler if the new value /// differs from the old one. Used to easily implement . /// /// The type of values being handled by the property. /// The event handler to execute in the event of actual value change. /// The new value to set. /// The old value to replace (and the value holder). /// The property's name as required by . /// The object to be appointed as the executioner of the handler. /// A boolean value that indicates if the new value was truly different from the old value according to . public static bool RaiseHandler(this PropertyChangedEventHandler handler, T newValue, ref T oldValue, string propertyName, object sender) { bool changed = !Object.Equals(oldValue, newValue); if (changed) { //Save the new value. oldValue = newValue; //Raise the event handler?.Invoke(sender, new PropertyChangedEventArgs(propertyName)); } //Signal what happened. return changed; } /// /// Increment the with the roll over. /// /// The value to be incremented. /// The incremented value. internal static ushort IncRollOver(this ushort value) { if (value == ushort.MaxValue) return 0; else return ++value; } } } ================================================ FILE: Networking/SemanticData/DataRepository/IBinding.cs ================================================  using System.Globalization; using UAOOI.Configuration.Networking.Serialization; namespace UAOOI.Networking.SemanticData.DataRepository { /// /// Interface IBinding is used to update a destination variable by an owner of this object. /// It captures an association targeted a variable that is to be updated and all information required to convert the value to be compliant with the target type. /// The owner of this object is responsible to provide converter an an instance of and required by it information. /// //TODO Networking.SemanticData dependency on Networking.Encoding should be removed #323: IBinding public interface IBinding { /// /// Sets the converter, which is used to provide a way to apply custom logic to a binding. /// /// The converter as an instance of the . IValueConverter Converter { set; } /// /// Gets the type of the message field encoding. /// /// The of the message field encoding. UATypeInfo Encoding { get; } /// /// Sets an optional parameter to be used in the converter logic. /// /// The parameter to be used by the . object Parameter { get; set; } /// /// Sets the value to use when the binding is unable to return a value. /// /// The fallback value. object FallbackValue { set; } /// /// Sets the culture of the conversion. /// /// The culture as an instance of the to be used by the . CultureInfo Culture { set; } /// /// Marks the process value enabled - signal that the update of the value is expected. /// void OnEnabling(); /// /// Marks the process value disabled - signal that the value will not be updated. /// void OnDisabling(); } } ================================================ FILE: Networking/SemanticData/DataRepository/IConsumerBinding.cs ================================================  namespace UAOOI.Networking.SemanticData.DataRepository { /// /// Interface IConsumerBinding - provide a basic implementation of the interface. /// It is used by the consumer to save the data in the data repository. /// public interface IConsumerBinding: IBinding { /// /// Assigns the to the associated variable hosted by the target repository. /// /// The value to be assigned to the associated variable hosted by the target repository. void Assign2Repository(object value); } } ================================================ FILE: Networking/SemanticData/DataRepository/IProducerBinding.cs ================================================  using System.ComponentModel; namespace UAOOI.Networking.SemanticData.DataRepository { /// /// Interface IProducerBinding - provide a definition of an object to be used by the producer to get data from data repository. /// public interface IProducerBinding : IBinding, INotifyPropertyChanged { /// /// Gets a value indicating whether the new value is available in the repository. /// /// true if the new value is available in repository; otherwise, false. bool NewValue { get; } /// /// Gets the new value and resets the flag . /// /// Current value in the repository . object GetFromRepository(); } } ================================================ FILE: Networking/SemanticData/DataRepository/IValueConverter.cs ================================================  using System.Globalization; using System; namespace UAOOI.Networking.SemanticData.DataRepository { /// /// Interface IValueConverter: provides a way to apply custom logic to a binding. /// /// The type of the binding target property. /// The type of the source type. /// The type of the parameter type. /// /// If you want to associate a value converter with a binding, create a class that implements the IValueConverter interface and then implement the Convert methods. /// Converters can change data from one type to another, translate data based on cultural information, or modify other aspects of the presentation. /// Value converters are culture aware. Both the Convert methods have a culture parameter that indicates the cultural information. /// If cultural information is irrelevant to the conversion, then you can ignore that parameter in your custom converter. /// The Convert methods also have a parameter called parameter so that you can use the same instance of the converter with different parameters. /// For example, you can write a formatting converter that produces different formats of data based on the input parameter that you use. /// //TODO Networking.SemanticData dependency on Networking.Encoding should be removed #323: IValueConverter public interface IValueConverter { /// /// Converts the specified value. /// /// The value produced by the binding source. /// The value to use when the binding is unable to return a value. /// The converter parameter to use. /// The culture to use in the converter. /// A converted value. /// /// The data binding engine calls this method when it propagates a value from the binding source to the binding target. /// The data binding engine does not catch exceptions that are thrown by a user-supplied converter. Any exception that is thrown by the method, or any uncaught exceptions /// that are thrown by methods that the Convert method calls, are treated as run-time errors. /// object Convert(object value, Type targetType, object fallBack, object parameter, CultureInfo culture); //TODO Networking.SemanticData dependency on Networking.Encoding should be removed #323: Review empty comment ///// ///// Converts the specified value. ///// ///// The value produced by the binding target. ///// The value to use when the binding is unable to return a value. ///// The converter parameter to use. ///// The culture to use in the converter. ///// A converted value. ///// ///// The data binding engine calls this method when it propagates a value from the binding target to the binding source. ///// The implementation of this method must be the inverse of the overloaded Convert method. ///// The data binding engine does not catch exceptions that are thrown by a user supplied converter. Any exception that is thrown by the method, or any uncaught exceptions that are ///// thrown by methods that the method calls, are treated as run-time errors. // sourceType Convert(targetType value, targetType fallBack, parameterType parameter, CultureInfo culture); } } ================================================ FILE: Networking/SemanticData/DataRepository/ProducerBinding.cs ================================================  using System; using System.ComponentModel; using UAOOI.Configuration.Networking.Serialization; namespace UAOOI.Networking.SemanticData.DataRepository { /// /// Class ProducerBinding - provides a basic implementation of the interface. /// It is used by the producer to get data from data repository. /// /// The type of the object in the repository. public class ProducerBinding : Binding, IProducerBinding { #region constructor /// /// Initializes a new instance of the class. /// /// Name of the "repository group" and "variable" separated by "." /// Type of the target. /// The that captures a delegate used to assign new value to local variable in the data repository. protected ProducerBinding(string valueName, UATypeInfo targetType) : this(valueName, () => default(type), targetType ) { } /// /// Initializes a new instance of the class. /// /// Name of the variable in the repository that is placeholder of the value. /// Captures a delegate used to assign new value to local resources. /// Type of the target. public ProducerBinding(string valueName, Func getValue, UATypeInfo targetType) : base(targetType) { GetReadValueDelegate = getValue; m_VariableName = valueName; } #endregion #region IProducerBinding /// /// Gets a value indicating whether the new value is available in the repository. /// /// true if the new value is available in repository; otherwise, false. bool IProducerBinding.NewValue { get { return b_NewValue; } } /// /// Gets the new value and resets the flag . /// /// Current value in the repository . object IProducerBinding.GetFromRepository() { b_NewValue = false; if (this.Converter == null) return GetReadValueDelegate(); else return Converter.Convert(GetReadValueDelegate(), typeof(type), FallbackValue, Parameter, Culture); } /// /// Occurs when a property value changes. /// public event PropertyChangedEventHandler PropertyChanged; #endregion #region API /// /// Must be called by the repository logic to signal that the new value is available in the repository. /// public void OnNewValue() { PropertyChanged.RaiseHandler(true, ref b_NewValue, m_VariableName, this); } #endregion #region private /// /// Gets the delegate implementing functionality to read value from repository delegate. /// /// The delegate used to read value from repository. protected virtual Func GetReadValueDelegate { private set; get; } private bool b_NewValue; private readonly string m_VariableName; #endregion } } ================================================ FILE: Networking/SemanticData/DataRepository/ProducerBindingMonitoredValue.cs ================================================  using System; using UAOOI.Configuration.Networking.Serialization; namespace UAOOI.Networking.SemanticData.DataRepository { /// /// Class ProducerBindingMonitoredValue - it implements the as a placeholder of the value to send over the network by the producer. /// /// The type of the object in the repository. public sealed class ProducerBindingMonitoredValue : ProducerBinding { /// /// Initializes a new instance of the class. /// /// Name of the "repository group" and "variable" separated by "." /// Type of the target. /// The that captures a delegate used to assign new value to local variable in the data repository. public ProducerBindingMonitoredValue(string valueName, UATypeInfo targetType) : base(valueName, targetType) { } /// /// Gets or sets the monitored value - it is placeholder of the variable in the repository. /// /// The monitored value. public type MonitoredValue { get { return b_MyProperty; } set { if (Equals(b_MyProperty, value)) return; b_MyProperty = value; OnNewValue(); } } /// /// Gets the delegate implementing functionality to read value from repository delegate. /// /// The delegate used to read value from repository. protected override Func GetReadValueDelegate { get { return () => MonitoredValue; } } private type b_MyProperty; } } ================================================ FILE: Networking/SemanticData/Diagnostics/NetworkingEventSourceProvider.cs ================================================ //____________________________________________________________________________ // // Copyright (C) 2020, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //____________________________________________________________________________ using System.ComponentModel.Composition; using System.Diagnostics.Tracing; using UAOOI.Networking.Core; namespace UAOOI.Networking.SemanticData.Diagnostics { /// /// Class NetworkingEventSourceProvider - gets access to an instance of to be registered by the logging infrastructure. /// /// [Export(typeof(INetworkingEventSourceProvider))] public class NetworkingEventSourceProvider : INetworkingEventSourceProvider { /// /// Gets the part event source. /// /// Returns an instance of . public EventSource GetPartEventSource() { return ReactiveNetworkingEventSource.Log; } } } ================================================ FILE: Networking/SemanticData/Diagnostics/ReactiveNetworkingEventSource.cs ================================================  using System.Diagnostics.Tracing; namespace UAOOI.Networking.SemanticData.Diagnostics { [EventSource(Name = "UAOOI-Networking-SemanticData-Diagnostics", Guid = "C8666C20-6FEF-4DD0-BB66-5807BA629DA8")] public class ReactiveNetworkingEventSource : EventSource { ///// ///// Class Keywords - defines the local keywords (flags) that apply to events. ///// //internal class Keywords //{ // //public const EventKeywords Package = (EventKeywords)1; // public const EventKeywords Diagnostic2 = (EventKeywords)2; // //public const EventKeywords Performance = (EventKeywords)3; //} /// /// Class Tasks. /// public class Tasks { public const EventTask Consumer = (EventTask)1; public const EventTask Producer = (EventTask)2; public const EventTask Stack = (EventTask)3; public const EventTask Infrastructure = (EventTask)4; public const EventTask CodeBehavior = (EventTask)5; } /// /// Gets the log - implements singleton of the . /// /// The log. internal static ReactiveNetworkingEventSource Log { get; } = new ReactiveNetworkingEventSource(); [Event(1, Message = "At {0}.{1} encountered application failure: {2}", Opcode = EventOpcode.Info, Task = Tasks.CodeBehavior, Level = EventLevel.Error/*, Keywords = Keywords.Diagnostic*/)] public void Failure(string className, string methodName, string problem) { WriteEvent(1, className, methodName, problem); } //[Event(2, Message = "Starting up.", Keywords = Keywords.Performance, Level = EventLevel.Informational)] //internal void Startup() //{ // this.WriteEvent(2); //} //[Event(3, Message = "Entering method {0}.{1}", Opcode = EventOpcode.Start, Task = EventTask.None, Keywords = Keywords.Performance, Level = EventLevel.Informational)] //internal void EnteringMethod(string className, string methodName) //{ // if (this.IsEnabled()) this.WriteEvent(3, className, methodName); //} [Event(4, Message = "Unexpected end of message while reading {0} element.", Channel = EventChannel.Operational, Opcode = EventOpcode.Info, Task = Tasks.Consumer, Level = EventLevel.Warning)]//)]Keywords = (EventKeywords)1500, internal void MessageInconsistency(int position) { this.WriteEvent(4, position); } private ReactiveNetworkingEventSource() { } } } ================================================ FILE: Networking/SemanticData/Diagnostics/ReactiveNetworkingEventSourceExtensions.cs ================================================  using System; namespace UAOOI.Networking.SemanticData.Diagnostics { internal static class ReactiveNetworkingEventSourceExtensions { /// /// Logs the exception using . /// /// The event source source to be used for problem reporting. /// Name of the class. /// Name of the method. /// The exception to be reported. internal static void LogException(this ReactiveNetworkingEventSource eventSource, string className, string methodName, Exception e) { Exception _exception = e; string _innerText = "An exception has benn caught:"; while (e != null) { eventSource.Failure(className, methodName, $"{_innerText} of type {_exception.GetType().Name} capturing the message: {e.Message}"); e = e.InnerException; _innerText = "It contains inner exception:"; } } } } ================================================ FILE: Networking/SemanticData/Encoding/CommonDefinitions.cs ================================================ using System; namespace UAOOI.Networking.SemanticData.Encoding { internal static class CommonDefinitions { /// /// The time base DateTime to calculate ticks sent over wire for UA binary representation. /// public static readonly DateTime TimeBase = new DateTime(1601, 1, 1); // public static readonly DateTime TimeBaseMaxValue = new DateTime(9999, 12, 31, 23, 59, 59); // /// /// Decode the UA date and time form ticks. /// /// The ticks as defined in . /// Decoded from the stream . internal static DateTime GetUADateTime(this Int64 ticks) { if (ticks == Int64.MaxValue) return TimeBaseMaxValue; if (ticks >= (Int64.MaxValue - TimeBase.Ticks)) return TimeBaseMaxValue; ticks += TimeBase.Ticks; if (ticks >= DateTime.MaxValue.Ticks) return DateTime.MaxValue; if (ticks < TimeBase.Ticks) return DateTime.MinValue; return new DateTime(ticks, DateTimeKind.Utc); } /// /// Encode the UA as ticks is relation to . /// /// The value to be encoded. /// Returns ticks as defined in . internal static Int64 GetUADataTimeTicks(this DateTime value) { if (value.Kind == DateTimeKind.Local) value = value.ToUniversalTime(); long _ticks = value.Ticks; if (_ticks >= TimeBaseMaxValue.Ticks) _ticks = Int64.MaxValue; else { _ticks -= TimeBase.Ticks; if (_ticks <= 0) _ticks = 0; } return _ticks; } /// /// Reads the form a buffer using . /// /// The decoder to be used to recover data from a buffer. /// Guid. internal static Guid ReadGuid(this IBinaryDecoder decoder) { int m_EncodedGuidLength = 16; byte[] bytes = decoder.ReadBytes(m_EncodedGuidLength); return new Guid(bytes); } } } ================================================ FILE: Networking/SemanticData/Encoding/IBinaryDecoder.cs ================================================  using System; namespace UAOOI.Networking.SemanticData.Encoding { /// /// Interface IBinaryDecoder - instance of this interface is used to decode the message and package headers content using binary encoding. /// public interface IBinaryDecoder { /// /// Reads the next byte from the current stream and advances the current position of the stream by one byte. /// /// The next read from the current stream. byte ReadByte(); int ReadInt32(); bool ReadBoolean(); sbyte ReadSByte(); short ReadInt16(); ushort ReadUInt16(); uint ReadUInt32(); long ReadInt64(); ulong ReadUInt64(); float ReadSingle(); double ReadDouble(); byte[] ReadBytes(int count); Guid ReadGuid(); DateTime ReadDateTime(); } } ================================================ FILE: Networking/SemanticData/Encoding/IBinaryEncoder.cs ================================================  using System; namespace UAOOI.Networking.SemanticData.Encoding { /// /// Interface IBinaryDecoder - instance of this interface is used to decode the message and package headers content using binary encoding. /// public interface IBinaryEncoder { /// /// Writes the next byte from the current stream and advances the current position of the stream by one byte. /// /// The value. /// The next Write from the current stream. void Write(byte value); /// /// Writes a four-byte signed integer to the current stream and advances the stream position by four bytes. /// /// he four-byte signed integer to write. /// An I/O error occurs. /// The stream is closed. void Write(int value); void Write(bool value); void Write(sbyte value); void Write(short value); void Write(ushort value); void Write(uint value); void Write(long value); void Write(ulong value); void Write(float value); void Write(double value); /// /// Writes the from UA Binary encoded as a 16-element byte array that contains the value and advances the stream position by 16 bytes.. /// /// The object encoded from the message. void Write(Guid value); void Write(byte[] value); void Write(DateTime value); } } ================================================ FILE: Networking/SemanticData/Encoding/IDataValue.cs ================================================ namespace UAOOI.Networking.SemanticData.Encoding { /// /// Interface DataValue - A class that stores the value of variable with an optional status code and timestamps. /// public interface IDataValue { /// /// Gets the value. /// /// The value. IVariant Value { get; } /// /// Gets the status code. /// /// The status code associated with the value.. IStatusCode StatusCode { get; } /// /// Gets the source timestamp. /// /// The source timestamp associated with the value.. System.DateTime? SourceTimestamp { get; } /// /// Gets the source picoseconds - additional resolution for the source timestamp. /// /// The source picoseconds. ushort SourcePicoseconds { get; } /// /// Gets the server timestamp. /// /// The server timestamp. System.DateTime? ServerTimestamp { get; } /// /// Gets the server picoseconds - additional resolution for the server timestamp. /// /// The server picoseconds. ushort ServerPicoseconds { get; } } } ================================================ FILE: Networking/SemanticData/Encoding/IDiagnosticInfo.cs ================================================  namespace UAOOI.Networking.SemanticData.Encoding { /// /// Class DiagnosticInfo - A structure is described in Part 4. /// public interface IDiagnosticInfo { /// /// The index of the symbolic id in the string table. /// /// /// The index of the symbolic id in the string table. /// int? SymbolicId { get; } /// /// The index of the namespace uri in the string table. /// /// /// The index of the namespace uri in the string table. /// int? NamespaceUri { get; } /// /// The index of the locale associated with the localized text. /// int? Locale { get; } /// /// The index of the localized text in the string table. /// int? LocalizedText { get; } /// /// The additional debugging or trace information. /// /// /// The additional debugging or trace information. /// string AdditionalInfo { get; } /// /// The status code returned from an underlying system. /// /// /// The status code returned from an underlying system. /// IStatusCode InnerStatusCode { get; } /// /// The diagnostic info returned from a underlying system. /// /// /// The diagnostic info returned from a underlying system. /// IDiagnosticInfo InnerDiagnosticInfo { get; } } } ================================================ FILE: Networking/SemanticData/Encoding/IExpandedNodeId.cs ================================================ namespace UAOOI.Networking.SemanticData.Encoding { /// /// Interface ExpandedNodeId - extends a node id by adding a complete namespace URI. /// public interface IExpandedNodeId { /// /// Gets the node identifier. /// /// The node identifier formatted as a URI. string Identifier { get; } } } ================================================ FILE: Networking/SemanticData/Encoding/IExtensionObject.cs ================================================  using System.Xml; namespace UAOOI.Networking.SemanticData.Encoding { /// /// Interface ExtensionObject - An object used to wrap data types that the receiver may not understand. /// public interface IExtensionObject { /// /// Gets the type identifier. /// /// The type identifier. IExpandedNodeId TypeId { get; } /// /// Gets the body object embedded in the extension object. /// /// The body of the . XmlElement Body { get; } } } ================================================ FILE: Networking/SemanticData/Encoding/ILocalizedText.cs ================================================  namespace UAOOI.Networking.SemanticData.Encoding { /// /// Interface ILocalizedText - human readable qualified with a locale. /// public interface ILocalizedText { /// /// Gets the locale used to create the text. /// /// The locale. string Locale { get; } /// /// Gets the localized text. /// /// The localized text. string Text { get; } } } ================================================ FILE: Networking/SemanticData/Encoding/INodeId.cs ================================================ namespace UAOOI.Networking.SemanticData.Encoding { /// /// Interface NodeId - if implemented Stores an identifier for a node in a server's address space. /// public interface INodeId { /// /// The node identifier formatted as a URI. /// /// /// The node identifier formatted as a URI. /// string Identifier { get; } } } ================================================ FILE: Networking/SemanticData/Encoding/IQualifiedName.cs ================================================ namespace UAOOI.Networking.SemanticData.Encoding { /// /// Interface QualifiedName - if implemented represents a name qualified with a namespace. /// public interface IQualifiedName { /// /// Gets the index of the namespace. /// /// The index of the namespace that qualifies the name. ushort? NamespaceIndex { get; } /// /// Gets the unqualified name. /// /// The unqualified name. string Name { get; } } } ================================================ FILE: Networking/SemanticData/Encoding/IStatusCode.cs ================================================  namespace UAOOI.Networking.SemanticData.Encoding { /// /// Class StatusCode - if implemented represents a numeric code that describes the result of a service or operation. /// public interface IStatusCode { /// /// Gets the code of status. /// /// The code - a numeric code that describes the result of a service or operation. uint Code { get; } } } ================================================ FILE: Networking/SemanticData/Encoding/IUADecoder.cs ================================================  using System; using System.Xml; using UAOOI.Configuration.Networking.Serialization; namespace UAOOI.Networking.SemanticData.Encoding { /// /// Interface IUADecoder - if implemented provides methods to be used to decode OPC UA Built-in types using provided decoder implementing the interface. /// public interface IUADecoder { /// /// Reads the from UA Binary encoded as a 16-element byte array that contains the value and advances the input message position by 16 bytes. /// /// The decoder to be used to read form the stream. /// The decoded from the input message. Guid ReadGuid(IBinaryDecoder decoder); /// /// Reads the from UA binary encoded stream of bytes as that contains the value and advances the stream position by 8 bytes. /// /// The decoder to be used to read form the stream. /// The decoded from the UA binary stream of bytes. DateTime ReadDateTime(IBinaryDecoder decoder); /// /// Reads the string of from UA Binary encoded as a 16-element byte array that contains the value. /// /// The decoder to be used to read form the stream. /// The array decoded from the UA binary stream of bytes. byte[] ReadByteString(IBinaryDecoder decoder); /// /// Reads the from UA binary encoded stream of bytes encoded as a sequence of UTF8 characters without a null terminator and preceded by the length in bytes. /// The length in bytes is encoded as Int32. A value of −1 is used to indicate a ‘null’ string. /// /// The decoder to be used to read form the stream. /// The decoded from the UA binary stream of bytes. string ReadString(IBinaryDecoder decoder); /// /// Reads an instance of from UA Binary encoded stream. /// /// The decoder to be used to read form the stream. /// The decoded from the UA binary stream of bytes. IDataValue ReadDataValue(IBinaryDecoder decoder); /// /// Reads an instance of from UA Binary encoded stream. /// /// The decoder to be used to read form the stream. /// The decoded from the UA binary stream of bytes. IDiagnosticInfo ReadDiagnosticInfo(IBinaryDecoder decoder); /// /// Reads an instance of from UA Binary encoded stream. /// /// The decoder to be used to read form the stream. /// The decoded from the UA binary stream of bytes. IExpandedNodeId ReadExpandedNodeId(IBinaryDecoder decoder); /// /// Reads an instance of from UA Binary encoded stream. /// /// The decoder to be used to read form the stream. /// The decoded from the UA binary stream of bytes. IExtensionObject ReadExtensionObject(IBinaryDecoder decoder); /// /// Reads an instance of from UA Binary encoded stream. /// /// The decoder to be used to read form the stream. /// The decoded from the UA binary stream of bytes. ILocalizedText ReadLocalizedText(IBinaryDecoder decoder); /// /// Reads an instance of from UA Binary encoded stream. /// /// The decoder to be used to read form the stream. /// The decoded from the UA binary stream of bytes. INodeId ReadNodeId(IBinaryDecoder decoder); /// /// Reads an instance of from UA Binary encoded stream. /// /// The decoder to be used to read form the stream. /// The decoded from the UA binary stream of bytes. IQualifiedName ReadQualifiedName(IBinaryDecoder decoder); /// /// Reads an instance of from UA Binary encoded stream. /// /// The decoder to be used to read form the stream. /// The decoded from the UA binary stream of bytes. XmlElement ReadXmlElement(IBinaryDecoder decoder); /// /// Reads an instance of from UA Binary encoded stream. /// /// The decoder to be used to read form the stream. /// The decoded from the UA binary stream of bytes. IStatusCode ReadStatusCode(IBinaryDecoder decoder); /// /// Reads an instance of from UA Binary encoded stream. /// /// The decoder to be used to read form the stream. /// The decoded from the UA binary stream of bytes. IVariant ReadVariant(IBinaryDecoder decoder); /// /// Reads an array of the specified type and wraps it in the object. /// /// The type of the element. /// The decoder to be used to recover the array from the binary stream. /// This delegate encapsulates binary decoding functionality of the array element. /// if set to true the rank of the array is greater than 1 and dimensions are present in the encoded stream. /// An instance of capturing the an array recovered from the message. Array ReadArray(IBinaryDecoder decoder, Func readValue, bool arrayDimensionsPresents); } } ================================================ FILE: Networking/SemanticData/Encoding/IUAEcoder.cs ================================================  using System; using System.Xml; using UAOOI.Configuration.Networking.Serialization; namespace UAOOI.Networking.SemanticData.Encoding { /// /// Interface IUAEncoder - if implemented provides methods to be used to encode OPC UA Built-in types. /// public interface IUAEncoder { /// /// Writes using the provided encoder . /// /// The encoder - an object implementing the interface. /// The value to be encoded. void Write(IBinaryEncoder encoder, DateTime value); /// /// Writes the ByteString using the provided encoder . /// /// The encoder - an object implementing the interface. /// The value to be encoded. void Write(IBinaryEncoder encoder, byte[] value); /// /// Writes using the provided encoder . /// /// The encoder - an object implementing the interface. /// The value to be encoded. void Write(IBinaryEncoder encoder, IDataValue value); /// /// Writes using the provided encoder . /// /// The encoder - an object implementing the interface. /// The value to be encoded. void Write(IBinaryEncoder encoder, IDiagnosticInfo value); /// /// Writes using the provided encoder . /// /// The encoder - an object implementing the interface. /// The value to be encoded. void Write(IBinaryEncoder encoder, IExpandedNodeId value); /// /// Writes using the provided encoder . /// /// The encoder - an object implementing the interface. /// The value to be encoded. void Write(IBinaryEncoder encoder, IExtensionObject value); /// /// Writes using the provided encoder . /// /// The encoder - an object implementing the interface. /// The value to be encoded. void Write(IBinaryEncoder encoder, ILocalizedText value); /// /// Writes using the provided encoder . /// /// The encoder - an object implementing the interface. /// The value to be encoded. void Write(IBinaryEncoder encoder, INodeId value); /// /// Writes using the provided encoder . /// /// The encoder - an object implementing the interface. /// The value to be encoded. void Write(IBinaryEncoder encoder, IQualifiedName value); /// /// Writes using the provided encoder . /// /// The encoder - an object implementing the interface. /// The value to be encoded. void Write(IBinaryEncoder encoder, XmlElement value); /// /// Writes using the provided encoder . /// /// The encoder - an object implementing the interface. /// The value to be encoded. void Write(IBinaryEncoder encoder, IStatusCode value); /// /// Writes using the provided encoder . /// /// The encoder - an object implementing the interface. /// The value to be encoded. void Write(IBinaryEncoder encoder, IVariant value); /// /// Writes a to the current stream as a 16-element byte array that contains the value and advances the stream position by 16 bytes. /// /// The encoder to write the value encapsulated in this instance. /// The value to be encoded as an instance of . void Write(IBinaryEncoder encoder, Guid value); /// /// Encodes the as a sequence of UTF8 characters without a null terminator and preceded by the length in bytes. /// The length in bytes is encoded as Int32. A value of −1 is used to indicate a ‘null’ string. /// /// The encoder to write the value encapsulated in this instance. /// The value to be encoded as an instance of . void Write(IBinaryEncoder encoder, string value); /// /// Encodes the directly if the array is one dimensional or as otherwise. /// /// The type of the array element type. /// The encoder to write the value encapsulated in this instance. /// The value to be encoded as an instance of . /// This delegate encapsulates binary encoding functionality of the array element. /// of the array item to be encoded in case the array is multidimensional and must be encoded as the variant. void WriteArray(IBinaryEncoder encoder, Array value, Action writeValue, BuiltInType builtInType); } } ================================================ FILE: Networking/SemanticData/Encoding/IVariant.cs ================================================  using UAOOI.Configuration.Networking.Serialization; namespace UAOOI.Networking.SemanticData.Encoding { /// /// Interface IVariant - if implemented A structure that could contain value with any of the UA built-in data types. /// public interface IVariant { /// /// Gets the value stored in the object. /// /// The value stored in the object. object Value { get; } /// /// Gets the type information about the type of stored in the object. /// /// The capturing information about the type of stored in the object. UATypeInfo UATypeInfo { get; } } } ================================================ FILE: Networking/SemanticData/Encoding/UABinaryDecoder.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2020, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System; using System.Collections.Generic; using System.Text; using System.Xml; using UAOOI.Configuration.Networking.Serialization; namespace UAOOI.Networking.SemanticData.Encoding { /// /// Class UABinaryDecoder - basic implementation of the that provides methods to be used to decode selected set of the OPC UA Built-in types. /// /// /// /// It is expected that full featured implementation of this call will be injected by the user by this library. /// The library supports decoding only primitive types. /// /// public abstract class UABinaryDecoder : IUADecoder { #region IUADecoder - supported types /// /// Reads an instance of from UA Binary encoded stream. /// /// The decoder to be used to read form the stream. /// The decoded from the UA binary stream of bytes. public IVariant ReadVariant(IBinaryDecoder decoder) { byte encodingByte = decoder.ReadByte(); //Read the EncodingMask if (encodingByte == 0x0) return null; Variant value = null; BuiltInType builtInType = (BuiltInType)(encodingByte & (byte)VariantEncodingMask.TypeIdMask); if ((encodingByte & (byte)VariantEncodingMask.IsArray) == 0) value = ReadValue(decoder, builtInType); else { Array array = DecodeArray(decoder, builtInType, ((encodingByte & (byte)VariantEncodingMask.ArrayDimensionsPresents) != 0)); value = new Variant(array, builtInType); } return value; } /// /// Reads an array of the specified type and wraps it in the object. /// /// The type of the element. /// The decoder to be used to recover the array from the binary stream. /// This delegate encapsulates binary decoding functionality of the array element. /// if set to true the rank of the array is greater than 1 and dimensions are present in the encoded stream. /// An instance of capturing the an array recovered from the message. public Array ReadArray(IBinaryDecoder decoder, Func readValue, bool arrayDimensionsPresents) { Array _ret = null; if (!arrayDimensionsPresents) _ret = DecodeArray(decoder, readValue, arrayDimensionsPresents); else { IVariant _variant = ReadVariant(decoder); _ret = (Array)_variant.Value; } return _ret; } /// /// Reads the from UA Binary encoded as a 16-element byte array that contains the value and advances the input message position by 16 bytes. /// /// The decoder to be used to read form the stream. /// The decoded from the input message. public Guid ReadGuid(IBinaryDecoder decoder) { return CommonDefinitions.ReadGuid(decoder); } /// /// Reads the from UA binary encoded stream of bytes as that contains the value and advances the stream position by 8 bytes. /// /// The decoder to be used to read form the stream. /// The decoded from the UA binary stream of bytes. public DateTime ReadDateTime(IBinaryDecoder decoder) { return CommonDefinitions.GetUADateTime(decoder.ReadInt64()); } /// /// Reads the string od bytes from UA Binary encoded as a 16-element byte array that contains the value. /// /// The decoder to be used to read form the stream. /// The array decoded from the UA binary stream of bytes. public byte[] ReadByteString(IBinaryDecoder decoder) { int _length = decoder.ReadInt32(); if (_length < 0) return null; return decoder.ReadBytes(_length); } /// /// Reads the from UA binary encoded stream of bytes encoded as a sequence of UTF8 characters without a null terminator and preceded by the length in bytes. /// The length in bytes is encoded as Int32. A value of −1 is used to indicate a ‘null’ string. /// /// The decoder to be used to read form the stream. /// The decoded from the UA binary stream of bytes. /// public string ReadString(IBinaryDecoder decoder) { int length = decoder.ReadInt32(); if (length == -1) return null; byte[] bytes = decoder.ReadBytes(length); return new UTF8Encoding().GetString(bytes, 0, bytes.Length); } #endregion IUADecoder - supported types #region IUADecoder - unsupported types /// /// If implemented by a derived class reads an instance of from UA Binary encoded stream. /// /// The decoder to be used to read form the stream. /// The decoded from the UA binary stream of bytes. public abstract IDataValue ReadDataValue(IBinaryDecoder decoder); /// /// If implemented by a derived class reads an instance of from UA Binary encoded stream. /// /// The decoder to be used to read form the stream. /// The decoded from the UA binary stream of bytes. public abstract IDiagnosticInfo ReadDiagnosticInfo(IBinaryDecoder decoder); /// /// If implemented by a derived class reads an instance of from UA Binary encoded stream. /// /// The decoder to be used to read form the stream. /// The decoded from the UA binary stream of bytes. public abstract IExpandedNodeId ReadExpandedNodeId(IBinaryDecoder decoder); /// /// If implemented by a derived class reads an instance of from UA Binary encoded stream. /// /// The decoder to be used to read form the stream. /// The decoded from the UA binary stream of bytes. public abstract IExtensionObject ReadExtensionObject(IBinaryDecoder decoder); /// /// If implemented by a derived class reads an instance of from UA Binary encoded stream. /// /// The decoder to be used to read form the stream. /// The decoded from the UA binary stream of bytes. public abstract ILocalizedText ReadLocalizedText(IBinaryDecoder decoder); /// /// If implemented by a derived class reads an instance of from UA Binary encoded stream. /// /// The decoder to be used to read form the stream. /// The decoded from the UA binary stream of bytes. public abstract INodeId ReadNodeId(IBinaryDecoder decoder); /// /// If implemented by a derived class reads an instance of from UA Binary encoded stream. /// /// The decoder to be used to read form the stream. /// The decoded from the UA binary stream of bytes. public abstract IQualifiedName ReadQualifiedName(IBinaryDecoder decoder); /// /// If implemented by a derived class reads an instance of from UA Binary encoded stream. /// /// The decoder to be used to read form the stream. /// The decoded from the UA binary stream of bytes. public abstract XmlElement ReadXmlElement(IBinaryDecoder decoder); /// /// If implemented by a derived class reads an instance of from UA Binary encoded stream. /// /// The decoder to be used to read form the stream. /// The decoded from the UA binary stream of bytes. public abstract IStatusCode ReadStatusCode(IBinaryDecoder decoder); #endregion IUADecoder - unsupported types #region private //types private class Variant : IVariant { public Variant(Array value, BuiltInType type) : this(value, new UATypeInfo(type, value.Rank)) { } public Variant(object value, BuiltInType type) : this(value, new UATypeInfo(type)) { } public object Value { get; private set; } public UATypeInfo UATypeInfo { get; private set; } private Variant(object value, UATypeInfo type) { Value = value; UATypeInfo = type; } } /// /// The maximum array length - could be used to apply license volume limits. /// private readonly int MaxArrayLength = 2; //methods private Variant ReadValue(IBinaryDecoder encoder, BuiltInType encodingByte) { switch (encodingByte) { case BuiltInType.Boolean: return new Variant(encoder.ReadBoolean(), encodingByte); case BuiltInType.SByte: return new Variant(encoder.ReadSByte(), encodingByte); case BuiltInType.Byte: return new Variant(encoder.ReadByte(), encodingByte); case BuiltInType.Int16: return new Variant(encoder.ReadInt16(), encodingByte); case BuiltInType.UInt16: return new Variant(encoder.ReadUInt16(), encodingByte); case BuiltInType.Int32: case BuiltInType.Enumeration: return new Variant(encoder.ReadInt32(), encodingByte); case BuiltInType.UInt32: return new Variant(encoder.ReadUInt32(), encodingByte); case BuiltInType.Int64: return new Variant(encoder.ReadInt64(), encodingByte); case BuiltInType.UInt64: return new Variant(encoder.ReadUInt64(), encodingByte); case BuiltInType.Float: return new Variant(encoder.ReadSingle(), encodingByte); case BuiltInType.Double: return new Variant(encoder.ReadDouble(), encodingByte); case BuiltInType.String: return new Variant(ReadString(encoder), encodingByte); case BuiltInType.DateTime: return new Variant(ReadDateTime(encoder), encodingByte); case BuiltInType.Guid: return new Variant(ReadGuid(encoder), encodingByte); case BuiltInType.ByteString: return new Variant(ReadByteString(encoder), encodingByte); case BuiltInType.XmlElement: return new Variant(ReadXmlElement(encoder), encodingByte); case BuiltInType.NodeId: return new Variant(ReadNodeId(encoder), encodingByte); case BuiltInType.ExpandedNodeId: return new Variant(ReadExpandedNodeId(encoder), encodingByte); case BuiltInType.StatusCode: return new Variant(ReadStatusCode(encoder), encodingByte); case BuiltInType.QualifiedName: return new Variant(ReadQualifiedName(encoder), encodingByte); case BuiltInType.LocalizedText: return new Variant(ReadLocalizedText(encoder), encodingByte); case BuiltInType.ExtensionObject: return new Variant(ReadExtensionObject(encoder), encodingByte); case BuiltInType.DataValue: return new Variant(ReadDataValue(encoder), encodingByte); default: throw new ArgumentOutOfRangeException($"Cannot decode unknown type in Variant object (0x{encodingByte:X})."); } } private Array DecodeArray(IBinaryDecoder decoder, BuiltInType builtInType, bool arrayDimensionsPresents) { switch (builtInType) { case BuiltInType.Boolean: return DecodeArray(decoder, decoder.ReadBoolean, arrayDimensionsPresents); case BuiltInType.SByte: return DecodeArray(decoder, decoder.ReadSByte, arrayDimensionsPresents); case BuiltInType.Byte: return DecodeArray(decoder, decoder.ReadByte, arrayDimensionsPresents); case BuiltInType.Int16: return DecodeArray(decoder, decoder.ReadInt16, arrayDimensionsPresents); case BuiltInType.UInt16: return DecodeArray(decoder, decoder.ReadUInt16, arrayDimensionsPresents); case BuiltInType.Int32: case BuiltInType.Enumeration: return DecodeArray(decoder, decoder.ReadInt32, arrayDimensionsPresents); case BuiltInType.UInt32: return DecodeArray(decoder, decoder.ReadUInt32, arrayDimensionsPresents); case BuiltInType.Int64: return DecodeArray(decoder, decoder.ReadInt64, arrayDimensionsPresents); case BuiltInType.UInt64: return DecodeArray(decoder, decoder.ReadUInt64, arrayDimensionsPresents); case BuiltInType.Float: return DecodeArray(decoder, decoder.ReadSingle, arrayDimensionsPresents); case BuiltInType.Double: return DecodeArray(decoder, decoder.ReadDouble, arrayDimensionsPresents); case BuiltInType.String: return DecodeArray(decoder, () => ReadString(decoder), arrayDimensionsPresents); case BuiltInType.DateTime: return DecodeArray(decoder, () => ReadDateTime(decoder), arrayDimensionsPresents); case BuiltInType.Guid: return DecodeArray(decoder, () => ReadGuid(decoder), arrayDimensionsPresents); case BuiltInType.ByteString: return DecodeArray(decoder, () => ReadByteString(decoder), arrayDimensionsPresents); case BuiltInType.XmlElement: return DecodeArray(decoder, () => ReadXmlElement(decoder), arrayDimensionsPresents); case BuiltInType.NodeId: return DecodeArray(decoder, () => ReadNodeId(decoder), arrayDimensionsPresents); case BuiltInType.ExpandedNodeId: return DecodeArray(decoder, () => ReadExpandedNodeId(decoder), arrayDimensionsPresents); case BuiltInType.StatusCode: return DecodeArray(decoder, () => ReadStatusCode(decoder), arrayDimensionsPresents); case BuiltInType.QualifiedName: return DecodeArray(decoder, () => ReadQualifiedName(decoder), arrayDimensionsPresents); case BuiltInType.LocalizedText: return DecodeArray(decoder, () => ReadLocalizedText(decoder), arrayDimensionsPresents); case BuiltInType.ExtensionObject: return DecodeArray(decoder, () => ReadExtensionObject(decoder), arrayDimensionsPresents); case BuiltInType.DataValue: return DecodeArray(decoder, () => ReadDataValue(decoder), arrayDimensionsPresents); case BuiltInType.Variant: return DecodeArray(decoder, () => ReadVariant(decoder), arrayDimensionsPresents); default: throw new ArgumentOutOfRangeException($"Cannot decode unknown type in Variant object (0x{(int)builtInType:X2})."); } } private Array DecodeArray(IBinaryDecoder decoder, Func readValue, bool arrayDimensionsPresents) { int length = decoder.ReadInt32(); if (length < 0) throw new ArgumentOutOfRangeException(nameof(length)); Array _ret; type[] values = new type[length]; for (int ii = 0; ii < length; ii++) values[ii] = readValue(); int[] _dimensions = null; if (arrayDimensionsPresents) { _dimensions = ReadDimensions(decoder); _ret = Array.CreateInstance(typeof(type), _dimensions); CopyValues(_ret, values); } else _ret = values; return _ret; } private void CopyValues(Array _ret, type[] values) { throw new NotImplementedException(); } private int[] ReadDimensions(IBinaryDecoder decoder) { int length = decoder.ReadInt32(); if (length < 0) return null; if (MaxArrayLength > 0 && MaxArrayLength < length) throw new ArgumentOutOfRangeException(nameof(MaxArrayLength), $"Unsupported array length {length}"); List values = new List(length); for (int ii = 0; ii < length; ii++) values.Add(decoder.ReadInt32()); return values.ToArray(); } #endregion private } } ================================================ FILE: Networking/SemanticData/Encoding/UABinaryEncoder.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2018, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System; using System.Text; using System.Xml; using UAOOI.Configuration.Networking.Serialization; namespace UAOOI.Networking.SemanticData.Encoding { /// /// Class UABinaryEncoder - basic implementation of the that provides methods to be used to encode selected set of the OPC UA Built-in types. /// public abstract class UABinaryEncoder : IUAEncoder { #region IUAEncoder - supported types /// /// Writes the using provided encoder /// /// The encoder to write the value encapsulated in this instance. /// The value to be encoded as an instance of . public virtual void Write(IBinaryEncoder encoder, IVariant value) { // check for null. if (value.Value == null || value.UATypeInfo == null || value.UATypeInfo.BuiltInType == BuiltInType.Null) { encoder.Write((byte)0); return; } // encode enums as int32. byte _encodingByte = (byte)value.UATypeInfo.BuiltInType; if (value.UATypeInfo.BuiltInType == BuiltInType.Enumeration) _encodingByte = (byte)BuiltInType.Int32; if (value.UATypeInfo.ValueRank < 0) { encoder.Write(_encodingByte); WriteValue(encoder, value.UATypeInfo.BuiltInType, value.Value); } else { _encodingByte |= (byte)VariantEncodingMask.IsArray; Array _array = null; if (value.Value != null) { _array = value.Value as Array; if (_array == null) throw new ArgumentOutOfRangeException(nameof(value), $"{nameof(value.Value)} must be of the {nameof(Array)} type and cannot be null"); if (_array.Rank > 1) _encodingByte |= (byte)VariantEncodingMask.ArrayDimensionsPresents; } encoder.Write(_encodingByte); EncodeArray(encoder, value.UATypeInfo.BuiltInType, _array); } } /// /// Encodes the directly if the array is one dimensional or as otherwise. /// /// The type of the array element type. /// The encoder to write the value encapsulated in this instance. /// The value to be encoded as an instance of . /// Thi delegate encapsulates binary encoding functionality. /// of the array item to be encoded in case of variant. public void WriteArray(IBinaryEncoder encoder, Array value, Action writeValue, BuiltInType builtInType) { if (value == null) { encoder.Write((byte)0); return; } byte _encodingByte = (byte)builtInType; if (value.Rank > 1) { //Encode it as the Variant if (builtInType == BuiltInType.Enumeration) _encodingByte = (byte)BuiltInType.Int32; _encodingByte |= (byte)VariantEncodingMask.IsArray; if (value.Rank > 1) _encodingByte |= (byte)VariantEncodingMask.ArrayDimensionsPresents; encoder.Write(_encodingByte); } EncodeArray(encoder.Write, value, writeValue); } /// /// Writes using the provided encoder . /// /// The encoder - an object implementing the interface. /// The value to be encoded. public virtual void Write(IBinaryEncoder encoder, DateTime value) { encoder.Write(CommonDefinitions.GetUADataTimeTicks(value)); } /// /// Writes a to the current stream as a 16-element byte array that contains the value and advances the stream position by 16 bytes. /// /// The encoder to write the value encapsulated in this instance. /// The value to be encoded as an instance of . public virtual void Write(IBinaryEncoder encoder, Guid value) { encoder.Write(value.ToByteArray()); } /// /// Writes the ByteString using the provided encoder . /// /// The encoder and an object implementing the interface. /// The value to be encoded. public virtual void Write(IBinaryEncoder encoder, byte[] value) { if (value == null) encoder.Write((Int32)(-1)); else { encoder.Write((Int32)value.Length); encoder.Write(value); } } /// /// Encodes the as a sequence of UTF8 characters without a null terminator and preceded by the length in bytes. /// The length in bytes is encoded as Int32. A value of −1 is used to indicate a ‘null’ string. /// /// The encoder to write the value encapsulated in this instance. /// The value to be encoded as an instance of . public void Write(IBinaryEncoder encoder, string value) { if (value == null) { encoder.Write((Int32)(-1)); return; } byte[] _bytes = new UTF8Encoding().GetBytes(value); Write(encoder, _bytes); } #endregion #region IUAEncoder - unsupported types - should be implemented by comercial products. /// /// Writes using the provided encoder . /// /// The encoder - an object implementing the interface. /// The value to be encoded. public abstract void Write(IBinaryEncoder encoder, IDataValue value); /// /// Writes using the provided encoder . /// /// The encoder - an object implementing the interface. /// The value to be encoded. public abstract void Write(IBinaryEncoder encoder, IDiagnosticInfo value); /// /// Writes using the provided encoder . /// /// The encoder - an object implementing the interface. /// The value to be encoded. public abstract void Write(IBinaryEncoder encoder, IExpandedNodeId value); /// /// Writes using the provided encoder . /// /// The encoder - an object implementing the interface. /// The value to be encoded. public abstract void Write(IBinaryEncoder encoder, IExtensionObject value); /// /// Writes using the provided encoder . /// /// The encoder - an object implementing the interface. /// The value to be encoded. public abstract void Write(IBinaryEncoder encoder, ILocalizedText value); /// /// Writes using the provided encoder . /// /// The encoder - an object implementing the interface. /// The value to be encoded. public abstract void Write(IBinaryEncoder encoder, INodeId value); /// /// Writes using the provided encoder . /// /// The encoder - an object implementing the interface. /// The value to be encoded. public abstract void Write(IBinaryEncoder encoder, IQualifiedName value); /// /// Writes using the provided encoder . /// /// The encoder - an object implementing the interface. /// The value to be encoded. public abstract void Write(IBinaryEncoder encoder, IStatusCode value); /// /// Writes using the provided encoder . /// /// The encoder - an object implementing the interface. /// The value to be encoded. public abstract void Write(IBinaryEncoder encoder, XmlElement value); #endregion #region private /// /// The maximum array length - could be used to apply license volume limits /// protected int MaxArrayLength = byte.MaxValue; private void WriteValue(IBinaryEncoder encoder, BuiltInType builtInType, object value) { switch (builtInType) { case BuiltInType.Boolean: encoder.Write((Boolean)value); return; case BuiltInType.SByte: encoder.Write((SByte)value); return; case BuiltInType.Byte: encoder.Write((Byte)value); return; case BuiltInType.Int16: encoder.Write((Int16)value); return; case BuiltInType.UInt16: encoder.Write((UInt16)value); return; case BuiltInType.Int32: encoder.Write((Int32)value); return; case BuiltInType.UInt32: encoder.Write((System.UInt32)value); return; case BuiltInType.Int64: encoder.Write((Int64)value); return; case BuiltInType.UInt64: encoder.Write((UInt64)value); return; case BuiltInType.Float: encoder.Write((Single)value); return; case BuiltInType.Double: encoder.Write((Double)value); return; case BuiltInType.String: Write(encoder, (String)value); return; case BuiltInType.DateTime: Write(encoder, (DateTime)value); return; case BuiltInType.Guid: encoder.Write((Guid)value); return; case BuiltInType.ByteString: Write(encoder, (byte[])value); return; case BuiltInType.XmlElement: Write(encoder, (XmlElement)value); return; case BuiltInType.NodeId: Write(encoder, (XmlElement)value); return; case BuiltInType.ExpandedNodeId: Write(encoder, (IExpandedNodeId)value); return; case BuiltInType.StatusCode: Write(encoder, (IStatusCode)value); return; case BuiltInType.QualifiedName: Write(encoder, (IQualifiedName)value); return; case BuiltInType.LocalizedText: Write(encoder, (ILocalizedText)value); return; case BuiltInType.ExtensionObject: Write(encoder, (ILocalizedText)value); return; case BuiltInType.DataValue: Write(encoder, (IDataValue)value); return; case BuiltInType.Variant: Write(encoder, (IVariant)value); return; case BuiltInType.DiagnosticInfo: Write(encoder, (IDiagnosticInfo)value); return; case BuiltInType.Enumeration: encoder.Write((int)value); return; case BuiltInType.Null: default: throw new ArgumentOutOfRangeException($"Cannot encode unknown type in Variant object (0x{builtInType:X2})."); } } private void EncodeArray(IBinaryEncoder encoder, BuiltInType builtInType, Array value) { switch (builtInType) { case BuiltInType.Boolean: EncodeArray(encoder.Write, value, encoder.Write); break; case BuiltInType.SByte: EncodeArray(encoder.Write, value, encoder.Write); break; case BuiltInType.Byte: EncodeArray(encoder.Write, value, encoder.Write); break; case BuiltInType.Int16: EncodeArray(encoder.Write, value, encoder.Write); break; case BuiltInType.UInt16: EncodeArray(encoder.Write, value, encoder.Write); break; case BuiltInType.Int32: case BuiltInType.Enumeration: EncodeArray(encoder.Write, value, encoder.Write); break; case BuiltInType.UInt32: EncodeArray(encoder.Write, value, encoder.Write); break; case BuiltInType.Int64: EncodeArray(encoder.Write, value, encoder.Write); break; case BuiltInType.UInt64: EncodeArray(encoder.Write, value, encoder.Write); break; case BuiltInType.Float: EncodeArray(encoder.Write, value, encoder.Write); break; case BuiltInType.Double: EncodeArray(encoder.Write, value, encoder.Write); break; case BuiltInType.String: EncodeArray(encoder.Write, value, x => Write(encoder, x)); break; case BuiltInType.DateTime: EncodeArray(encoder.Write, value, x => Write(encoder, x)); break; case BuiltInType.Guid: EncodeArray(encoder.Write, value, x => Write(encoder, x)); break; case BuiltInType.ByteString: EncodeArray(encoder.Write, value, x => Write(encoder, x)); break; case BuiltInType.XmlElement: EncodeArray(encoder.Write, value, x => Write(encoder, x)); break; case BuiltInType.NodeId: EncodeArray(encoder.Write, value, x => Write(encoder, x)); break; case BuiltInType.ExpandedNodeId: EncodeArray(encoder.Write, value, x => Write(encoder, x)); break; case BuiltInType.StatusCode: EncodeArray(encoder.Write, value, x => Write(encoder, x)); break; case BuiltInType.QualifiedName: EncodeArray(encoder.Write, value, x => Write(encoder, x)); break; case BuiltInType.LocalizedText: EncodeArray(encoder.Write, value, x => Write(encoder, x)); break; case BuiltInType.ExtensionObject: EncodeArray(encoder.Write, value, x => Write(encoder, x)); break; case BuiltInType.DataValue: EncodeArray(encoder.Write, value, x => Write(encoder, x)); break; case BuiltInType.Variant: EncodeArray(encoder.Write, value, x => Write(encoder, x)); break; case BuiltInType.DiagnosticInfo: EncodeArray(encoder.Write, value, x => Write(encoder, x)); break; case BuiltInType.Null: default: break; }; } private void EncodeArray(Action encoderInt32, Array array, Action writeValue) { if (array == null) { encoderInt32(-1); return; } if (MaxArrayLength > 0 && MaxArrayLength < array.Length) throw new ArgumentOutOfRangeException(nameof(MaxArrayLength), $"MaxArrayLength {MaxArrayLength} < {array.Length}"); encoderInt32(array.Length); //for (int ii = 0; ii < values.Length; ii++) foreach (type item in array) writeValue(item); if (array.Rank == 1) return; encoderInt32(array.Rank); for (int ii = 0; ii < array.Rank; ii++) encoderInt32(array.GetLength(ii)); } #endregion } } ================================================ FILE: Networking/SemanticData/Encoding/VariantEncodingMask.cs ================================================  using System; namespace UAOOI.Networking.SemanticData.Encoding { //types [Flags] internal enum VariantEncodingMask { /// /// True if an array of values is encoded. /// IsArray = 0x80, /// /// True if the Array Dimensions field is encoded /// ArrayDimensionsPresents = 0x40, /// /// The type mask of the Built-in Type Id /// TypeIdMask = 0x3F } } ================================================ FILE: Networking/SemanticData/IBindingFactory.cs ================================================  using UAOOI.Networking.SemanticData.DataRepository; using UAOOI.Configuration.Networking.Serialization; namespace UAOOI.Networking.SemanticData { /// /// The IBindingFactory interface - if implemented creates object implementing that can used: /// - by the consumer to save the data received over the wire in the local data repository. /// - by the producer to read from the local data repository. /// /// /// Implementation of this interface is a basic step to provide consumer and/or producer functionality. /// public interface IBindingFactory { /// /// Gets the binding captured by an instance of the type used by the consumer to save the data in the data repository. /// /// It is the name of a repository group profiling the configuration behavior, e.g. encoders selection. /// The configuration of the repositories belonging to the same group are handled according to the same profile. /// The name of a variable that is the ultimate destination of the values recovered from messages. /// Must be unique in the context of the group named by . /// The field metadata definition represented as an object of . /// /// Returns an object implementing the interface that can be used to update selected variable on the factory side. IConsumerBinding GetConsumerBinding(string repositoryGroup, string processValueName, UATypeInfo fieldTypeInfo); /// /// Gets the binding captured by an instance of the type used by the producer to read from the local data repository. /// /// It is the name of a repository group profiling the configuration behavior, e.g. encoders selection. /// The configuration of the repositories belonging to the same group are handled according to the same profile. /// /// /// The name of a variable that is the source of the values forwarded by a message over the network. /// Must be unique in the context of the group named by /// /// The of the message field encoding. /// Returns an object implementing the interface that can be used to create message and populate it with the data. IProducerBinding GetProducerBinding(string repositoryGroup, string processValueName, UATypeInfo fieldTypeInfo); } } ================================================ FILE: Networking/SemanticData/IEncodingFactory.cs ================================================  using UAOOI.Networking.SemanticData.DataRepository; using UAOOI.Networking.SemanticData.Encoding; using UAOOI.Configuration.Networking.Serialization; namespace UAOOI.Networking.SemanticData { /// /// Interface IEncodingFactory - provides functionality to lookup a dictionary containing value converters. /// It is expected that the encoding/decoding functionality is provided outside of this library /// The interface is used for late binding to inject dependency on the external library. /// public interface IEncodingFactory { /// /// Updates the value converter. /// /// An object responsible to transfer the value between the message and ultimate destination in the repository. /// The repository group. /// The source encoding. void UpdateValueConverter(IBinding binding, string repositoryGroup, UATypeInfo sourceEncoding); /// /// Gets the decoder that provides methods to be used to decode OPC UA Built-in types. /// /// The object implementing interface. IUADecoder UADecoder { get; } /// /// Gets the encoder that provides methods to be used to encode OPC UA Built-in types. /// /// The object implementing interface. IUAEncoder UAEncoder { get; } } } ================================================ FILE: Networking/SemanticData/MessageHandlersCollection.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System; using System.Collections.Generic; using UAOOI.Networking.SemanticData.MessageHandling; using UAOOI.Configuration.Networking.Serialization; using UAOOI.Networking.Core; namespace UAOOI.Networking.SemanticData { /// /// Class MessageHandlersCollection - represents collection of communication channels involved in handling selected message centric transport providers. /// internal class MessageHandlersCollection : Dictionary { /// /// Creates the message handlers. /// /// The configuration. /// The message handler factory. /// The encoding factory that provides functionality to lookup a dictionary containing value converters.. /// The add message handler. /// MessageHandlersCollection. /// Name;Duplicated transport name internal static MessageHandlersCollection CreateMessageHandlers (MessageHandlerConfiguration[] configuration, IMessageHandlerFactory messageHandlerFactory, IEncodingFactory encodingFactory, Action addMessageHandler) { MessageHandlersCollection _collection = new MessageHandlersCollection(); foreach (MessageHandlerConfiguration _configuration in configuration) { if (_collection.ContainsKey(_configuration.Name)) throw new ArgumentOutOfRangeException("Name", "Duplicated transport name"); IMessageHandler _handler = null; switch (_configuration.TransportRole) { case AssociationRole.Consumer: MessageReaderConfiguration _readerConfiguration = (MessageReaderConfiguration)_configuration; _handler = new BinaryDecoder( messageHandlerFactory.GetBinaryDTGReceiver(_configuration.Name, _configuration.Configuration.ChannelConfiguration), encodingFactory.UADecoder); foreach (ConsumerAssociationConfiguration _consumerAssociation in _readerConfiguration.ConsumerAssociationConfigurations) addMessageHandler(_handler, _consumerAssociation); break; case AssociationRole.Producer: MessageWriterConfiguration _writerConfiguration = (MessageWriterConfiguration)_configuration; _handler = new BinaryEncoder( messageHandlerFactory.GetBinaryDTGSender(_configuration.Name, _configuration.Configuration.ChannelConfiguration), encodingFactory.UAEncoder, MessageLengthFieldTypeEnum.TwoBytes); foreach (ProducerAssociationConfiguration _producerAssociation in _writerConfiguration.ProducerAssociationConfigurations) addMessageHandler(_handler, _producerAssociation); break; default: break; } _collection.Add(_configuration.Name, _handler); } return _collection; } /// /// Handles the configuration modifications. /// /// /// It is intentionally not implemented /// /// The sender. /// The instance containing the event data. /// It is intentionally not implemented internal void OnConfigurationChangeHandler(object sender, EventArgs e) { throw new NotImplementedException("It is intentionally not implemented"); } /// /// Runs this instance. /// It call and enables data pumping by enabling the the state of all added to this collection. /// internal void Run() { foreach (IMessageHandler _mx in this.Values) { _mx.AttachToNetwork(); _mx.State.Enable(); } } private MessageHandlersCollection() : base() { } } } ================================================ FILE: Networking/SemanticData/MessageHandling/BinaryDecoder.cs ================================================ //____________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //____________________________________________________________________________ using System; using System.IO; using UAOOI.Networking.Core; using UAOOI.Networking.SemanticData.Encoding; namespace UAOOI.Networking.SemanticData.MessageHandling { /// /// Class BinaryDecoder - wrapper of supporting OPC UA binary encoding. /// public sealed class BinaryDecoder : BinaryPacketDecoder { #region creators /// /// Initializes a new instance of the class is to be used by the packet level decoding. /// /// The UA decoder to be used fo decode UA Built-in data types. public BinaryDecoder(IBinaryDataTransferGraphReceiver messageReader, IUADecoder uaDecoder) : base(uaDecoder) { m_DTGReceiver = messageReader ?? throw new ArgumentNullException(nameof(messageReader)); m_DTGReceiver.OnNewFrameArrived += OnNewFrameArrived; } #endregion #region IDisposable Support /// /// Releases unmanaged and - optionally - managed resources. /// /// true to release both managed and unmanaged resources; false to release only unmanaged resources. protected override void Dispose(bool disposing) { base.Dispose(disposing); if (!disposing) return; BinaryReader _lc = m_UABinaryReader; if (_lc != null) _lc.Close(); m_UABinaryReader = null; m_DTGReceiver.Dispose(); } #endregion #region BinaryPacketDecoder /// /// Reads an 8-byte unsigned integer from the message and advances the position by eight bytes. /// /// An 8-byte unsigned integer read from this message. . public override ulong ReadUInt64() { return m_UABinaryReader.ReadUInt64(); } public override uint ReadUInt32() { return m_UABinaryReader.ReadUInt32(); } public override ushort ReadUInt16() { return m_UABinaryReader.ReadUInt16(); } public override string ReadString() { return m_UABinaryReader.ReadString(); } public override float ReadSingle() { return m_UABinaryReader.ReadSingle(); } public override sbyte ReadSByte() { return m_UABinaryReader.ReadSByte(); } public override long ReadInt64() { return m_UABinaryReader.ReadInt64(); } public override int ReadInt32() { return m_UABinaryReader.ReadInt32(); } public override short ReadInt16() { return m_UABinaryReader.ReadInt16(); } public override double ReadDouble() { return m_UABinaryReader.ReadDouble(); } public override char ReadChar() { return m_UABinaryReader.ReadChar(); } public override byte ReadByte() { return m_UABinaryReader.ReadByte(); } public override bool ReadBoolean() { return m_UABinaryReader.ReadBoolean(); } public override byte[] ReadBytes(int count) { return m_UABinaryReader.ReadBytes(count); } protected override bool EndOfMessage() { return m_UABinaryReader.BaseStream.Position == m_UABinaryReader.BaseStream.Length; } public override void AttachToNetwork() { m_DTGReceiver.AttachToNetwork(); } public override IAssociationState State { get => m_DTGReceiver.State; set => m_DTGReceiver.State = value; } #endregion #region private private BinaryReader m_UABinaryReader; private readonly IBinaryDataTransferGraphReceiver m_DTGReceiver; /// /// Called when new frame has arrived. /// /// /// The UA binary reader is an instance of created after new frame has been arrived. /// /// Just after processing the object is disposed. private void OnNewFrameArrived(object source, byte[] _receiveBytes) { MemoryStream _stream = new MemoryStream(_receiveBytes, 0, _receiveBytes.Length); m_UABinaryReader = new BinaryReader(_stream, System.Text.Encoding.UTF8); OnNewPacketArrived(); m_UABinaryReader.Dispose(); m_UABinaryReader = null; ; } #endregion } } ================================================ FILE: Networking/SemanticData/MessageHandling/BinaryEncoder.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System; using System.Collections.Generic; using System.IO; using UAOOI.Networking.Core; using UAOOI.Networking.SemanticData.Encoding; namespace UAOOI.Networking.SemanticData.MessageHandling { /// /// Class BinaryEncoder - wrapper of supporting OPC UA binary encoding. /// public sealed class BinaryEncoder : BinaryPacketEncoder { #region creator /// /// Initializes a new instance of the class wrapper of supporting OPC UA binary encoding.. /// /// The ua encoder. /// Type of the length field. public BinaryEncoder(IBinaryDataTransferGraphSender messageWriter, IUAEncoder uaEncoder, MessageLengthFieldTypeEnum lengthFieldType) : base(uaEncoder, lengthFieldType) { m_IBinaryDTGSender = messageWriter ?? throw new ArgumentNullException(nameof(messageWriter)); } #endregion #region IDisposable // Protected implementation of Dispose pattern. /// /// Releases unmanaged and - optionally - managed resources. /// /// true to release both managed and unmanaged resources; false to release only unmanaged resources. protected override void Dispose(bool disposing) { base.Dispose(disposing); if (disposing) DisposeWriter(); } #endregion #region BinaryPackageEncoder #region BinaryWriter public override void Write(ulong value) { m_binaryWriter.Write(value); } public override void Write(uint value) { m_binaryWriter.Write(value); } public override void Write(ushort value) { m_binaryWriter.Write(value); } public override void Write(float value) { m_binaryWriter.Write(value); } public override void Write(sbyte value) { m_binaryWriter.Write(value); } public override void Write(long value) { m_binaryWriter.Write(value); } public override void Write(int value) { m_binaryWriter.Write(value); } public override void Write(short value) { m_binaryWriter.Write(value); } public override void Write(double value) { m_binaryWriter.Write(value); } public override void Write(bool value) { m_binaryWriter.Write(value); } public override void Write(byte value) { m_binaryWriter.Write(value); } public override void Write(byte[] value) { m_binaryWriter.Write(value); } /// /// Sets the position within the current stream. /// /// /// A byte offset relative to origin. /// /// /// A field of indicating the reference point from which the new position is to be obtained.. /// /// The position with the current stream as . public override long Seek(int offset, SeekOrigin origin) { return m_binaryWriter.Seek(offset, origin); } #endregion public override void AttachToNetwork() { m_IBinaryDTGSender.AttachToNetwork(); } public override IAssociationState State { get => m_IBinaryDTGSender.State; set => m_IBinaryDTGSender.State = value; } #endregion #region private //vars private MemoryStream m_output; private BinaryWriter m_binaryWriter; private IBinaryDataTransferGraphSender m_IBinaryDTGSender; //methods /// /// Begins sending the frame. /// protected override void SendFrame() { m_binaryWriter.Flush(); m_IBinaryDTGSender.SendFrame(m_output.ToArray()); DisposeWriter(); } /// /// Called when new message is adding to the package payload. /// /// The producer identifier. /// The data set writer identifier - must be unique in context of . protected override void OnMessageAdding(Guid producerId, ushort dataSetWriterId) { CreateUABinaryWriter(producerId, new ushort[] { dataSetWriterId }); base.OnMessageAdding(producerId, dataSetWriterId); } private void DisposeWriter() { if (m_binaryWriter == null) return; m_binaryWriter.Dispose(); m_output.Close(); m_binaryWriter = null; m_output = null; } private void CreateUABinaryWriter(Guid producerId, IList dataSetWriterIds) { m_output = new MemoryStream(); m_binaryWriter = new BinaryWriter(m_output); EncodePacketHeaders(producerId, dataSetWriterIds); } #endregion } } ================================================ FILE: Networking/SemanticData/MessageHandling/BinaryMessageDecoder.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2020, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System; using UAOOI.Networking.SemanticData.Encoding; namespace UAOOI.Networking.SemanticData.MessageHandling { /// /// Class BinaryMessageDecoder - provides message content binary decoding functionality. /// /// /// Implements only simple value types. Structural types must be implemented after more details will /// be available in the spec. /// public abstract class BinaryMessageDecoder : MessageReaderBase { #region constructor /// /// Initializes a new instance of the class. /// /// The decoder that provides methods to be used to decode OPC UA Built-in types. public BinaryMessageDecoder(IUADecoder uaDecoder) : base(uaDecoder) { b_MessageHeader = MessageHeader.GetConsumerMessageHeader(this); } #endregion constructor #region MessageReaderBase /// /// Gets the content mask. The content mast read from the message or provided by the writer. /// The order of the bits starting from the least significant bit matches the order of the data items /// within the data set. /// /// The content mask is represented as unsigned number . /// The value is provided by the message. /// The order of the bits starting from the least significant bit matches the order of the data items within the data set. public override ulong ContentMask //TODO must be implemented - get it from message. { get => ulong.MaxValue; protected set => throw new InvalidOperationException($"ContentMask cannot be set"); } /// /// Gets or sets the message header. /// /// The message header. protected override MessageHeader MessageHeader => b_MessageHeader; #endregion MessageReaderBase #region private private readonly MessageHeader b_MessageHeader; /// /// Called when there is a new message in the packet that is to be processed. /// protected void OnNewMessageArrived(ushort dataSetId) { MessageHeader.Synchronize(); RaiseReadMessageCompleted(dataSetId); } #endregion private } } ================================================ FILE: Networking/SemanticData/MessageHandling/BinaryMessageEncoder.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2020, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System; using System.IO; using UAOOI.Configuration.Networking.Serialization; using UAOOI.Networking.SemanticData.Encoding; namespace UAOOI.Networking.SemanticData.MessageHandling { /// /// Class BinaryMessageEncoder - provides message content binary encoding functionality. /// /// /// /// Implements only simple value types. Structural types must be implemented after more details will /// be available in the spec. /// /// public abstract class BinaryMessageEncoder : MessageWriterBase, IBinaryHeaderEncoder { /// /// Initializes a new instance of the class. /// /// The UA encoder. /// Type of the length field. public BinaryMessageEncoder(IUAEncoder uaEncoder, MessageLengthFieldTypeEnum lengthFieldType) : base(uaEncoder) { m_lengthFieldType = lengthFieldType; } #region IBinaryHeaderWriter /// /// If implemented by the derived class sets the position within the wrapped stream. /// /// /// A byte offset relative to origin. /// /// /// A field of indicating the reference point from which the new position is to be obtained.. /// /// The position with the current stream as . public abstract long Seek(int offset, SeekOrigin origin); #endregion IBinaryHeaderWriter #region Header /// /// Gets or sets the message header. /// /// The message header. internal MessageHeader MessageHeader { get; set; } #endregion Header #region MessageWriterBase /// /// Creates the message. /// /// The selected encoding for the message. /// The producer identifier. /// The data set writer identifier. /// The field count. /// The sequence number. /// The time stamp. /// The configuration version. protected internal override void CreateMessage (FieldEncodingEnum encoding, Guid prodicerId, ushort dataSetWriterId, ushort fieldCount, ushort sequenceNumber, DateTime timeStamp, ConfigurationVersionDataType configurationVersion) { OnMessageAdding(prodicerId, dataSetWriterId); MessageHeader = MessageHeader.GetProducerMessageHeader(this, encoding, m_lengthFieldType, MessageTypeEnum.DataKeyFrame, configurationVersion); //Create message header and placeholder for further header content. MessageHeader.FieldCount = fieldCount; MessageHeader.MessageSequenceNumber = sequenceNumber; MessageHeader.TimeStamp = timeStamp; } /// /// Sends the message - evaluates condition if send the package. /// /// /// In current implementation one message per package is sent. /// protected override void SendMessage() { MessageHeader.Synchronize(); OnMessageAdded(); //TODO sign and encrypt the message. } #endregion MessageWriterBase #region private private readonly MessageLengthFieldTypeEnum m_lengthFieldType; /// /// Called when new message is adding to the package payload. /// /// The producer identifier. /// The data set writer identifier - must be unique in context of . protected abstract void OnMessageAdding(Guid producerId, ushort dataSetWriterId); /// /// Called when the current message has been added and is ready to be sent out. /// protected abstract void OnMessageAdded(); #endregion private } } ================================================ FILE: Networking/SemanticData/MessageHandling/BinaryPacketDecoder.cs ================================================  using System; using UAOOI.Networking.SemanticData.Encoding; namespace UAOOI.Networking.SemanticData.MessageHandling { /// /// Class BinaryPacketDecoder - OPC UA binary packet decoder. /// public abstract class BinaryPacketDecoder : BinaryMessageDecoder { #region creator /// /// Initializes a new instance of the class. /// /// The UA decoder. public BinaryPacketDecoder(IUADecoder uaDecoder) : base(uaDecoder) { } #endregion #region API /// /// Gets or sets the header of the packet. The header is retrieved from the message after arriving. /// /// The header . public PacketHeader Header { get; set; } #endregion #region private /// /// Called by the network handler to start analyzing new packet by waking up all readers waiting for the messages by raising the event. /// protected void OnNewPacketArrived() { Header = PacketHeader.GetConsumerPacketHeader(this); for (int i = 0; i < Header.MessageCount; i++) OnNewMessageArrived(Header.DataSetWriterIds[i]); } //TODO How to configure ProducerId #148 protected override Guid PublisherId { get { return Header.PublisherId; } } #endregion } } ================================================ FILE: Networking/SemanticData/MessageHandling/BinaryPacketEncoder.cs ================================================  using System; using System.Collections.Generic; using UAOOI.Networking.SemanticData.Encoding; namespace UAOOI.Networking.SemanticData.MessageHandling { /// /// Class BinaryPacketEncoder - OPC UA binary packet encoder. /// public abstract class BinaryPacketEncoder : BinaryMessageEncoder { /// /// Initializes a new instance of the class. /// /// The ua encoder. /// Type of the length field in the the message header. public BinaryPacketEncoder(IUAEncoder uaEncoder, MessageLengthFieldTypeEnum lengthFieldType) : base(uaEncoder, lengthFieldType) { } /// /// Gets or sets the header of the packet. /// /// The header . public PacketHeader Header { get; set; } #region BinaryMessageEncoder /// /// Called when new message is adding to the package payload. /// /// The producer identifier. /// The data set writer identifier - must be unique in context of . protected override void OnMessageAdding(Guid producerId, ushort dataSetWriterId) { } /// /// Called when the current message has been added and is ready to be sent out. /// protected override void OnMessageAdded() { SendFrame(); } #endregion #region private //vars /// /// Begins sending the frame. /// protected abstract void SendFrame(); //methods /// /// Encodes the headers. /// protected void EncodePacketHeaders(Guid producerId, IList dataSetWriterIds) { Header = PacketHeader.GetProducerPacketHeader(this, producerId, dataSetWriterIds); Header.WritePacketHeader(); } #endregion } } ================================================ FILE: Networking/SemanticData/MessageHandling/CommonDefinition.cs ================================================ namespace UAOOI.Networking.SemanticData.MessageHandling { /// /// Class CommonDefinition and extension functions. /// public static class CommonDefinitions { /// /// The protocol version used in the package header. move it to configuration. /// public static readonly byte ProtocolVersion = 110; } } ================================================ FILE: Networking/SemanticData/MessageHandling/DataSelector.cs ================================================  using System; namespace UAOOI.Networking.SemanticData.MessageHandling { public class DataSelector { //TODO How to configure ProducerId #148 public Guid PublisherId; public UInt16 DataSetWriterId; } } ================================================ FILE: Networking/SemanticData/MessageHandling/HeaderWriter.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2020, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System; using System.IO; namespace UAOOI.Networking.SemanticData.MessageHandling { /// /// Class HeaderWriter - helper class supporting writing headers content. /// internal class HeaderWriter { #region API /// /// Initializes a new instance of the class. /// /// The writer. /// Length of the packet. internal HeaderWriter(IBinaryHeaderEncoder writer, ushort headerLength) { m_Length = headerLength; m_Writer = writer; m_BeginPosition = CurrentPosition(); writer.Seek(m_Length, SeekOrigin.Current); } /// /// Writes the header. /// /// The write header delegate encapsulating functionality used to update the header content. internal void WriteHeader(Action writeHeader) { long m_CurrentPosition = SetPosition(Convert.ToInt32(m_BeginPosition)); writeHeader(m_Writer, DataLength(m_CurrentPosition)); RestorePosition(); } #endregion API #region private //vars private IBinaryHeaderEncoder m_Writer; private readonly ushort m_Length; private readonly long m_BeginPosition; //methods /// /// The length of the message content. /// /// Calculated message data length. private ushort DataLength(long currentPosition) { return Convert.ToUInt16(currentPosition - m_BeginPosition); } private long SetPosition(int offset) { long _ret = m_Writer.Seek(0, SeekOrigin.Current); m_Writer.Seek(offset, SeekOrigin.Begin); return _ret; } private long RestorePosition() { return m_Writer.Seek(0, SeekOrigin.End); } private long CurrentPosition() { return m_Writer.Seek(0, SeekOrigin.Current); } #endregion private } } ================================================ FILE: Networking/SemanticData/MessageHandling/IBinaryHeaderWriter.cs ================================================  using System; using System.IO; using UAOOI.Networking.SemanticData.Encoding; namespace UAOOI.Networking.SemanticData.MessageHandling { /// /// Interface IBinaryHeaderEncoder - instance of this interface is used to manage the message and packet headers content on the producer side. /// public interface IBinaryHeaderEncoder: IBinaryEncoder { /// /// Sets the position within the current stream. /// /// /// A byte offset relative to origin. /// /// /// A field of indicating the reference point from which the new position is to be obtained.. /// /// The position with the current stream as . long Seek(int offset, SeekOrigin origin); } } ================================================ FILE: Networking/SemanticData/MessageHandling/IMessageHandler.cs ================================================ //____________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //____________________________________________________________________________ using System; using UAOOI.Networking.Core; namespace UAOOI.Networking.SemanticData.MessageHandling { /// /// Interface IMessageHandler - provides basic functionality handling messages communication over the wire. /// public interface IMessageHandler : IDisposable { /// /// Gets the state machine for the the instance. /// /// An object of providing implementation of the state machine governing this instance behavior. IAssociationState State { get; } /// /// Attaches to network - initialize the underlying protocol stack and establish the connection with the broker is applicable. /// /// /// Depending on the message transport layer type implementation of this function varies. /// void AttachToNetwork(); /// /// Gets the content mask. The content mast read from the message or provided by the writer. /// The order of the bits starting from the least significant bit matches the order of the data items /// within the data set. /// /// The content mask represented as unsigned number . The order of the bits starting from the least significant /// bit matches the order of the data items within the data set. /// UInt64 ContentMask { get; } } } ================================================ FILE: Networking/SemanticData/MessageHandling/IMessageReader.cs ================================================  using System; using UAOOI.Networking.SemanticData.DataRepository; namespace UAOOI.Networking.SemanticData.MessageHandling { /// /// Interface IMessageReader - provides functionality supporting reading the messages from the wire. /// public interface IMessageReader : IMessageHandler { /// /// Occurs when an asynchronous operation to read a new message completes. /// event EventHandler ReadMessageCompleted; /// /// Updates my values using inverse of control pattern. /// /// Captures a delegated used to update the consumer variables using values decoded form the message. /// Number of items in the data set. void UpdateMyValues(Func update, int length); } } ================================================ FILE: Networking/SemanticData/MessageHandling/IMessageWriter.cs ================================================  using System; using UAOOI.Configuration.Networking.Serialization; using UAOOI.Networking.SemanticData.DataRepository; namespace UAOOI.Networking.SemanticData.MessageHandling { /// /// Interface IMessageWriter - provides functionality supporting sending the messages over the wire. /// public interface IMessageWriter : IMessageHandler { /// /// Sends the data described by a data set collection to remote destination. /// /// Encapsulates functionality used by the to collect all the data (data set items) required to prepare new message and send it over the network. /// Number of items to be send used to calculate the length of the message. /// The content mask represented as unsigned number . The order of the bits starting from the least significant /// bit matches the order of the data items within the data set. /// The encoding. /// The data selector. /// The message sequence number. A monotonically increasing sequence number assigned by the publisher to each message sent. /// The time stamp - the time the Data was collected. /// The configuration version. void Send (Func producerBinding, ushort length, ulong contentMask, FieldEncodingEnum encoding, DataSelector dataSelector, ushort messageSequenceNumber, DateTime timeStamp, ConfigurationVersionDataType configurationVersion); } } ================================================ FILE: Networking/SemanticData/MessageHandling/MessageEventArg.cs ================================================  using System; namespace UAOOI.Networking.SemanticData.MessageHandling { /// /// Class MessageEventArg - class representing an event that contains new to be processed by the consumer or a producer outcome to be /// sent over the network by the underlying message transport protocol.. /// public class MessageEventArg : EventArgs { /// /// Initializes a new instance of the class. /// /// The new message to be processed by the consumer or a producer outcome to be /// sent over the network by the underlying message transport protocol. /// The data set identifier. /// The producer identifier. // TODO How to configure ProducerId #148 public MessageEventArg(IMessageReader newMessage, UInt16 dataSetId, Guid producerId) { MessageContent = newMessage; DataSetId = dataSetId; ProducerId = producerId; } /// /// Gets the content of the just received message to be processed by the consumer or a producer outcome to be /// sent over the network by the underlying message transport protocol. /// /// The content of the message. internal IMessageReader MessageContent { get; private set; } /// /// Gets the data set identifier. /// /// The data set identifier. internal UInt32 DataSetId { get; private set; } //TODO How to configure ProducerId #148 internal Guid ProducerId { get; private set; } } } ================================================ FILE: Networking/SemanticData/MessageHandling/MessageHandler.cs ================================================ //____________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //____________________________________________________________________________ using UAOOI.Networking.Core; namespace UAOOI.Networking.SemanticData.MessageHandling { public abstract class MessageHandler : IMessageHandler { #region IMessageHandler /// /// Attaches to network - initialize the underlying protocol stack and establish the connection with the broker is applicable. /// /// Depending on the message transport layer type implementation of this function varies. public abstract void AttachToNetwork(); /// /// Gets the state machine for the the instance. /// /// An object of providing implementation of the state machine governing this instance behavior. public abstract IAssociationState State { get; set; } /// /// Gets the content mask. The content mast read from the message or provided by the writer. /// The order of the bits starting from the least significant bit matches the order of the data items /// within the data set. /// /// The content mask represented as unsigned number . The order of the bits starting from the least significant /// bit matches the order of the data items within the data set. public abstract ulong ContentMask { get; protected set; } #endregion #region IDisposable Support private bool disposedValue = false; // To detect redundant calls protected virtual void Dispose(bool disposing) { if (disposedValue) return; disposedValue = true; } // This code added to correctly implement the disposable pattern. public void Dispose() { // Do not change this code. Put cleanup code in Dispose(bool disposing) above. Dispose(true); } #endregion } } ================================================ FILE: Networking/SemanticData/MessageHandling/MessageHandling.cd ================================================  AAgQAAQCAQEARAgCAAAAgCAAAWAKA0QAAEAREAAAASA= MessageHandling\MessageReaderBase.cs gAAAAAAAAAAAAAAAACAAQYAAAAAAAASAAAAAAQEAAAA= MessageHandling\MessageWriterBase.cs AAAQAAAAAAAAQAAICCAAAAAAAAAAgACAAAAAAAAAAAA= MessageHandling\BinaryMessageEncoder.cs AAAAAAAAAAAAQAAAAAAAQAAAAAAAAAAACAAAAAAAIAA= MessageHandling\BinaryMessageDecoder.cs AAAAAAQCACEAAQgCAAAAgAAAADACAUAAAEARFAQEAAA= MessageHandling\BinaryDecoder.cs AAAAAAIAACAAAAQAGIAAAAAAQAAAgEAAAAAABAUAAAA= MessageHandling\BinaryEncoder.cs AIAAAACAIgAEAAAAAQBAAAAAIAAYAAAAIAAAAAAAAgA= MessageHandling\MessageHeader.cs gAAAAAAQAAAAAAAAAAAAAAgAAQAAAAAAQIALAAAACAg= MessageHandling\PacketHeader.cs BAAAAAAAAAAAAAAAAAAAAAAAAQAgAAAAAAAAAAAAAAA= MessageHandling\BinaryPacketDecoder.cs BAAAAAAAAAAAAAAIAAAAAAQAQAAAgAAAAAAAAAAAAAA= MessageHandling\BinaryPacketEncoder.cs AAAAAAAAACAAAAAAAAAAQAAAAAAAAAAAAAAABgQAAAA= MessageHandling\MessageHandler.cs AAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAABAQAAAA= MessageHandling\IMessageHandler.cs AAAQAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAA= MessageHandling\IMessageReader.cs AAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAA= MessageHandling\IMessageWriter.cs AAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAA= MessageHandling\IBinaryHeaderWriter.cs ================================================ FILE: Networking/SemanticData/MessageHandling/MessageHeader.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2020, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System; using System.Diagnostics; using UAOOI.Configuration.Networking.Serialization; using UAOOI.Networking.SemanticData.Encoding; namespace UAOOI.Networking.SemanticData.MessageHandling { /// /// Class MessageHeader represent information in the protocol message header. /// public abstract class MessageHeader { #region API /// /// Gets the producer message header. /// /// The writer to populate the payload with the header information. /// The encoding. /// Type of the length field in the the message header. /// Type of the message. /// The configuration version. /// MessageHeader. internal static MessageHeader GetProducerMessageHeader(IBinaryHeaderEncoder writer, FieldEncodingEnum encoding, MessageLengthFieldTypeEnum lengthFieldType, MessageTypeEnum messageType, ConfigurationVersionDataType configurationVersion) { return new ProducerMessageHeader(writer, encoding, lengthFieldType, messageType, configurationVersion); } /// /// Gets the consumer message header. /// /// The reader used to read the header data from the message. /// MessageHeader. internal static MessageHeader GetConsumerMessageHeader(IBinaryDecoder reader) { return new ConsumerMessageHeader(reader); } /// /// Synchronizes this instance content with the underlying stream using provided or depending on the message handler role. /// internal abstract void Synchronize(); #endregion API #region Header /// /// Gets or sets the type of the message. /// /// The type of the message. public abstract MessageTypeEnum MessageType { get; } /// /// Gets or sets the encoding flags. /// /// The encoding flags. public abstract byte EncodingFlags { get; } /// /// Gets or sets the length of the message. /// /// The length of the message data structure including the header information and length field. public abstract uint MessageLength { get; } /// /// Gets or sets the message sequence number. /// /// /// A receiver shall ignore older messages than the last sequence processed. Receivers need to be aware of sequence numbers roll over. /// /// The message sequence number. A monotonically increasing sequence number assigned by the publisher to each message sent. /// public abstract ushort MessageSequenceNumber { get; internal set; } /// /// Gets or sets the configuration version. /// /// The configuration version used as consistency check for the metadata about the published variables. public abstract ConfigurationVersionDataType ConfigurationVersion { get; internal set; } /// /// Gets or sets the time stamp of th data contained in the message. /// /// The time the Data was collected. public abstract DateTime TimeStamp { get; internal set; } /// /// Gets or sets the field count. /// /// Number of fields of the DataSet contained in the Message. public abstract ushort FieldCount { get; internal set; } /// /// Gets the fields encoding. /// /// The value of type representing fields encoding. public FieldEncodingEnum FieldsEncoding => (FieldEncodingEnum)(EncodingFlags & EncodingFlagsFieldEncodingMask); #endregion Header #region private //vars private const byte EncodingFlagsMessageLengthMask = 0x3; private const byte EncodingFlagsFieldEncodingMask = 0xC; //types private class ProducerMessageHeader : MessageHeader { #region creator public ProducerMessageHeader(IBinaryHeaderEncoder writer, FieldEncodingEnum encoding, MessageLengthFieldTypeEnum lengthFieldType, MessageTypeEnum messageType, ConfigurationVersionDataType configurationVersion) { m_MessageType = messageType; m_Encoding = encoding; m_lengthFieldType = lengthFieldType; m_HeaderWriter = new HeaderWriter(writer, PackageHeaderLength()); MessageSequenceNumber = 0; ConfigurationVersion = configurationVersion; } #endregion creator #region MessageHeader public override MessageTypeEnum MessageType => m_MessageType; public override byte EncodingFlags => (byte)((byte)m_Encoding | (byte)m_lengthFieldType); /// /// Gets or sets the length of the message. /// /// The length of the message data structure including the header information and length field. /// This operation is not applicable for the Producer Message Header public override uint MessageLength => throw new ApplicationException("This operation is not applicable for the Producer Message Header"); public override ushort MessageSequenceNumber { get; internal set; } public override ConfigurationVersionDataType ConfigurationVersion { get; internal set; } public override DateTime TimeStamp { get; internal set; } public override ushort FieldCount { get; internal set; } internal override void Synchronize() { m_HeaderWriter.WriteHeader(WriteHeader); } #endregion MessageHeader #region private //vars private HeaderWriter m_HeaderWriter; private readonly FieldEncodingEnum m_Encoding = FieldEncodingEnum.VariantFieldEncoding; private readonly MessageLengthFieldTypeEnum m_lengthFieldType = MessageLengthFieldTypeEnum.TwoBytes; private readonly MessageTypeEnum m_MessageType; //methods private ushort PackageHeaderLength() { ushort _length = 6; switch (m_lengthFieldType) { case MessageLengthFieldTypeEnum.OneByte: _length += 1; break; case MessageLengthFieldTypeEnum.TwoBytes: _length += 2; break; case MessageLengthFieldTypeEnum.FourBytes: _length += 4; break; } switch (m_MessageType) { case MessageTypeEnum.DataKeyFrame: case MessageTypeEnum.DataDeltaFrame: case MessageTypeEnum.Event: _length += 10; break; case MessageTypeEnum.KeepAlive: break; case MessageTypeEnum.DataSetMetadata: break; default: break; } return _length; } private void WriteHeader(IBinaryHeaderEncoder writer, ushort messageLength) { writer.Write((byte)MessageType); writer.Write(EncodingFlags); switch (m_lengthFieldType) { case MessageLengthFieldTypeEnum.OneByte: writer.Write(Convert.ToByte(messageLength)); break; case MessageLengthFieldTypeEnum.TwoBytes: writer.Write(Convert.ToUInt16(messageLength)); break; case MessageLengthFieldTypeEnum.FourBytes: writer.Write(Convert.ToUInt32(messageLength)); break; } writer.Write(MessageSequenceNumber); writer.Write(ConfigurationVersion.MajorVersion); writer.Write(ConfigurationVersion.MinorVersion); switch (MessageType) { case MessageTypeEnum.DataKeyFrame: case MessageTypeEnum.DataDeltaFrame: case MessageTypeEnum.Event: writer.Write(TimeStamp); writer.Write(FieldCount); break; case MessageTypeEnum.KeepAlive: break; case MessageTypeEnum.DataSetMetadata: break; default: break; } } #endregion private } private class ConsumerMessageHeader : MessageHeader { #region creator public ConsumerMessageHeader(IBinaryDecoder reader) { m_reader = reader; } #endregion creator #region MessageHeader public override MessageTypeEnum MessageType { get { AssertSynchronized(); return m_MessageType; } } public override byte EncodingFlags { get { AssertSynchronized(); return m_EncodingFlags; } } public override uint MessageLength { get { AssertSynchronized(); return m_MessageLength; } } public override ushort MessageSequenceNumber { get { AssertSynchronized(); return m_MessageSequenceNumber; } internal set => throw new ApplicationException(m_OperationIsNotApplicableMessage); } public override ConfigurationVersionDataType ConfigurationVersion { get { AssertSynchronized(); return m_ConfigurationVersion; } internal set => throw new ApplicationException(m_OperationIsNotApplicableMessage); } public override DateTime TimeStamp { get { AssertSynchronized(); return m_TimeStamp; } internal set => throw new ApplicationException(m_OperationIsNotApplicableMessage); } public override ushort FieldCount { get { AssertSynchronized(); return m_FieldCount; } internal set => throw new ApplicationException(m_OperationIsNotApplicableMessage); } internal override void Synchronize() { m_MessageType = (MessageTypeEnum)m_reader.ReadByte(); m_EncodingFlags = m_reader.ReadByte(); switch ((MessageLengthFieldTypeEnum)(m_EncodingFlags & EncodingFlagsMessageLengthMask)) { case MessageLengthFieldTypeEnum.OneByte: m_MessageLength = m_reader.ReadByte(); break; case MessageLengthFieldTypeEnum.TwoBytes: m_MessageLength = m_reader.ReadUInt16(); break; case MessageLengthFieldTypeEnum.FourBytes: m_MessageLength = m_reader.ReadUInt32(); break; } m_MessageSequenceNumber = m_reader.ReadUInt16(); m_ConfigurationVersion.MajorVersion = m_reader.ReadByte(); m_ConfigurationVersion.MinorVersion = m_reader.ReadByte(); switch (m_MessageType) { case MessageTypeEnum.DataKeyFrame: case MessageTypeEnum.DataDeltaFrame: case MessageTypeEnum.Event: m_TimeStamp = m_reader.ReadDateTime(); m_FieldCount = m_reader.ReadUInt16(); break; case MessageTypeEnum.KeepAlive: break; case MessageTypeEnum.DataSetMetadata: break; default: break; } m_IsSynchronized = true; } #endregion MessageHeader #region private //vars private const string m_OperationIsNotApplicableMessage = "This operation is not applicable for the consumer message header"; private bool m_IsSynchronized = false; private IBinaryDecoder m_reader; private uint m_MessageLength; private byte m_EncodingFlags; private ushort m_MessageSequenceNumber; private ConfigurationVersionDataType m_ConfigurationVersion = new ConfigurationVersionDataType() { MajorVersion = 0, MinorVersion = 0 }; private DateTime m_TimeStamp; private MessageTypeEnum m_MessageType; private ushort m_FieldCount; //methods [Conditional("DEBUG")] private void AssertSynchronized() { Debug.Assert(m_IsSynchronized, "Producer message must be synchronized with the underlying stream before the header fields will be available."); } #endregion private } /// /// Initializes a new instance of the class. /// protected MessageHeader() { } #endregion private } } ================================================ FILE: Networking/SemanticData/MessageHandling/MessageLengthEnum.cs ================================================  using System; namespace UAOOI.Networking.SemanticData.MessageHandling { /// /// Enum MessageLengthFieldTypeEnum - defines the type of the length field in the message header. /// public enum MessageLengthFieldTypeEnum : byte { /// /// The field type is byte /// OneByte = 0x0, /// /// The field type is /// TwoBytes = 0x1, /// /// The field type is /// FourBytes = 0x2, /// /// The value is reserved and not applicable for the current protocol version. /// Reserver = 0x3 } } ================================================ FILE: Networking/SemanticData/MessageHandling/MessageReaderBase.cs ================================================ //____________________________________________________________________________ // // Copyright (C) 2020, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //____________________________________________________________________________ using System; using UAOOI.Configuration.Networking.Serialization; using UAOOI.Networking.Core; using UAOOI.Networking.SemanticData.DataRepository; using UAOOI.Networking.SemanticData.Encoding; namespace UAOOI.Networking.SemanticData.MessageHandling { /// /// Class MessageReaderBase - helper class providing basic implementation of the interface /// public abstract class MessageReaderBase : MessageHandler, IMessageReader, IBinaryDecoder { #region creator /// /// Initializes a new instance of the class providing basic implementation of the interface. /// /// The decoder that provides methods to be used to decode OPC UA Built-in types. public MessageReaderBase(IUADecoder uaDecoder) { m_UADecoder = uaDecoder ?? throw new ArgumentNullException(nameof(uaDecoder)); m_ReadValueDelegate = ReadValueVariant; } #endregion creator #region IMessageReader /// /// Occurs when an asynchronous operation to read a new message completes. /// public event EventHandler ReadMessageCompleted; /// /// Updates my values using inverse of control pattern. /// /// Captures a delegated used to update the consumer variables using values decoded form the message. /// Number of items in the data set. void IMessageReader.UpdateMyValues(Func update, int length) { //UInt64 _mask = 0x1; for (int i = 0; i < length; i++) { if (EndOfMessage()) { Diagnostics.ReactiveNetworkingEventSource.Log.MessageInconsistency(i); break; } //TODO: Implement ContentMask https://github.com/mpostol/OPC-UA-OOI/issues/89 //if ((ContentMask & _mask) > 0) //{ IConsumerBinding _binding = update(i); switch (MessageHeader.FieldsEncoding) { case FieldEncodingEnum.VariantFieldEncoding: ReadValueVariant(_binding); break; case FieldEncodingEnum.CompressedFieldEncoding: ReadValue(_binding); break; case FieldEncodingEnum.DataValueFieldEncoding: ReadDataValue(_binding); break; } //} //_mask = _mask << 1; } } #endregion IMessageReader #region IBinaryDecoder public abstract ulong ReadUInt64(); public abstract uint ReadUInt32(); public abstract ushort ReadUInt16(); public abstract string ReadString(); public abstract float ReadSingle(); public abstract sbyte ReadSByte(); public abstract long ReadInt64(); public abstract int ReadInt32(); public abstract short ReadInt16(); public abstract double ReadDouble(); public abstract char ReadChar(); public abstract byte ReadByte(); public abstract bool ReadBoolean(); public abstract byte[] ReadBytes(int count); public DateTime ReadDateTime() { return m_UADecoder.ReadDateTime(this); } public Guid ReadGuid() { return m_UADecoder.ReadGuid(this); } #endregion IBinaryDecoder #region private //vars private IUADecoder m_UADecoder; private readonly Action m_ReadValueDelegate = null; /// /// Signals the end of message. /// /// true if there is end of message condition, false otherwise. protected abstract bool EndOfMessage(); /// /// Gets the publisher identifier. /// /// The publisher identifier. protected abstract Guid PublisherId { get; } //methods /// /// Gets the message header. /// /// The message header . protected abstract MessageHeader MessageHeader { get; } /// /// Raises the read message completed event. /// protected void RaiseReadMessageCompleted(ushort dataSetId) { //TODO ConsumerAssociation - skip message if not operational #133 if (State.State != HandlerState.Operational) return; ReadMessageCompleted?.Invoke(this, new MessageEventArg(this, dataSetId, PublisherId)); } private void ReadValue(IConsumerBinding consumerBinding) { object _value = null; switch (consumerBinding.Encoding.BuiltInType) { case BuiltInType.Boolean: if (consumerBinding.Encoding.ValueRank < 0) _value = ReadBoolean(); else _value = m_UADecoder.ReadArray(this, ReadBoolean, consumerBinding.Encoding.ValueRank > 1); break; case BuiltInType.SByte: if (consumerBinding.Encoding.ValueRank < 0) _value = ReadSByte(); else _value = m_UADecoder.ReadArray(this, ReadSByte, consumerBinding.Encoding.ValueRank > 1); break; case BuiltInType.Byte: if (consumerBinding.Encoding.ValueRank < 0) _value = ReadByte(); else _value = m_UADecoder.ReadArray(this, ReadByte, consumerBinding.Encoding.ValueRank > 1); break; case BuiltInType.Int16: if (consumerBinding.Encoding.ValueRank < 0) _value = ReadInt16(); else _value = m_UADecoder.ReadArray(this, ReadInt16, consumerBinding.Encoding.ValueRank > 1); break; case BuiltInType.UInt16: if (consumerBinding.Encoding.ValueRank < 0) _value = ReadUInt16(); else _value = m_UADecoder.ReadArray(this, ReadUInt16, consumerBinding.Encoding.ValueRank > 1); break; case BuiltInType.Int32: if (consumerBinding.Encoding.ValueRank < 0) _value = ReadInt32(); else _value = m_UADecoder.ReadArray(this, ReadInt32, consumerBinding.Encoding.ValueRank > 1); break; case BuiltInType.UInt32: if (consumerBinding.Encoding.ValueRank < 0) _value = ReadUInt32(); else _value = m_UADecoder.ReadArray(this, ReadUInt32, consumerBinding.Encoding.ValueRank > 1); break; case BuiltInType.Int64: if (consumerBinding.Encoding.ValueRank < 0) _value = ReadInt64(); else _value = m_UADecoder.ReadArray(this, ReadInt64, consumerBinding.Encoding.ValueRank > 1); break; case BuiltInType.UInt64: if (consumerBinding.Encoding.ValueRank < 0) _value = ReadUInt64(); else _value = m_UADecoder.ReadArray(this, ReadUInt64, consumerBinding.Encoding.ValueRank > 1); break; case BuiltInType.Float: if (consumerBinding.Encoding.ValueRank < 0) _value = ReadSingle(); else _value = m_UADecoder.ReadArray(this, ReadSingle, consumerBinding.Encoding.ValueRank > 1); break; case BuiltInType.Double: if (consumerBinding.Encoding.ValueRank < 0) _value = ReadDouble(); else _value = m_UADecoder.ReadArray(this, ReadDouble, consumerBinding.Encoding.ValueRank > 1); break; case BuiltInType.String: if (consumerBinding.Encoding.ValueRank < 0) _value = m_UADecoder.ReadString(this); else _value = m_UADecoder.ReadArray(this, () => m_UADecoder.ReadString(this), consumerBinding.Encoding.ValueRank > 1); break; case BuiltInType.DateTime: if (consumerBinding.Encoding.ValueRank < 0) _value = m_UADecoder.ReadDateTime(this); else _value = m_UADecoder.ReadArray(this, () => m_UADecoder.ReadDateTime(this), consumerBinding.Encoding.ValueRank > 1); break; case BuiltInType.Guid: if (consumerBinding.Encoding.ValueRank < 0) _value = m_UADecoder.ReadGuid(this); else _value = m_UADecoder.ReadArray(this, () => m_UADecoder.ReadGuid(this), consumerBinding.Encoding.ValueRank > 1); break; case BuiltInType.ByteString: if (consumerBinding.Encoding.ValueRank < 0) m_UADecoder.ReadByteString(this); else _value = m_UADecoder.ReadArray(this, () => m_UADecoder.ReadByteString(this), consumerBinding.Encoding.ValueRank > 1); break; case BuiltInType.XmlElement: if (consumerBinding.Encoding.ValueRank < 0) _value = m_UADecoder.ReadXmlElement(this); else _value = m_UADecoder.ReadArray(this, () => m_UADecoder.ReadXmlElement(this), consumerBinding.Encoding.ValueRank > 1); break; case BuiltInType.NodeId: if (consumerBinding.Encoding.ValueRank < 0) _value = m_UADecoder.ReadNodeId(this); else _value = m_UADecoder.ReadArray(this, () => m_UADecoder.ReadNodeId(this), consumerBinding.Encoding.ValueRank > 1); break; case BuiltInType.ExpandedNodeId: if (consumerBinding.Encoding.ValueRank < 0) _value = m_UADecoder.ReadExpandedNodeId(this); else _value = m_UADecoder.ReadArray(this, () => m_UADecoder.ReadExpandedNodeId(this), consumerBinding.Encoding.ValueRank > 1); break; case BuiltInType.StatusCode: if (consumerBinding.Encoding.ValueRank < 0) _value = m_UADecoder.ReadStatusCode(this); else _value = m_UADecoder.ReadArray(this, () => m_UADecoder.ReadStatusCode(this), consumerBinding.Encoding.ValueRank > 1); break; case BuiltInType.QualifiedName: if (consumerBinding.Encoding.ValueRank < 0) _value = m_UADecoder.ReadQualifiedName(this); else _value = m_UADecoder.ReadArray(this, () => m_UADecoder.ReadQualifiedName(this), consumerBinding.Encoding.ValueRank > 1); break; case BuiltInType.LocalizedText: if (consumerBinding.Encoding.ValueRank < 0) _value = m_UADecoder.ReadLocalizedText(this); else _value = m_UADecoder.ReadArray(this, () => m_UADecoder.ReadLocalizedText(this), consumerBinding.Encoding.ValueRank > 1); break; case BuiltInType.ExtensionObject: if (consumerBinding.Encoding.ValueRank < 0) _value = m_UADecoder.ReadExtensionObject(this); else _value = m_UADecoder.ReadArray(this, () => m_UADecoder.ReadExtensionObject(this), consumerBinding.Encoding.ValueRank > 1); break; case BuiltInType.DataValue: if (consumerBinding.Encoding.ValueRank < 0) _value = m_UADecoder.ReadDataValue(this); else _value = m_UADecoder.ReadArray(this, () => m_UADecoder.ReadDataValue(this), consumerBinding.Encoding.ValueRank > 1); break; case BuiltInType.Variant: if (consumerBinding.Encoding.ValueRank < 0) _value = m_UADecoder.ReadVariant(this); else _value = m_UADecoder.ReadArray(this, () => m_UADecoder.ReadVariant(this), consumerBinding.Encoding.ValueRank > 1); break; case BuiltInType.DiagnosticInfo: if (consumerBinding.Encoding.ValueRank < 0) _value = m_UADecoder.ReadDiagnosticInfo(this); else _value = m_UADecoder.ReadArray(this, () => m_UADecoder.ReadDiagnosticInfo(this), consumerBinding.Encoding.ValueRank > 1); break; default: throw new ArgumentOutOfRangeException(string.Format("Impossible to convert the type {0}", consumerBinding.Encoding)); } consumerBinding.Assign2Repository(_value); } private void ReadValueVariant(IConsumerBinding consumerBinding) { IVariant _ret = m_UADecoder.ReadVariant(this); AssertTypeMach(_ret.UATypeInfo, consumerBinding.Encoding); consumerBinding.Assign2Repository(_ret.Value); } private void ReadDataValue(IConsumerBinding _binding) { throw new NotImplementedException(); } private void AssertTypeMach(UATypeInfo uATypeInfo, UATypeInfo encoding) { //TODO MessageReaderBase.AssertTypeMach - must be implemented } #endregion private } } ================================================ FILE: Networking/SemanticData/MessageHandling/MessageTypeEnum.cs ================================================  namespace UAOOI.Networking.SemanticData.MessageHandling { /// /// Enum MessageTypeEnum - The type of the message. /// public enum MessageTypeEnum : byte { /// /// The data key frame /// DataKeyFrame = 0x1, /// /// The data delta frame /// DataDeltaFrame = 0x2, /// /// The event frame /// Event = 0x3, /// /// The keep alive frame /// KeepAlive = 0x4, /// /// The data set metadata frame /// DataSetMetadata = 0x5, } } ================================================ FILE: Networking/SemanticData/MessageHandling/MessageWriterBase.cs ================================================ //____________________________________________________________________________ // // Copyright (C) 2020, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //____________________________________________________________________________ using System; using System.Xml; using UAOOI.Configuration.Networking.Serialization; using UAOOI.Networking.Core; using UAOOI.Networking.SemanticData.DataRepository; using UAOOI.Networking.SemanticData.Encoding; namespace UAOOI.Networking.SemanticData.MessageHandling { /// /// Class MessageWriterBase - helper class that provides basic implementation of the . /// public abstract class MessageWriterBase : MessageHandler, IMessageWriter, IBinaryEncoder { #region creator /// /// Initializes a new instance of the class providing basic implementation of the . /// /// The ua encoder. public MessageWriterBase(IUAEncoder uaEncoder) { m_UAEncoder = uaEncoder ?? throw new ArgumentNullException(nameof(uaEncoder)); } #endregion creator #region IMessageWriter /// /// Gets the content mask. The content mast read from the message or provided by the writer. /// The order of the bits starting from the least significant bit matches the order of the data items /// within the data set. /// /// The content mask represented as unsigned number . The order of the bits starting from the least significant /// bit matches the order of the data items within the data set. public override ulong ContentMask { get; protected set; } /// /// Sends the data described by a data set collection to remote destination. /// /// Encapsulates functionality used by the to collect all the data (data set items) required to prepare new message and send it over the network. /// Number of items to be send used to calculate the length of the message. /// The content mask represented as unsigned number . The order of the bits starting from the least significant /// bit matches the order of the data items within the data set. /// The encoding. /// The data selector. /// The message sequence number. A monotonically increasing sequence number assigned by the publisher to each message sent. /// The time stamp - the time the Data was collected. /// The configuration version. /// Impossible to convert null value /// or void IMessageWriter.Send (Func producerBinding, ushort length, ulong contentMask, FieldEncodingEnum encoding, DataSelector dataSelector, ushort messageSequenceNumber, DateTime timeStamp, ConfigurationVersionDataType configurationVersion) { lock (this) { if (State.State != HandlerState.Operational) return; ContentMask = contentMask; CreateMessage(encoding, dataSelector.PublisherId, dataSelector.DataSetWriterId, length, messageSequenceNumber, timeStamp, configurationVersion); //UInt64 _mask = 0x1; for (int i = 0; i < length; i++) { //TODO: Implement ContentMask https://github.com/mpostol/OPC-UA-OOI/issues/89 //if ((ContentMask & _mask) > 0) //{ IProducerBinding _pb = producerBinding(i); switch (encoding) { case FieldEncodingEnum.VariantFieldEncoding: WriteValueVariant(_pb); break; case FieldEncodingEnum.CompressedFieldEncoding: WriteValue(_pb); break; case FieldEncodingEnum.DataValueFieldEncoding: WriteDataValue(_pb); break; } //} //_mask = _mask << 1; } SendMessage(); } } #endregion IMessageWriter #region IBinaryEncoder public abstract void Write(ulong value); public abstract void Write(uint value); public abstract void Write(ushort value); public abstract void Write(float value); public abstract void Write(sbyte value); public abstract void Write(long value); public abstract void Write(int value); public abstract void Write(short value); public abstract void Write(double value); public abstract void Write(bool value); /// /// Writes a to the current stream as a 16-element byte array that contains the value and advances the stream position by 16 bytes. /// /// The value to write. public void Write(Guid value) { m_UAEncoder.Write(this, value); } public abstract void Write(byte[] value); /// /// Writes an unsigned byte to the current stream and advances the stream position by one byte. /// /// TThe unsigned to write. public abstract void Write(byte value); public void Write(DateTime value) { m_UAEncoder.Write(this, value); } #endregion IBinaryEncoder #region private //types private class Variant : IVariant { public Variant(UATypeInfo typeInfo, object value) { switch (typeInfo.BuiltInType) { case BuiltInType.Null: throw new ArgumentOutOfRangeException(nameof(typeInfo), "Null is not permitted in the Variant"); case BuiltInType.Boolean: case BuiltInType.SByte: case BuiltInType.Byte: case BuiltInType.Int16: case BuiltInType.UInt16: case BuiltInType.Int32: case BuiltInType.UInt32: case BuiltInType.Int64: case BuiltInType.UInt64: case BuiltInType.Float: case BuiltInType.Double: case BuiltInType.String: case BuiltInType.DateTime: if (value == null) throw new NullReferenceException("Value type cannot be null."); break; default: break; } UATypeInfo = typeInfo; Value = value; } public UATypeInfo UATypeInfo { get; private set; } public object Value { get; private set; } } //vars private IUAEncoder m_UAEncoder; //methods /// /// Creates the message. /// /// The selected encoding for the message. /// The producer identifier. /// The data set writer identifier. /// The field count. /// The sequence number. /// The time stamp. /// The configuration version. protected internal abstract void CreateMessage (FieldEncodingEnum encoding, Guid producerId, ushort dataSetWriterId, ushort fieldCount, ushort sequenceNumber, DateTime timeStamp, ConfigurationVersionDataType configurationVersion); /// /// Finalize preparation and sends the message. /// protected abstract void SendMessage(); private void WriteValue(IProducerBinding producerBinding) { object value = producerBinding.GetFromRepository(); switch (producerBinding.Encoding.BuiltInType) { case BuiltInType.Boolean: if (producerBinding.Encoding.ValueRank < 0) Write((bool)value); else m_UAEncoder.WriteArray(this, (Array)value, Write, BuiltInType.Boolean); break; case BuiltInType.SByte: if (producerBinding.Encoding.ValueRank < 0) Write((sbyte)value); else m_UAEncoder.WriteArray(this, (Array)value, Write, BuiltInType.SByte); break; case BuiltInType.Byte: if (producerBinding.Encoding.ValueRank < 0) Write((byte)value); else m_UAEncoder.WriteArray(this, (Array)value, Write, BuiltInType.Byte); break; case BuiltInType.DateTime: if (producerBinding.Encoding.ValueRank < 0) m_UAEncoder.Write(this, (DateTime)value); else m_UAEncoder.WriteArray(this, (Array)value, Write, BuiltInType.DateTime); break; case BuiltInType.Double: if (producerBinding.Encoding.ValueRank < 0) Write((double)value); else m_UAEncoder.WriteArray(this, (Array)value, Write, BuiltInType.Double); break; case BuiltInType.Int16: if (producerBinding.Encoding.ValueRank < 0) Write((short)value); else m_UAEncoder.WriteArray(this, (Array)value, Write, BuiltInType.Int16); break; case BuiltInType.Enumeration: case BuiltInType.Int32: if (producerBinding.Encoding.ValueRank < 0) Write((int)value); else m_UAEncoder.WriteArray(this, (Array)value, Write, BuiltInType.Int32); break; case BuiltInType.Int64: if (producerBinding.Encoding.ValueRank < 0) Write((long)value); else m_UAEncoder.WriteArray(this, (Array)value, Write, BuiltInType.Int64); break; case BuiltInType.Float: if (producerBinding.Encoding.ValueRank < 0) Write((float)value); else m_UAEncoder.WriteArray(this, (Array)value, Write, BuiltInType.Float); break; case BuiltInType.String: if (producerBinding.Encoding.ValueRank < 0) m_UAEncoder.Write(this, (string)value); else m_UAEncoder.WriteArray(this, (Array)value, x => m_UAEncoder.Write(this, x), BuiltInType.String); break; case BuiltInType.UInt16: if (producerBinding.Encoding.ValueRank < 0) Write((ushort)value); else m_UAEncoder.WriteArray(this, (Array)value, Write, BuiltInType.UInt16); break; case BuiltInType.UInt32: if (producerBinding.Encoding.ValueRank < 0) Write((uint)value); else m_UAEncoder.WriteArray(this, (Array)value, Write, BuiltInType.UInt32); break; case BuiltInType.UInt64: if (producerBinding.Encoding.ValueRank < 0) Write((ulong)value); else m_UAEncoder.WriteArray(this, (Array)value, Write, BuiltInType.UInt64); break; case BuiltInType.Guid: if (producerBinding.Encoding.ValueRank < 0) m_UAEncoder.Write(this, (Guid)value); else m_UAEncoder.WriteArray(this, (Array)value, x => m_UAEncoder.Write(this, x), BuiltInType.Guid); break; case BuiltInType.ByteString: if (producerBinding.Encoding.ValueRank < 0) m_UAEncoder.Write(this, (byte[])value); else m_UAEncoder.WriteArray(this, (Array)value, x => m_UAEncoder.Write(this, x), BuiltInType.ByteString); break; case BuiltInType.XmlElement: if (producerBinding.Encoding.ValueRank < 0) m_UAEncoder.Write(this, (XmlElement)value); else m_UAEncoder.WriteArray(this, (Array)value, x => m_UAEncoder.Write(this, x), BuiltInType.XmlElement); break; case BuiltInType.NodeId: if (producerBinding.Encoding.ValueRank < 0) m_UAEncoder.Write(this, (INodeId)value); else m_UAEncoder.WriteArray(this, (Array)value, x => m_UAEncoder.Write(this, x), BuiltInType.NodeId); break; case BuiltInType.ExpandedNodeId: if (producerBinding.Encoding.ValueRank < 0) m_UAEncoder.Write(this, (IExpandedNodeId)value); else m_UAEncoder.WriteArray(this, (Array)value, x => m_UAEncoder.Write(this, x), BuiltInType.ExpandedNodeId); break; case BuiltInType.StatusCode: if (producerBinding.Encoding.ValueRank < 0) m_UAEncoder.Write(this, (IStatusCode)value); else m_UAEncoder.WriteArray(this, (Array)value, x => m_UAEncoder.Write(this, x), BuiltInType.StatusCode); break; case BuiltInType.QualifiedName: if (producerBinding.Encoding.ValueRank < 0) m_UAEncoder.Write(this, (IQualifiedName)value); else m_UAEncoder.WriteArray(this, (Array)value, x => m_UAEncoder.Write(this, x), BuiltInType.QualifiedName); break; case BuiltInType.LocalizedText: if (producerBinding.Encoding.ValueRank < 0) m_UAEncoder.Write(this, (ILocalizedText)value); else m_UAEncoder.WriteArray(this, (Array)value, x => m_UAEncoder.Write(this, x), BuiltInType.LocalizedText); break; case BuiltInType.ExtensionObject: if (producerBinding.Encoding.ValueRank < 0) m_UAEncoder.Write(this, (IExtensionObject)value); else m_UAEncoder.WriteArray(this, (Array)value, x => m_UAEncoder.Write(this, x), BuiltInType.ExtensionObject); break; case BuiltInType.DataValue: if (producerBinding.Encoding.ValueRank < 0) m_UAEncoder.Write(this, (IDataValue)value); else m_UAEncoder.WriteArray(this, (Array)value, x => m_UAEncoder.Write(this, x), BuiltInType.DataValue); break; case BuiltInType.Variant: if (producerBinding.Encoding.ValueRank < 0) m_UAEncoder.Write(this, (IVariant)value); else m_UAEncoder.WriteArray(this, (Array)value, x => m_UAEncoder.Write(this, x), BuiltInType.Variant); break; case BuiltInType.DiagnosticInfo: if (producerBinding.Encoding.ValueRank < 0) m_UAEncoder.Write(this, (IDiagnosticInfo)value); else m_UAEncoder.WriteArray(this, (Array)value, x => m_UAEncoder.Write(this, x), BuiltInType.DiagnosticInfo); break; case BuiltInType.Null: default: throw new ArgumentOutOfRangeException($"Impossible to convert {value} of type {producerBinding.Encoding}"); } } private void WriteValueVariant(IProducerBinding producerBinding) { object value = producerBinding.GetFromRepository(); Variant _variant = new Variant(producerBinding.Encoding, value); m_UAEncoder.Write(this, _variant); } private void WriteDataValue(IProducerBinding _pb) { throw new NotImplementedException(); } #endregion private } } ================================================ FILE: Networking/SemanticData/MessageHandling/NetworkMessage.abnf ================================================ ;//____________________________________________________________________________ ;// ;// Copyright (C) 2019, Mariusz Postol LODZ POLAND. ;// ;// To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI ;// ;// This document contains Augmented BNF definition of the NetworkMessage ;// NetworkMessage is originally defined in OPC UA Part 14 Release 1.04 February 06, 2018 ;// Augmented BNF is defined in the document Augmented BNF for Syntax Specifications: ABNF RFC 5234 ;//____________________________________________________________________________ NetworkMessage = DataToSign Signature ; NetworkMessage DataToSign = NetworkMessageHeader [ GroupHeader ] [ PayloadHeader ] ExtendedNetworkMessageHeader [ SecurityHeader ] DataToEncrypt Signature = *OCTET ; The signature of the NetworkMessage. ; DataToSign NetworkMessageHeader = UADPHeader [ ExtendedFlags1 ] [ ExtendedFlags2 ] [ PublisherId ] [ DataSetClassId ] GroupHeader = GroupFlags [ WriterGroupId ] [ GroupVersion ] [ NetworkMessageNumber ] [ SequenceNumber ] ; The GroupHeader shall be omitted if GroupHeaderEnabled is 0. PayloadHeader = DataSetPayloadHeader / DiscoveryRequestPayloadHeader / DiscoveryResponsePayloadHeader ; The selection of the PayloadHeader alternative element depends on the NetworkMessageType value defined in the ExtendedFlags2. ; The PayloadHeader syntax depends on the NetworkMessageType bit range defined in the ExtendedFlags2. The default is DataSetMessageType if the ExtendedFlags2 field is not enabled. ; The PayloadHeader shall be omitted if bit PayloadHeaderEnabled of the UADPFlags is "0". ExtendedNetworkMessageHeader = [ NetworkMessageTimestamp ] [ NetworkMessageTimestampPicoSeconds ] [ PromotedFields ] SecurityHeader = SecurityFlags SecurityTokenId NonceLength MessageNonce SecurityFooterSize DataToEncrypt = Payload SecurityFooter ; NetworkMessageHeader UADPHeader = UADPVersion UADPFlags UADPFlags = PublisherIdEnabled GroupHeaderEnabled PayloadHeaderEnabled ExtendedFlags1Enabled ; 4 BIT ExtendedFlags1 = PublisherIdType DataSetClassIdEnabled SecurityEnabled MessageTimestampEnabled MessagePicoSecondsEnabled ExtendedFlags2Enabled ; The ExtendedFlags1 shall be omitted if ExtendedFlags1Enabled is 0. ; If the field is omitted, the default value of 0 is applied for all bits. ExtendedFlags2 = ChunkMessage PromotedFieldsEnabled NetworkMessageType ExtendedFlags2Reserved ; The ExtendedFlags2 shall be omitted if bit ExtendedFlags2Enabled of the ExtendedFlags1 is false. ; If the field is omitted, the Subscriber shall handle the related bits as false. PublisherId = OCTET / UInt16 / UInt32 / UInt64 / String ; Identifies the Publisher. PublisherId and WriterGroupId identify the WriterGroup. The syntax depends on PublisherIdType ; The PublisherId is a unique identifier for a Publisher within a Message Oriented Middleware. It can be included in sent NetworkMessage for ; identification or filtering. The value of the PublisherId is typically shared between PubSubConnections but the assignment of the PublisherId is vendor specific. ; The PublisherId parameter is only relevant for the Publisher functionality inside a PubSubConnection. The filter setting on the Subscriber side is ; contained in the DataSetReader parameters. Valid DataTypes are UInteger and String. DataSetClassId = Guid ; DataSetClassId - This field provides the globally unique identifier of the class of DataSet if the DataSet is based on a DataSetClass. ; In this case, this field shall match the DataSetClassId of the concrete DataSet configuration. ; If the DataSets are not created from a class, this field shall be omitted. ; The DataSetClassId associated with the DataSet elements in the NetworkMessage. All DataSetMessage elements in the NetworkMessage shall have the same DataSetClassId. ; The DataSetClassId shall be omitted if DataSetClassIdEnabled is 0 in the ExtendedFlags1 UADPVersion = 4BIT ; Bits 0-3 of UADPHeader Version of the NetworkMessage. The UADPVersion for this specification version is %b0.0.0.1 PublisherIdEnabled = BIT ; Bit 4 of the UADPHeader - If the PublisherId is "1", the type of PublisherId is indicated in the ExtendedFlags1 field GroupHeaderEnabled = BIT ; Bit 5 of the UADPHeader - The GroupHeader shall be omitted if GroupHeaderEnabled is 0. PayloadHeaderEnabled = BIT ; Bit 6 of the UADPHeader - The PayloadHeader shall be omitted if PayloadHeaderEnabled is 0. ExtendedFlags1Enabled = BIT ; Bit 7 of the UADPHeader - The bit shall be "0", if ExtendedFlags1 is 0 for all bits. ; ExtendedFlags1 PublisherIdType = %b0.0.0 ; Bits 0-2 ; The PublisherId is of DataType Byte, / %b0.0.1 ; The PublisherId is of DataType UInt16 / %b0.1.0 ; The PublisherId is of DataType UInt32 / %b0.1.1 ; The PublisherId is of DataType UInt64 / %b1.0.0 ; The PublisherId is of DataType String / %b1.0.1 ; Reserved / %b1.1.0 ; Reserved / %b1.1.1 ; Reserved DataSetClassIdEnabled = BIT ; Bit 3: SecurityEnabled = BIT ; Bit 4 - If the SecurityMode is SIGN_1 or SIGNANDENCRYPT_2, this flag is set, message security is enabled and the SecurityHeader is contained in the DataToSign. ; If this flag is not set, the SecurityHeader is omitted. MessageTimestampEnabled = BIT ; Bit 5 MessagePicoSecondsEnabled = BIT ; Bit 6 ExtendedFlags2Enabled = BIT ; Bit 7 - The bit shall be 0, if ExtendedFlags2 is 0. ; GroupHeader GroupFlags = WriterGroupIdEnabled GroupVersionEnabled NetworkMessageNumberEnabled SequenceNumberEnabled GroupFlagsReserved WriterGroupId = UInt16 ; PublisherId and WriterGroupId identify the WriterGroup - unique id for the WriterGroup in the Publisher. A Subscriber can skip NetworkMessages from WriterGroups it does not expect NetworkMessages from. ; Note: The DataSetWriterId with DataType UInt16 defines the unique ID of the DataSetWriter for a PublishedDataSet. It is used to select DataSetMessages for a PublishedDataSet on the Subscriber side. ; It shall be unique across all DataSetWriters for a PublisherId. All values, except for 0, are valid DataSetWriterIds. The value 0 is defined as null value. ; This field shall be omitted if bit WriterGroupIdEnabled of the GroupFlags is "0". GroupVersion = VersionTime ; Version of the header and payload layout configuration of the NetworkMessages sent for the group. ; This field shall be omitted if bit GroupVersionEnabled of the GroupFlags is "0". NetworkMessageNumber = UInt16 ; Unique number of a NetworkMessage across the combination of PublisherId and WriterGroupId within one PublishingInterval. The value 0 is invalid. ; The number is needed if the DataSetMessages for one group are split into more than one NetworkMessage in a PublishingInterval. ; This field shall be omitted if bit NetworkMessageNumberEnabled of the GroupFlags is "0". SequenceNumber = UInt16 ; Sequence number for the NetworkMessage. ; This field shall be omitted if bit SequenceNumberEnabled of the GroupFlags is "0" ; ExtendedNetworkMessageHeader NetworkMessageTimestamp = DateTime ; The time the NetworkMessage was created. ; The NetworkMessageTimestamp shall be omitted if bit 5(?) of ExtendedFlags1 is false. NetworkMessageTimestampPicoSeconds = UInt16 ; Specifies the number of 10 picoseconds (1,0 e-11 seconds) intervals which shall be added to the NetworkMessageTimestamp. ; The NetworkMessageTimestampPicoSeconds shall be omitted if bit MessagePicoSecondsEnabled of ExtendedFlags1 is false. PromotedFields = PromotedFieldsSize PromotedFieldsFields ; Selected fields out of the DataSet also sent in the header. ; The PromotedFields shall be omitted if bit PromotedFieldsEnabled of the ExtendedFlags2 is "0". ; If the PromotedFields are provided, the MessagesCount in the DataSetPayloadHeader shall be 1. ; PromotedFields PromotedFieldsSize = UInt16 ; Number of elements in the list PromotedFieldsFields PromotedFieldsFields = *BaseDataType ; Array of promoted fields. The size, order and DataTypes of the fields depend on the settings in the FieldMetaData of the DataSetMetaData associated with the ; DataSetMessage contained in the NetworkMessage. ; SecurityHeader SecurityFlags = NetworkMessageSigned NetworkMessageEncrypted SecurityFooterEnabled ForceKeyReset SecurityFlagsBitsReserved SecurityTokenId = IntegerId ; The ID of the security token that identifies the security key in a SecurityGroup. The relation to the SecurityGroup is done through DataSetWriterIds contained in the NetworkMessage. NonceLength = UInt8 ; The length of the Nonce used to initialize the encryption algorithm. MessageNonce = *OCTET ; Number of OCTET shall be equal NonceLength ; A MessageNonce used exactly once for a given security key. For a given security key a unique nonce shall be generated for every NetworkMessage. SecurityFooterSize = UInt16 ; The size of the SecurityFooter. The security footer size shall be omitted if bit SecurityFooterEnabled of the SecurityFlags is false ; DataToEncrypt Payload = DataSetMessagePayload / DiscoveryRequestPayload / DiscoveryResponsePayload ; The selection of the Payload alternative depends on the NetworkMessageType value defined in the ExtendedFlags2. SecurityFooter = *OCTET ; Optional security footer shall be omitted if bit NetworkMessageSigned of the SecurityFlags is "0". The content of the security footer is defined by the security policy. ; The security policy is not defined in the NetworkMessage and must be common knowledge of the publisher ans all subscribers processing the same NetworkMessage. ; ExtendedFlags2 = 8 BIT ChunkMessage = BIT ; Bit 0 PromotedFieldsEnabled = BIT ; Bit 1 Promoted fields can only be sent if the NetworkMessage contains only one DataSetMessage. ; Bits 2-4 represents NetworkMessageType. The default is DataSetMessageType if the ExtendedFlags2 field is not enabled. NetworkMessageType = DataSetNetworkMessageType / DiscoveryRequestMessageType / DiscoveryResponseMessageType DataSetNetworkMessageType = %b0.0.0 ; NetworkMessage with DataSetMessage payload. If the ExtendedFlags2 element is not provided, this is the default value. DiscoveryRequestMessageType = %b0.0.1 ; NetworkMessage with discovery request payload. DiscoveryResponseMessageType = %b0.1.0 ; NetworkMessage with discovery response payload. ExtendedFlags2Reserved = 3BIT ; Bits 5-7 ; GroupFlags = 8 BIT WriterGroupIdEnabled = BIT ; Bit 0 GroupVersionEnabled = BIT ; Bit 1 NetworkMessageNumberEnabled = BIT ; Bit 2 SequenceNumberEnabled = BIT ; Bit 3 GroupFlagsReserved = %b0.0.0.0 ; Bits 4-7 ; SecurityFlags NetworkMessageSigned = BIT ; Bit 0 NetworkMessageEncrypted = BIT ; Bit 1 SecurityFooterEnabled = BIT ; Bit 2 ForceKeyReset = BIT ; Bit 3 This bit is set if all keys will be made invalid. It is set until the new key is used. The publisher must give subscribers a reasonable time to request new keys. ; The minimum time is five times the KeepAliveTime configured for the corresponding group. ; This flag is typically set if all keys are invalidated to exclude Subscribers, that no longer have access to the keys. SecurityFlagsBitsReserved = 4BIT ; Reserved ; Context depending on the NetworkMessageType ; NetworkMessageType = DataSetMessageType ; PayloadHeader = DataSetPayloadHeader DataSetPayloadHeader = MessagesCount DataSetWriterIdList ; NetworkMessageType = DataSetMessageType MessagesCount = UInt8 ; Number of DataSetMessage items contained in the NetworkMessage. The NetworkMessage shall contain at least one DataSetMessage ; if the NetworkMessageType = DataSetMessageType. ; Payload = DataSetMessagePayload DataSetMessagePayload = DataSetMessageSizeList DataSetMessageList DataSetMessageSizeList = *DataSetMessageSize ; The number of elements of the list is defined by the MessagesCount in the DataSetPayloadHeader. DataSetMessageSize = UInt16 ; If the payload size exceeds 65535, the DataSetMessages shall be allocated to separate NetworkMessages. ; If a single DataSetMessage exceeds the payload size it shall be split into Chunk NetworkMessages. ; This field shall be omitted if count is one or if bit PayloadHeaderEnabled of the UADPFlags is "0". DataSetMessageList = 1*DataSetMessage ; DataSetMessageList contained in the NetworkMessage. The size of the list is defined by the MessagesCount in the DataSetPayloadHeader. ; The type of encoding used for the DataSetMessage entities is defined by the DataSetWriter. The encodings for the DataSetMessage are defined in 7.2.2.3.4. DataSetMessage = DataKeyMessageData / DataDeltaMessageData / EventMessageData / KeepAliveMessageData ; Alternative depends on DataSetMessageType DataKeyMessageData = DataSetMessageHeader FieldCount DataSetFields DataDeltaMessageData = DataSetMessageHeader FieldCount DeltaFrameFields EventMessageData = DataSetMessageHeader FieldCount DataSetFields ; The fields of EventMessageData shall be encoded as Variant. The FieldEncoding should be set accordingly. KeepAliveMessageData = KeepAliveMessageDataHeader ; The keep alive message does not add any additional fields. ; KeepAliveMessageData DataSetMessageHeader = KeepAliveMessageDataHeader DataSetTimestamp DataSetPicoSeconds [ Status ] [ ConfigurationVersionMajorVersion ] [ ConfigurationVersionMinorVersion ] ; DataSetMessageHeader KeepAliveMessageDataHeader = DataSetFlags1 [ DataSetFlags2 ] [ DataSetMessageSequenceNumber ] DataSetTimestamp = UtcTime ; The time the Data was collected. The DataSetTimestamp shall be omitted if Bit DataSetTimestampEnabled of DataSetFlags2 is "0". DataSetPicoSeconds = UInt16 ; Specifies the number of 10 picoseconds (1,0 e-11 seconds) intervals which shall be added to the DataSetTimestamp. ; The field must be omitted if Bit PicoSecondsIncluded of DataSetFlags2 is "0". Status = UInt16 ; The overall status of the DataSet. This is the high order 16 bits of the StatusCode DataType representing the numeric value of the Severity and SubCode of the StatusCode DataType. ; The field shall be omitted if bit StatusEnabled of DataSetFlags1 is "0". ConfigurationVersionMajorVersion = VersionTime ; The major version of the configuration version of the DataSet used as consistency check with the DataSetMetaData available on the Subscriber side. ; The field shall be omitted if Bit ConfigurationVersionMajorVersionEnabled of DataSetFlags1 is "0". ConfigurationVersionMinorVersion = VersionTime ; The minor version of the configuration version of the DataSet used as consistency check with the DataSetMetaData available on the Subscriber side. ; The field shall be omitted if Bit ConfigurationVersionMinorVersionEnabled of DataSetFlags1 is "0". ; KeepAliveMessageDataHeader DataSetFlags1 = DataSetMessageIsValid FieldEncoding DataSetMessageSequenceNumberEnabled StatusEnabled ConfigurationVersionMajorVersionEnabled ConfigurationVersionMinorVersionEnabled DataSetFlags2Enabled DataSetFlags2 = DataSetMessageType DataSetTimestampEnabled PicoSecondsIncluded DataSetFlags2Reserved DataSetMessageSequenceNumber = UInt16 ; A strictly monotonically increasing sequence number assigned by the publisher to each DataSetMessage sent. ; A receiver should ignore older DataSetMessage than the last sequence processed if it does not handle reordering of DataSetMessages. ; Receivers need to be aware of sequence numbers roll over (change from 65535 to 0). ; To determine whether a received DataSetMessage is newer than the last processed DataSetMessage the following formula shall be used: ; (65535 + received sequence number – last processed sequence number) modulo 65536 ; Results below 16384 indicate that the received DataSetMessage is newer than the last processed DataSetMessage and the received DataSetMessage is processed. ; Results above 49162 indicate that the received message is older (or same) than the last processed DataSetMessage and the received DataSetMessage should be ignored if reordering of DataSetMessages is not necessary. ; Other results are invalid and the DataSetMessage shall be ignored. ; The field shall be omitted if bit DataSetMessageSequenceNumberEnabled of DataSetFlags1 is "0". ; DataSetFlags1 DataSetMessageIsValid = BIT ; Bit 0: DataSetMessage is valid. If this bit is set to false, the rest of this DataSetMessage is considered invalid, and shall not be processed by the Subscriber. FieldEncoding = FieldEncodingVariant / FieldEncodingRawData / FieldEncodingDataValue / FieldEncodingReserved ; Bit 1-2 ; FieldEncoding - Bit range 1-2 FieldEncodingVariant = %b0.0 ; 00 - The DataSet fields are encoded as Variant The Variant can contain a StatusCode instead of the expected DataType if the status of the field is Bad. ; The Variant can contain a DataValue with the value and the statusCode if the status of the field is Uncertain FieldEncodingRawData = %b0.1 ; 01 - RawData Field Encoding. The DataSet fields are encoded in the DataTypes specified in the DataSetMetaData for the DataSet. ; The encoding is handled like a Structure DataType where the DataSet fields are handled like Structure fields and fields with Structure ; DataType are handled like nested structures. All restrictions for the encoding of Structure DataTypes also apply to the RawData Field Encoding. FieldEncodingDataValue = %b1.0 ; 10 - DataValue Field Encoding. The DataSet fields are encoded as DataValue. This option is set if the DataSet is configured to send more than the Value. FieldEncodingReserved = %b1.1 ; 11 - Reserved DataSetMessageSequenceNumberEnabled = BIT ; Bit 3 StatusEnabled = BIT ; Bit 4 ConfigurationVersionMajorVersionEnabled = BIT ; Bit 5 ConfigurationVersionMinorVersionEnabled = BIT ; Bit 6 DataSetFlags2Enabled = BIT ; Bit 7 ; DataSetFlags2 DataSetMessageType = DataKeyFrameMessageType / DataDeltaFrameMessageType / EventMessageType / KeepAliveMessageType / DataSetMessageTypeReserved ; Bit range 0-3 of DataSetFlags2 ; DataSetMessageType Bits 0-3 of DataSetFlags2 DataKeyFrameMessageType = %b0.0.0.0 ; If the DataSetFlags2 field is not provided, this is the default DataSetMessageType. DataDeltaFrameMessageType = %b0.0.0.1 EventMessageType = %b0.0.1.0 KeepAliveMessageType = %b0.0.1.1 DataSetMessageTypeReserved = %b0.1.0.0-%b1.1.1.1 ; Reserved for further extended flag fields DataSetTimestampEnabled = BIT ; Bit 4 PicoSecondsIncluded = BIT ; Bit 5 DataSetFlags2Reserved = %b0.0-%b1.1 ; Bits range 6-7 FieldCount = UInt16 ; Number of fields of the DataSet contained in the DataSetMessage. ; The FieldCount shall be omitted if FieldEncodingRawData is set in the FieldEncoding bits DataSetFields = *BaseDataType ; The field values of the DataSet. ; DataDeltaMessageData DeltaFrameFields = *DeltaFrameField DeltaFrameField = FieldIndex FieldValue FieldIndex = UInt16 ; The index of the Field in the DataSet. The index is based on the field position in the DataSetMetaData with the configuration version defined in the ConfigurationVersion field. FieldValue = BaseDataType ; The field values of the DataSet. ; Alternatives based on the NetworkMessageType ; NetworkMessageType = DiscoveryRequestMessageType ; PayloadHeader = DiscoveryRequestPayloadHeader DiscoveryRequestPayloadHeader = DiscoveryRequestType ; UADPFlags Bit 4 PublisherIdEnabled = "1"; Bit 5 GroupHeaderEnabled = "0"; Bit 6 PayloadHeaderEnabled = "0"; Bit 7 ExtendedFlags1Enabled = "1" ; ExtendedFlags1 Bit 3 DataSetClassIdEnabled = "0"; Bit 4 SecurityEnabled = "1"; Bit 5 TimestampEnabled = "0"; Bit 6 PicoSecondsEnabled = "0"; ; Bit 7 ExtendedFlags2Enabled = "1" ; NetworkMessageType = DiscoveryRequestMessageType DiscoveryRequestType = RequestTypeReserved / PublisherInformationRequestMessage RequestTypeReserved = %x00 PublisherInformationRequestMessage = %x01 ; Payload = DiscoveryRequestPayload DiscoveryRequestPayload = InformationType / DataSetWriterIdList InformationType = InformationTypeReserved / PublisherServerEndpoints / DataSetMetaData / DataSetWriterConfiguration ; OCTET InformationTypeReserved = %x00 PublisherServerEndpoints = %x01 DataSetMetaData = %x02 DataSetWriterConfiguration = %x03 ; NetworkMessageType = DiscoveryResponseMessageType ; PayloadHeader = DiscoveryResponsePayloadHeader DiscoveryResponsePayloadHeader = DiscoveryResponseType SequenceNumber DiscoveryResponseType = DiscoveryResponseTypeReserved / DiscoveryResponseTypePublisherEndpoint / DiscoveryResponseTypeDataSetMetadata / DiscoveryResponseTypeDataSetWriterConfiguration DiscoveryResponseTypeReserved = %x00 DiscoveryResponseTypePublisherEndpoint = %x01 DiscoveryResponseTypeDataSetMetadata = %x02 DiscoveryResponseTypeDataSetWriterConfiguration = %x03 ; Payload = DiscoveryResponsePayload DiscoveryResponsePayload = PublisherEndpointsMessage / DataSetMetaDataMessage / DataSetWriterConfigurationMessage PublisherEndpointsMessage = Endpoints StatusCode Endpoints = *EndpointDescription ; The OPC UA Server Endpoints of the Publisher. The EndpointDescription is defined in Part 4. EndpointDescription = *OCTET DataSetMetaDataMessage = DataSetWriterId DataSetMetaDataType StatusCode DataSetMetaDataType = DataSetName Description Fields DataSetClassId ConfigurationVersionDataType DataSetName = String ; Name of the DataSet. Description = LocalizedText ; Description of the DataSet. The default value is a null LocalizedText. Fields = *FieldMetaData ; The metadata for the fields in the DataSet. The FieldMetaData DataType is defined in 6.2.2.1.3. FieldMetaData = FieldName FieldDescription DataSetFieldFlags BuiltInType DataType ValueRank ArrayDimensions MaxStringLength DataSetFieldId Properties FieldName = String ; Name of the field. The name shall be unique in the DataSet. FieldDescription = LocalizedText ; Description of the field. The default value shall be a null LocalizedText. DataSetFieldFlags = OCTET ; Flags for the field. The flag indicates if the field is promoted to the NetworkMessages or transport protocol header. ; Setting this flag increases the size of the NetworkMessages since information from the DataSetMessage body is also promoted to the header. ; Depending on the used security, the header including the field may be unencrypted. ; Promoted fields are always included in the header even if the DataSetMessage payload is a delta frame and the DataSet field is not included in the delta frame. ; In this case the last sent value is sent in the header. ; The order of the fields in the DataSetMetaData promoted to the header shall match the order of the fields in the header unless the header includes field names. BuiltInType = OCTET ; The built-in data type of the field. The possible built-in type values are defined in Part 6. ; All data types are transferred in DataSetMessages as one of the built-in data types. In most cases the identifier of the DataType NodeId matches the built-in type. The following special cases must be handled in addition: ; (1) Abstract types always have the built-in type Variant since they can result in different concrete types in a DataSetMessage. The dataType field may provide additional restrictions e.g. if the abstract type is Number. Abstract types shall not be used if the field is represented as RawData set by the DataSetFieldContentMask defined in 6.2.3.1. ; (2) Enumeration DataTypes are encoded as Int32. The Enumeration strings are defined through a DataType referenced through the dataType field. ; (3) Structure and Union DataTypes are encoded as ExtensionObject. The encoding rules are defined through a DataType referenced through the dataType field. ; (4) DataTypes derived from built-in types have the BuiltInType of the corresponding base DataType. The concrete subtype is defined through the dataType field. ; (5) OptionSet DataTypes are either encoded as one of the concrete UInteger DataTypes or as an instance of an OptionSetType in an ExtensionObject. DataType = NodeId ; The NodeId of the DataType of this field. If the DataType is an Enumeration or an OptionSet, the semantic of the Enumeration DataType is provided ; through the enumDataTypes field of the DataSetMetaData. If the DataType is a Structure or Union, the encoding and decoding description of the Structure ; DataType is provided through the structureDataTypes field of the DataSetMetaData. ValueRank = Int32 ; Indicates whether the dataType is an array and how many dimensions the array has. It may have the following values: ; n > 1: the dataType is an array with the specified number of dimensions. ; OneDimension (1): The dataType is an array with one dimension. ; OneOrMoreDimensions (0): The dataType is an array with one or more dimensions. ; Scalar (−1): The dataType is not an array. ; Any (−2): The dataType can be a scalar or an array with any number of dimensions. ; ScalarOrOneDimension (−3): The dataType can be a scalar or a one dimensional array. ; NOTE All DataTypes are considered to be scalar, even if they have array-like semantics like ByteString and String ArrayDimensions = *UInt32 ; This field specifies the maximum supported length of each dimension. If the maximum is unknown the value shall be 0. ; The number of elements shall be equal to the value of the valueRank field. This field shall be null if valueRank ≤ 0. ; The maximum number of elements of an array transferred on the wire is 2147483647 (max Int32). It is the total number of elements in all dimensions based on the UA Binary encoding rules for arrays. MaxStringLength = UInt32 ; If the dataType field is a String or ByteString then this field specifies the maximum supported length. If the maximum is unknown the value shall be 0. ; If the dataType field is not a String or ByteString the value shall be 0. If the valueRank is greater than 0 this field applies to each element of the array. DataSetFieldId = Guid ; The unique ID for the field in the DataSet. The ID is generated when the field is added to the list. A change of the position of the field in the list shall not change the ID. Properties = *KeyValuePair ; List of Property values providing additional semantic for the field. If at least one Property value changes, the MajorVersion of the ConfigurationVersion shall be updated. ; If the Property is EngineeringUnits, the unit of the Field Value shall match the unit of the FieldMetaData. ; The KeyValuePair DataType is defined in Part 5. For this field the key in the KeyValuePair structure is the BrowseName of the Property and the value in the ; KeyValuePair structure is the Value of the Property. ConfigurationVersionDataType = MajorVersion MinorVersion DataSetWriterConfigurationMessage = DataSetWriterIdList DataSetWriterConfig *StatusCode DataSetWriterConfig = WriterGroupDataType WriterGroupDataType = WriterGroupId PublishingInterval KeepAliveTime Priority LocaleIds TransportSettings MessageSettings DataSetWriters PublishingInterval = Duration KeepAliveTime = Duration Priority = OCTET LocaleIds = *String TransportSettings = WriterGroupTransportDataType ; Transport mapping specific WriterGroup parameters. MessageSettings = WriterGroupMessageDataType ; NetworkMessage mapping specific WriterGroup parameters. DataSetWriters = DataSetWriterDataType ; The DataSetWriters contained in the WriterGroup. WriterGroupTransportDataType = *OCTET ; Depends on transport WriterGroupMessageDataType = *OCTET ; Depends on transport DataSetWriterDataType = *OCTET ; The DataSetWriters contained in the WriterGroup. MajorVersion = VersionTime MinorVersion = VersionTime ; Common definition DataSetWriterIdList = *DataSetWriterId ; List of DataSetWriterId items contained in the NetworkMessage. The size of the list is defined by the MessagesCount ; The DataSetWriterId identifies the PublishedDataSet and the DataSetWriter responsible for sending Messages for the DataSet. DataSetWriterId = UInt16 ; A Subscriber can skip DataSetMessages from DataSetWriters it does not expect DataSetMessages from. ; Part 3 definitions Duration = Double ; This Simple DataType is a Double that defines an interval of time in milliseconds (fractions can be used to define sub-millisecond values). ; Negative values are generally invalid but may have special meanings where the Duration is used. BaseDataType = *OCTET ; This abstract DataType defines a value that can have any valid DataType. ; The field value of the DataSet. The field encoding depends on the FieldEncoding value. The default encoding is FieldEncodingVariant. String = *OCTET ; This OPC UA Built-in DataType defines a Unicode character string that should exclude control characters that are not whitespaces. ; Part 4 definitions VersionTime = UInt32 ; This primitive data type is a UInt32 that represents the time in seconds since the year 2000. IntegerId = UInt32 ; This primitive data type is a UInt32 that is used as an identifier, such as a handle. All values, except for 0, are valid. ; Part 5 definitions KeyValuePair = *OCTET ; Part 6 definitions DateTime = UInt64 ; A DateTime value shall be encoded as a 64-bit signed integer which represents the number of 100 nanosecond intervals since January 1, 1601 (UTC). StatusCode = UInt32 ; Status code indicating the capability of the Publisher to provide Endpoints. UInt8 = OCTET UInt16 = 2OCTET UInt32 = 4OCTET UInt64 = 8OCTET Int32 = 4OCTET Guid = 16OCTET NodeId = *OCTET Double = *8OCTET ; All floating-point values shall be encoded with the appropriate IEEE-754 binary representation. LocalizedText = EncodingMask Locale Text EncodingMask = OCTET ; A bit mask that indicates which fields are present in the stream. The mask has the following bits: %x01 Locale %x02 Text Locale = String ; The locale. Omitted is null or empty. Text = String ; The text in the specified locale. Omitted is null or empty. ; RFC 5234 BIT = "0" / "1" OCTET = %x00-FF ; 8 bits of data ================================================ FILE: Networking/SemanticData/MessageHandling/NetworkMessageFlags.cs ================================================ using System; namespace UAOOI.Networking.SemanticData.MessageHandling { /// /// Class PacketFlagsDefinitions - contains definitions related to the package flags. /// public static class PacketFlagsDefinitions { /// /// Enum PacketFlags /// public enum NetworkMessageType : byte { /// /// The regular messages /// RegularMessages = 0x00, /// /// The chunk packet /// ChunkPacket = 0x01, /// /// The discovery request payload /// DiscoveryRequest = 0x02, /// /// The discovery response payload /// DiscoveryResponse = 0x03, /// /// The 1XX (0x04 - 0x07) bits combination is reserved for further expansion. /// Reserved = 0x04, } /// /// Enum PacketFlagsPackageContent - defines package content bits meaning /// [Flags] public enum NetworkMessageFlagsPackageContent : byte { /// /// The bit 3 is reserved /// Reserved0x10 = 0x8, /// /// The bit 4 is reserved /// Reserved0x20 = 0x10, /// /// The force key rotation bit. This bit is set if the key rotation is started earlier than planned. It is set until the new key is used. /// The publisher must give subscribers a reasonable time to request new keys. The minimum time is five times the KeepAliveTime configured /// for the corresponding PubSub group. /// ForceKeyRotationBit = 0x20, /// /// The message is signed. /// MessageSigned = 0x40, /// /// The message is encrypted. /// MessageEncrypted = 0x80 } } } ================================================ FILE: Networking/SemanticData/MessageHandling/PacketHeader.cs ================================================  using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Diagnostics; using UAOOI.Networking.SemanticData.Encoding; namespace UAOOI.Networking.SemanticData.MessageHandling { /// /// Class PacketHeader - represent information in the protocol packet header. /// public abstract class PacketHeader { #region public API /// /// Gets the producer packet header. /// /// The writer. /// The producer identifier. /// The data set writer ids list. The size of the list must be equal to the . /// An instance of the . public static PacketHeader GetProducerPacketHeader(IBinaryHeaderEncoder encoder, Guid producerId, IList dataSetWriterIds) { return new ProducerHeader(encoder, producerId, dataSetWriterIds); } /// /// Gets the consumer packet header. /// /// The reader. /// New instance of the . public static PacketHeader GetConsumerPacketHeader(IBinaryDecoder decoder) { return new ConsumerHeader(decoder); } /// /// Synchronizes this instance content with the header. /// public abstract void WritePacketHeader(); #endregion #region Header /// /// If implemented gets or sets the protocol version. /// /// The protocol version. public abstract byte ProtocolVersion { get; set; } /// /// If implemented gets or sets the packet flags. /// /// The packet flags. public abstract byte NetworkMessageFlags { get; set; } /// /// If implemented gets or sets the identifier of producer that sends the data. /// /// The representing the producer. //TODO How to configure ProducerId #148 public abstract Guid PublisherId { get; set; } /// /// If implemented gets or sets the security token identifier. /// /// The security token identifier. public abstract uint SecurityTokenId { get; set; } /// /// Gets or sets the length of the nonce used to initialize the encryption algorithm.. /// /// The length of the nonce. public byte NonceLength { get; set; } /// /// Gets or sets the nonce a cryptographically random number used for exactly one packet. /// /// The nonce as the array of . public byte[] Nonce { get; set; } /// /// If implemented gets or sets the number of messages contained in the packet. /// /// The message count. public abstract byte MessageCount { get; } /// /// If implemented gets or sets the data set writer ids list. The size of the list is defined by the . /// It identifies the publisher and the message writer responsible for sending Messages for the DataSet. /// /// The data set writer ids. public abstract ReadOnlyCollection DataSetWriterIds { get; } #endregion #region private implementation private class ConsumerHeader : PacketHeader { #region constructor public ConsumerHeader(IBinaryDecoder reader) : base() { m_Reader = reader; ReadPacketHeader(); } #endregion #region PacketHeader public override byte MessageCount => m_MessageCount; public override byte NetworkMessageFlags { get; set; } public override byte ProtocolVersion { get; set; } /// /// If implemented gets or sets the identifier of producer that sends the data. /// /// The representing the producer. //TODO How to configure ProducerId #148 public override Guid PublisherId { get; set; } public override uint SecurityTokenId { get; set; } public override ReadOnlyCollection DataSetWriterIds => m_DataSetWriterIds; public override void WritePacketHeader() { throw new ApplicationException("Consumer packet is read only"); } #endregion #region private private IBinaryDecoder m_Reader; private ReadOnlyCollection m_DataSetWriterIds; private byte m_MessageCount; private void ReadPacketHeader() { ProtocolVersion = m_Reader.ReadByte(); NetworkMessageFlags = m_Reader.ReadByte(); PublisherId = m_Reader.ReadGuid(); SecurityTokenId = m_Reader.ReadUInt32(); NonceLength = m_Reader.ReadByte(); Nonce = new byte[NonceLength]; for (int i = 0; i < NonceLength; i++) Nonce[i] = m_Reader.ReadByte(); m_MessageCount = m_Reader.ReadByte(); List _ids = new List(); for (int i = 0; i < MessageCount; i++) _ids.Add(m_Reader.ReadUInt16()); m_DataSetWriterIds = new ReadOnlyCollection(_ids); } #endregion } private class ProducerHeader : PacketHeader { #region constructor public ProducerHeader(IBinaryHeaderEncoder writer, Guid producerId, IList dataSetWriterIds) : base() { if (writer == null) throw new ArgumentNullException(nameof(writer)); PublisherId = producerId; NetworkMessageFlags = Convert.ToByte(PacketFlagsDefinitions.NetworkMessageType.RegularMessages); ProtocolVersion = CommonDefinitions.ProtocolVersion; SecurityTokenId = 0; NonceLength = 0; DataSetWriterIds = new ReadOnlyCollection(dataSetWriterIds); MessageCount = Convert.ToByte(DataSetWriterIds.Count); ushort _packetLength = Convert.ToUInt16(m_PacketHeaderLength + dataSetWriterIds.Count * 2); m_HeaderWriter = new HeaderWriter(writer, _packetLength); } #endregion #region PacketHeader /// /// Gets or sets the number of messages contained in the packet. /// /// The message count. public override byte MessageCount { get; } /// /// Gets or sets the message flags. /// /// The message flags. public override byte NetworkMessageFlags { get; set; } /// /// Gets or sets the protocol version. /// /// The protocol version. public override byte ProtocolVersion { get; set; } /// /// Gets or sets the identifier of producer that sends the data. /// /// The representing the producer. //TODO How to configure ProducerId #148 public override Guid PublisherId { get; set; } /// /// Gets or sets the security token identifier. /// /// The security token identifier. public override uint SecurityTokenId { get; set; } public override ReadOnlyCollection DataSetWriterIds { get; } /// /// Synchronizes this instance content with the header. /// public override void WritePacketHeader() { m_HeaderWriter.WriteHeader(WriteHeader); } #endregion #region private //vars private HeaderWriter m_HeaderWriter; private const ushort m_PacketHeaderLength = 20; //methods private void WriteHeader(IBinaryHeaderEncoder m_Writer, ushort dataLength) { Debug.Assert(DataSetWriterIds != null); Debug.Assert(DataSetWriterIds.Count == MessageCount); m_Writer.Write(ProtocolVersion); m_Writer.Write(NetworkMessageFlags); m_Writer.Write(PublisherId); m_Writer.Write(SecurityTokenId); m_Writer.Write(NonceLength); for (int i = 0; i < NonceLength; i++) m_Writer.Write(Nonce[i]); m_Writer.Write(MessageCount); if (MessageCount == 0) return; for (int i = 0; i < DataSetWriterIds.Count; i++) m_Writer.Write(DataSetWriterIds[i]); } #endregion } #endregion } } ================================================ FILE: Networking/SemanticData/Networking.SemanticData.csproj ================================================  netstandard2.0 UAOOI.Networking.SemanticData true OPCUAOOIKey.snk Object Oriented Internet, OPC UA, CommServer, Reactive Networking. GitHub https://github.com/mpostol/OPC-UA-OOI https://commsvr.gitbook.io/ooi Copyright MPostol (c) 2018 SemanticData Reactive Networking library based on OPC UA Part 14 Pub/Sub. 4.0.2 MPostol commsvr.com Object Oriented Internet UAOOI.Networking.SemanticData 4.0.2.0 false 1701;1702;1705;IDE0001;IDE002;IDE003 True True Networking.SemanticData.tt TextTemplatingFileGenerator Networking.SemanticData.nuspec TextTemplatingFileGenerator ================================================ FILE: Networking/SemanticData/Networking.SemanticData.nuspec ================================================  UAOOI.Networking.SemanticData 4.0.2 Object Oriented Internet Networking SemanticData Mariusz Postol Mariusz Postol false MIT https://github.com/mpostol/OPC-UA-OOI logo.png SemanticData Reactive Networking library based on OPC UA Part 14 Pub/Sub summary must be added. Copyright (C) 2022 Mariusz Postol LODZ POLAND Object Oriented Internet, OPC UA, Information Model, IoT, M2M, DOA, Maintenance release - unimportant changes. Copyright (C) 2022 Mariusz Postol LODZ POLAND ================================================ FILE: Networking/SemanticData/Networking.SemanticData.tt ================================================ <#@ template debug="false" hostspecific="false" language="C#" #> <#@ output extension=".nuspec" #> UAOOI.Networking.SemanticData 4.0.2 <#=NetworkingDataProduct#> Networking SemanticData <#=AssemblyCompany#> <#=Owner#> false MIT <#=Url#> logo.png SemanticData Reactive Networking library based on OPC UA Part 14 Pub/Sub summary must be added. <#=AssemblyCopyright#> Object Oriented Internet, OPC UA, Information Model, IoT, M2M, DOA, Maintenance release - unimportant changes. <#=AssemblyCopyright#> <#@ include file = "..\..\CommonResources\T4Definitions\Model.t4" #> ================================================ FILE: Networking/SemanticData/ProducerAssociation.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2020, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Timers; using UAOOI.Configuration.Networking.Serialization; using UAOOI.Networking.SemanticData.Common; using UAOOI.Networking.SemanticData.DataRepository; using UAOOI.Networking.SemanticData.MessageHandling; namespace UAOOI.Networking.SemanticData { /// /// Class ProducerAssociation - implements the association for the producer side. /// internal class ProducerAssociation : Association, IDisposable { #region creator /// /// Initializes a new instance of the class. /// /// The semantic data description. /// Name of the alias - . /// The data set configuration. /// The binding factory. /// The encoding factory. internal ProducerAssociation(ISemanticData data, string aliasName, DataSetConfiguration dataSet, IBindingFactory bindingFactory, IEncodingFactory encodingFactory) : base(data, dataSet.AssociationName) { m_ConfigurationVersion = dataSet.ConfigurationVersion; m_DataSetBindings = dataSet.DataSet.Select ((_fieldMetadata) => { IProducerBinding _ret = _fieldMetadata.GetProducerBinding4DataMember(dataSet.RepositoryGroup, bindingFactory, encodingFactory); _ret.PropertyChanged += ProducerBinding_PropertyChanged; return _ret; }).ToArray(); m_Timer = new Timer(1000) { AutoReset = true }; m_Timer.Elapsed += M_Timer_Elapsed; m_Timer.Start(); } #endregion #region public API /// /// Adds the message writer. /// /// The message writer. /// messageReader public void AddMessageWriter(IMessageWriter messageWriter) { if (messageWriter == null) throw new ArgumentNullException("messageReader"); if (m_MessageWriter.Exists(x => x.Equals(messageWriter))) return; m_Modified = true; m_MessageWriter.Add(messageWriter); } /// /// Removes the message writer. /// /// The message writer. /// messageReader public void RemoveMessageWriter(IMessageWriter messageWriter) { if (messageWriter == null) throw new ArgumentNullException("messageReader"); if (m_MessageWriter.Exists(x => x.Equals(messageWriter))) m_MessageWriter.Add(messageWriter); } #endregion #region private //vars private Timer m_Timer; private List m_MessageWriter = new List(); private IProducerBinding[] m_DataSetBindings; private readonly object mLockObject = new object(); private bool m_Modified = true; private readonly Object m_lock = new object(); private ushort m_MessageSequenceNumber = 0; private FieldEncodingEnum m_Encoding; //TODO Handle Configuration Version #140 private readonly ConfigurationVersionDataType m_ConfigurationVersion = null; //methods protected override void InitializeCommunication() { //Do nothing; } protected override void OnEnabling() { foreach (IProducerBinding _pbx in m_DataSetBindings) _pbx.OnEnabling(); } protected override void OnDisabling() { foreach (IProducerBinding _pbx in m_DataSetBindings) _pbx.OnDisabling(); } protected internal override void AddMessageHandler(IMessageHandler messageHandler, AssociationConfiguration configuration) { base.AddMessageHandler(messageHandler, configuration); ProducerAssociationConfiguration _configuration = (ProducerAssociationConfiguration)configuration; m_Encoding = _configuration.FieldEncoding; AddMessageWriter(messageHandler as IMessageWriter); } private void ProducerBinding_PropertyChanged(object sender, PropertyChangedEventArgs e) { lock (m_lock) { m_Modified = true; } } private void M_Timer_Elapsed(object sender, ElapsedEventArgs e) { lock (m_lock) { if (!m_Modified) return; m_Modified = false; } Send(); } private void Send() { foreach (IMessageWriter _mwx in m_MessageWriter) lock (mLockObject) _mwx.Send(x => m_DataSetBindings[x], Convert.ToUInt16(m_DataSetBindings.Length), UInt64.MaxValue, m_Encoding, DataSetId, m_MessageSequenceNumber, DateTime.UtcNow, m_ConfigurationVersion); m_MessageSequenceNumber = m_MessageSequenceNumber.IncRollOver(); } #region IDisposable Support private bool disposedValue = false; // To detect redundant calls protected virtual void Dispose(bool disposing) { if (!disposedValue) { if (disposing) m_Timer.Dispose(); disposedValue = true; } } // TODO: override a finalizer only if Dispose(bool disposing) above has code to free unmanaged resources. // ~ProducerAssociation() { // // Do not change this code. Put cleanup code in Dispose(bool disposing) above. // Dispose(false); // } // This code added to correctly implement the disposable pattern. public void Dispose() { // Do not change this code. Put cleanup code in Dispose(bool disposing) above. Dispose(true); // TODO: uncomment the following line if the finalizer is overridden above. // GC.SuppressFinalize(this); } #endregion #endregion } } ================================================ FILE: Networking/SemanticData/Properties/AssemblyInfo.cs ================================================ //_______________________________________________________________ // Title : Assembly info for: Semantic Data Reactive Networking Library // System : Microsoft VisualStudio 2018 / C# // // Copyright MPostol (c) 2018 // +48 608 619 899 // commserver@cas.eu // https://github.com/mpostol/OPC-UA-OOI //_______________________________________________________________ using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; [assembly: AssemblyTrademark("Object Oriented Internet")] [assembly: AssemblyCulture("")] [assembly: ComVisible(false)] [assembly: InternalsVisibleTo( "UAOOI.Networking.SemanticData.UnitTest, PublicKey=" + "00240000048000009400000006020000002400005253413100040000010001005b97a0972ff6b13a" + "8a9ff9c09503aea0e5e2fe29cb2275a0c0942182f4c3431814b6bc9a556d9fe0d7e7823439c1ba28" + "521f6318e4c936c4461604ef668e9686c2021571b093e1bfba071b373bc56a07a3afdc120c5313d3" + "9a935cda64b759f857ebb3db483641444a5347e1564f8ba6d4fad2f968d3caf9991a4fa6aa019ebe" )] ================================================ FILE: Networking/SemanticData/README.MD ================================================ # Reactive Networking (`RxNetworking`) of Semantic-Data Library ## Getting Started The `UAOOI.Networking.SemanticData` library is designed to be a foundation of developing application programs that are taking part of message-centric communication pattern and interconnected using the reactive networking concept described in the [Semantic-Data Processing Architecture](../README.MessageCentricCommunication.md). The diagram below presents how to engage this library to provide a more specific functionality required depending on the role of concern compliant with the overall architecture. ![Figure 1. Message-centric Communication Roles Implementation](../../CommonResources/Media/DataManagementGeneralization.png) For more in-depth information about creating `OOI Reactive Application` exchanging data over the network using the reactive networking pattern, see [Getting Started Tutorial](./READMEGettingStartedTutorial.md). To promote interoperability this library is a collection of types aimed at implementation of the [Part 14 PubSub](README.PubSubMTF.md) standard. The code is tested using the Unit Tests located in the project: [Networking.SemanticData.UnitTest][Networking.SemanticData.UnitTest] The preliminary code help documentation is [available for sponsors - consider joining](https://github.commsvr.com/AboutPartnershipProgram.md.html). > NOTE: The project is in development stage - major changes are expected. ## Reactive Networking Application Architecture The figure below shows the relationship between the library `UAOOI.Networking.SemanticData` and external parts compounding any reactive networking application (`OOI Reactive Application`). The `OOI Reactive Application` is collection of `Producer` and `Consumer` entities. They must provide an interface to real-time process data, hence they are recognized as an extension of `DataRepository` class. To implement the `DataRepository` dedicated implementation `IBinding` interface should be provided to create a bridge between real word data `Row Data` represented by the `LocalResources` class. ![Figure 2. Application Architecture](../../CommonResources/Media/DataManagementExternalLibraries.png) Any application engaging the library is composed using the dependency injection pattern. The `DataManagementSetup`class is a placeholder to gather all external injection points used to compose the application, initialize the communication and bind to local resources. To promote flexibility and the separation of concern design approach, the concreted types are loosely coupled with the library. It means, that the selection of the concrete types used to compose the application is up to the application, namely it may designate them at runtime. To conform to the library requirements all the classes must implement appropriate contract defined as an interface. - `Configuration`: represents functionality needed to read the configuration and handle the configuration modification at runtime. This functionality must be supported by the deployment platform. The library described in the article [Reactive Networking (RxNetworking) Configuration](../../Configuration/Networking/README.MD) provides helper classes that may be used to gather all required information from the configuration files to instantiate the communication infrastructure and start pumping the data. This class must implement the `IConfigurationFactory` interface. Each `Publisher` and `Consumer` must provide its own configuration. - `DataRepository`: represents local resources in the application, for example PLC registers, HMI variables bound to screen controls, internal register of smart meters, etc. Depending on the role the library supports: - `Consumer` - recovering data from message and writing to local resource. - `Producer` - reading data from the Local resource, populating a new message with this value and sending the message over the wire. - `MessageHandling`: is a part providing the message handling services. The communicating party can be interconnected using any transparent messages transport infrastructure. For the broker-less transport layer the network infrastructure routes datagram-based messages and the `MessageHandling` should implement `UDP`, `AMQP` or `ETHERNET` protocol. Applying the broker-based approach a core component of the transport layer is a message broker and in this case the `MessageHandling` should implement `AMQP` or `MQTT` protocol. - `Encoding`: A method stub or simply stub in software development is a piece of code used to stand in for some other programming functionality. A stub may simulate the behavior of existing code (such as a procedure on a remote machine, such methods are often called mocks) or be a temporary substitute for yet-to-be-developed code. ## Internal Architecture ### Introduction In figure below the relationship of the internal implementation with the overall domain model is presented. ![Figure 3. Internal Implementation Diagram](../../CommonResources/Media/UADataIntegrationServices.UADataManagementClasses.png) - It is assumed that the data consumer is lightweight and may support limited encoding/decoding functionality. The functionality will be provided as a plug-in library injected at run time. EncodingDecoding is recognizable using a pair of: name recovered from the Type object and OPC UA DataType represented by its URI. - Data binding - it is assumed that the binding of Local repositories/variables and messages content items is provided by the configuration. It could be also provided at runtime by updating the configuration using any external mechanism. ### Data management and binding Description of the domain model of the data management and binding is covered in the article [Data management and binding](./READMEDataDiscoveryAndBinding.md). ### Bindings and encodings implementation Binding between the local repository `DataRepository` (e.g. HMI Screen, OPC UA Server Address Space) and the message content items is provided by the `IBinding` interface and its basic implementation `Binding` class. This class is responsible to decode the data from the format used to construct the message to the local type. The decoders are factored by the external class `Encoding`. See definition for details: `IBinding`. It is expected that the value conversion (decoding) is provided by an instance of the IValueConverter class. If it is not applicable the [Adapter pattern](http://www.dofactory.com/net/adapter-design-pattern) must be used. ### Message Transport Message Transport will not be implemented as the library part. This functionality must be injected form outside by implementing the interfaces: - `IMessageHandler`: provides basic functionality handling messages communication over the wire. - `IMessageReader`: provides functionality supporting reading the messages from the wire. - `IMessageWriter`: provides functionality supporting sending the messages over the wire. The library provides basic implementation of the above mentioned interfaces. In following diagram an implementation provided by the library is presented. ![Figure 4. Implementation Diagram](../../CommonResources/Media/UADataIntegrationServices.UADataManagementClasses.MessageHandling.png) Hope is that the abstraction will support any types of message based communication layer. The library provides basic implementation of the `Message` class that supports package level encoding/decoding functionality. ### Messages Sequence ![Figure 5. Sequence Diagram](../../CommonResources/Media/MessagesLoop.png) ## Testing See how it works in the unit test class: [Networking.SemanticData.UnitTest][Networking.SemanticData.UnitTest]]. The [UA Data Example Application](../../Networking/ReferenceApplication/README.MD) contains a reference WPF application. ## Current release The NuGet package is available at: [UAOOI.Networking.SemanticData](https://www.nuget.org/packages/UAOOI.Networking.SemanticData/) [Networking.SemanticData.UnitTest]:https://github.com/mpostol/OPC-UA-OOI/tree/master/Networking/Tests/SemanticDatalUnitTest ================================================ FILE: Networking/SemanticData/README.PubSubMTF.md ================================================ # OPC UA PubSub Main Technology Features ## Introduction In general speaking the following two distinct patterns are used to transfer data between communicating parties: - connection-oriented: requires a session that has to be established before any data can be sent between sender and receiver - connectionless-oriented: the sender may start sending messages (called packets or datagrams) to the destination without any preceding handshake procedure Each has its own advantages and disadvantages. In general, the OPC UA is a session centric communication. The session is established by the **OPC UA Client** that must connect to the **OPC UA Server** before any data can be exchanged between them. In this Client/Server scenario defined by the [Services in Part 4][Opc.UA.Part4], the data flow is bidirectional over the session. The session entities communicate over a secure channel that is created in the underlying communication layer and relies upon it for secure communication. It enables to log-in using user authentication and operations authorization. More details you can find in the section: - [OPC Unified Architecture – Main Technological Features][OPCUAMTF] Using the connection-oriented communication pattern it is difficult or even impossible to gather and process data from mobile things (e.g. smart devices, cigarettes box, drug blister, etc.), which is one of the **Internet of Things** paradigms. More details you can find in [IoT versus SCADA/DCS Data Acquisition Patterns][wordpress.IoTVersus]. > The [OPC UA PubSub][OPC.UA.PubSub] specification offers the connectionless approach as an additional option to session based client-server interoperability and claims that it is a consistent part of the OPC UA specifications suit. > **As a result, it may be recognized as the IoT ready technology.** [OPC UA Part 14: PubSub][OPC.UA.PubSub] promotes interoperability of loosely coupled **PubSub Applications**. By design, they often will not even know each other. In this case, it is impossible to create in-band interoperability alliance based on the direct negotiations of required configuration parameters and security artifacts. Their primary relationship is the shared understanding of: - specific semantics (meaning) of exchanged data - the syntax and semantics of messages that include these data - common underlying messages transport layer The specification claims that the PubSub integrates into the existing OPC UA technology but as result of applying the connectionless communication it is easier to implement low power and low-latency communications on local networks. Additionally, the specification states that PubSub is based on the [OPC UA Information Model][CAS.OPCUAIMD] with the aim of seamless integration into **OPC UA Servers** and **OPC UA Clients**. Nevertheless, the PubSub communication does not require such a role dependency, i.e. there is no necessity for **Publisher** or **Subscriber** to be either an **OPC UA Server** or an **OPC UA Client** to participate in the communication. > **Note 1**: Unfortunately, [OPC UA Information Model][CAS.OPCUAIMD] is not used to promote **PubSub Applications** in-band interoperability. This concept is only employed to define `Security Key Management` and `Configuration Management` models, which have an only indirect impact on the in-band **PubSub Applications** interoperability. ## Services **PubSub Applications** exchange messages formatted as the `NetworkMessage` structure using underlying communication stack. As illustrated in the following domain model (Figure 1), directly or indirectly the specification defines the following actors: - `Publisher`: pushes the current process data formatted as the `NetworkMessage` structure to an underlying communication stack - `Subscriber`: consumes the process data, which is recovered from the `NetworkMessage` structures polled from the underlying communication stack - `Distribution Channel` - selected common underlying communication stack - `NetworkMessage` - a data structure formatted in compliance with the syntax and semantics defined by the [OPC.UA.PubSub][OPC.UA.PubSub] specification - `Security Key Management` - a service that provides security keys used to sign and encrypt `NetworkMessage` data structures - `Configuration Management` - an external application used to remotely configure **PubSub Application** ![Figure 1. PubSub Application Domain Model](../../CommonResources/Media/PubSubMainComponents.png) The `Publisher` is the actor that pushes `NetworkMessage` structures to an underlying communication stack responsible to transport it over the network. It represents a certain data source, for example, a control device, a manufacturing process, a weather station or a stock exchange. It may be also **OPC UA Client**, **OPC UA Server** or in general any application that understand the syntax and semantics of the `NetworkMessage` structure. The `Subscriber` actors are the consumers of `NetworkMessage` structures, which are polled from the underlying transport layer. They may be **OPC UA Client**, **OPC UA Server** or in general any applications that understand the syntax and semantics of the `NetworkMessage` structure. To interchange the process data `Publisher` and all associated `Subscribers` nodes depend on a common `Distribution Channel`. `Distribution Channel` models common knowledge necessary to use an underlying messages transport communication stack, i.e. underlying protocol stack and relevant parameters to route the messages over the network. A `Security Key Management` provides keys for message security that can be used by the `Publisher` to sign and encrypt `NetworkMessage` structures and by the `Subscriber` to verify the signature of and decrypt the `NetworkMessage`. `NetworkMessage` security concerns the integrity and confidentiality of the published message payload. The level of security can be: - no security - signing but no encryption - signing and encryption Message security is end-to-end security (from `Publisher` to `Subscriber` instances) and requires common knowledge of the cryptographic artifacts necessary to sign and encrypt on the `Publisher` side as well as validate the signature and decrypt on the `Subscriber` side. The message security is independent of the transport protocol mapping and is defined by the specification. The specification defines OPC UA Information Model for `Security Key Management` services and many possible scenarios that can be used to select the security profile and provide appropriate security artifacts to the `Publisher` and `Subscriber` using this model. One of them is to implement this model as the **OPC UA Server** or **OPC UA Client** where the OPC UA IM model is used to describe the server OPC UA Address Space. A detailed description of all possible scenarios applicable to select security profile and exchange security artifacts is outside of the scope of this section. `Publisher` and `Subscriber` nodes may be configurable through vendor-specific engineering tools or using the dedicated configuration OPC UA Information Model described in this standard. This model allows a standard **OPC UA Client** based configuration tool to configure a **PubSub Application** connecting to the embedded **OPC UA Server**. Using remote **Configuration Tool** over an **OPC UA Session** does not determine how dynamic the configuration can be. More detailed description of this model is outside of the scope of this section. > It is worth stressing that the configuration model doesn't provide any definition dedicated to being used for the process data bindings configuration. ## Interoperability ### Preface The **PubSub Applications** are decoupled by exchanging messages over a selected underlying protocol stack. It is worth stressing that by design the **PubSub Application** doesn't expose any API that can be used to transfer upper layer data over the network, i.e. it is not a communication layer in the communication stack. It means that these applications must produce and/or consume the process data, i.e. the `NetworkMessage` must be populated using external process data. ### Transport Protocol Mappings **PubSub Applications** interoperability doesn't depend on any functionality provided by the underlying transport layer. According to the specification, the **Subscriber** and **Publisher** can be interconnected using any transparent messages transport infrastructure. The specification defines two groups of solutions: - *broker-less* - a network infrastructure that is able to route datagram-based messages, e.g. [UDP][RFC.UDP], [AMQP][AMQP], ETHERNET - *broker-based* - the core component of the network infrastructure is a message broker, e.g. [AMQP][AMQP] or [MQTT][MQTT]. In both cases, the one-to-many relationship between `Publisher` and `Subscriber` can be obtained. For UDP multicast messages distribution may be applied to send `Internet Protocol (IP)` (figure below) datagrams to a group of interested receivers in a single transmission. For the broker-based transport, all messages are published to specific queues (e.g. topics, nodes) that the broker exposes and `Subscribers` can listen to these queues. The [OPC UA PubSub][OPC.UA.PubSub] specification lists the following protocol stacks that can be selected as the transport for messages and their possible combinations with message mappings: - OPC UA UDP - simple UDP based protocol that is used to transport UADP `NetworkMessages` - OPC UA Ethernet - simple Ethernet based protocol using EtherType B62C that is used to transport UADP `NetworkMessages` as payload of the Ethernet II frame without IP or UDP headers - AMQP - [Advanced Message Queuing Protocol (AMQP)][AMQP] based protocol that is used to transport JSON and UADP `NetworkMessage` structures - MQTT - [Message Queue Telemetry Transport (MQTT)][MQTT] based protocol that is used to transport JSON and UADP `NetworkMessage` structures Because the specification doesn't define normative references for `OPC UA UDP` and `OPC UA Ethernet` in section *References* they are inferred from the context. Based on this mapping in the figure below the architecture of protocol stack is determined as the domain diagram. The diagram has been worked out on the best effort approach. > **Note 2** - for the sake of simplicity the diagram contains only protocols relevant for the mapping in concern. In other words, the classes representing the abstract OSI model layers (`OSI Transport`, `OSI Network`, and `OSI Data Link`) may aggregate and use a variety of protocols depending on the local network infrastructure, e.g. IEEE 802.11 for `OSI Data Link Layer`. ![Figure 2. Transport protocol stack architecture](../../CommonResources/Media/Networking/StackDomainModel.png) Following the specification, the transport protocol mapping is modeled as the four top-level classes called appropriately `Ethernet`, `UDP`, `MQTT`, `AMQP`. They may be recognized as the underlying API of the protocol stack and are aggregated into one common communication layer used to exchange the messages over the network (section *[Semantic-Data Message Centric Communication][SDMCC]* ). Here it must be stressed that the mentioned in the section title term `transport protocol` has nothing in common with the Open System Interconnection Reference Model (OSI model) Transport Layer. Referring to the OSI model the `MQTT` and `AMQP` protocols should be recognized as the `OSI Application Layer` protocols. The `OSI Application Layer` is the one at the top of the model. For the sake of simplicity, the `OSI Application Layer` is not present in the diagram. Because the PubSub specification defines also the protocol on the same layer some functionality is redundant in this case - they overlap on each other. For the purpose of traversing the network by the messages, the **PubSub Application** uses `MQTT` and `AMQP` protocols as a transparent communication service. Applying the broker-based approach also means that some functionality related to communication reliability, data selection, and distribution is delegated to them. Details related to `MQTT` mapping are covered by the section *[Underlying Transport over MQTT][UTMQTT]*. Details related to `AMQP` mapping are covered by the section *[Underlying Transport over AMQP][UTAMQP]*. The `OSI Presentation Layer` represents the services that are responsible for the translation of the application data encoding to network encoding, and translation back from the network encoding to application encoding. In other words, the layer “presents” data for the application or the network. This functionality (encoding/decoding) is embedded in the definition of the PubSub message syntax rules. This syntax rules ([OPC UA Part 6][OPC.UA.Part6]) are common for all the OPC UA specifications suite. For the sake of simplicity, the `OSI Presentation Layer` is not present in the diagram. In the published/subscriber communication pattern the `OSI Session Layer` is empty, so it is ignored in the domain model presented in figure above. The specification doesn't define particular mapping rules referring to protocol stack used by the `AMQP` and `MQTT`, so an abstract `OSI Transport Layer` is used in the proposed model as the underlying communication layer for them. In this case, all requirements against relevant specifications apply. On the other hand, according to the mapping rules the `User Datagram Protocol (UDP)` protocol ([UDP][RFC.UDP]) is pointed out by the PubSub specification as the only concrete implementation of the `OSI Transport Layer`. In this case, the protocol can be recognized as the base for the `UDP` mapping rules stated by the specification and a not sharable part of the abstract `OSI Transport Layer`. The specification doesn't define any **subscription management services**, namely, it offers a communication paradigm called unsolicited notification. When unsolicited notification occurs, a client receives a message that it has never requested. Using broker-less approach the **Subscriber** must use a filtering mechanism to process only messages it is interested in. In case the broker-less approach over the UDP is selected for communication some multicast functionality must be offered by the protocol stack. UDP is one-to-one connectionless protocol and cannot be used for this purpose. The specification recommends using `Internet Protocol (IP)` multicast option to fulfill this requirement. Formally there are no additional mapping rules defined for this protocol, but as a result, this concrete protocol has been selected as the base for `User Datagram Protocol (UDP)` protocol and is an embedded part of the `OSI Network Layer`. This approach has some drawbacks. Using IP multicast for `UDP` mapping, special equipment and dedicated configuration of that equipment are required. Both make this solution applicable only for the local network segments in the administration realm of the protocol users. It is hard to imagine the usage of this communication option even in case of enterprise scoped networks. From the practice, we know that particularly with factory networks, the manufacturing/engineering and IT organizations of the same company don't agree upon the management boundaries in a single plant. On the other hand, a broker-less PubSub `UDP` mapping using unicast addressing is a highly specialized case where the `Publisher` is intimately coupled to the `Subscriber`. Every specification should promote interoperability. Unfortunately, [Part 14 PubSub][OPC.UA.PubSub] doesn't specify how a multicast address is acquired by a publisher and subscribers - but this is absolutely crucial to obtain interoperability. The core concept of the publisher/subscriber communication pattern is topic-based messages distribution. It seems difficult or even impossible to create any directory services based on the IP addressing mechanism because it addresses issues related to nodes identification and localization on the global network, but not data semantics (data meaning). Detailed description of the `UDP` mapping rules are covered by the section *[Underlying Transport over UDP][UTUDP]*. I guess that the removal of the UDP and IP protocols from the communication stack is recognized by the specification authors as a mean to **improve the performance of the communication**. As a result `Ethernet` mapping rules have been defined (see figure above). The Ethernet term is recognized as a keyword with a very broad meaning ([IEEE 802.3 ETHERNET WORKING GROUP][IEEE]). The specification doesn't define normative reference in this respect. In the figure above it is presented as a concrete implementation compliant with the `IEEE 802.3` standard suit. In case the UDP protocol is removed form the stack to replace the application selection functionality offered by the socket concept the registered **B62C EtherType** is recommended, which is used as the protocol discrimination. Removing IP from the communication stack means that the addressing possibility is limited to local network segment. Detailed description of the `Ethernet` mapping rules are covered by the section *[Underlying Transport over Ethernet][UTEthernet]*. > **NOTE 3**: The specification doesn't delegate any publish/subscribe functionality down to this protocol. In this case, even the document title PubSub is confusing. > > **NOTE 4**: Ethernet mapping is applicable only in case the communication parties are connected to the same local network segment (they are in the same broadcast domain limited by a VLAN if any). Further communication performance improvement and extension of the functionality may be obtained for example by applying implementation of the [802.1Q-2018][8021Q]: - Time-Sensitive Network (TSN) - Virtual Local Network (VLAN) - Quality of Service (QoS) They are only partially mentioned in the specification but the solution like these should be recognized and modeled as an embedded part of the abstract `OSI Data Link Layer`. In any case, these solutions are invisible for the implementation of the communication layers above `OSI Data Link Layer`, so they are invisible for upper layers and doesn't have any impact on the PubSub interoperability, therefore should be considered as statements outside the scope of the specification. It is also worth stressing that these solutions can be applied in spite of the above communication stack selection - it is the common point in the transport protocol stack for all mappings. In other words, the mentioned solutions are not dedicated to OPC UA at all and can be applied for any communication protocol. ### Message Mappings The syntax and semantics of the messages exchanged between the **PubSub Application** network nodes are described as the `NetworkMessage` data structure. Each `NetworkMessage` includes header information (e.g. identification and security data) and one or more `DataSetMessage` structures. The `DataSetMessage` may be signed and encrypted in accordance with the configured message security. Each `DataSetMessage` contains process data. The `NetworkMessage` structure can be serialized using the following encoding: - UADP: optimized binary encoding - JSON: text format as defined in [RFC JSON][RFC.JSON] ## Normative References The following documents, in whole or in part, are normatively referenced in this document and are indispensable for its application. - [OPC Unified Architecture Specification Part 14: PubSub Release 1.04 February 06, 2018][OPC.UA.PubSub] ## Getting Started The `UAOOI.Networking.SemanticData` library is designed to be a foundation of developing application programs that are taking part of message-centric communication pattern and interconnected using the reactive networking concept described in the section [Semantic-Data Processing Architecture](../README.MessageCentricCommunication.md). To promote interoperability this library is a collection of types aimed at implementation of the [Part 14 PubSub][OPC.UA.PubSub] standard. The preliminary code help documentation is [available for sponsors- consider joining](https://github.commsvr.com/AboutPartnershipProgram.md.html). The topics contained in the document [Getting Started Tutorial](../../Networking/SemanticData/READMEGettingStartedTutorial.md) are intended to give you quick exposure to the `OOI Reactive Application` network-based data exchange programming experience. Working through this tutorial gives you an introductory understanding of the steps required to customize existing `OOI Reactive Application`. The section [Walk-through `ReferenceApplication`][ReferenceApplication] covers the description of a project aimed at implementation of an example of the `OOI Reactive Application` supporting producer and consumer roles simultaneously implemented as independent concurrent threads. The purpose of the `ReferenceApplication` is to demonstrate the concepts and architecture of the reactive networking application implementation, rather than to necessarily provide a realistic scenario for its use. For more extensive examples, see the [Semantic-Data Processing Architecture](../../SemanticData/README.MD). ## Acknowledgment I would like to thank [Gary Workman](https://www.linkedin.com/in/gary-workman-486663161/), [Michał Morawski](https://orcid.org/0000-0002-8902-1259), [Michel Condemine](https://www.linkedin.com/in/opcfrance/), [Jayachandran Rameshbabu](https://www.linkedin.com/in/jayachandran-rameshbabu-483848a9/), and [Stéphane Potier](https://www.linkedin.com/in/potier/) for their feedback, cooperation and of course friendship. ## Glossary ### Publisher-subscriber communication pattern > Publish-subscribe is a messages distribution scenario where senders of messages, called publishers, do not send them directly to specific receivers, called subscribers, but instead categorize published messages into classes without knowledge of which subscribers if any, there may be. Similarly, subscribers express interest in one or more classes and only receive messages that are of interest, without knowledge of which publishers, if any, there are. In the publish-subscribe model, subscribers typically receive only a subset of the total messages published. The process of selecting messages for reception and processing is called filtering. There are two common forms of filtering: topic-based and content-based. ### Connection-oriented communication pattern > Data exchange scenario that requires a session connection be established before any data can be sent. Connection-oriented services set up virtual links between applications through a network. The session is responsible to retain a state information or status about each communicating partner for the duration of multiple requests. An OPC UA Client/Server connection is a stateful connection because both systems maintain information about the session itself during its life. ### Connectionless-oriented communication pattern > Messages exchange scenario that does not require a session connection between sender and receiver. The sender simply starts sending packets (called datagrams) to the destination. Neither system must maintain state information for the systems that they send messages to or receive messages from. ## References - [OPC Unified Architecture][wordpress.opc-ua] [wordpress.opc-ua]: https://mpostol.wordpress.com/opc-ua/ - [Semantic-Data Message Centric Communication][SDMCC] [SDMCC]: ../../Networking/README.MessageCentricCommunication.md - [Underlying Transport over UDP][UTUDP] [UTUDP]:../../Networking/UDPMessageHandler/README.md - [Underlying Transport over MQTT][UTMQTT] [UTMQTT]:../../Networking/SemanticData/README_MQTTMapping.md - [Underlying Transport over AMQP][UTAMQP] [UTAMQP]:../../Networking/SemanticData/README_AMQPMapping.md - [Underlying Transport over Ethernet][UTEthernet] [UTEthernet]:../../Networking/SemanticData/README_EthernetMapping.md - [IoT versus SCADA/DCS Data Acquisition Patterns][wordpress.IoTVersus] [wordpress.IoTVersus]: https://mpostol.wordpress.com/2017/09/19/iot-versus-scadadcs/ - [OPC UA Main Technology Features][OPCUAMTF] [OPCUAMTF]:../../OPCUAMainTechnologyFeatures.md - [OPC UA Information Model Deployment][CAS.OPCUAIMD] [CAS.OPCUAIMD]: ../../SemanticData/AddressSpaceAddressSpaceModel.md - [RFC 768: User Datagram ProtocolJ, August 1980][RFC.UDP] [RFC.UDP]:https://tools.ietf.org/html/rfc768 - [RFC: 791 INTERNET PROTOCOL, September 1981][RFC.UDP.IP] [RFC.UDP.IP]:https://tools.ietf.org/html/rfc791 - [RFC 8259: The JavaScript Object Notation (JSON) Data Interchange Format][RFC.JSON] [RFC.JSON]:https://tools.ietf.org/html/rfc8259 - [OPC Unified Architecture Specification Part 4: Services, OPC Foundation, Rel. 1.04, 2017-11-22][Opc.UA.Part4] [Opc.UA.Part4]:https://opcfoundation.org/developer-tools/specifications-unified-architecture/part-4-services/ - [OPC Unified Architecture Specification Part 6: Mappings, OPC Foundation, Rel. 1.04, 2017-11-22][OPC.UA.Part6] [Opc.UA.Part6]:https://opcfoundation.org/developer-tools/specifications-unified-architecture/part-6-mappings/ - [OPC Unified Architecture Specification Part 14: PubSub Release 1.04 February 06, 2018][OPC.UA.PubSub] [OPC.UA.PubSub]: https://opcfoundation.org/developer-tools/specifications-unified-architecture/part-14-pubsub/ - [OASIS MQTT Version 3.1.1 specification][MQTT] [MQTT]:http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/mqtt-v3.1.1.html - [OASIS Advanced Message Queuing Protocol (AMQP) Version 1.0][AMQP] [AMQP]:http://docs.oasis-open.org/amqp/core/v1.0/os/amqp-core-overview-v1.0-os.html - [Walk-through `ReferenceApplication`][ReferenceApplication] [ReferenceApplication]:../../Networking/ReferenceApplication/README.MD - [IEEE 802.3 ETHERNET WORKING GROUP][IEEE] [IEEE]:http://www.ieee802.org/3/ - [802.1Q-2018 - IEEE Standard for Local and Metropolitan Area Network--Bridges and Bridged Networks][8021Q] [8021Q]:https://ieeexplore.ieee.org/servlet/opac?punumber=8686437 ================================================ FILE: Networking/SemanticData/README.nupkg.md ================================================ # `RxNetworking` of Semantic-Data The `UAOOI.Networking.SemanticData` library is designed to be a foundation of developing application programs that are taking part of message-centric communication pattern and interconnected using the reactive networking concept described in the [Semantic-Data Processing Architecture](https://commsvr.gitbook.io/ooi/semantic-data-processing/semanticdata). For more in-depth information about creating `OOI Reactive Application` exchanging data over the network using the reactive networking pattern, see [Getting Started Tutorial](https://commsvr.gitbook.io/ooi/reactive-communication/readmegettingstartedtutorial). To promote interoperability this library is a collection of types aimed at implementation of the [Part 14 PubSub](https://commsvr.gitbook.io/ooi/reactive-communication/readme.pubsubmtf) standard. The code is tested using the Unit Tests located in the project: [Networking.SemanticData.UnitTest](https://github.com/mpostol/OPC-UA-OOI/tree/master/Networking/Tests/SemanticDatalUnitTest) The preliminary code help documentation is [available for sponsors - consider joining](https://github.commsvr.com/AboutPartnershipProgram.md.html). ================================================ FILE: Networking/SemanticData/READMEDataDiscoveryAndBinding.md ================================================ # DataSet and Communication Channel Association The diagram below provides a very generic overview of the responsibilities that must be implemented by the UA Application: ![Architecture](../../CommonResources/Media/UADataNetworking.DataManagementBinding.DomainModel.png) * `UA Data Networking` - represents a software exchanging the data using protocol compliant with the [UA Part 14 Pub/Sub](README.PubSubMTF.md) and binding the data with the underlying process. * `MessageHandler` - represents a selected transport protocol supporting unsolicited data distribution or a middle-ware supporting publication/subscription message exchange communication pattern. * `DataSet` - represents a preselected collection of process data items transmitted by the `MessageHandler` as one whole and information required to bind with the underlying process. * `MessageReader` - captures functionality necessary to filter out unwanted messages and decode the data according to provided meta-data * `MessageWriter` - captures functionality necessary to address the message (provide globally unique identifier) and encode the data using provided meta-data * `Association` - provides: 1. one to one association between an entity instance derived from `MessageHandler` and `DataSet` 2. required addressing information as the `PublisherId`/`DataSetWriterId` couple 3. meta-data information used to encode/decode the process data into the messages ================================================ FILE: Networking/SemanticData/READMEGettingStartedTutorial.md ================================================ # Getting Started Tutorial ## Common Tasks The topics contained in this section are intended to give you quick exposure to the `OOI Reactive Application` network based data exchange programming experience. Working through this tutorial gives you an introductory understanding of the steps required to create `OOI Reactive Application` producer and consumer applications using the library `UAOOI.Networking.SemanticData`. Current release of the NuGet package is available at: [UAOOI.Networking.SemanticData](https://www.nuget.org/packages/UAOOI.Networking.SemanticData/) Here are steps to create a successful `OOI Reactive Application`: 1. derive from `DataManagementSetup` - it is place holder to gather all external injection points used to initialize the communication and bind to local resources 1. implement `IEncodingFactory` interface - to provide functionality to lookup a dictionary containing value converters 1. implement `IMessageHandlerFactory` interface - to create objects supporting messages handling over the wire 1. implement `IBindingFactory` interface - to create objects implementing `IBinding` that can be used to synchronize the values of the local data repository properties and messages received/send over the wire 1. implement `IConfigurationFactory` interface - to provide access to the selected role configuration 1. register the library `EventSource` to support common logging infrastructure > Notes: > > - It is expected that the encoding/decoding functionality is provided outside in a custom library. The interface `IEncodingFactory` is used for late binding to inject dependency on the external library. >- `Producer` and `Consumer` roles may use independent configurations. ## How to Guide ### How to: Implement `DataManagementSetup` Any application engaging the library is composed using the dependency injection pattern. The `DataManagementSetup`class is a placeholder to gather all external injection points used to compose the application, initialize the communication and bind to local resources. The class declares the following properties that must be initialized by the application to provide specific functionality. ```C# #region Injection points /// /// Gets or sets the binding factory. /// /// The binding factory. public IBindingFactory BindingFactory { get; set; } /// /// Gets or sets the encoding factory. /// /// The encoding factory. public IEncodingFactory EncodingFactory { get; set; } /// /// Gets or sets the message handler factory. /// /// The message handler factory. public IMessageHandlerFactory MessageHandlerFactory { get; set; } /// /// Gets or sets the configuration factory. /// /// The configuration factory. public IConfigurationFactory ConfigurationFactory { get; set; } #endregion ``` Create new class that derives from `DataManagementSetup` and initialize all mentioned above properties. ```C# public sealed class LoggerManagementSetup : DataManagementSetup { public LoggerManagementSetup() { IServiceLocator _serviceLocator = ServiceLocator.Current; string _ConsumerConfigurationFileName = _serviceLocator.GetInstance(ConsumerCompositionSettings.ConfigurationFileNameContract); m_ViewModel = _serviceLocator.GetInstance(ConsumerCompositionSettings.ViewModelContract); EncodingFactory = _serviceLocator.GetInstance(); MessageHandlerFactory = _serviceLocator.GetInstance(); ConfigurationFactory = new ConsumerConfigurationFactory(_ConsumerConfigurationFileName); BindingFactory = new DataConsumer(m_ViewModel); } .... } ``` In this example, it is assumed that [`ServiceLocator`](https://www.nuget.org/packages/CommonServiceLocator) is implemented to resolve references to any external services. Finally, call the `DataManagementSetup.Start()` methods. It is responsible to initialize the infrastructure, create all data bindings, enable all associations, and finally starts pumping the data. If you need any custom startup functionality, just place it just after calling the `Start` method. The following example originates from the `UAOOI.Networking.DataRepository.AzureGateway.PartDataManagementSetup` ```C# Start(); StartAzureCommunication(ConfigurationFactory.GetConfiguration()); ``` ## How to: Implement `IEncodingFactory` Encoding means that data is represented as a stream of bits according to selected data type, for example long, float, string, structure, etc. Visit the [OPC UA Makes Complex Data Processing Possible][wordpress.OPCUACD] article to get moore. It is expected that the encoding/decoding functionality is provided as an external part in a custom library. The interface `IEncodingFactory` is used for late binding to inject dependency on the external library. To implement encoding the following steps must be accomplished: - implement the `UAOOI.Networking.SemanticData.IEncodingFactory` interface; - implement the `UAOOI.Networking.SemanticData.Encoding.IUADecoder` interface; - implement the `UAOOI.Networking.SemanticData.Encoding.IUAEncoder` interface; > Note: > >This library has been released as the NuGet package [UAOOI.Networking.Encoding](https://www.nuget.org/packages/UAOOI.Networking.Encoding). Main purpose of this release is to support implementation of the interoperability tests defined by the OPC Foundation. In the production environment, you may simply replace this library by a custom one providing unlimited encoding functionality. ### How to: Implement `IMessageHandlerFactory` An instance implementing `IMessageHandlerFactory` creates objects supporting messages handling over the wire services: - `IMessageReader` - provides functionality supporting reading the messages from the wire. - `IMessageWriter` - provides functionality supporting sending the messages over the wire. The communicating party can be interconnected using any transparent messages transport infrastructure. For the broker-less transport layer the network infrastructure routes datagram-based messages and the services should implement `UDP`, `AMQP` or `ETHERNET` protocol. Applying the broker-based approach a core component of the transport layer is a message broker and in this case the services should implement `AMQP` or `MQTT` protocol. It is expected that implementation of the `IMessageHandlerFactory` and as the result messages handling services will be provided as an external part. An example implementation of the messages handling services conforming to UTP standard may be found in `UAOOI.Networking.UDPMessageHandler` project described in the document [Transport over UDP](../../Networking/UDPMessageHandler/README.md). ### How to: Implement `IBindingFactory` #### Introduction Implementation of this interface is a basic step to implement `Consumer` and/or `Producer` functionality. An instance of the `IBindingFactory` is responsible to create objects implementing `IBinding` that can be used by: - `Consumer` to save the data received over the network in the local data repository. - `Producer` to read from the local data repository and send it over the network. Depending on the role, the `IBinding` objects are returned from the following procedures of this interface: ``` C# IConsumerBinding IBindingFactory.GetConsumerBinding(string repositoryGroup, string processValueName, UATypeInfo fieldTypeInfo); IProducerBinding IBindingFactory.GetProducerBinding(string repositoryGroup, string processValueName, UATypeInfo fieldTypeInfo); ``` where: - `repositoryGroup` - is the name of a repository group profiling the configuration behavior, e.g. encoders selection. The configuration of the repositories belonging to the same group is handled according to the same profile. For example, the `repositoryGroup` may be used to represent a browse path in the OPC UA Address Space. In this case browse path aggregates all variables belonging to the same object (e.g. a boiler), which has to be handled consistently on the screen. This name is determined by the `DataSetConfiguration.RepositoryGroup` in the application configuration (section [Reactive Networking Configuration](../../Configuration/Networking/README.MD)). - `processValueName` - is the name of a variable that is the ultimate destination/source of the message values. The value of `processValueName` must be unique in the context of the group named by `repositoryGroup`. - `fieldTypeInfo` - the field metadata definition represented as an object of 'UATypeInfo`. #### `Consumer` Role Implementation This section provides hints on how to implement the `Consumer` role of the `OOI Reactive Application` processing data received in messages sent over the network by a data `Producer`. The `Consumer` role implementation is captured by the `Networking.DataLogger` project where `DataManagementSetup` is implemented by derived class `UAOOI.Networking.DataLogger.LoggerManagementSetup`. The class `UAOOI.Networking.DataLogger.DataConsumer` is an example implementation of a [data logger](./../DataRepository/DataLogger/README.md). This functionality is aimed at recording data over time. It consumes the testing data sent over the wire and updates properties in the class `UAOOI.Networking.DataLogger.ConsumerViewModel` implementing ViewModel layer in the [Model View ViewModel (on MSDN)](https://msdn.microsoft.com/en-us/magazine/dd419663.aspx). The class `DataConsumer` demonstrates how to create bindings interconnecting the data received over the wire and the properties that are the ultimate destination of the data. Because there is only one group of variables the `GetConsumerBinding` method doesn't use the `repositoryGroup` and the `GetProducerBinding` is intentionally not implemented. #### `Producer` Role Implementation This section provides hints on how to implement the `Producer` role responsible for: - reading process data from a local repository - packing the data into the messages - sending the data over the network to all interested parties There are two examples of this role implementation: - `Networking.SimulatorInteroperabilityTest` - in this project the data expected by a [data logger](./../DataRepository/DataLogger/README.md) is generated and send over the network - `Networking.Simulator.Boiler` - in this project a set of boilers is simulated. It is a part of the proof of concept with the aim of verifying that the reactive communication implemented using the `Networking.SemanticData` library is well suited to deploy the Internet of Things (IoT) paradigm for highly distributed applications. In the `Networking.SimulatorInteroperabilityTest` project, the `DataManagementSetup` class is implemented by derived class `UAOOI.Networking.SimulatorInteroperabilityTest.SimulatorDataManagementSetup`. The class `UAOOI.Networking.SimulatorInteroperabilityTest.DataGenerator` captures implementation of a [testing data generator](../../Networking/SimulatorInteroperabilityTest/README.md) aimed at accomplishing interoperability tests defined by the OPC Foundation for PubSub applications. Because there is only one group of variables the `GetProducerBinding` method doesn't use the `repositoryGroup` and the `GetConsumerBinding` is intentionally not implemented. In the `Networking.Simulator.Boiler` project `DataManagementSetup` class is implemented by derived class `UAOOI.Networking.Simulator.Boiler.SimulatorDataManagementSetup`. The class `UAOOI.Networking.Simulator.Boiler.DataGenerator` captures the implementation of a simulator generating data for a set of boilers. In this case, the variables representing the state of one boiler are grouped by the `GetProducerBinding` method using the `repositoryGroup` parameter. Because it is the `Producer` role implementation the `GetConsumerBinding` method is intentionally not implemented and should not be called. ### How to: Implement `IConfigurationFactory` Definition of the interface `UAOOI.Configuration.Networking.IConfigurationFactory` is located in the [`UAOOI.Configuration.Networking`](../../Configuration/Networking/README.MD) library. This library also contains the class `UAOOI.Configuration.Networking.ConfigurationFactoryBase` that is a base implementation of this interface. This class may be overridden by a custom class designed according to the user application custom requirements. >Notes for implementers > >- If you need a special loading procedure you must use the parameterless constructor of the `ConfigurationFactoryBase` and assign a new loader method to the `ConfigurationFactoryBase.Loader` property, alternatively embedded loader will be used to open the configuration file using the `filePath` provided in the constructor. >- The derived class must override an abstract method `RaiseEvents` called on the configuration change. >- The embedded configuration loading method uses `System.IO.FileInfo` to test if the file exists. Example implementations of this class are in [`Producer`](../../Networking/SimulatorInteroperabilityTest/README.md) and [`Consumer`](./../../Networking/DataRepository/DataLogger/README.md). Both are parts of the example implementation [`ReferenceApplication`](../../Networking/ReferenceApplication/README.MD). ### How to: Register the `EventSource` Using the following contract create an instance of the `NetworkingEventSourceProvider` and call `GetPartEventSource` to get the local instance of the `EventSource` that is used locally for the semantic logging purpose. ```C# [Export(typeof(INetworkingEventSourceProvider))] public class NetworkingEventSourceProvider : INetworkingEventSourceProvider ``` The `EventSourceBootstrapper` in `Networking.ReferenceApplication` project is an example on how to register all `EventSource` instances to support common logging infrastructure. ## See also - [**API Browser** is available for sponsors- consider joining](https://github.commsvr.com/AboutPartnershipProgram.md.html) - [OPC UA Makes Complex Data Processing Possible][wordpress.OPCUACD] [wordpress.OPCUACD]: https://mpostol.wordpress.com/2014/05/08/opc-ua-makes-complex-data-access-possible/ ================================================ FILE: Networking/SemanticData/README_AMQPMapping.md ================================================ # Underlying Transport over AMQP ## Disclaimer > **This article is under development and will be subject of further modification after collecting more feedback from software developers and OPC Foundation.** ## Motivation The main goal of this document is to provide instruction on how to expand the transport layer for OOI Networking of the `Semantic-Data` over the Advanced Message Queuing Protocol \([AMQP][AMQP]\) to be compliant with the specifications mentioned in the section *Normative references*. Implementation of the messages exchange over the \([AMQP][AMQP]\) protocol is out of the scope of this project. The library intentionally is designed to use any transport protocol meeting some basic requirements using external components. External components implementing \([AMQP][AMQP]\) connectivity can be seamlessly integrated with this SDK using dependency injection concept illustrated by the following domain model: ![Figure 1. Domain Model](../../CommonResources/Media/DataManagementExternalLibraries.png) Instruction for implementer is covered in the section *Notices for Implementer*. ## Normative references The following documents, in whole or in part, are normatively referenced in this document and are indispensable for its application. - [ISO/IEC 19464:2014: Advanced Message Queuing Protocol (AMQP) v1.0][ISO.AMQP] - [OPC Unified Architecture Specification Part 14: PubSub Release 1.04 February 06, 2018][OPC.UA.PubSub] ## Introduction ### AMQP #### Architecture The [Advanced Message Queuing Protocol (AMQP)][ISO.AMQP] is an open standard application layer protocol. It is a vendor-neutral and platform-agnostic protocol that offers organizations an easier, more secure approach to passing real-time data streams and business transactions. The goal of AMQP is to ensure information is safely and efficiently transported between applications, among organizations, across distributed cloud computing environments, and within mobile infrastructures. AMQP avoids proprietary technologies, offering the potential to lower the cost of enterprise middleware software integration through open interoperability. This section briefly summarizes the core concepts of the AMQP and explains how to use AMQP as the transport layer of the **PubSub Applications**. The goal is that any developer using any existing AMQP 1.0 client stack to be able to provide external, composable implementation of the **MessageHandling** (figure above) class leveraging interoperability via AMQP. In this section, it is assumed that the management of AMQP communication are handled by a respective stack, such as [AMQP.NET Lite][AMQP.NET Lite], [RabbitMQ][RabbitMQ]. An AMQP network consists of **Nodes** connected via links. **Nodes** are named entities responsible for processing of process data transfered by messages. Messages can originate from, terminate at, or be relayed by nodes. As a message travels through an AMQP network, the responsibility for safe storage and delivery of the message is transferred between the **Nodes** it encounters. The link is a unidirectional route between two **Nodes**. There are two kinds of nodes: sources and targets. Messages only travel along a link if they meet the entry criteria at the source. As illustrated in the following domain model, **Nodes** exist within a **Container**. **Container** may be implemented as a process carrying out a software program instance. Examples of containers are **Broker** and **Client** applications. An example of the **Clint** is a **PubSub Application**. Each **Container** may hold many nodes. Examples of AMQP **Nodes** are **Producer**, **Consumer**, and **Queue**. **Producers** and **Consumers** are the elements within an application that generate and process messages. **Queues** are entities that store and forward messages. ![Class Diagram of Concrete Containers and Nodes](../../CommonResources/Media/AMQP.ConcreteContainersNodes.png) #### Transport In order for communication to occur between **Nodes** in different **Containers** a connection needs be established. An AMQP connection consists of a full-duplex, reliably ordered sequence of frames. A frame is a stream of bytes carried on the wire. Connections have a negotiated maximum frame size (length of the stream). It is assumed that connections are transient and can fail for a variety of reasons resulting in the loss of an unknown number of frames. The network connection is thus anchored on the **Container**. It is initiated by the **Container** in the client role making an outbound TCP socket connection to a container in the listener role. Listener role can be used to build applications such as P2P service, router, broker and more. The connection handshake includes: - negotiating the protocol version; - declaring or negotiating the use of Transport Level Security (TLS/SSL), - an authentication/authorization handshake at the connection scope that is based on Simple Authentication and Security Layer (SASL). After the connection is established, the containers each declare the maximum frame size they are willing to handle, and after an idle timeout they will unilaterally disconnect if there is no activity on the connection. Security with AMQP is primarily provided by a TLS connection between the **Containers**. Applications that require end-to-end security with AMQP need to apply security protection defined above the AMQP, e.g. in the [OPC.UA.PubSub][OPC.UA.PubSub]. A session forms a bi-directional communication path. Number of sessions must be defined or arbitrary limited. > Connections, channels, and sessions are ephemeral. If the underlying connection collapses they must be reestablished. Sessions provide a flow control scheme based on the number of frames transmitted. Since frames have a maximum size for a given connection, this provides flow control based on the number of bytes transmitted. A single connection may have multiple independent sessions active simultaneously, up to the negotiated limit. A link endpoint is associated with a session endpoint. Within a session, the link is used to transfer messages across them. A single session can be simultaneously associated with any number of links. However, a link has not to be attached to more than one session at a time. > Links are named, and the state at the node can live longer than the connection on which they were established. A link is unidirectional. A link is created in a session, identified by a unique name, and attached to a node specified by an address. The link is created inside an AMQP Session and, thanks to the multiplexing feature of AMQP protocol, the same session can be used for many links all inside the same TCP connection. Once attached, a link is subject to flow control of message transfers. Link endpoints maintain the flow control state, which determines when it is legal to send transfers on an attached link. A source can restrict the messages transferred from a source by specifying a filter. A filter can be thought of as a function which takes a message as input and returns a boolean value: true if the message will be accepted by the source, false otherwise. A filter must not change its return value for a message unless the state or annotations on the message at the node change (e.g., through an updated delivery state). #### Messaging The AMQP message consists of the following sections: - Zero or one `header`: the Transport headers for a message. - Zero or one `delivery-annotations`: delivery-specific non-standard properties at the head of the message. - Zero or one `message-annotations`: properties of the message which are aimed at the infrastructure and should be propagated across every delivery step. - Zero or one `properties`: immutable properties of the message. - Zero or one `application-properties`: structured application data. Intermediaries can use the data within this structure for the purposes of filtering or routing. - The `body` (`application-data`): consists of one of the following three choices: - one or more `data`: contains opaque binary data. - one or more `amqp-sequence`: a sequence section contains an arbitrary number of structured data elements. - a single `amqp-value`: contains a single AMQP value. - Zero or one `footer`: details about the message or delivery which can only be calculated or evaluated once the whole bare message has been constructed or seen (for example message hashes, HMACs, signatures and encryption details). > Not all fields are exposed in the library API of the AMQP stack. The `properties` section is used for a defined set of standard properties of the message. The properties section is part of the bare message; therefore, if retransmitted by an intermediary, it must remain unaltered. Field Name| Description| -|-| `message-id` | application message identifier - `message-id`, if set, uniquely identifies a message within the message system. The message producer is usually responsible for setting the `message-id` in such a way that it is assured to be globally unique. An intermediary may discard a message as a duplicate if the value of the `message-id` matches that of a previously received message sent to the same node. `user-id`| creating user id - The identity of the user responsible for producing the message. The client sets this value, and it may be authenticated by intermediaries. `to`| the address of the node the message is destined for `subject` | the subject of the message - a common field for summary information about the message content and purpose. `reply-to` | the node to send replies to - the address of the node to send replies to. `correlation-id` | application correlation identifier - this is a client-specific identifier that can be used to mark or identify messages between clients. `content-type` | MIME content type (see note below) `content-encoding` | MIME content type (see note below) `absolute-expiry-time` | the time when this message is considered expired - an absolute time when this message is considered to be expired. `creation-time` | the time when this message was created - an absolute time when this message was created. `group-id` | the group this message belongs to - identifies the group the message belongs to. `group-sequence` | the sequence-no of this message within its group - the relative position of this message within its group. `reply-to-group-id` | the group the reply message belongs to - this is a client-specific id that is used so that client can send replies to this message to a specific group. ##### Notes >`content-type`: > >The [RFC-2046][RFC.HTTP] MIME type for the messages `application-data` section (body). As per [RFC-2046][RFC.HTTP] this can contain a charset parameter defining the character encoding used, e.g. `text/plain`; `charset=“utf-8`. > >For clarity, as per section 7.2.1 of [RFC-2616][RFC.HTTP], where the content type is unknown the `content-type` should not be set. This allows the recipient the opportunity to determine the actual type. Where the section is known to be truly opaque binary data, the `content-type` should be set to `application/octet-stream`. > >When using an `application-data` section with a section code other than data, `content-type` should not be set. > >`content-encoding`: > >The `content-encoding` property is used as a modifier to the `content-type`. When present, its value indicates what additional content encodings have been applied to the `application-data`, and thus what decoding mechanisms need to be applied in order to obtain the media-type referenced by the `content-type` header field. > >`content-encoding` is primarily used to allow a document to be compressed without losing the identity of its underlying content type. > >`content-encoding` properties are to be interpreted as per section 3.5 of [RFC 2616][RFC.HTTP]. Valid `content-encoding` properties are registered at [Hypertext Transfer Protocol (HTTP) Parameters][IANAHTTPPARAMS]. > >The `content-encoding` must not be set when the `application-data` section is other than data. The binary representation of all other `application-data` section types is defined completely in terms of the AMQP type system. > >Implementations must not use the identity encoding. Instead, implementations should not set this property. implementations should not use the compress encoding, except as to remain compatible with messages originally sent with other protocols, e.g. HTTP or SMTP. > >Implementations should not specify multiple `content-encoding` values except as to be compatible with messages originally sent with other protocols, e.g. HTTP or SMTP. The `application-properties` section is a part of the bare message used for structured application data. Intermediaries can use the data within this structure for the purposes of filtering or routing. ### OPC UA PubSub The [OPC.UA.PubSub][OPC.UA.PubSub] offers the publish/subscribe communication pattern as an option to client-server pattern. The detailed description of the [OPC.UA.PubSub][OPC.UA.PubSub] has been covered by the document [OPC Unified Architecture Part 14: PubSub Main Technology Features][README.PubSubMTF]. Among others, the specification recognizes the following actors (see figure above) as parts of the **PubSub Application** as the communication parties: - **Publisher**: is the actor that pushes `NetworkMessage` structures to a selected AMQP **Node**. - **Subscriber**: is the actor that consumes data encapsulated by the `NetworkMessage` structure, which is polled from the selected AMQP **Node**. According to the specification the **Publisher** and **Subscriber** don't have any subscriptions management functionality, namely, they follow a communication paradigm called unsolicited notification. When unsolicited notification occurs, a client may receive a message that it has never requested. The **Subscriber** must use a filtering mechanism to process only messages it is interested in. Lack of subscriptions management functionality defined by the [OPC.UA.PubSub][OPC.UA.PubSub] could be mitigated by applying the [AMQP][AMQP] that some functionality related to communication reliability, data selection, and distribution is delegated to the AMQP **Container**. ## AMQP mapping ### Parameters Using AMQP connectivity as the messages transport layer by the **PubSub Application** requires two kinds of parameters: - PubSub **Distribution channel**: promoting interoperability between **Publisher** and all **Subscribers** interested to obtain data from it. - AMQP connections: promoting interoperability between **PubSub Application** hosted by an AMQP **Container** and all the AMQP **Containers** that take part in the communication. Configuration of the parameters related to the **PubSub Applications** and AMQP **Containers** interconnection may be recognized as the implementation details except the scenario where remote configuration using **Configuration Management** is the case \( [PubSub Main Technology Features][README.PubSubMTF] \). ### PubSub **Distribution channel** #### `properties` The `properties` sections are part of the AMQP `Bare Message`. The table below describes how the selected properties of the message are populated when an AMQP message is constructed. | Field Name | Source | - | - | `subject` | Valid values are `ua-data` or `ua-metadata`. | `content-type` | MIME type for the message body. MIME types are specified in the message body subsections. - `subject`: defines the type of the message contained in the AMQP `body`. A value of `ua-data` specifies that the `body` contains a UADP or JSON `NetworkMessage`. A value of `ua-metadata` specifies that the `body` contains a UA Binary or JSON encoded `DataSetMetaData` message. - `content-type`: specifies whether the message is binary or JSON data. [OPC.UA.PubSub][OPC.UA.PubSub] specification defines two possible encodings for the `NetworkMessage` structure and is encoded depending on the selected encoding mapping as defined for the: - JSON message mapping - The corresponding value of the `content-type` is `application/json`. - UADP message mapping - The corresponding value of the `content-type` is `application/opcua+uadp`. #### `application properties` The `application properties` sections are part of the AMQP `Bare Message` used for structured application data. Intermediaries can use the data within this structure for the purposes of filtering or routing. > MP NOTES: > > The AMQP message properties shall include additional fields defined on the WriterGroup or DataSetWriter through the KeyValuePair array in the WriterGroupProperties and DataSetWriterProperties. The NamespaceIndex of the QualifiedName in the KeyValuePair shall be 0 for AMQP standard message properties. The Name of the QualifiedName is constructed from a message prefix and the AMQP property name with the following syntax ... > > AMQP defines two kinds of properties : > > - 3.2.4 `Properties`: Immutable properties of the message > - 3.2.5 `Application Properties`: Intermediaries can use the data within this structure for the purposes of filtering or routing. The **PubSub Application** cannot be recognized as the intermediary. > >Is not clear which one and how to implement this requirement. #### `data` The `data` section is part of the AMQP `Bare Message` and is contained in the `body` section. The `data` section shall be used to transfer the `NetworkMessage`. For UADP message mapping if the AMQP frame size exceeds the **Container** limits it shall be broken into multiple chunks. The implementation choses packet and message size limits depending on the capabilities of the operating system or the capabilities of the device the application is running on. The mechanism for handling `NetworkMessage` that exceed the max-message-size limits depends on the encoding. - For UADP: it shall be broken into multiple chunks as described in 7.2.2.2.4. - For JSON: it is not defined. >MP NOTE: > >This functionality is an open issue reported to OPC Foundation: [0004269: Part 14 PubSub Section 7.3.4 it is not clear how to deal with long messages.](https://opcfoundation-onlineapplications.org/mantis/view.php?id=4269); > > MP NOTE > >It has been be reported to OPCF: > >For UADP encoding the specification requires: > > It is recommended that the MetaDataQueueName as described in 6.4.2.3.6 is configured as a sub-topic of the related QueueName with the name $Metadata. > > Unfortunately the AMQP does not define the terms: 'sub-topic' and QueueName. It is also not clear if `$Metadata` is terminal symbol or refers to somethings else. > > MP NOTE: > > For MQTT the following limitation is stated: `The messages sent through MQTT are limited to one per Application Message`, but for AMQP it is not present. ### AMQP connection #### Addressing The syntax of the AMQP transporting protocol URL used has the following form: `amqps://[:][/]` The default port is 5671. The syntax for an AMQP URL over Web Sockets has the following form: `wss://[:][/]` The default port is 443. #### Authentication Authentication shall be performed according to the configured `AuthenticationProfileUri` of the `PubSubConnection`, `DataSetWriterGroup`, `DataSetWriter` or `DataSetReader` entities. If no authentication information is provided in the form of `ResourceUri` and `AuthenticationProfileUri`, SASL Anonymous is implied. If the authentication profile specifies SASL PLAIN authentication, a separate connection for each new Authentication setting is required. > MP NOTE: > >This requirements are not clear because it is not related to Publisher/Subscriber interoperability- it is not common knowledge necessary to communicate over AMQP. This parameter could be relevant for the **PubSub Application** and **Container** interoperability. This section must be revisited after getting more. #### `Quality of Service` A writer negotiates the delivery guarantees for its link using the snd-settle-mode settlement policy (settled, unsettled, mixed) it will use, and the desired rcv-settle-mode (first, second) of the broker. Vice versa, the reader negotiates delivery guarantees using its rcv-settle-mode (first, second) and the desired snd-settle-mode (settled, unsettled) of the broker. This matches to the `BrokerTransportQualityOfService` values as follows: - AtMostOnce_1 – messages are pre-settled at the sender endpoint and not sent again. Messages may be lost in transit. This is the default setting. - AtLeastOnce_2 – messages are received and settled at the receiver without waiting for the sender to settle. - ExactlyOnce_3 – messages are received, the sender settles and then the receiver settles. > MP Note: > > This mapping requirements must be reviewed against AMQP specification. It seems that the `BrokerTransportQualityOfService` is defined by the configuration model and not exist if this model is not used. #### `Keep Alive` If the `KeepAliveTime` is set on a `WriterGroup`, a value slightly higher than the configured value of the group should be used as idle timeout of the connection ensuring that the connection is disconnected if the keep alive message was not sent by any writer. Otherwise, if no `KeepAliveTime` is specified, the implementation should set a reasonable default value. > MP NOTE > > Reported to OPC Foundation [0004301: 7.3.4.6 Transport Limits and Keep Alive](https://opcfoundation-onlineapplications.org/mantis/view.php?id=4301) > > It must be explained what the connection means. The AMQP define connection for: > > - **Containers** > - session > - Link. ## Notices for Implementer In the article [Reactive Networking of Semantic-Data Library](README.MD#message-transport) the section *Message Transport* contains description covering instruction for the external AMQP handling components. An example how to implement the Transport layer over the UDP protocol is illustrated by the project [UA Data Example Application](../ReferenceApplication/README.MD). ## See also - [IANA (Internet Assigned Numbers Authority), Hypertext Transfer Protocol (HTTP) Parameters.][IANAHTTPPARAMS] - [RFC 2616: Hypertext Transfer Protocol -- HTTP/1.1][RFC.HTTP] - [OASIS Advanced Message Queuing Protocol (AMQP) Version 1.0][AMQP] - [amqp-core-overview-v1.0 OASIS Advanced Message Queuing Protocol (AMQP) Version 1.0][AMQP] - [ISO/IEC 19464:2014: Advanced Message Queuing Protocol (AMQP) v1.0][ISO.AMQP] - [OPC Unified Architecture Part 14: PubSub Main Technology Features][README.PubSubMTF] - [AMQP.NET Lite][AMQP.NET Lite] - [RabbitMQ][RabbitMQ]. [ISO.AMQP]: https://www.iso.org/standard/64955.html [OPC.UA.PubSub]: https://opcfoundation.org/developer-tools/specifications-unified-architecture/part-14-pubsub/ [OPC.UA.Profiles]: https://opcfoundation.org/developer-tools/specifications-unified-architecture/part-7-profiles/ [README.PubSubMTF]:README.PubSubMTF.md [AMQP.NET Lite]: https://github.com/Azure/amqpnetlite [RabbitMQ]: https://www.rabbitmq.com/ [IANAHTTPPARAMS]: http://www.iana.org/assignments/http-parameters/http-parameters.xml [RFC.HTTP]:https://tools.ietf.org/html/rfc2616 [AMQP]: http://docs.oasis-open.org/amqp/core/v1.0/os/amqp-core-overview-v1.0-os.html ================================================ FILE: Networking/SemanticData/README_EthernetMapping.md ================================================ # Underlying Transport over Ethernet The main goal of this document is to provide instruction on how to expand the transport protocol stack for OOI Networking of the **Semantic Data** over the `Ethernet` to be compliant with the specifications mentioned in the section *Normative references*. Implementation of the messages exchange over the [`Ethernet`][Ethernet] protocol is outside of the scope of this project. The library intentionally is designed to use any transport protocol meeting some basic requirements using external components. External components implementing [`Ethernet`][Ethernet] connectivity can be seamlessly integrated with this SDK using dependency injection concept illustrated by the following domain model: ![Figure 1. Domain Model](../../CommonResources/Media/DataManagementExternalLibraries.png) Instruction for implementer is covered in the section *Notices for Implementer*. ## Normative references The following documents, in whole or in part, are normatively referenced in this document and are indispensable for its application. - [OPC Unified Architecture Specification Part 14: PubSub Release 1.04 February 06, 2018][OPC.UA.PubSub] - [IEEE Std 802-2014 - IEEE Standard for Local and Metropolitan Area Networks: Overview and Architecture][802] - [802.1Q-2018 - IEEE Standard for Local and Metropolitan Area Network--Bridges and Bridged Networks][8021Q] - [802.3-2018 - IEEE Standard for Ethernet][8023] ## OPC UA Ethernet In [Part 14 PubSub][OPC.UA.PubSub] the term **OPC UA Ethernet** is defined as a simple Ethernet-based protocol using `EtherType` `B62C` that is used to transport `UADP` `NetworkMessage` structures as the payload of the Ethernet II frame without IP or UDP headers. Fortunately, the specification doesn't really define any new protocol based on the Ethernet, but only mapping to an existing one. Because both terms `UADP` encoding and `NetworkMessage` data structure are not defined by the OPC UA core standard the prefix OPC UA before Ethernet is meaningless and confusing. The Ethernet term has a very broad meaning, and unfortunately, the specification doesn't provide also any normative references in this respect. Hence, the rest of this section is prepared on the assumption that the meaning has been inferred correctly from the specification editors intention. Ethernet term is well known as a common name of a set of the IEEE 802.3 standards for Ethernet networks developed by the [IEEE 802.3 Working Group][Ethernet]. The most promising starting point for furthe investigation seems to be the document [802.3-2018 - IEEE Standard for Ethernet][8023]. From this document, we can learn that 802.3 (Ethernet) is a concrete protocol located at `OSI Data Link Layer` (section [*OPC Unified Architecture Part 14: PubSub Main Technology Features*][README.PubSubMTF]). More about layering can be found in the document [802-2014 - IEEE Standard for Local and Metropolitan Area Networks: Overview and Architecture][802]. Next sections cover the most important features in context of the PubSub mapping and related directly or indirectly to the 802.3 (Ethernet). ### IEEE 802 - Local and Metropolitan Area Networks Overview From the [IEEE 802][802] specification we can learn that LAN is a peer-to-peer communication network that enables stations to communicate directly on a point-to-point, or point-to-multipoint, basis without requiring them to communicate with any intermediate stations that perform forwarding or filtering. This is in contrast to wide area networks (WANs) that interconnect communication parties in different parts of a country or are used as a public utility. A LAN is generally owned, used, and operated by a single organization (management realm). IEEE 802 networks can also be used to perform the task of an access network, i.e., to connect end stations to a larger, heterogeneous network, e.g., the Internet. In order to provide a balance between the proliferation of a very large number of different and incompatible local and metropolitan networks, on the one hand, and the need to accommodate rapidly changing technology and to satisfy certain applications or cost goals, on the other hand, several types of medium access technologies are currently specified in the family of IEEE 802 standards. #### Reference Model The IEEE 802 Reference Model (RM) is derived from the Open Systems Interconnection basic reference model (OSI/RM), ISO/IEC 7498-1:1994. The IEEE 802 standards emphasize the functionality of the lowest two layers of the OSI/RM, i.e., `OSI Physical Layer` (PHY) and `OSI Data Link Layer` (DLL). The IEEE 802 Reference Model is similar to the OSI/RM in terms of its layers and the placement of its service boundaries. These map onto the same two layers in the IEEE 802 RM. For the data services supported by all IEEE 802 networks, the `Data Link Layer` is structured as follows - Logical Link Control (LLC) - Medium Access Control (MAC) The MAC sublayer of the IEEE 802 RM exists between the PHY and the LLC sublayer to provide a service for the LLC sublayer. #### Upper Layer Protocol discrimination To allow multiple network layer protocols to coexist above the `OSI Data Link Layer` and agregated by the `OSI Network Layer` the dedicated methods are provided for the following: - The coexistence of multiple network layer protocols - The migration of existing networks to future standard protocols - The accommodation of future higher layer protocols Within a given layer, entities can exchange data by a mutually agreed upon protocol mechanism. A pair of entities that do not support a common protocol cannot communicate with each other. For multiple protocols to coexist within a layer, it is necessary to determine which protocol is to be invoked to process a service data unit delivered by the lower layer. Various network and higher layer protocols have been reserved LPD addresses or EtherTypes. These addresses permit multiple protocols to coexist at a single MAC station. The higher layer protocol discrimination entity (HLPDE) is used to determine the higher layer protocol to which to deliver a protocol data unit (PDU). Two methods may be used in the HLPDE as follows: - `EtherType` protocol discrimination (EPD), which uses the `EtherType` - LLC protocol discrimination (LPD), which uses the addresses defined in ISO/IEC 8802-2, including the Subnetwork Access Protocol (SNAP) format The `EtherType` is a 2-octet value, assigned by the IEEE Registration Authority (RA), that provides context for interpretation of a data field of a frame (protocol identification). IEEE Std 802.3 is capable of natively representing the EtherType within its MAC frame format, which is used to support EPD. IEEE Std 802.3 also natively supports ISO/IEC 8802-2 LPD (over a limited range of frame sizes). Examples of EtherTypes are 0x0800 and 0x8DD, which are used to identify IPv4 and IPv6, respectively. A detailed description of the EPD is covered by the specification [IEEE 802][802]. More information on EtherTypes can also be found on the [IEEE RA web site][IEEERA]. > **Note 1**: EtherType **0xB62C** is recommended by the [OPC UA PubSub][OPC.UA.PubSub] to identify Ethernet mapping for PubSub protocol. Unfortunately, at the date of this document publication, this EtherType number is not listed as an entry in the official registry available here [IEEE 802 Numbers][802Numbers]. This number is classified by the IEEE as the OUI Extended EtherType. [IEEE 802][802] defines three assigned EtherType groups of vendor-specific protocol identifier: Name|Value -|- Local Experimental EtherType 1|88-B5 Local Experimental EtherType 2|88-B6 OUI Extended EtherType|88-B7 The vendor-specific protocol identifier is a means whereby protocol developers may assign permanent protocol identifier values without consuming type values from the globally available limited resource. This can be useful for **prototype, experimental, and private/proprietary protocols** to be developed without impacting the global EtherType namespace. The OUI Extended `EtherType` allows an organization to apply protocol identifiers using SNAP. An organization allocates protocol identifiers to its own protocols in a manner that ensures that the protocol identifier is globally unique. SNAP provides a method for multiplexing and demultiplexing of private and public protocols among multiple users of the LLC sublayer. An organization that has an OUI assigned to it may use its OUI to assign universally unique protocol identifiers to its own protocols, for use in the protocol identification field of SNAP data units. > **NOTE 2**: to use EPD the PubSub cannot directly access Ethernet PDU as it is required in the specification because this service is provided by the LLC sublayer. #### Virtual Bridged Network Additionally, the [IEEE 802.1Q][8021Q] introduces a concept of Virtual Bridged Network. VLANs and their identifiers (VID) provide a convenient and consistent network-wide reference for VLAN Bridges. A VLAN represents a broadcast domain. VLANs are identified by a VLAN ID (a number between 0 – 4095). Portions of the network which are VLAN-aware (i.e., IEEE 802.1Q conformant) can include VLAN tags. When a frame enters the VLAN-aware portion of the network, a tag is added to represent the VLAN membership. 802.1Q adds a 32-bit field between the source MAC address and the EtherType fields of the original frame. Each tag comprises the following sequential information elements: - A Tag Protocol Identifier - Tag Control Information (TCI) that is dependent on the tag type - Additional information, if and as required by the tag type and TCI. The VLAN TCI field is two octets in length and encodes the VID and priority parameters. The VID is encoded in a 12-bit field. #### Priority Code Point This specification IEEE 802.1Q defines also the Priority Code Point (PCP) parameter mentioned in the PubSub Ethernet mapping specification. The priority is encoded in the PCP field of the VLAN tag. Priority Code Point (PCP) by design is a means of classifying and managing network traffic and of providing quality of service (QoS). The PCP value defines 8 priority levels. The specification 802.1Q states that for each Port, the Priority Code Point Encoding Table has 16 entries, corresponding to each of the possible combinations of the eight possible values of priority (0 through 7) with the two possible values of drop_eligible (True or False). For each Port, the Priority Code Point Decoding Table has 8 entries, corresponding to each of the possible PCP values. It is worth stressing that the above concepts are not defined in the context of Ethernet but have more general applicability. #### Time Sensitive Network The Time Sensitive Network (TSN) concept is not mentioned within the PubSub specification but it is very popular keyword to point out a strategy of further development of the OPC UA targeting real-time field level communications. By design, the EEE 802.1 Time-Sensitive Networking (TSN) makes it possible to carry data traffic over a bridged Ethernet network shared by various kinds of applications having different Quality of Service (QoS) requirements. The traffic may be classified as the - time constrained - where the communication delays contribute to the distributed application time constraints - best effort - where the communication time relationship is not critical for the distributed application The expectation is that the TSN provides guaranteed data transport with bounded low latency, low delay variation, and extremely low data loss. The [Time-Sensitive Networking (TSN) Task Group (TG)](https://1.ieee802.org/tsn/) is a part of the IEEE 802.1 Working Group (WG). The mission of the TSN TG is to provide deterministic services through IEEE 802 networks, i.e., - guaranteed packet transport with bounded latency - low packet delay variation, and low packet loss Base standards for TSN: - IEEE Std 802.1Q-2018: Bridges and Bridged Networks - IEEE Std 802.1AB-2016: Station and Media Access Control Connectivity Discovery (specifies the Link Layer Discovery Protocol (LLDP)) - IEEE Std 802.1AS-2011: Timing and Synchronization for Time-Sensitive Applications in Bridged Local Area Networks - IEEE Std 802.1AX-2014: Link Aggregation - IEEE Std 802.1BA-2011: Audio Video Bridging (AVB) Systems - IEEE Std 802.1CB-2017: Frame Replication and Elimination for Reliability - IEEE Std 802.1CM-2018: Time-Sensitive Networking for Fronthaul > **Note 3**: In computer science, the real-time application describes hardware and software systems subject to a real-time constraint. Real-time programs must guarantee the expected time relationships between the selected events and outcomes of the data processing process. In other words, deploying the real-time application, time must be considered as an important factor affecting the application correctness. Conversely, increasing processing or communication speed is not always required for the real-time application correctness. A very good example is Voice over IP where very hard time constraints required to correctly replay the sound can be met using nondeterministic communication over the Internet. Another example where we have time constraints but the overall speed of processing engine is usually irrelevant is any thermal process. #### Medium Access Control The MAC sublayer performs the functions necessary to provide frame-based, connectionless-modeᅠ(datagram style) data transfer between stations in support of the next higher sublayer. One of the functions provided by this sublayer is addressing. The IEEE 802 defines a concept of universal addressing that is based on the idea that all potential members of a network need to have a unique identifier. The advantage of a universal address is that a station with such a MAC address can be attached to any IEEE 802 network in the world with an assurance that the MAC address is unique. The term MAC address is used to refer to a 48-bit or 64-bit number that is used to identify the source and destination MAC entities. A universal address is a MAC address that is globally unique. If interoperability through bridges is required, then 48-bit MAC addressing is required. The selected address bit (called I/G bit) of the MAC address is used to identify the destination MAC address as an individual MAC address or a group MAC address. Unfortunately, the PubSub specification doesn't define mapping related to addressing and especially related to supporting point-to-multipoint architecture required to promote reusability of the same data published by one **PubSub Application** and consumed by many others. #### Ethernet Ethernet is defined in the [IEEE 802][802] as a communication protocol specified by [802.3-2018 - IEEE Standard for Ethernet][8023]. The IEEE Std 802.3-2018 is composed of the documents defining a variety of protocols for Local and Metropolitan Area Networks (LANs and MANs), employing CSMA/CD as the shared media access method and the IEEE 802.3 (Ethernet) protocol and frame format for data communication. This international standard is intended to encompass a variety of media types and techniques for a variety of MAC data rates. The Carrier Sense Multiple Access with Collision Detection (CSMA/CD) MAC protocol specifies shared medium (half duplex) operation, as well as full duplex operation. Speed specific Media Independent Interfaces (MIIs) provide an architectural and optional implementation interface to selected Physical Layer entities (PHY). The Physical Layer encodes frames for transmission and decodes received frames with the modulation specified for the speed of operation, transmission medium and supported link length. A companion document IEEE Std 802.3.1 describes Ethernet management information base (MIB) modules for use with the Simple Network Management Protocol (SNMP). IEEE Std 802.3.1 is updated to add management capability for enhancements to IEEE Std 802.3. It must be assumed that the IEEE Std 802.3 will continue to evolve. A more detailed description of this protocols family is irrelevant for further discussion. To get more information visit the specification document [IEEE 802.3][8023]. ### OPC UA PubSub By design the [OPC.UA.PubSub][OPC.UA.PubSub] should offer the publish/subscribe communication pattern as an option to client-server pattern. The detailed description of the [OPC UA PubSub][OPC.UA.PubSub] has been covered by the section [OPC Unified Architecture Part 14: PubSub Main Technology Features][README.PubSubMTF]. Among others, the specification recognizes the following actors as the communication parties: - `Publisher`: is the actor that pushes `NetworkMessage` structures to the local area network - Ethernet protocol data unit in this case - `Subscriber`: is the actor that consumes data encapsulated by the `NetworkMessage` structure, which is polled from the local area network - Ethernet protocol data unit in this case According to the specification the `Publisher` and `Subscriber` don't have any subscriptions management functionality, namely, they follow a communication paradigm called unsolicited notification. When unsolicited notification occurs, a client may receive a message that it has never requested. The `Subscriber` must use a filtering mechanism to process only messages it is interested in. Lack of subscriptions management functionality defined by the [OPC.UA.PubSub][OPC.UA.PubSub] are not mitigated by applying the Ethernet Mapping defined in the specification. ## Ethernet Mapping According to the OPC UA over `Ethernet` mapping uses EtherType **`B62C`** that is used to transport UADP `NetworkMessages` directly as payload of the Ethernet frame without IP or UDP headers. To properly format the Ethernet frame the following parameters must be defined somehow: - **MAC address** - media access control address (MAC address) is a unique on the local area network (broadcast domain) identifier assigned to a network interface controller (NIC) - **VLAN ID** - a number identifying the VLAN - **Priority Code Point** - is a means of classifying and managing network traffic and of providing quality of service (QoS) in modern Layer 2 Ethernet networks. The specification propose the following syntax to represent address information of the `Ethernet` transport protocol `opc.eth://[:[.PCP]]` where: - `host`- The host is a MAC address, an IP address or a registered name like a host name - `VID` - is the VLAN ID as number. - `PCP` - is the Priority Code Point as one digit number. The format of a MAC address is six groups of hexadecimal digits, separated by hyphens (e.g. 01-23-45-67-89-ab). An application may also accept host names and/or IP addresses if it provides means to resolve it to a MAC address (e.g. DNS and Reverse-ARP). > **NOTE 4**: the above mentioned addressing parameters are not mapped to any of the PubSub `NetworkMessage` parameters. In other word there is no semantic relationship with the OPC UA and, therefore, the parameters must be provided separately by the application configuration. According to this mapping, the `UADP NetworkMessage` structures are transparently transported as the payload of the Ethernet frame. For OPC UA Ethernet the MaxNetworkMessageSize plus additional headers shall be limited to an Ethernet frame size of 1522 Bytes. > **NOTE #5**: some definitions of parameters duplicate definition in independent normative standards. To avoid conflicts these definitions must be recognized as redundant and removed from the Part 14 document. ## Conclusion - OPC UA and Ethernet are unrelated, i.e. there is no semantic relationship between both - OPC UA Pub/Sub is recognized as an Internet technology, but the Ethernet mapping only makes sense for a VLAN constrained broadcast domain (local network segment) - OPC UA PubSub over the TSN is a misleading term because each protocol can be transported over this particular Ethernet dialect - Time Sensitive Network doesn’t mean real-time – simplifying it means no jitter (it improves deterministic communication) - The proposed mappings are not compliant with the [IEEE 802][802] specification because the mentioned services are defined in the layer that is located above the Ethernet and applies to Bridged Networks in general ## See also - [OPC Unified Architecture Specification Part 14: PubSub Release 1.04 February 06, 2018][OPC.UA.PubSub] - [IEEE Standard for Local and Metropolitan Area Networks: Overview and Architecture," in IEEE Std 802-2014, 2014; doi: 10.1109/IEEESTD.2014.6847097][802] - [802.1Q-2018 - IEEE Standard for Local and Metropolitan Area Network--Bridges and Bridged Networks][8021Q] - [802.3-2018 - IEEE Standard for Ethernet][8023] - [OPC Unified Architecture Part 14: PubSub Main Technology Features][README.PubSubMTF] - [IEEE 802.3 ETHERNET WORKING GROUP][Ethernet] - [Registration Authority - Ethertype][IEEERA] - [IEEE 802 Numbers][802Numbers] - [J. Farkas, L. L. Bello and C. Gunther, "Time-Sensitive Networking Standards," in IEEE Communications Standards Magazine, vol. 2, no. 2, pp. 20-21, JUNE 2018. doi: 10.1109/MCOMSTD.2018.8412457][TSNStandards] [TSNStandards]: http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=8412457&isnumber=8412445 [8021Q]:https://ieeexplore.ieee.org/servlet/opac?punumber=8686437 [8023]: https://ieeexplore.ieee.org/document/8457469 [802Numbers]: https://www.iana.org/assignments/ieee-802-numbers/ieee-802-numbers.xhtml [IEEERA]:http://standards.ieee.org/develop/regauth/ethertype/ [Ethernet]:http://www.ieee802.org/3/ [README.PubSubMTF]:README.PubSubMTF.md [OPC.UA.PubSub]:https://opcfoundation.org/developer-tools/specifications-unified-architecture/part-14-pubsub/ [802]: https://ieeexplore.ieee.org/servlet/opac?punumber=6847095 ================================================ FILE: Networking/SemanticData/README_MQTTMapping.md ================================================ # Underlying Transport over MQTT ## Motivation The main goal of this document is to provide instruction on how to expand the transport layer for OOI Networking of the `Semantic-Data` over the Message Queue Telemetry Transport \([MQTT][MQTT]\) to be compliant with the specifications mentioned in the section *Normative references*. Implementation of the `Messages` exchange over the MQTT protocol is out of the scope of this project. The library intentionally is designed to use any transport protocol meeting some basic requirements using external components. External components implementing MQTT connectivity can be seamlessly integrated with this SDK using dependency injection concept illustrated by the following domain model: ![Figure 1 Domain Model](../../CommonResources/Media/DataManagementExternalLibraries.png) Instruction for implementer is covered in the section *Notices for Implementer*. ## Normative references The following documents, in whole or in part, are normatively referenced in this document and are indispensable for its application. - [ISO/IEC 20922:2016: Message Queuing Telemetry Transport (MQTT) v3.1.1][ISO.MQTT] - [OPC Unified Architecture Specification Part 14: PubSub Release 1.04 February 06, 2018][OPC.UA.PubSub] ## Introduction ### MQTT The Message Queue Telemetry Transport \([MQTT][MQTT]\) is an open standard application layer protocol. It is a `Client`/`Server` publish/subscribe messaging transport protocol. The protocol runs over TCP/IP, [WebSocket](http://www.ietf.org/rfc/rfc6455.txt) or over other network protocols that provide ordered, lossless, bi-directional connections. According to the specification its features include: - Use of the publish/subscribe message pattern which provides one-to-many message distribution and decoupling of applications. - A messaging transport that is agnostic to the content of the payload. - A small transport overhead and protocol exchanges minimized to reduce network traffic. - A mechanism to notify interested parties when an abnormal disconnection occurs. The [MQTT][MQTT] protocol defines a binary protocol used to send and receive `Application Message`. The `Application Message` is the data carried by the protocol across the network for the application. When `Application Messages` are transported they have an associated `Quality of Service` (`QoS`) and a `Topic Name`. `Topic Name` is the label attached to an `Application Message` which is matched against the `Subscriptions` known to the `Server`. The `Server` sends a copy of the `Application Message` to each Client that has a matching `Subscription`. `Server` (called also a broker) acts as an intermediary between `Clients` which publish `Application Messages` and `Clients` which have made `Subscriptions`. The `Server`: - Accepts `Network Connections` from `Clients`. - Accepts `Application Messages` published by `Clients`. - Processes subscribe and unsubscribe requests from `Clients`. - Forwards `Application Messages` that match `Client` `Subscriptions`. A `Server` may persist `Application Messages` so they can be delivered even if the `Subscriber` is not online. `Client` establishes the `Network Connection` to the `Server`. It can: - Publish `Application Messages` that other `Clients` might be interested in. - Create `Subscription` to request `Application Messages` that it is interested in receiving. - Unsubscribe (dispose of `Subscription`) to remove a request for `Application Messages`. - Disconnect from the `Server`. A `Subscription` comprises a `Topic Filter` and a maximum `QoS`. A `Subscription` is associated with a single `Session`. A `Session` can contain more than one `Subscription`. Each `Subscription` within a `Session` has a different `Topic Filter`. `Topic Filter` is an expression contained in a `Subscription`, to indicate an interest in one or more topics. A `Topic Filter` can include wildcard characters. The session is a stateful interaction between a `Client` and a `Server`. Some `Sessions` last only as long as the `Network Connection`, others can span multiple consecutive `Network Connections` between a `Client` and a `Server`. The interaction between the `Client` and `Server` is controlled using `Control Packet`. The `Control Packet` is a packet of data that is sent across the `Network Connection`. The specification defines fourteen different types of `Control Packet`, one of which (the PUBLISH packet) is used to convey `Application Messages`. The [MQTT][MQTT] defines three `Quality of Service` (`QoS`) levels for `Application Messages` delivery: - "At most once", where messages are delivered according to the best efforts of the operating environment. Message loss can occur. This level could be used, for example, with ambient sensor data where it does not matter if an individual reading is lost as the next one will be published soon after. - "At least once", where messages are assured to arrive but duplicates can occur. - "Exactly once", where message are assured to arrive exactly once. This level could be used, for example, with billing systems where duplicate or lost messages could lead to incorrect charges being applied. The connection has `Keep Alive` attribute. It is a time interval measured in seconds and expressed as a 16-bit word. It is the maximum time interval that is permitted to elapse between the point in time at which the Client finishes transmitting one `Control Packet` and the point it starts sending the next. It is the responsibility of the `Client` to ensure that the interval between `Control Packets` being sent does not exceed the `Keep Alive` value. The specification introduces a concept of topic levels. The topic level separator is used to introduce structure into the `Topic Name`. If present, it divides the `Topic Name` into multiple topic levels. A `Subscription’s` `Topic Filter` can contain special wildcard characters, which allow `Client` to subscribe to multiple topics at once. ### OPC UA PubSub The [OPC.UA.PubSub][OPC.UA.PubSub] offers the publish/subscribe communication pattern as an option to client-server pattern and is a consistent part of the OPC UA specifications suit. The detailed description of the [OPC.UA.PubSub][OPC.UA.PubSub] has been covered by the document [OPC Unified Architecture Part 14: PubSub Main Technology Features][README.PubSubMTF]. The specification defines the following actors: - `Publisher`: is the actor that pushes `NetworkMessage` structures to an underlying transport layer. - `Subscriber`: is the actor that consumes data encapsulated by the `NetworkMessage` structure, which is polled from the underlying transport layer. According to the specification the `Publisher` and `Subscriber` don't have any subscriptions management functionality, namely, they follow a communication paradigm called unsolicited notification. When unsolicited notification occurs, a client receives a message that it has never requested. The `Subscriber` must use a filtering mechanism to process only messages it is interested in. Lack of subscriptions management functionality defined by the [OPC.UA.PubSub][OPC.UA.PubSub] could be mitigated by applying the [MQTT][MQTT] that some functionality related to communication reliability, data selection, and distribution is delegated to the `Server`. ## MQTT mapping ### `Application Message` encoding The [OPC.UA.PubSub][OPC.UA.PubSub] specification defines two possible encodings for the `Application Messages`: - Binary - JSON [MQTT][MQTT] does not provide a mechanism for specifying the encoding of the `Application Message` which means the [OPC.UA.PubSub][OPC.UA.PubSub] `Subscriber` entities shall be configured in advance with knowledge of the expected encoding. `Publisher` entities should only publish `NetworkMessages` using a single encoding to a unique MQTT `Topic Name`. The messages sent through MQTT are limited to one per `Application Message`. It is expected that the software used to receive the message can process it without needing to know that it was transported via MQTT instead of UDP for example. If the encoded MQTT message size exceeds the `Server` limits it should be broken into multiple chunks as described in the [OPC.UA.PubSub][OPC.UA.PubSub] Specification. It is recommended that the MetaDataQueueName as described in [OPC.UA.PubSub][OPC.UA.PubSub] is configured as a sub-topic of the related `QueueName` with the name `$Metadata`. The MQTT RETAIN flag shall be set for metadata messages. The implementation choses packet and message size limits depending on the capabilities of the operating system or the capabilities of the device the application is running on. They can be made configurable through configuration model extensions or by other means. ### Security Security with MQTT is primarily provided by a TLS connection between the `Client` and the `Server`, however, this requires that the `Server` must be trusted. For that reason, it may be necessary to provide end-to-end security. Applications that require end-to-end security with MQTT need to use the binary message encoding and apply security protection defined in the [OPC.UA.PubSub][OPC.UA.PubSub] specification. ### Addressing The syntax of the MQTT transporting protocol URL used has the following form: `mqtts://[:][/]` The default port is 8883. The syntax for an MQTT URL over Web Sockets has the following form: `wss://[:][/]` The default port is 443. ### `Keep Alive` If the `KeepAliveTime` is set on a `WriterGroup`, a value slightly higher than the configured value of the group in seconds should be set as MQTT `Keep Alive` ensuring that the connection is disconnected if the keep alive message was not sent by any writer in the specified time. ### `Quality of Service` The `BrokerTransportQualityOfService` values map to MQTT `Quality of Service` settings as follows: - AtMostOnce_1 is mapped to MQTT QoS 0. - AtLeastOnce_2 is mapped to MQTT QoS 1. - ExactlyOnce_3 is mapped to MQTT Qos 2. ## Notices for Implementer In the article [Reactive Networking of Semantic-Data Library](README.MD) the section *Message Transport* contains description covering instruction for the external MQTT handling components. An example how to implement the Transport layer over the UDP protocol is illustrated by the project [UA Data Example Application](../ReferenceApplication/README.MD). This application uses two implementations of the `IMessageHandlerFactory`: - `ConsumerMessageHandlerFactory` - to create communication infrastructure for the consumer role - `ProducerMessageHandlerFactory` - to create communication infrastructure for the producer role It has been implements by the following classes providing the required interfaces: - `BinaryUDPPackageReader` - implements `IMessageReader` inheriting from `BinaryDecoder` - `BinaryUDPPackageWriter` - implements `IMessageWriter` inheriting from `BinaryEncoder` ## See also - [ISO/IEC 20922:2016: Message Queuing Telemetry Transport (MQTT) v3.1.1][ISO.MQTT] [MQTT]:http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/mqtt-v3.1.1.html [ISO.MQTT]: https://www.iso.org/standard/69466.html [OPC.UA.PubSub]:https://opcfoundation.org/developer-tools/specifications-unified-architecture/part-14-pubsub/ [OPC.UA.Profiles]:https://opcfoundation.org/developer-tools/specifications-unified-architecture/part-7-profiles/ [README.PubSubMTF]:README.PubSubMTF.md ================================================ FILE: Networking/SemanticData/app.config ================================================  ================================================ FILE: Networking/Simulator.Boiler/AddressSpace/BaseDataVariableState.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2018, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System; using UAOOI.SemanticData.UANodeSetValidation.DataSerialization; namespace UAOOI.Networking.Simulator.Boiler.AddressSpace { public abstract class BaseDataVariableState : BaseVariableState { [Obsolete("This constructor is provided only to make auto-generated code error free")] public BaseDataVariableState(NodeState parent) : base(parent) { } public BaseDataVariableState(NodeState parent, QualifiedName browseName) : base(parent, browseName) { } } } ================================================ FILE: Networking/Simulator.Boiler/AddressSpace/BaseInstanceState.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2021, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System; using System.Collections.Generic; using UAOOI.SemanticData.UANodeSetValidation; using UAOOI.SemanticData.UANodeSetValidation.DataSerialization; namespace UAOOI.Networking.Simulator.Boiler.AddressSpace { /// /// Used to receive notifications when a non-value attribute is read or written. /// public delegate void NodeStateChangedHandler(ISystemContext context, NodeState node, NodeStateChangeMasks changes); /// /// Class BaseInstanceState. /// /// public class BaseInstanceState : NodeState { /// /// Initializes the instance with its default attribute values. /// protected BaseInstanceState(NodeState parent, NodeClass nodeClass, QualifiedName browseName) : base(nodeClass, browseName) { if (parent == null) return; Parent = (BaseInstanceState)parent; Parent.AddChild(this); } [Obsolete()] public BaseInstanceState(NodeState parent) : base(parent) { } /// /// The parent node. /// public BaseInstanceState Parent { get; internal set; } /// /// Returns the id of the default type definition node for the instance. /// /// The namespace uris. /// protected virtual NodeId GetDefaultTypeDefinitionId(NamespaceTable namespaceUris) { return null; } /// /// Finds the child with the specified browse path. /// /// The context to use. /// The browse path. /// The current position in the browse path. /// The target if found. Null otherwise. public virtual BaseInstanceState FindChild(ISystemContext context, IList browsePath, int index) { if (index < 0 || index >= int.MaxValue) throw new ArgumentOutOfRangeException("index"); BaseInstanceState instance = FindChild(context, browsePath[index], false, null); if (instance != null) { if (browsePath.Count == index + 1) return instance; return instance.FindChild(context, browsePath, index + 1); } return null; } /// /// Finds the child with the specified browse name. /// /// The context for the system being accessed. /// The browse name of the children to add. /// if set to true and the child could exist then the child is created. /// The replacement to use if createOrReplace is true. /// The child. protected virtual BaseInstanceState FindChild(ISystemContext context, QualifiedName browseName, bool createOrReplace, BaseInstanceState replacement) { if (QualifiedName.IsNull(browseName)) return null; for (int ii = 0; ii < m_children.Count; ii++) { BaseInstanceState child = m_children[ii]; if (browseName == child.BrowseName) { if (createOrReplace && replacement != null) m_children[ii] = child = replacement; return child; } } if (createOrReplace) { if (replacement != null) AddChild(replacement); } return null; } /// /// Populates a list with the children that belong to the node. /// /// The context for the system being accessed. /// The list of children to populate. /// This method is added to avoid compiler errors only [Obsolete("This method is added to avoid compiler errors only and will cause NotImplementedException")] public virtual void GetChildren(ISystemContext context, IList children) { throw new NotImplementedException("This method is added to avoid compiler errors only"); } /// /// Populates a list with the children that belong to the node. /// /// The list of children to populate. public void GetChildren(IList children) { for (int ii = 0; ii < m_children.Count; ii++) children.Add(m_children[ii]); } /// /// Clears the change masks. /// /// The context that describes how access the system containing the data.. /// if set to true clear masks recursively for all children.. public void ClearChangeMasks(ISystemContext context, bool includeChildren) { if (includeChildren) { List children = new List(); GetChildren(children); for (int ii = 0; ii < children.Count; ii++) children[ii].ClearChangeMasks(context, true); } if (ChangeMasks == NodeStateChangeMasks.None) return; OnStateChanged?.Invoke(context, this, ChangeMasks); ChangeMasks = NodeStateChangeMasks.None; } /// /// Called when ClearChangeMasks is called and the ChangeMask is not None. /// public event NodeStateChangedHandler OnStateChanged; /// /// Adds a child to the node. /// internal void AddChild(BaseInstanceState child) { m_children.Add(child); ChangeMasks |= NodeStateChangeMasks.Children; } internal void RegisterVariable(IReadOnlyList hasComponentPath, Action register) { List _hasComponentPathAndMe = new List(hasComponentPath) { this }; CallRegister(_hasComponentPathAndMe, register); List _myComponents = new List(); GetChildren(_myComponents); for (int ii = 0; ii < _myComponents.Count; ii++) { if (_myComponents[ii] == this) throw new ArgumentOutOfRangeException("Redundant browse path"); _myComponents[ii].RegisterVariable(_hasComponentPathAndMe, register); } } protected virtual void CallRegister(List hasComponentPathAndMe, Action register) { } private List m_children = new List(); } } ================================================ FILE: Networking/Simulator.Boiler/AddressSpace/BaseObjectState.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2018, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System; using UAOOI.SemanticData.UANodeSetValidation.DataSerialization; namespace UAOOI.Networking.Simulator.Boiler.AddressSpace { public class BaseObjectState : BaseInstanceState { [Obsolete("This constructor is provided only to make auto-generated code error free")] public BaseObjectState(NodeState parent) : base(parent) { } public BaseObjectState(NodeState parent, QualifiedName browseName) : base(parent, NodeClass.Object_1, browseName) { } } } ================================================ FILE: Networking/Simulator.Boiler/AddressSpace/BaseVariableState.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2018, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System; using System.Collections.Generic; using System.Linq; using UAOOI.Configuration.Networking.Serialization; using UAOOI.SemanticData.UANodeSetValidation.DataSerialization; namespace UAOOI.Networking.Simulator.Boiler.AddressSpace { /// /// Class BaseVariableState - represents BaseVariableTypes in the UA AddressSpace /// /// public abstract class BaseVariableState : BaseInstanceState, IVariable { /// /// Initializes a new instance of the class. /// /// The parent. /// Name of the browse. public BaseVariableState(NodeState parent, QualifiedName browseName) : base(parent, NodeClass.Variable_2, browseName) { } /// /// Gets the value of the variable. /// /// The value. public object Value { get { return m_value; } set { if (!Object.ReferenceEquals(m_value, value)) ChangeMasks |= NodeStateChangeMasks.Value; m_value = value; } } /// /// Gets the type of the value. /// /// The type of the data returned by the Value property. public UATypeInfo ValueType => GetValueType(); [Obsolete("This constructor is provided only to make auto-generated code error free")] protected BaseVariableState(NodeState parent) : base(parent) { } protected override void CallRegister(List hasComponentPathAndMe, Action register) { base.CallRegister(hasComponentPathAndMe, register); string[] _browsePath = hasComponentPathAndMe.Select(x => x.BrowseName.Name).ToArray(); register(this, _browsePath); } /// /// Gets the type of the value. /// /// Type. protected abstract UATypeInfo GetValueType(); private object m_value; } } ================================================ FILE: Networking/Simulator.Boiler/AddressSpace/FolderState.cs ================================================  using System; using UAOOI.SemanticData.UANodeSetValidation.DataSerialization; namespace UAOOI.Networking.Simulator.Boiler.AddressSpace { public class FolderState : BaseObjectState { [Obsolete("This constructor is provided only to make auto-generated code error free")] public FolderState(NodeState parent) : base(parent) { } public FolderState(NodeState parent, QualifiedName browseName) : base(parent, browseName) { } } } ================================================ FILE: Networking/Simulator.Boiler/AddressSpace/ISemanticDataSetSource.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2018, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System.Collections.Generic; namespace UAOOI.Networking.Simulator.Boiler.AddressSpace { /// /// Interface ISemanticDataSetSource - exposes the enumerator of a set of variables representing the semantic data source. Each data entity is represented as the instance. /// public interface ISemanticDataSetSource: IEnumerable> { /// /// Gets the name of the semantic data set. /// /// The name of the semantic data set. string SemanticDataSetRootBrowseName { get; } /// /// Gets the with the specified key. /// /// The browse path of the to get. /// /// The value associated with the specified key. If the specified key is not found, a get operation throws a . /// /// is null. /// The does not exist in the collection. IVariable this[string[] key] { get; } /// /// Gets the keys in an instance of the . /// /// An instance of the containing the keys. IEnumerable Keys { get; } /// /// Gets the count of items in this set. /// /// The number of items in the set. int Count { get; } /// /// Determines whether this set contains key. /// /// The key. /// true if this set contains key; otherwise, false. bool ContainsKey(string key); } } ================================================ FILE: Networking/Simulator.Boiler/AddressSpace/ISemanticDataSource.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2018, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System; namespace UAOOI.Networking.Simulator.Boiler.AddressSpace { /// /// Interface ISemanticDataSource - exposes the enumerator of the application semantic data source. Each data source entity in this sequence is represented as the instance and /// identified using two strings representing the following symbolic names: /// - Semantic DataSet Root Browse Path. /// - Variable Relative Browse Path /// /// public interface ISemanticDataSource : IDisposable { /// /// Gets the semantic data set sources. /// /// The delegates used to inverse of the control and register the data source by the the caller. void GetSemanticDataSources(RegisterSemanticData registerSemanticData); } /// /// Delegate RegisterSemanticData /// /// The semantic data set root browse path. /// The variable relative browse path. /// The variable - data source. public delegate void RegisterSemanticData(string semanticDataSetRootBrowsePath, string variableRelativeBrowsePath, IVariable variable); } ================================================ FILE: Networking/Simulator.Boiler/AddressSpace/ISystemContext.cs ================================================  namespace UAOOI.Networking.Simulator.Boiler.AddressSpace { public interface ISystemContext { } } ================================================ FILE: Networking/Simulator.Boiler/AddressSpace/IVariable.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2018, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using UAOOI.Configuration.Networking.Serialization; namespace UAOOI.Networking.Simulator.Boiler.AddressSpace { public interface IVariable { /// /// Gets the value of the variable. /// /// The value. object Value { get; } /// /// Called when ClearChangeMasks is called and the ChangeMask is not None. /// event NodeStateChangedHandler OnStateChanged; /// /// Gets the type of the value. /// /// The type of the data returned by the Value property. UATypeInfo ValueType { get; } } } ================================================ FILE: Networking/Simulator.Boiler/AddressSpace/ModelExtensions.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2018, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System; using UAOOI.Configuration.Networking.Serialization; using UAOOI.SemanticData.UANodeSetValidation.DataSerialization; namespace UAOOI.Networking.Simulator.Boiler.AddressSpace { /// /// helper functions. /// internal static class ModelExtensions { /// /// Initializes the object with the high and low limits. /// internal static Range CreateRange(double high, double low) { Tuple _value = CreateValue(high, low); Range _ret = new Range() { Low = _value.Item1, High = _value.Item2, }; return _ret; } /// /// Returns the difference between high and low of the . /// internal static double Magnitude(this Range value) { return Math.Abs(value.High - value.Low); } internal static UATypeInfo GetUATypeInfo(this Type code) { switch (Type.GetTypeCode(code)) { case TypeCode.Boolean: return new UATypeInfo(BuiltInType.Boolean); case TypeCode.SByte: return new UATypeInfo(BuiltInType.SByte); case TypeCode.Byte: return new UATypeInfo(BuiltInType.Byte); case TypeCode.Int16: return new UATypeInfo(BuiltInType.Int16); case TypeCode.UInt16: return new UATypeInfo(BuiltInType.UInt16); case TypeCode.Int32: return new UATypeInfo(BuiltInType.Int32); case TypeCode.UInt32: return new UATypeInfo(BuiltInType.UInt32); case TypeCode.Int64: return new UATypeInfo(BuiltInType.Int64); case TypeCode.UInt64: return new UATypeInfo(BuiltInType.UInt64); case TypeCode.Single: return new UATypeInfo(BuiltInType.Float); case TypeCode.Double: return new UATypeInfo(BuiltInType.Double); case TypeCode.DateTime: return new UATypeInfo(BuiltInType.DateTime); case TypeCode.String: return new UATypeInfo(BuiltInType.String); default: return new UATypeInfo(BuiltInType.Null); //throw new ArgumentOutOfRangeException(nameof(code), $"Cannot convert system type {code} to {nameof(UATypeInfo)}"); } } internal static bool IsEqual(this UATypeInfo me, UATypeInfo other) { return (me.BuiltInType == other.BuiltInType) && (me.ValueRank == other.ValueRank) && (me.ArrayDimensions == other.ArrayDimensions); } private static Tuple CreateValue(double high, double low) { return high > low ? Tuple.Create(low, high) : Tuple.Create(high, low); } } } ================================================ FILE: Networking/Simulator.Boiler/AddressSpace/NodeState.cs ================================================  using System; using UAOOI.SemanticData.UANodeSetValidation.DataSerialization; namespace UAOOI.Networking.Simulator.Boiler.AddressSpace { public class NodeState : IDisposable { #region constructors /// /// Creates an empty object. /// /// The node class. protected NodeState(NodeClass nodeClass, QualifiedName browseName) { NodeClass = nodeClass; m_browseName = browseName; } [Obsolete("This constructor is provided only to make auto-generated code error free")] public NodeState(NodeState parent) { throw new NotImplementedException("Autogenerated constructor cannot be used."); } #endregion /// /// The browse name of the node. /// /// The name qualified with a namespace. internal QualifiedName BrowseName { get { return m_browseName; } set { if (!Object.ReferenceEquals(m_browseName, value)) { ChangeMasks |= NodeStateChangeMasks.NonValue; } m_browseName = value; } } internal protected NodeStateChangeMasks ChangeMasks { get; protected set; } internal NodeClass NodeClass { get; private set; } #region IDisposable Support private bool disposedValue = false; // To detect redundant calls protected virtual void Dispose(bool disposing) { if (!disposedValue) { if (disposing) { // TODO: dispose managed state (managed objects). } // TODO: free unmanaged resources (unmanaged objects) and override a finalizer below. // TODO: set large fields to null. disposedValue = true; } } // This code added to correctly implement the disposable pattern. public void Dispose() { // Do not change this code. Put cleanup code in Dispose(bool disposing) above. Dispose(true); } #endregion #region private private QualifiedName m_browseName; #endregion } /// /// Indicates what has changed in a node. /// public enum NodeStateChangeMasks { /// /// None has changed /// None = 0x00, /// /// One or more children have been added, removed or replaced. /// Children = 0x01, /// /// One or more references have been added or removed. /// References = 0x02, /// /// The value attribute has changed. /// Value = 0x04, /// /// One or more non-value attribute has changed. /// NonValue = 0x08, /// /// The node has been deleted. /// Deleted = 0x10 } } ================================================ FILE: Networking/Simulator.Boiler/AddressSpace/OOI.Opc.Ua.Classes.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2018, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System; using UAOOI.Configuration.Networking.Serialization; using UAOOI.SemanticData.UANodeSetValidation.DataSerialization; namespace UAOOI.Networking.Simulator.Boiler.AddressSpace { public abstract partial class DataItemState : BaseDataVariableState { [Obsolete("This constructor is provided only to make auto-generated code error free")] public DataItemState(NodeState parent) : base(parent) { } public DataItemState(NodeState parent, QualifiedName browseName) : base(parent, browseName) { } } public abstract class AnalogItemState : DataItemState { public AnalogItemState(NodeState parent, QualifiedName browseName) : base(parent, browseName) { } [Obsolete("This constructor is provided only to make auto-generated code error free")] public AnalogItemState(NodeState parent) : base(parent) { } /// /// Gets or sets the engineering unit range. /// /// The eu range. public PropertyState EURange { get { return m_eURange; } set { if (!Object.ReferenceEquals(m_eURange, value)) ChangeMasks |= NodeStateChangeMasks.Children; m_eURange = value; } } private PropertyState m_eURange; } public class AnalogItemState : AnalogItemState { #region Constructors public AnalogItemState(NodeState parent) : this(parent, "AnalogItemState", ModelExtensions.CreateRange(1, 0)) { } /// /// Initializes the instance with its default attribute values. /// public AnalogItemState(NodeState parent, QualifiedName browseName, Range range, type value = default(type)) : base(parent, browseName) { this.EURange = new PropertyState(this, nameof(EURange)); this.EURange.Value = range; this.Value = value; } #endregion #region Public Members /// /// The value of the variable. /// public new type Value { get { return (type)base.Value; } set { base.Value = value; } } #endregion /// /// Gets the type of the value. /// /// Type. protected override UATypeInfo GetValueType() { return typeof(type).GetUATypeInfo(); } } public class StateMachineState : BaseObjectState { [Obsolete("This constructor is provided only to make auto-generated code error free")] public StateMachineState(NodeState parent) : base(parent) { } public StateMachineState(NodeState parent, QualifiedName browseName) : base(parent, browseName) { } } public class FiniteStateMachineState : StateMachineState { [Obsolete("This constructor is provided only to make auto-generated code error free")] public FiniteStateMachineState(NodeState parent) : base(parent) { } public FiniteStateMachineState(NodeState parent, QualifiedName browseName) : base(parent, browseName) { } } public class ProgramStateMachineState : FiniteStateMachineState { [Obsolete("This constructor is provided only to make auto-generated code error free")] public ProgramStateMachineState(NodeState parent) : base(parent) { } public ProgramStateMachineState(NodeState parent, QualifiedName browseName) : base(parent, browseName) { } } } ================================================ FILE: Networking/Simulator.Boiler/AddressSpace/PropertyState.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2018, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System; using UAOOI.Configuration.Networking.Serialization; using UAOOI.SemanticData.UANodeSetValidation.DataSerialization; namespace UAOOI.Networking.Simulator.Boiler.AddressSpace { public abstract class PropertyState : BaseVariableState { [Obsolete("This constructor is provided only to make auto-generated code error free")] public PropertyState(NodeState parent) : base(parent) { } public PropertyState(NodeState parent, QualifiedName browseName) : base(parent, browseName) { } } public class PropertyState : PropertyState { [Obsolete("This constructor is provided only to make auto-generated code error free")] public PropertyState(NodeState parent) : base(parent) { } public PropertyState(NodeState parent, QualifiedName browseName, type value = default(type)) : base(parent, browseName) { Value = value; } /// /// The value of the variable. /// public new type Value { get { return (type)base.Value; } set { base.Value = value; } } /// /// Gets the type of the value. /// /// Type. protected override UATypeInfo GetValueType() { return typeof(type).GetUATypeInfo(); } } } ================================================ FILE: Networking/Simulator.Boiler/AddressSpace/SemanticDataSetSource.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) Year of Copyright, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System.Collections; using System.Collections.Generic; namespace UAOOI.Networking.Simulator.Boiler.AddressSpace { /// /// Class SemanticDataSetSource - captures the enumerator of a set of variables representing the semantic data source expressed as the root object of the type. /// Each data entity has to have the parent relationship to the root instance. /// /// public class SemanticDataSetSource : ISemanticDataSetSource { #region constructor /// /// Initializes a new instance of the class. /// /// The parent collecting all variables to be captured by this instance. /// The name of the semantic data set source. public SemanticDataSetSource(BaseInstanceState parent) { SemanticDataSetRootBrowseName = parent.BrowseName.ToString(); List _myComponents = new List(); parent.GetChildren(_myComponents); for (int ii = 0; ii < _myComponents.Count; ii++) { List _hasComponentPath = new List(); _myComponents[ii].RegisterVariable(_hasComponentPath, (x, y) => { if (x is IVariable) m_Variables.Add(string.Join(m_JoiningChar, y), (IVariable)x); }); } } #endregion constructor #region ISemanticDataSetSource public string SemanticDataSetRootBrowseName { get; private set; } public IEnumerable Keys => m_Variables.Keys; public int Count => m_Variables.Count; public IVariable this[string[] key] => m_Variables[string.Join(m_JoiningChar, key)]; /// /// Determines whether this set contains key. /// /// The key. /// true if this set contains key; otherwise, false. /// public bool ContainsKey(string key) { return m_Variables.ContainsKey(key); } /// /// Returns an enumerator that iterates through the collection. /// /// An enumerator that can be used to iterate through the collection. public IEnumerator> GetEnumerator() { return m_Variables.GetEnumerator(); } /// /// Returns an enumerator that iterates through a collection. /// /// An object that can be used to iterate through the collection. IEnumerator IEnumerable.GetEnumerator() { return m_Variables.GetEnumerator(); } #endregion ISemanticDataSetSource //internal void CreateConfiguration // (XmlQualifiedName instanceType, string _associationName, XmlQualifiedName instanceSymbolicName, string fileName, Tuple writerNameDataSetWriterIdPublisherId, ITraceSource _traceSource) //{ // List _lf = new List(); // foreach (KeyValuePair _item in this) // { // if (_item.Value.ValueType.BuiltInType == BuiltInType.Null) // continue; // FieldMetaData _field = new FieldMetaData() // { // ProcessValueName = _item.Key, // SymbolicName = _item.Key, // TypeInformation = _item.Value.ValueType // }; // _lf.Add(_field); // } // DataSetConfiguration _newDataSetConfiguration = new DataSetConfiguration() // { // AssociationName = _associationName, // AssociationRole = AssociationRole.Producer, // ConfigurationGuid = System.Guid.NewGuid(), // ConfigurationVersion = new ConfigurationVersionDataType() { MajorVersion = 1, MinorVersion = 0 }, // Id = System.Guid.NewGuid(), // InformationModelURI = instanceSymbolicName.Namespace, // DataSet = _lf.ToArray(), // DataSymbolicName = _associationName, // MaxBufferTime = 1000, // PublishingInterval = 100, // RepositoryGroup = _associationName, // Root = new NodeDescriptor() // { // BindingDescription = "Binding Description", // DataType = instanceType, // InstanceDeclaration = false, // NodeClass = InstanceNodeClassesEnum.Object, // NodeIdentifier = instanceSymbolicName // } // }; // ConfigurationManagement.AddDataSetConfiguration(_newDataSetConfiguration, writerNameDataSetWriterIdPublisherId, fileName, fileName, _traceSource); //} #region private private const string m_JoiningChar = "_"; private Dictionary m_Variables = new Dictionary(); #endregion private } } ================================================ FILE: Networking/Simulator.Boiler/ConfigurationDataConsumer.BoilersSet.xml ================================================  Consumer BoilersArea_Boiler #1 BoilersArea_Boiler #1 http://commsvr.com/UA/Examples/BoilersSet BoilersArea_Boiler #1 CCX001_ControlOut CCX001_ControlOut Double -1 CCX001_Input1 CCX001_Input1 Double -1 CCX001_Input2 CCX001_Input2 Double -1 CCX001_Input3 CCX001_Input3 Double -1 DrumX001_LIX001_Output DrumX001_LIX001_Output Double -1 FCX001_ControlOut FCX001_ControlOut Double -1 FCX001_Measurement FCX001_Measurement Double -1 FCX001_SetPoint FCX001_SetPoint Double -1 PipeX001_FTX001_Output PipeX001_FTX001_Output Double -1 PipeX001_ValveX001_Input PipeX001_ValveX001_Input Double -1 LCX001_ControlOut LCX001_ControlOut Double -1 LCX001_Measurement LCX001_Measurement Double -1 LCX001_SetPoint LCX001_SetPoint Double -1 PipeX002_FTX002_Output PipeX002_FTX002_Output Double -1 Simulation_UpdateRate Simulation_UpdateRate UInt32 -1 e669df1f-3670-4dd4-9ef6-acb0975bf4f8 Binding Description d5p1:BoilerType d5p1:BoilersArea_BoilerAlpha 100 1000 ec1d3d5b-c988-45da-9b6e-8d7f7d5c6089 1 0 Consumer BoilersArea_Boiler #2 BoilersArea_Boiler #2 http://commsvr.com/UA/Examples/BoilersSet BoilersArea_Boiler #2 CCX001_ControlOut CCX001_ControlOut Double -1 CCX001_Input1 CCX001_Input1 Double -1 CCX001_Input2 CCX001_Input2 Double -1 CCX001_Input3 CCX001_Input3 Double -1 DrumX001_LIX001_Output DrumX001_LIX001_Output Double -1 FCX001_ControlOut FCX001_ControlOut Double -1 FCX001_Measurement FCX001_Measurement Double -1 FCX001_SetPoint FCX001_SetPoint Double -1 PipeX001_FTX001_Output PipeX001_FTX001_Output Double -1 PipeX001_ValveX001_Input PipeX001_ValveX001_Input Double -1 LCX001_ControlOut LCX001_ControlOut Double -1 LCX001_Measurement LCX001_Measurement Double -1 LCX001_SetPoint LCX001_SetPoint Double -1 PipeX002_FTX002_Output PipeX002_FTX002_Output Double -1 Simulation_UpdateRate Simulation_UpdateRate UInt32 -1 1f5c2bba-b5a7-44d2-93fe-b8736470ee54 Binding Description d5p1:BoilerType d5p1:BoilersArea_BoilerBravo 100 1000 33b3a9b8-595c-4dd6-8915-489cd6057b5b 1 0 Consumer BoilersArea_Boiler #3 BoilersArea_Boiler #3 http://commsvr.com/UA/Examples/BoilersSet BoilersArea_Boiler #3 CCX001_ControlOut CCX001_ControlOut Double -1 CCX001_Input1 CCX001_Input1 Double -1 CCX001_Input2 CCX001_Input2 Double -1 CCX001_Input3 CCX001_Input3 Double -1 DrumX001_LIX001_Output DrumX001_LIX001_Output Double -1 FCX001_ControlOut FCX001_ControlOut Double -1 FCX001_Measurement FCX001_Measurement Double -1 FCX001_SetPoint FCX001_SetPoint Double -1 PipeX001_FTX001_Output PipeX001_FTX001_Output Double -1 PipeX001_ValveX001_Input PipeX001_ValveX001_Input Double -1 LCX001_ControlOut LCX001_ControlOut Double -1 LCX001_Measurement LCX001_Measurement Double -1 LCX001_SetPoint LCX001_SetPoint Double -1 PipeX002_FTX002_Output PipeX002_FTX002_Output Double -1 Simulation_UpdateRate Simulation_UpdateRate UInt32 -1 096d553e-c1da-4ca4-9fcc-9d524fa3ca20 Binding Description d5p1:BoilerType d5p1:BoilersArea_BoilerBravo 100 1000 ef63fda7-bb4a-400d-a5e9-517fae8e4ff6 1 0 Consumer BoilersArea_Boiler #4 BoilersArea_Boiler #4 http://commsvr.com/UA/Examples/BoilersSet BoilersArea_Boiler #4 CCX001_ControlOut CCX001_ControlOut Double -1 CCX001_Input1 CCX001_Input1 Double -1 CCX001_Input2 CCX001_Input2 Double -1 CCX001_Input3 CCX001_Input3 Double -1 DrumX001_LIX001_Output DrumX001_LIX001_Output Double -1 FCX001_ControlOut FCX001_ControlOut Double -1 FCX001_Measurement FCX001_Measurement Double -1 FCX001_SetPoint FCX001_SetPoint Double -1 PipeX001_FTX001_Output PipeX001_FTX001_Output Double -1 PipeX001_ValveX001_Input PipeX001_ValveX001_Input Double -1 LCX001_ControlOut LCX001_ControlOut Double -1 LCX001_Measurement LCX001_Measurement Double -1 LCX001_SetPoint LCX001_SetPoint Double -1 PipeX002_FTX002_Output PipeX002_FTX002_Output Double -1 Simulation_UpdateRate Simulation_UpdateRate UInt32 -1 78e83ea4-aa0c-43e3-9449-3f2f195f2844 Binding Description d5p1:BoilerType d5p1:BoilersArea_BoilerBravo 100 1000 3b3273c2-c5bc-468d-9c6b-97c6e2a5042d 1 0 UDP 4840,False,127.0.0.1,True Consumer BoilersArea_Boiler #1 100 d80d81dd-96e6-4560-850e-154f9181307c BoilersArea_Boiler #2 1202 d80d81dd-96e6-4560-850e-154f9181307c BoilersArea_Boiler #3 130 d80d81dd-96e6-4560-850e-154f9181307c BoilersArea_Boiler #4 140 d80d81dd-96e6-4560-850e-154f9181307c VariantFieldEncoding ================================================ FILE: Networking/Simulator.Boiler/ConfigurationDataProducer.BoilersSet.xml ================================================  Producer BoilersArea_Boiler #1 BoilersArea_Boiler #1 http://commsvr.com/UA/Examples/BoilersSet BoilersArea_Boiler #1 CCX001_ControlOut CCX001_ControlOut Double -1 CCX001_Input1 CCX001_Input1 Double -1 CCX001_Input2 CCX001_Input2 Double -1 CCX001_Input3 CCX001_Input3 Double -1 DrumX001_LIX001_Output DrumX001_LIX001_Output Double -1 FCX001_ControlOut FCX001_ControlOut Double -1 FCX001_Measurement FCX001_Measurement Double -1 FCX001_SetPoint FCX001_SetPoint Double -1 PipeX001_FTX001_Output PipeX001_FTX001_Output Double -1 PipeX001_ValveX001_Input PipeX001_ValveX001_Input Double -1 LCX001_ControlOut LCX001_ControlOut Double -1 LCX001_Measurement LCX001_Measurement Double -1 LCX001_SetPoint LCX001_SetPoint Double -1 PipeX002_FTX002_Output PipeX002_FTX002_Output Double -1 Simulation_UpdateRate Simulation_UpdateRate UInt32 -1 e669df1f-3670-4dd4-9ef6-acb0975bf4f8 Binding Description d5p1:BoilerType d5p1:BoilersArea_BoilerAlpha 100 1000 ec1d3d5b-c988-45da-9b6e-8d7f7d5c6089 1 0 Producer BoilersArea_Boiler #2 BoilersArea_Boiler #2 http://commsvr.com/UA/Examples/BoilersSet BoilersArea_Boiler #2 CCX001_ControlOut CCX001_ControlOut Double -1 CCX001_Input1 CCX001_Input1 Double -1 CCX001_Input2 CCX001_Input2 Double -1 CCX001_Input3 CCX001_Input3 Double -1 DrumX001_LIX001_Output DrumX001_LIX001_Output Double -1 FCX001_ControlOut FCX001_ControlOut Double -1 FCX001_Measurement FCX001_Measurement Double -1 FCX001_SetPoint FCX001_SetPoint Double -1 PipeX001_FTX001_Output PipeX001_FTX001_Output Double -1 PipeX001_ValveX001_Input PipeX001_ValveX001_Input Double -1 LCX001_ControlOut LCX001_ControlOut Double -1 LCX001_Measurement LCX001_Measurement Double -1 LCX001_SetPoint LCX001_SetPoint Double -1 PipeX002_FTX002_Output PipeX002_FTX002_Output Double -1 Simulation_UpdateRate Simulation_UpdateRate UInt32 -1 1f5c2bba-b5a7-44d2-93fe-b8736470ee54 Binding Description d5p1:BoilerType d5p1:BoilersArea_BoilerBravo 100 1000 33b3a9b8-595c-4dd6-8915-489cd6057b5b 1 0 Producer BoilersArea_Boiler #3 BoilersArea_Boiler #3 http://commsvr.com/UA/Examples/BoilersSet BoilersArea_Boiler #3 CCX001_ControlOut CCX001_ControlOut Double -1 CCX001_Input1 CCX001_Input1 Double -1 CCX001_Input2 CCX001_Input2 Double -1 CCX001_Input3 CCX001_Input3 Double -1 DrumX001_LIX001_Output DrumX001_LIX001_Output Double -1 FCX001_ControlOut FCX001_ControlOut Double -1 FCX001_Measurement FCX001_Measurement Double -1 FCX001_SetPoint FCX001_SetPoint Double -1 PipeX001_FTX001_Output PipeX001_FTX001_Output Double -1 PipeX001_ValveX001_Input PipeX001_ValveX001_Input Double -1 LCX001_ControlOut LCX001_ControlOut Double -1 LCX001_Measurement LCX001_Measurement Double -1 LCX001_SetPoint LCX001_SetPoint Double -1 PipeX002_FTX002_Output PipeX002_FTX002_Output Double -1 Simulation_UpdateRate Simulation_UpdateRate UInt32 -1 096d553e-c1da-4ca4-9fcc-9d524fa3ca20 Binding Description d5p1:BoilerType d5p1:BoilersArea_BoilerBravo 100 1000 ef63fda7-bb4a-400d-a5e9-517fae8e4ff6 1 0 Producer BoilersArea_Boiler #4 BoilersArea_Boiler #4 http://commsvr.com/UA/Examples/BoilersSet BoilersArea_Boiler #4 CCX001_ControlOut CCX001_ControlOut Double -1 CCX001_Input1 CCX001_Input1 Double -1 CCX001_Input2 CCX001_Input2 Double -1 CCX001_Input3 CCX001_Input3 Double -1 DrumX001_LIX001_Output DrumX001_LIX001_Output Double -1 FCX001_ControlOut FCX001_ControlOut Double -1 FCX001_Measurement FCX001_Measurement Double -1 FCX001_SetPoint FCX001_SetPoint Double -1 PipeX001_FTX001_Output PipeX001_FTX001_Output Double -1 PipeX001_ValveX001_Input PipeX001_ValveX001_Input Double -1 LCX001_ControlOut LCX001_ControlOut Double -1 LCX001_Measurement LCX001_Measurement Double -1 LCX001_SetPoint LCX001_SetPoint Double -1 PipeX002_FTX002_Output PipeX002_FTX002_Output Double -1 Simulation_UpdateRate Simulation_UpdateRate UInt32 -1 78e83ea4-aa0c-43e3-9449-3f2f195f2844 Binding Description d5p1:BoilerType d5p1:BoilersArea_BoilerBravo 100 1000 3b3273c2-c5bc-468d-9c6b-97c6e2a5042d 1 0 UDP 4840,localhost Producer BoilersArea_Boiler #1 100 d80d81dd-96e6-4560-850e-154f9181307c VariantFieldEncoding BoilersArea_Boiler #2 1202 d80d81dd-96e6-4560-850e-154f9181307c VariantFieldEncoding BoilersArea_Boiler #3 130 d80d81dd-96e6-4560-850e-154f9181307c VariantFieldEncoding BoilersArea_Boiler #4 140 d80d81dd-96e6-4560-850e-154f9181307c VariantFieldEncoding ================================================ FILE: Networking/Simulator.Boiler/DataGenerator.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2018, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using CommonServiceLocator; using System; using System.Collections.Generic; using System.Diagnostics; using UAOOI.Common.Infrastructure.Diagnostic; using UAOOI.Configuration.Networking.Serialization; using UAOOI.Networking.SemanticData; using UAOOI.Networking.SemanticData.DataRepository; using UAOOI.Networking.Simulator.Boiler.AddressSpace; using UAOOI.Networking.Simulator.Boiler.Model; namespace UAOOI.Networking.Simulator.Boiler { /// /// Class DataGenerator - it is simulator producing data to be sent over the wire using message centric communication provided /// by the UAOOI.Networking.SemanticData framework. /// The data is generated according to the Boiler model /// internal class DataGenerator : IBindingFactory, IDisposable { #region Constructor /// /// Initializes a new instance of the class that generates the data to be used for interoperability testing. /// public DataGenerator() : this(BoilersSet.Factory) { } /// /// Initializes a new instance of the class. /// /// The boilers set. internal DataGenerator(ISemanticDataSource semanticDataSource) { IServiceLocator _serviceLocator = ServiceLocator.Current; m_TraceSource = _serviceLocator.GetInstance(); m_TraceSource.TraceData(TraceEventType.Information, 43, $"Starting {nameof(DataGenerator)} with the data source {semanticDataSource.GetType().FullName}"); m_SemanticDataSource = semanticDataSource; m_SemanticDataSource.GetSemanticDataSources(RegisterVariable); } #endregion #region IDisposable /// /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. /// /// It is called by the . public void Dispose() { m_SemanticDataSource.Dispose(); } #endregion #region IBindingFactory /// /// Gets the binding captured by an instance of the type used by the consumer to save the data in the data repository. /// /// It is the name of a repository group profiling the configuration behavior, e.g. encoders selection. /// The configuration of the repositories belong to the same group are handled according to the same profile. /// The name of a variable that is the ultimate destination of the values recovered from messages. /// Must be unique in the context of the group named by . /// The field metadata definition represented as an object of . /// Returns an object implementing the interface that can be used to update selected variable on the factory side. /// IConsumerBinding IBindingFactory.GetConsumerBinding(string repositoryGroup, string processValueName, UATypeInfo fieldTypeInfo) { m_TraceSource.TraceData(TraceEventType.Error, 60, $"Starting {nameof(IBindingFactory.GetConsumerBinding)} for the process variable {repositoryGroup}_{processValueName}"); throw new NotImplementedException(); } /// /// Gets the producer binding. /// /// The repository group. /// The name of a variable that is the source of the values forwarded by a message over the network. /// Must be unique in the context of the group named by /// The of the message field encoding. /// IProducerBinding. /// repositoryGroup /// encoding IProducerBinding IBindingFactory.GetProducerBinding(string repositoryGroup, string processValueName, UATypeInfo fieldTypeInfo) { string _name = CreateKey(repositoryGroup, processValueName); m_TraceSource.TraceData(TraceEventType.Information, 60, $"Starting {nameof(IBindingFactory.GetProducerBinding)} for the process variable {_name}"); IProducerBinding _return = null; switch (fieldTypeInfo.BuiltInType) { case BuiltInType.Boolean: _return = AddBinding(_name, fieldTypeInfo); break; case BuiltInType.SByte: _return = AddBinding(_name, fieldTypeInfo); break; case BuiltInType.Byte: _return = AddBinding(_name, fieldTypeInfo); break; case BuiltInType.Int16: _return = AddBinding(_name, fieldTypeInfo); break; case BuiltInType.UInt16: _return = AddBinding(_name, fieldTypeInfo); break; case BuiltInType.Int32: _return = AddBinding(_name, fieldTypeInfo); break; case BuiltInType.UInt32: _return = AddBinding(_name, fieldTypeInfo); break; case BuiltInType.Int64: _return = AddBinding(_name, fieldTypeInfo); break; case BuiltInType.UInt64: _return = AddBinding(_name, fieldTypeInfo); break; case BuiltInType.Float: _return = AddBinding(_name, fieldTypeInfo); break; case BuiltInType.Double: _return = AddBinding(_name, fieldTypeInfo); break; case BuiltInType.String: _return = AddBinding(_name, fieldTypeInfo); break; case BuiltInType.DateTime: _return = AddBinding(_name, fieldTypeInfo); break; case BuiltInType.Guid: _return = AddBinding(_name, fieldTypeInfo); break; case BuiltInType.ByteString: _return = AddBinding(_name, fieldTypeInfo); break; case BuiltInType.Null: case BuiltInType.XmlElement: case BuiltInType.NodeId: case BuiltInType.ExpandedNodeId: case BuiltInType.StatusCode: case BuiltInType.QualifiedName: case BuiltInType.LocalizedText: case BuiltInType.ExtensionObject: case BuiltInType.DataValue: case BuiltInType.Variant: case BuiltInType.DiagnosticInfo: case BuiltInType.Enumeration: default: { m_TraceSource.TraceData(TraceEventType.Error, 60, $"Cannot get binding for {_name}"); throw new ArgumentOutOfRangeException($"{_name}"); } } m_TraceSource.TraceData(TraceEventType.Information, 60, $"Created binding for the process variable {_name}"); return _return; } #endregion #region private //vars private ISemanticDataSource m_SemanticDataSource = null; private Dictionary m_NodesDictionary = new Dictionary(); private ITraceSource m_TraceSource = null; //methods private void RegisterVariable(string repositoryGroup, string processValueName, IVariable variable) { string _name = CreateKey(repositoryGroup, processValueName); m_TraceSource.TraceData(TraceEventType.Information, 60, $"Registering next process variable {_name}"); m_NodesDictionary.Add(_name, variable); } private string CreateKey(string repositoryGroup, string processValueName) { return $"{repositoryGroup}.{ processValueName}"; } //methods private IProducerBinding AddBinding(string key, UATypeInfo typeInfo) { IVariable _variable = m_NodesDictionary[key]; Type _expectedType = typeof(type); if (!_expectedType.GetUATypeInfo().IsEqual(_variable.ValueType)) throw new ArgumentOutOfRangeException($"Wrong argument type: {_expectedType.GetUATypeInfo()} but expected {_variable.ValueType}"); ProducerBindingMonitoredValue _binding = new ProducerBindingMonitoredValue(key, typeInfo) { MonitoredValue = default(type) }; _variable.OnStateChanged += (context, node, changes) => { if (changes == NodeStateChangeMasks.Value) _binding.MonitoredValue = (type)_variable.Value; }; return _binding; } #endregion } } ================================================ FILE: Networking/Simulator.Boiler/Model/BoilerState.cs ================================================ using System; using System.Collections.Generic; using System.Diagnostics; using System.Threading; using UAOOI.Common.Infrastructure.Diagnostic; using UAOOI.Networking.Simulator.Boiler.AddressSpace; using UAOOI.Networking.Simulator.Boiler.Model; using UAOOI.SemanticData.UANodeSetValidation.DataSerialization; using UAOOI.SemanticData.UANodeSetValidation.UAInformationModel; namespace tempuri.org.UA.Examples.BoilerType { public partial class BoilerState { public BoilerState(NodeState parent, QualifiedName browseName) : base(parent, browseName) { CustomController = new CustomControllerState(this, BrowseNames.CustomController); Drum = new BoilerDrumState(this, BrowseNames.Drum, ModelExtensions.CreateRange(1000, 0)); FlowController = new FlowControllerState(this, BrowseNames.FlowController); InputPipe = new BoilerInputPipeState(this, BrowseNames.InputPipe); LevelController = new LevelControllerState(this, BrowseNames.LevelController); LevelController.SetPoint.Value = 500.0; OutputPipe = new BoilerOutputPipeState(this, BrowseNames.OutputPipe); Simulation = new BoilerStateMachineState(this, BrowseNames.Simulation); } internal void StartSimulation() { if (m_simulationTimer != null) { m_simulationTimer.Dispose(); m_simulationTimer = null; } uint updateRate = this.Simulation.UpdateRate.Value; if (updateRate < 100) { updateRate = 100; Simulation.UpdateRate.Value = updateRate; } m_simulationTimer = new Timer(DoSimulation, null, (int)updateRate, (int)updateRate); } internal ITraceSource Logger { get; set; } = new DoNothingTraceSource(); //#region Initialization ///// ///// Initializes the object as a collection of counters which change value on read. ///// //protected override void OnAfterCreate(ISystemContext context, NodeState node) //{ // base.OnAfterCreate(context, node); // this.Simulation.OnAfterTransition = OnControlSimulation; // m_random = new Random(); //} //#endregion #region IDisposeable Methods /// /// Cleans up when the object is disposed. /// protected override void Dispose(bool disposing) { if (disposing) { if (m_simulationTimer != null) { m_simulationTimer.Dispose(); m_simulationTimer = null; } } } #endregion #region Private //class private class DoNothingTraceSource : ITraceSource { public void TraceData(TraceEventType eventType, int id, object data) { } } //Fields private ISystemContext m_simulationContext = null; private Timer m_simulationTimer = null; private Random m_random = new Random(); private long m_simulationCounter = 0; //Methods /// /// Changes the state of the simulation. /// private void OnControlSimulation(ISystemContext context, StateMachineState machine, uint transitionId, uint causeId, IList inputArguments, IList outputArguments) { switch (causeId) { case Methods.ProgramStateMachineType_Start: { if (m_simulationTimer != null) { m_simulationTimer.Dispose(); m_simulationTimer = null; } uint updateRate = this.Simulation.UpdateRate.Value; if (updateRate < 100) { updateRate = 100; Simulation.UpdateRate.Value = updateRate; } m_simulationContext = context; m_simulationTimer = new Timer(DoSimulation, null, (int)updateRate, (int)updateRate); break; } case Methods.ProgramStateMachineType_Halt: case Methods.ProgramStateMachineType_Suspend: { if (m_simulationTimer != null) { m_simulationTimer.Dispose(); m_simulationTimer = null; } m_simulationContext = context; break; } case Methods.ProgramStateMachineType_Reset: { if (m_simulationTimer != null) { m_simulationTimer.Dispose(); m_simulationTimer = null; } m_simulationContext = context; break; } } } /// /// Rounds a value to the significant digits specified and adds a random perturbation. /// private double RoundAndPerturb(double value, byte significantDigits) { double offsetToApply = 0; if (value != 0) { // need to move all significant digits above the decimal point. double _offset = significantDigits - Math.Log10(Math.Abs(value)); offsetToApply = Math.Floor(_offset); if (offsetToApply == _offset) offsetToApply -= 1; } // round value to significant digits. double _perturbedValue = Math.Round(value * Math.Pow(10.0, offsetToApply)); // apply the perturbation. _perturbedValue += (m_random.NextDouble() - 0.5) * 5; // restore original exponent. _perturbedValue = Math.Round(_perturbedValue) * Math.Pow(10.0, -offsetToApply); // return value. return _perturbedValue; } /// /// Moves the value towards the target. /// private double Adjust(double value, double target, double step, Range range) { // convert percentage step to an absolute step if range is specified. if (range != null) step = step * range.Magnitude(); double difference = target - value; if (difference < 0) { value -= step; if (value < target) return target; } else { value += step; if (value > target) return target; } return value; } /// /// Returns the value as a percentage of the range. /// private double GetPercentage(AnalogItemState value) { double percentage = value.Value; Range range = value.EURange.Value; if (range != null) { percentage /= Math.Abs(range.High - range.Low); if (Math.Abs(percentage) > 1.0) percentage = 1.0; } return percentage; } /// /// Returns the value as a percentage of the range. /// private double GetValue(double value, Range range) { if (range != null) return value * range.Magnitude(); return value; } /// /// Updates the values for the simulation. /// private void DoSimulation(object state) { try { Logger.TraceData(TraceEventType.Verbose, 210, $"Entering {nameof(DoSimulation)} #{m_simulationCounter}"); m_simulationCounter++; // adjust level. m_drum.LevelIndicator.Output.Value = Adjust(m_drum.LevelIndicator.Output.Value, m_levelController.SetPoint.Value, 0.1, m_drum.LevelIndicator.Output.EURange.Value); // calculate inputs for custom controller. m_customController.Input1.Value = m_levelController.UpdateMeasurement(m_drum.LevelIndicator.Output); m_customController.Input2.Value = GetPercentage(m_inputPipe.FlowTransmitter1.Output); m_customController.Input3.Value = GetPercentage(m_outputPipe.FlowTransmitter2.Output); // calculate output for custom controller. m_customController.ControlOut.Value = (m_customController.Input1.Value + m_customController.Input3.Value - m_customController.Input2.Value) / 2; // update flow controller set point. m_flowController.SetPoint.Value = GetValue((m_customController.ControlOut.Value + 1) / 2, m_inputPipe.FlowTransmitter1.Output.EURange.Value); double error = m_flowController.UpdateMeasurement(m_inputPipe.FlowTransmitter1.Output); // adjust the input valve. m_inputPipe.Valve.Input.Value = Adjust(m_inputPipe.Valve.Input.Value, (error > 0) ? 100 : 0, 10, null); // adjust the input flow. m_inputPipe.FlowTransmitter1.Output.Value = Adjust(m_inputPipe.FlowTransmitter1.Output.Value, m_flowController.SetPoint.Value, 0.6, m_inputPipe.FlowTransmitter1.Output.EURange.Value); // add pertubations. m_drum.LevelIndicator.Output.Value = RoundAndPerturb(m_drum.LevelIndicator.Output.Value, 3); m_inputPipe.FlowTransmitter1.Output.Value = RoundAndPerturb(m_inputPipe.FlowTransmitter1.Output.Value, 3); m_outputPipe.FlowTransmitter2.Output.Value = RoundAndPerturb(m_outputPipe.FlowTransmitter2.Output.Value, 3); this.ClearChangeMasks(m_simulationContext, true); } catch (Exception e) { Logger.TraceData(TraceEventType.Error, 225, $"Unexpected error during boiler simulation: {e}."); } } #endregion } public partial class FlowControllerState { public FlowControllerState(NodeState parent, QualifiedName browseName) : base(parent, browseName) { } } public partial class BoilerInputPipeState { public BoilerInputPipeState(NodeState parent, QualifiedName browseName) : base(parent, browseName) { this.FlowTransmitter1 = new FlowTransmitterState(this, BrowseNames.FlowTransmitter1); this.Valve = new ValveState(this, BrowseNames.Valve); } } public partial class LevelControllerState { public LevelControllerState(NodeState parent, QualifiedName browseName) : base(parent, browseName) { } } public partial class BoilerOutputPipeState { public BoilerOutputPipeState(NodeState parent, QualifiedName browseName) : base(parent, browseName) { this.FlowTransmitter2 = new FlowTransmitterState(this, BrowseNames.FlowTransmitter2); } } public partial class BoilerStateMachineState { public BoilerStateMachineState(NodeState parent, QualifiedName browseName) : base(parent, browseName) { this.UpdateRate = new PropertyState(this, BrowseNames.UpdateRate, 200); } } public partial class FlowTransmitterState { public FlowTransmitterState(NodeState parent, QualifiedName browseName) : base(parent, browseName) { this.Output = new AnalogItemState(this, BrowseNames.Output, ModelExtensions.CreateRange(1, 0), 0.5); } } public partial class ValveState { public ValveState(NodeState parent, QualifiedName browseName) : base(parent, browseName) { } } public partial class GenericActuatorState { public GenericActuatorState(NodeState parent, QualifiedName browseName) : base(parent, browseName) { this.Input = new AnalogItemState(this, BrowseNames.Input, ModelExtensions.CreateRange(1, 0), 0.5); } } partial class BoilerDrumState { public BoilerDrumState(NodeState parent, QualifiedName browseName, Range range) : base(parent, browseName) { this.LevelIndicator = new LevelIndicatorState(this, BrowseNames.LevelIndicator, range); } } public partial class LevelIndicatorState { public LevelIndicatorState(NodeState parent, QualifiedName browseName, Range range) : base(parent, browseName) { this.Output = new AnalogItemState(this, BrowseNames.Output, range); } } public partial class GenericSensorState : BaseObjectState { public GenericSensorState(NodeState parent, QualifiedName browseName) : base(parent, browseName) { } } } ================================================ FILE: Networking/Simulator.Boiler/Model/BoilersSet.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2018, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System; using System.Collections.Generic; using UAOOI.Networking.Simulator.Boiler.AddressSpace; using CommsvrClassess = Commsvr.UA.Examples.BoilersSet; using tempuriClasses = tempuri.org.UA.Examples.BoilerType; namespace UAOOI.Networking.Simulator.Boiler.Model { internal class BoilersSet : FolderState, ISemanticDataSource { internal static BoilersSet Factory { get { return m_Factory.Value; } } #region ISemanticDataSource /// /// Gets the semantic data set sources. /// /// The register semantic data. public void GetSemanticDataSources(RegisterSemanticData registerSemanticData) { foreach (BaseInstanceState _state in m_Boilers) { SemanticDataSetSource _sd = new SemanticDataSetSource(_state); foreach (KeyValuePair item in _sd) registerSemanticData(_sd.SemanticDataSetRootBrowseName, item.Key, item.Value); } } #endregion #region private protected override void Dispose(bool disposing) { base.Dispose(disposing); foreach (BaseInstanceState _state in m_Boilers) _state.Dispose(); } private static Lazy m_Factory = new Lazy(() => new BoilersSet()); private List m_Boilers = new List(); private BoilersSet() : base(null, CommsvrClassess.BrowseNames.BoilersArea) { m_Boilers.Add(new tempuriClasses.BoilerState(this, $"{CommsvrClassess.BrowseNames.BoilersArea}_{ CommsvrClassess.BrowseNames.BoilerAlpha}")); m_Boilers.Add(new tempuriClasses.BoilerState(this, $"{CommsvrClassess.BrowseNames.BoilersArea}_{ CommsvrClassess.BrowseNames.BoilerBravo}")); m_Boilers.Add(new tempuriClasses.BoilerState(this, $"{CommsvrClassess.BrowseNames.BoilersArea}_{ CommsvrClassess.BrowseNames.BoilerCharlie}")); m_Boilers.Add(new tempuriClasses.BoilerState(this, $"{CommsvrClassess.BrowseNames.BoilersArea}_{ CommsvrClassess.BrowseNames.BoilerDelta}")); foreach (tempuriClasses.BoilerState boilerState in m_Boilers) boilerState.StartSimulation(); } #endregion } } ================================================ FILE: Networking/Simulator.Boiler/Model/Commsvr.UA.Examples.BoilersSet.Classes.cs ================================================ /* ======================================================================== * Copyright (c) 2005-2011 The OPC Foundation, Inc. All rights reserved. * * OPC Foundation MIT License 1.00 * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, * copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following * conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. * * The complete license agreement can be found here: * http://opcfoundation.org/License/MIT/1.00/ * ======================================================================*/ using UAOOI.SemanticData.UANodeSetValidation.DataSerialization; namespace Commsvr.UA.Examples.BoilersSet { #region Method Identifiers /// /// A class that declares constants for all Methods in the Model Design. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class Methods { /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_Start Method. /// public const uint BoilersArea_BoilerAlpha_Simulation_Start = 154; /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_Suspend Method. /// public const uint BoilersArea_BoilerAlpha_Simulation_Suspend = 155; /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_Resume Method. /// public const uint BoilersArea_BoilerAlpha_Simulation_Resume = 156; /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_Halt Method. /// public const uint BoilersArea_BoilerAlpha_Simulation_Halt = 157; /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_Reset Method. /// public const uint BoilersArea_BoilerAlpha_Simulation_Reset = 158; /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_Start Method. /// public const uint BoilersArea_BoilerBravo_Simulation_Start = 233; /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_Suspend Method. /// public const uint BoilersArea_BoilerBravo_Simulation_Suspend = 234; /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_Resume Method. /// public const uint BoilersArea_BoilerBravo_Simulation_Resume = 235; /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_Halt Method. /// public const uint BoilersArea_BoilerBravo_Simulation_Halt = 236; /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_Reset Method. /// public const uint BoilersArea_BoilerBravo_Simulation_Reset = 237; /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_Start Method. /// public const uint BoilersArea_BoilerCharlie_Simulation_Start = 312; /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_Suspend Method. /// public const uint BoilersArea_BoilerCharlie_Simulation_Suspend = 313; /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_Resume Method. /// public const uint BoilersArea_BoilerCharlie_Simulation_Resume = 314; /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_Halt Method. /// public const uint BoilersArea_BoilerCharlie_Simulation_Halt = 315; /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_Reset Method. /// public const uint BoilersArea_BoilerCharlie_Simulation_Reset = 316; /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_Start Method. /// public const uint BoilersArea_BoilerDelta_Simulation_Start = 391; /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_Suspend Method. /// public const uint BoilersArea_BoilerDelta_Simulation_Suspend = 392; /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_Resume Method. /// public const uint BoilersArea_BoilerDelta_Simulation_Resume = 393; /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_Halt Method. /// public const uint BoilersArea_BoilerDelta_Simulation_Halt = 394; /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_Reset Method. /// public const uint BoilersArea_BoilerDelta_Simulation_Reset = 395; } #endregion #region Object Identifiers /// /// A class that declares constants for all Objects in the Model Design. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class Objects { /// /// The identifier for the BoilersArea Object. /// public const uint BoilersArea = 1; /// /// The identifier for the BoilersArea_BoilerAlpha Object. /// public const uint BoilersArea_BoilerAlpha = 81; /// /// The identifier for the BoilersArea_BoilerAlpha_InputPipe Object. /// public const uint BoilersArea_BoilerAlpha_InputPipe = 82; /// /// The identifier for the BoilersArea_BoilerAlpha_InputPipe_FlowTransmitter1 Object. /// public const uint BoilersArea_BoilerAlpha_InputPipe_FlowTransmitter1 = 83; /// /// The identifier for the BoilersArea_BoilerAlpha_InputPipe_Valve Object. /// public const uint BoilersArea_BoilerAlpha_InputPipe_Valve = 90; /// /// The identifier for the BoilersArea_BoilerAlpha_Drum Object. /// public const uint BoilersArea_BoilerAlpha_Drum = 97; /// /// The identifier for the BoilersArea_BoilerAlpha_Drum_LevelIndicator Object. /// public const uint BoilersArea_BoilerAlpha_Drum_LevelIndicator = 98; /// /// The identifier for the BoilersArea_BoilerAlpha_OutputPipe Object. /// public const uint BoilersArea_BoilerAlpha_OutputPipe = 105; /// /// The identifier for the BoilersArea_BoilerAlpha_OutputPipe_FlowTransmitter2 Object. /// public const uint BoilersArea_BoilerAlpha_OutputPipe_FlowTransmitter2 = 106; /// /// The identifier for the BoilersArea_BoilerAlpha_FlowController Object. /// public const uint BoilersArea_BoilerAlpha_FlowController = 113; /// /// The identifier for the BoilersArea_BoilerAlpha_LevelController Object. /// public const uint BoilersArea_BoilerAlpha_LevelController = 117; /// /// The identifier for the BoilersArea_BoilerAlpha_CustomController Object. /// public const uint BoilersArea_BoilerAlpha_CustomController = 121; /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation Object. /// public const uint BoilersArea_BoilerAlpha_Simulation = 127; /// /// The identifier for the BoilersArea_BoilerBravo Object. /// public const uint BoilersArea_BoilerBravo = 160; /// /// The identifier for the BoilersArea_BoilerBravo_InputPipe Object. /// public const uint BoilersArea_BoilerBravo_InputPipe = 161; /// /// The identifier for the BoilersArea_BoilerBravo_InputPipe_FlowTransmitter1 Object. /// public const uint BoilersArea_BoilerBravo_InputPipe_FlowTransmitter1 = 162; /// /// The identifier for the BoilersArea_BoilerBravo_InputPipe_Valve Object. /// public const uint BoilersArea_BoilerBravo_InputPipe_Valve = 169; /// /// The identifier for the BoilersArea_BoilerBravo_Drum Object. /// public const uint BoilersArea_BoilerBravo_Drum = 176; /// /// The identifier for the BoilersArea_BoilerBravo_Drum_LevelIndicator Object. /// public const uint BoilersArea_BoilerBravo_Drum_LevelIndicator = 177; /// /// The identifier for the BoilersArea_BoilerBravo_OutputPipe Object. /// public const uint BoilersArea_BoilerBravo_OutputPipe = 184; /// /// The identifier for the BoilersArea_BoilerBravo_OutputPipe_FlowTransmitter2 Object. /// public const uint BoilersArea_BoilerBravo_OutputPipe_FlowTransmitter2 = 185; /// /// The identifier for the BoilersArea_BoilerBravo_FlowController Object. /// public const uint BoilersArea_BoilerBravo_FlowController = 192; /// /// The identifier for the BoilersArea_BoilerBravo_LevelController Object. /// public const uint BoilersArea_BoilerBravo_LevelController = 196; /// /// The identifier for the BoilersArea_BoilerBravo_CustomController Object. /// public const uint BoilersArea_BoilerBravo_CustomController = 200; /// /// The identifier for the BoilersArea_BoilerBravo_Simulation Object. /// public const uint BoilersArea_BoilerBravo_Simulation = 206; /// /// The identifier for the BoilersArea_BoilerCharlie Object. /// public const uint BoilersArea_BoilerCharlie = 239; /// /// The identifier for the BoilersArea_BoilerCharlie_InputPipe Object. /// public const uint BoilersArea_BoilerCharlie_InputPipe = 240; /// /// The identifier for the BoilersArea_BoilerCharlie_InputPipe_FlowTransmitter1 Object. /// public const uint BoilersArea_BoilerCharlie_InputPipe_FlowTransmitter1 = 241; /// /// The identifier for the BoilersArea_BoilerCharlie_InputPipe_Valve Object. /// public const uint BoilersArea_BoilerCharlie_InputPipe_Valve = 248; /// /// The identifier for the BoilersArea_BoilerCharlie_Drum Object. /// public const uint BoilersArea_BoilerCharlie_Drum = 255; /// /// The identifier for the BoilersArea_BoilerCharlie_Drum_LevelIndicator Object. /// public const uint BoilersArea_BoilerCharlie_Drum_LevelIndicator = 256; /// /// The identifier for the BoilersArea_BoilerCharlie_OutputPipe Object. /// public const uint BoilersArea_BoilerCharlie_OutputPipe = 263; /// /// The identifier for the BoilersArea_BoilerCharlie_OutputPipe_FlowTransmitter2 Object. /// public const uint BoilersArea_BoilerCharlie_OutputPipe_FlowTransmitter2 = 264; /// /// The identifier for the BoilersArea_BoilerCharlie_FlowController Object. /// public const uint BoilersArea_BoilerCharlie_FlowController = 271; /// /// The identifier for the BoilersArea_BoilerCharlie_LevelController Object. /// public const uint BoilersArea_BoilerCharlie_LevelController = 275; /// /// The identifier for the BoilersArea_BoilerCharlie_CustomController Object. /// public const uint BoilersArea_BoilerCharlie_CustomController = 279; /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation Object. /// public const uint BoilersArea_BoilerCharlie_Simulation = 285; /// /// The identifier for the BoilersArea_BoilerDelta Object. /// public const uint BoilersArea_BoilerDelta = 318; /// /// The identifier for the BoilersArea_BoilerDelta_InputPipe Object. /// public const uint BoilersArea_BoilerDelta_InputPipe = 319; /// /// The identifier for the BoilersArea_BoilerDelta_InputPipe_FlowTransmitter1 Object. /// public const uint BoilersArea_BoilerDelta_InputPipe_FlowTransmitter1 = 320; /// /// The identifier for the BoilersArea_BoilerDelta_InputPipe_Valve Object. /// public const uint BoilersArea_BoilerDelta_InputPipe_Valve = 327; /// /// The identifier for the BoilersArea_BoilerDelta_Drum Object. /// public const uint BoilersArea_BoilerDelta_Drum = 334; /// /// The identifier for the BoilersArea_BoilerDelta_Drum_LevelIndicator Object. /// public const uint BoilersArea_BoilerDelta_Drum_LevelIndicator = 335; /// /// The identifier for the BoilersArea_BoilerDelta_OutputPipe Object. /// public const uint BoilersArea_BoilerDelta_OutputPipe = 342; /// /// The identifier for the BoilersArea_BoilerDelta_OutputPipe_FlowTransmitter2 Object. /// public const uint BoilersArea_BoilerDelta_OutputPipe_FlowTransmitter2 = 343; /// /// The identifier for the BoilersArea_BoilerDelta_FlowController Object. /// public const uint BoilersArea_BoilerDelta_FlowController = 350; /// /// The identifier for the BoilersArea_BoilerDelta_LevelController Object. /// public const uint BoilersArea_BoilerDelta_LevelController = 354; /// /// The identifier for the BoilersArea_BoilerDelta_CustomController Object. /// public const uint BoilersArea_BoilerDelta_CustomController = 358; /// /// The identifier for the BoilersArea_BoilerDelta_Simulation Object. /// public const uint BoilersArea_BoilerDelta_Simulation = 364; /// /// The identifier for the Drums Object. /// public const uint Drums = 398; /// /// The identifier for the Pipes Object. /// public const uint Pipes = 399; } #endregion #region Variable Identifiers /// /// A class that declares constants for all Variables in the Model Design. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class Variables { /// /// The identifier for the BoilersArea_BoilerAlpha_InputPipe_FlowTransmitter1_Output Variable. /// public const uint BoilersArea_BoilerAlpha_InputPipe_FlowTransmitter1_Output = 84; /// /// The identifier for the BoilersArea_BoilerAlpha_InputPipe_FlowTransmitter1_Output_EURange Variable. /// public const uint BoilersArea_BoilerAlpha_InputPipe_FlowTransmitter1_Output_EURange = 88; /// /// The identifier for the BoilersArea_BoilerAlpha_InputPipe_Valve_Input Variable. /// public const uint BoilersArea_BoilerAlpha_InputPipe_Valve_Input = 91; /// /// The identifier for the BoilersArea_BoilerAlpha_InputPipe_Valve_Input_EURange Variable. /// public const uint BoilersArea_BoilerAlpha_InputPipe_Valve_Input_EURange = 95; /// /// The identifier for the BoilersArea_BoilerAlpha_Drum_LevelIndicator_Output Variable. /// public const uint BoilersArea_BoilerAlpha_Drum_LevelIndicator_Output = 99; /// /// The identifier for the BoilersArea_BoilerAlpha_Drum_LevelIndicator_Output_EURange Variable. /// public const uint BoilersArea_BoilerAlpha_Drum_LevelIndicator_Output_EURange = 103; /// /// The identifier for the BoilersArea_BoilerAlpha_OutputPipe_FlowTransmitter2_Output Variable. /// public const uint BoilersArea_BoilerAlpha_OutputPipe_FlowTransmitter2_Output = 107; /// /// The identifier for the BoilersArea_BoilerAlpha_OutputPipe_FlowTransmitter2_Output_EURange Variable. /// public const uint BoilersArea_BoilerAlpha_OutputPipe_FlowTransmitter2_Output_EURange = 111; /// /// The identifier for the BoilersArea_BoilerAlpha_FlowController_Measurement Variable. /// public const uint BoilersArea_BoilerAlpha_FlowController_Measurement = 114; /// /// The identifier for the BoilersArea_BoilerAlpha_FlowController_SetPoint Variable. /// public const uint BoilersArea_BoilerAlpha_FlowController_SetPoint = 115; /// /// The identifier for the BoilersArea_BoilerAlpha_FlowController_ControlOut Variable. /// public const uint BoilersArea_BoilerAlpha_FlowController_ControlOut = 116; /// /// The identifier for the BoilersArea_BoilerAlpha_LevelController_Measurement Variable. /// public const uint BoilersArea_BoilerAlpha_LevelController_Measurement = 118; /// /// The identifier for the BoilersArea_BoilerAlpha_LevelController_SetPoint Variable. /// public const uint BoilersArea_BoilerAlpha_LevelController_SetPoint = 119; /// /// The identifier for the BoilersArea_BoilerAlpha_LevelController_ControlOut Variable. /// public const uint BoilersArea_BoilerAlpha_LevelController_ControlOut = 120; /// /// The identifier for the BoilersArea_BoilerAlpha_CustomController_Input1 Variable. /// public const uint BoilersArea_BoilerAlpha_CustomController_Input1 = 122; /// /// The identifier for the BoilersArea_BoilerAlpha_CustomController_Input2 Variable. /// public const uint BoilersArea_BoilerAlpha_CustomController_Input2 = 123; /// /// The identifier for the BoilersArea_BoilerAlpha_CustomController_Input3 Variable. /// public const uint BoilersArea_BoilerAlpha_CustomController_Input3 = 124; /// /// The identifier for the BoilersArea_BoilerAlpha_CustomController_ControlOut Variable. /// public const uint BoilersArea_BoilerAlpha_CustomController_ControlOut = 125; /// /// The identifier for the BoilersArea_BoilerAlpha_CustomController_DescriptionX Variable. /// public const uint BoilersArea_BoilerAlpha_CustomController_DescriptionX = 126; /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_CurrentState Variable. /// public const uint BoilersArea_BoilerAlpha_Simulation_CurrentState = 128; /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_CurrentState_Id Variable. /// public const uint BoilersArea_BoilerAlpha_Simulation_CurrentState_Id = 129; /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_CurrentState_Number Variable. /// public const uint BoilersArea_BoilerAlpha_Simulation_CurrentState_Number = 131; /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_LastTransition Variable. /// public const uint BoilersArea_BoilerAlpha_Simulation_LastTransition = 133; /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_LastTransition_Id Variable. /// public const uint BoilersArea_BoilerAlpha_Simulation_LastTransition_Id = 134; /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_LastTransition_Number Variable. /// public const uint BoilersArea_BoilerAlpha_Simulation_LastTransition_Number = 136; /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_LastTransition_TransitionTime Variable. /// public const uint BoilersArea_BoilerAlpha_Simulation_LastTransition_TransitionTime = 137; /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_Deletable Variable. /// public const uint BoilersArea_BoilerAlpha_Simulation_Deletable = 139; /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_RecycleCount Variable. /// public const uint BoilersArea_BoilerAlpha_Simulation_RecycleCount = 141; /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_CreateSessionId Variable. /// public const uint BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_CreateSessionId = 143; /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_CreateClientName Variable. /// public const uint BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_CreateClientName = 144; /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_InvocationCreationTime Variable. /// public const uint BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_InvocationCreationTime = 145; /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_LastTransitionTime Variable. /// public const uint BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_LastTransitionTime = 146; /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_LastMethodCall Variable. /// public const uint BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_LastMethodCall = 147; /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_LastMethodSessionId Variable. /// public const uint BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_LastMethodSessionId = 148; /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_LastMethodInputArguments Variable. /// public const uint BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_LastMethodInputArguments = 149; /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_LastMethodOutputArguments Variable. /// public const uint BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_LastMethodOutputArguments = 150; /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_LastMethodCallTime Variable. /// public const uint BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_LastMethodCallTime = 151; /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_LastMethodReturnStatus Variable. /// public const uint BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_LastMethodReturnStatus = 152; /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_UpdateRate Variable. /// public const uint BoilersArea_BoilerAlpha_Simulation_UpdateRate = 159; /// /// The identifier for the BoilersArea_BoilerBravo_InputPipe_FlowTransmitter1_Output Variable. /// public const uint BoilersArea_BoilerBravo_InputPipe_FlowTransmitter1_Output = 163; /// /// The identifier for the BoilersArea_BoilerBravo_InputPipe_FlowTransmitter1_Output_EURange Variable. /// public const uint BoilersArea_BoilerBravo_InputPipe_FlowTransmitter1_Output_EURange = 167; /// /// The identifier for the BoilersArea_BoilerBravo_InputPipe_Valve_Input Variable. /// public const uint BoilersArea_BoilerBravo_InputPipe_Valve_Input = 170; /// /// The identifier for the BoilersArea_BoilerBravo_InputPipe_Valve_Input_EURange Variable. /// public const uint BoilersArea_BoilerBravo_InputPipe_Valve_Input_EURange = 174; /// /// The identifier for the BoilersArea_BoilerBravo_Drum_LevelIndicator_Output Variable. /// public const uint BoilersArea_BoilerBravo_Drum_LevelIndicator_Output = 178; /// /// The identifier for the BoilersArea_BoilerBravo_Drum_LevelIndicator_Output_EURange Variable. /// public const uint BoilersArea_BoilerBravo_Drum_LevelIndicator_Output_EURange = 182; /// /// The identifier for the BoilersArea_BoilerBravo_OutputPipe_FlowTransmitter2_Output Variable. /// public const uint BoilersArea_BoilerBravo_OutputPipe_FlowTransmitter2_Output = 186; /// /// The identifier for the BoilersArea_BoilerBravo_OutputPipe_FlowTransmitter2_Output_EURange Variable. /// public const uint BoilersArea_BoilerBravo_OutputPipe_FlowTransmitter2_Output_EURange = 190; /// /// The identifier for the BoilersArea_BoilerBravo_FlowController_Measurement Variable. /// public const uint BoilersArea_BoilerBravo_FlowController_Measurement = 193; /// /// The identifier for the BoilersArea_BoilerBravo_FlowController_SetPoint Variable. /// public const uint BoilersArea_BoilerBravo_FlowController_SetPoint = 194; /// /// The identifier for the BoilersArea_BoilerBravo_FlowController_ControlOut Variable. /// public const uint BoilersArea_BoilerBravo_FlowController_ControlOut = 195; /// /// The identifier for the BoilersArea_BoilerBravo_LevelController_Measurement Variable. /// public const uint BoilersArea_BoilerBravo_LevelController_Measurement = 197; /// /// The identifier for the BoilersArea_BoilerBravo_LevelController_SetPoint Variable. /// public const uint BoilersArea_BoilerBravo_LevelController_SetPoint = 198; /// /// The identifier for the BoilersArea_BoilerBravo_LevelController_ControlOut Variable. /// public const uint BoilersArea_BoilerBravo_LevelController_ControlOut = 199; /// /// The identifier for the BoilersArea_BoilerBravo_CustomController_Input1 Variable. /// public const uint BoilersArea_BoilerBravo_CustomController_Input1 = 201; /// /// The identifier for the BoilersArea_BoilerBravo_CustomController_Input2 Variable. /// public const uint BoilersArea_BoilerBravo_CustomController_Input2 = 202; /// /// The identifier for the BoilersArea_BoilerBravo_CustomController_Input3 Variable. /// public const uint BoilersArea_BoilerBravo_CustomController_Input3 = 203; /// /// The identifier for the BoilersArea_BoilerBravo_CustomController_ControlOut Variable. /// public const uint BoilersArea_BoilerBravo_CustomController_ControlOut = 204; /// /// The identifier for the BoilersArea_BoilerBravo_CustomController_DescriptionX Variable. /// public const uint BoilersArea_BoilerBravo_CustomController_DescriptionX = 205; /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_CurrentState Variable. /// public const uint BoilersArea_BoilerBravo_Simulation_CurrentState = 207; /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_CurrentState_Id Variable. /// public const uint BoilersArea_BoilerBravo_Simulation_CurrentState_Id = 208; /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_CurrentState_Number Variable. /// public const uint BoilersArea_BoilerBravo_Simulation_CurrentState_Number = 210; /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_LastTransition Variable. /// public const uint BoilersArea_BoilerBravo_Simulation_LastTransition = 212; /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_LastTransition_Id Variable. /// public const uint BoilersArea_BoilerBravo_Simulation_LastTransition_Id = 213; /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_LastTransition_Number Variable. /// public const uint BoilersArea_BoilerBravo_Simulation_LastTransition_Number = 215; /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_LastTransition_TransitionTime Variable. /// public const uint BoilersArea_BoilerBravo_Simulation_LastTransition_TransitionTime = 216; /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_Deletable Variable. /// public const uint BoilersArea_BoilerBravo_Simulation_Deletable = 218; /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_RecycleCount Variable. /// public const uint BoilersArea_BoilerBravo_Simulation_RecycleCount = 220; /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_CreateSessionId Variable. /// public const uint BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_CreateSessionId = 222; /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_CreateClientName Variable. /// public const uint BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_CreateClientName = 223; /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_InvocationCreationTime Variable. /// public const uint BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_InvocationCreationTime = 224; /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_LastTransitionTime Variable. /// public const uint BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_LastTransitionTime = 225; /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_LastMethodCall Variable. /// public const uint BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_LastMethodCall = 226; /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_LastMethodSessionId Variable. /// public const uint BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_LastMethodSessionId = 227; /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_LastMethodInputArguments Variable. /// public const uint BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_LastMethodInputArguments = 228; /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_LastMethodOutputArguments Variable. /// public const uint BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_LastMethodOutputArguments = 229; /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_LastMethodCallTime Variable. /// public const uint BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_LastMethodCallTime = 230; /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_LastMethodReturnStatus Variable. /// public const uint BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_LastMethodReturnStatus = 231; /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_UpdateRate Variable. /// public const uint BoilersArea_BoilerBravo_Simulation_UpdateRate = 238; /// /// The identifier for the BoilersArea_BoilerCharlie_InputPipe_FlowTransmitter1_Output Variable. /// public const uint BoilersArea_BoilerCharlie_InputPipe_FlowTransmitter1_Output = 242; /// /// The identifier for the BoilersArea_BoilerCharlie_InputPipe_FlowTransmitter1_Output_EURange Variable. /// public const uint BoilersArea_BoilerCharlie_InputPipe_FlowTransmitter1_Output_EURange = 246; /// /// The identifier for the BoilersArea_BoilerCharlie_InputPipe_Valve_Input Variable. /// public const uint BoilersArea_BoilerCharlie_InputPipe_Valve_Input = 249; /// /// The identifier for the BoilersArea_BoilerCharlie_InputPipe_Valve_Input_EURange Variable. /// public const uint BoilersArea_BoilerCharlie_InputPipe_Valve_Input_EURange = 253; /// /// The identifier for the BoilersArea_BoilerCharlie_Drum_LevelIndicator_Output Variable. /// public const uint BoilersArea_BoilerCharlie_Drum_LevelIndicator_Output = 257; /// /// The identifier for the BoilersArea_BoilerCharlie_Drum_LevelIndicator_Output_EURange Variable. /// public const uint BoilersArea_BoilerCharlie_Drum_LevelIndicator_Output_EURange = 261; /// /// The identifier for the BoilersArea_BoilerCharlie_OutputPipe_FlowTransmitter2_Output Variable. /// public const uint BoilersArea_BoilerCharlie_OutputPipe_FlowTransmitter2_Output = 265; /// /// The identifier for the BoilersArea_BoilerCharlie_OutputPipe_FlowTransmitter2_Output_EURange Variable. /// public const uint BoilersArea_BoilerCharlie_OutputPipe_FlowTransmitter2_Output_EURange = 269; /// /// The identifier for the BoilersArea_BoilerCharlie_FlowController_Measurement Variable. /// public const uint BoilersArea_BoilerCharlie_FlowController_Measurement = 272; /// /// The identifier for the BoilersArea_BoilerCharlie_FlowController_SetPoint Variable. /// public const uint BoilersArea_BoilerCharlie_FlowController_SetPoint = 273; /// /// The identifier for the BoilersArea_BoilerCharlie_FlowController_ControlOut Variable. /// public const uint BoilersArea_BoilerCharlie_FlowController_ControlOut = 274; /// /// The identifier for the BoilersArea_BoilerCharlie_LevelController_Measurement Variable. /// public const uint BoilersArea_BoilerCharlie_LevelController_Measurement = 276; /// /// The identifier for the BoilersArea_BoilerCharlie_LevelController_SetPoint Variable. /// public const uint BoilersArea_BoilerCharlie_LevelController_SetPoint = 277; /// /// The identifier for the BoilersArea_BoilerCharlie_LevelController_ControlOut Variable. /// public const uint BoilersArea_BoilerCharlie_LevelController_ControlOut = 278; /// /// The identifier for the BoilersArea_BoilerCharlie_CustomController_Input1 Variable. /// public const uint BoilersArea_BoilerCharlie_CustomController_Input1 = 280; /// /// The identifier for the BoilersArea_BoilerCharlie_CustomController_Input2 Variable. /// public const uint BoilersArea_BoilerCharlie_CustomController_Input2 = 281; /// /// The identifier for the BoilersArea_BoilerCharlie_CustomController_Input3 Variable. /// public const uint BoilersArea_BoilerCharlie_CustomController_Input3 = 282; /// /// The identifier for the BoilersArea_BoilerCharlie_CustomController_ControlOut Variable. /// public const uint BoilersArea_BoilerCharlie_CustomController_ControlOut = 283; /// /// The identifier for the BoilersArea_BoilerCharlie_CustomController_DescriptionX Variable. /// public const uint BoilersArea_BoilerCharlie_CustomController_DescriptionX = 284; /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_CurrentState Variable. /// public const uint BoilersArea_BoilerCharlie_Simulation_CurrentState = 286; /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_CurrentState_Id Variable. /// public const uint BoilersArea_BoilerCharlie_Simulation_CurrentState_Id = 287; /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_CurrentState_Number Variable. /// public const uint BoilersArea_BoilerCharlie_Simulation_CurrentState_Number = 289; /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_LastTransition Variable. /// public const uint BoilersArea_BoilerCharlie_Simulation_LastTransition = 291; /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_LastTransition_Id Variable. /// public const uint BoilersArea_BoilerCharlie_Simulation_LastTransition_Id = 292; /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_LastTransition_Number Variable. /// public const uint BoilersArea_BoilerCharlie_Simulation_LastTransition_Number = 294; /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_LastTransition_TransitionTime Variable. /// public const uint BoilersArea_BoilerCharlie_Simulation_LastTransition_TransitionTime = 295; /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_Deletable Variable. /// public const uint BoilersArea_BoilerCharlie_Simulation_Deletable = 297; /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_RecycleCount Variable. /// public const uint BoilersArea_BoilerCharlie_Simulation_RecycleCount = 299; /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_CreateSessionId Variable. /// public const uint BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_CreateSessionId = 301; /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_CreateClientName Variable. /// public const uint BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_CreateClientName = 302; /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_InvocationCreationTime Variable. /// public const uint BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_InvocationCreationTime = 303; /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_LastTransitionTime Variable. /// public const uint BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_LastTransitionTime = 304; /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_LastMethodCall Variable. /// public const uint BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_LastMethodCall = 305; /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_LastMethodSessionId Variable. /// public const uint BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_LastMethodSessionId = 306; /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_LastMethodInputArguments Variable. /// public const uint BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_LastMethodInputArguments = 307; /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_LastMethodOutputArguments Variable. /// public const uint BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_LastMethodOutputArguments = 308; /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_LastMethodCallTime Variable. /// public const uint BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_LastMethodCallTime = 309; /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_LastMethodReturnStatus Variable. /// public const uint BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_LastMethodReturnStatus = 310; /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_UpdateRate Variable. /// public const uint BoilersArea_BoilerCharlie_Simulation_UpdateRate = 317; /// /// The identifier for the BoilersArea_BoilerDelta_InputPipe_FlowTransmitter1_Output Variable. /// public const uint BoilersArea_BoilerDelta_InputPipe_FlowTransmitter1_Output = 321; /// /// The identifier for the BoilersArea_BoilerDelta_InputPipe_FlowTransmitter1_Output_EURange Variable. /// public const uint BoilersArea_BoilerDelta_InputPipe_FlowTransmitter1_Output_EURange = 325; /// /// The identifier for the BoilersArea_BoilerDelta_InputPipe_Valve_Input Variable. /// public const uint BoilersArea_BoilerDelta_InputPipe_Valve_Input = 328; /// /// The identifier for the BoilersArea_BoilerDelta_InputPipe_Valve_Input_EURange Variable. /// public const uint BoilersArea_BoilerDelta_InputPipe_Valve_Input_EURange = 332; /// /// The identifier for the BoilersArea_BoilerDelta_Drum_LevelIndicator_Output Variable. /// public const uint BoilersArea_BoilerDelta_Drum_LevelIndicator_Output = 336; /// /// The identifier for the BoilersArea_BoilerDelta_Drum_LevelIndicator_Output_EURange Variable. /// public const uint BoilersArea_BoilerDelta_Drum_LevelIndicator_Output_EURange = 340; /// /// The identifier for the BoilersArea_BoilerDelta_OutputPipe_FlowTransmitter2_Output Variable. /// public const uint BoilersArea_BoilerDelta_OutputPipe_FlowTransmitter2_Output = 344; /// /// The identifier for the BoilersArea_BoilerDelta_OutputPipe_FlowTransmitter2_Output_EURange Variable. /// public const uint BoilersArea_BoilerDelta_OutputPipe_FlowTransmitter2_Output_EURange = 348; /// /// The identifier for the BoilersArea_BoilerDelta_FlowController_Measurement Variable. /// public const uint BoilersArea_BoilerDelta_FlowController_Measurement = 351; /// /// The identifier for the BoilersArea_BoilerDelta_FlowController_SetPoint Variable. /// public const uint BoilersArea_BoilerDelta_FlowController_SetPoint = 352; /// /// The identifier for the BoilersArea_BoilerDelta_FlowController_ControlOut Variable. /// public const uint BoilersArea_BoilerDelta_FlowController_ControlOut = 353; /// /// The identifier for the BoilersArea_BoilerDelta_LevelController_Measurement Variable. /// public const uint BoilersArea_BoilerDelta_LevelController_Measurement = 355; /// /// The identifier for the BoilersArea_BoilerDelta_LevelController_SetPoint Variable. /// public const uint BoilersArea_BoilerDelta_LevelController_SetPoint = 356; /// /// The identifier for the BoilersArea_BoilerDelta_LevelController_ControlOut Variable. /// public const uint BoilersArea_BoilerDelta_LevelController_ControlOut = 357; /// /// The identifier for the BoilersArea_BoilerDelta_CustomController_Input1 Variable. /// public const uint BoilersArea_BoilerDelta_CustomController_Input1 = 359; /// /// The identifier for the BoilersArea_BoilerDelta_CustomController_Input2 Variable. /// public const uint BoilersArea_BoilerDelta_CustomController_Input2 = 360; /// /// The identifier for the BoilersArea_BoilerDelta_CustomController_Input3 Variable. /// public const uint BoilersArea_BoilerDelta_CustomController_Input3 = 361; /// /// The identifier for the BoilersArea_BoilerDelta_CustomController_ControlOut Variable. /// public const uint BoilersArea_BoilerDelta_CustomController_ControlOut = 362; /// /// The identifier for the BoilersArea_BoilerDelta_CustomController_DescriptionX Variable. /// public const uint BoilersArea_BoilerDelta_CustomController_DescriptionX = 363; /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_CurrentState Variable. /// public const uint BoilersArea_BoilerDelta_Simulation_CurrentState = 365; /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_CurrentState_Id Variable. /// public const uint BoilersArea_BoilerDelta_Simulation_CurrentState_Id = 366; /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_CurrentState_Number Variable. /// public const uint BoilersArea_BoilerDelta_Simulation_CurrentState_Number = 368; /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_LastTransition Variable. /// public const uint BoilersArea_BoilerDelta_Simulation_LastTransition = 370; /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_LastTransition_Id Variable. /// public const uint BoilersArea_BoilerDelta_Simulation_LastTransition_Id = 371; /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_LastTransition_Number Variable. /// public const uint BoilersArea_BoilerDelta_Simulation_LastTransition_Number = 373; /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_LastTransition_TransitionTime Variable. /// public const uint BoilersArea_BoilerDelta_Simulation_LastTransition_TransitionTime = 374; /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_Deletable Variable. /// public const uint BoilersArea_BoilerDelta_Simulation_Deletable = 376; /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_RecycleCount Variable. /// public const uint BoilersArea_BoilerDelta_Simulation_RecycleCount = 378; /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_CreateSessionId Variable. /// public const uint BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_CreateSessionId = 380; /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_CreateClientName Variable. /// public const uint BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_CreateClientName = 381; /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_InvocationCreationTime Variable. /// public const uint BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_InvocationCreationTime = 382; /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_LastTransitionTime Variable. /// public const uint BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_LastTransitionTime = 383; /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_LastMethodCall Variable. /// public const uint BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_LastMethodCall = 384; /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_LastMethodSessionId Variable. /// public const uint BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_LastMethodSessionId = 385; /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_LastMethodInputArguments Variable. /// public const uint BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_LastMethodInputArguments = 386; /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_LastMethodOutputArguments Variable. /// public const uint BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_LastMethodOutputArguments = 387; /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_LastMethodCallTime Variable. /// public const uint BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_LastMethodCallTime = 388; /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_LastMethodReturnStatus Variable. /// public const uint BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_LastMethodReturnStatus = 389; /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_UpdateRate Variable. /// public const uint BoilersArea_BoilerDelta_Simulation_UpdateRate = 396; } #endregion #region Method Node Identifiers /// /// A class that declares constants for all Methods in the Model Design. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class MethodIds { /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_Start Method. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_Simulation_Start = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Methods.BoilersArea_BoilerAlpha_Simulation_Start, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_Suspend Method. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_Simulation_Suspend = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Methods.BoilersArea_BoilerAlpha_Simulation_Suspend, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_Resume Method. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_Simulation_Resume = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Methods.BoilersArea_BoilerAlpha_Simulation_Resume, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_Halt Method. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_Simulation_Halt = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Methods.BoilersArea_BoilerAlpha_Simulation_Halt, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_Reset Method. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_Simulation_Reset = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Methods.BoilersArea_BoilerAlpha_Simulation_Reset, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_Start Method. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_Simulation_Start = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Methods.BoilersArea_BoilerBravo_Simulation_Start, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_Suspend Method. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_Simulation_Suspend = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Methods.BoilersArea_BoilerBravo_Simulation_Suspend, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_Resume Method. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_Simulation_Resume = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Methods.BoilersArea_BoilerBravo_Simulation_Resume, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_Halt Method. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_Simulation_Halt = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Methods.BoilersArea_BoilerBravo_Simulation_Halt, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_Reset Method. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_Simulation_Reset = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Methods.BoilersArea_BoilerBravo_Simulation_Reset, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_Start Method. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_Simulation_Start = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Methods.BoilersArea_BoilerCharlie_Simulation_Start, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_Suspend Method. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_Simulation_Suspend = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Methods.BoilersArea_BoilerCharlie_Simulation_Suspend, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_Resume Method. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_Simulation_Resume = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Methods.BoilersArea_BoilerCharlie_Simulation_Resume, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_Halt Method. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_Simulation_Halt = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Methods.BoilersArea_BoilerCharlie_Simulation_Halt, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_Reset Method. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_Simulation_Reset = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Methods.BoilersArea_BoilerCharlie_Simulation_Reset, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_Start Method. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_Simulation_Start = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Methods.BoilersArea_BoilerDelta_Simulation_Start, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_Suspend Method. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_Simulation_Suspend = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Methods.BoilersArea_BoilerDelta_Simulation_Suspend, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_Resume Method. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_Simulation_Resume = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Methods.BoilersArea_BoilerDelta_Simulation_Resume, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_Halt Method. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_Simulation_Halt = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Methods.BoilersArea_BoilerDelta_Simulation_Halt, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_Reset Method. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_Simulation_Reset = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Methods.BoilersArea_BoilerDelta_Simulation_Reset, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); } #endregion #region Object Node Identifiers /// /// A class that declares constants for all Objects in the Model Design. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class ObjectIds { /// /// The identifier for the BoilersArea Object. /// public static readonly ExpandedNodeId BoilersArea = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.BoilersArea, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha Object. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.BoilersArea_BoilerAlpha, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_InputPipe Object. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_InputPipe = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.BoilersArea_BoilerAlpha_InputPipe, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_InputPipe_FlowTransmitter1 Object. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_InputPipe_FlowTransmitter1 = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.BoilersArea_BoilerAlpha_InputPipe_FlowTransmitter1, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_InputPipe_Valve Object. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_InputPipe_Valve = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.BoilersArea_BoilerAlpha_InputPipe_Valve, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_Drum Object. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_Drum = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.BoilersArea_BoilerAlpha_Drum, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_Drum_LevelIndicator Object. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_Drum_LevelIndicator = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.BoilersArea_BoilerAlpha_Drum_LevelIndicator, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_OutputPipe Object. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_OutputPipe = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.BoilersArea_BoilerAlpha_OutputPipe, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_OutputPipe_FlowTransmitter2 Object. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_OutputPipe_FlowTransmitter2 = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.BoilersArea_BoilerAlpha_OutputPipe_FlowTransmitter2, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_FlowController Object. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_FlowController = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.BoilersArea_BoilerAlpha_FlowController, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_LevelController Object. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_LevelController = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.BoilersArea_BoilerAlpha_LevelController, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_CustomController Object. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_CustomController = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.BoilersArea_BoilerAlpha_CustomController, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation Object. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_Simulation = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.BoilersArea_BoilerAlpha_Simulation, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo Object. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.BoilersArea_BoilerBravo, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_InputPipe Object. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_InputPipe = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.BoilersArea_BoilerBravo_InputPipe, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_InputPipe_FlowTransmitter1 Object. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_InputPipe_FlowTransmitter1 = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.BoilersArea_BoilerBravo_InputPipe_FlowTransmitter1, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_InputPipe_Valve Object. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_InputPipe_Valve = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.BoilersArea_BoilerBravo_InputPipe_Valve, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_Drum Object. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_Drum = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.BoilersArea_BoilerBravo_Drum, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_Drum_LevelIndicator Object. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_Drum_LevelIndicator = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.BoilersArea_BoilerBravo_Drum_LevelIndicator, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_OutputPipe Object. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_OutputPipe = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.BoilersArea_BoilerBravo_OutputPipe, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_OutputPipe_FlowTransmitter2 Object. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_OutputPipe_FlowTransmitter2 = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.BoilersArea_BoilerBravo_OutputPipe_FlowTransmitter2, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_FlowController Object. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_FlowController = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.BoilersArea_BoilerBravo_FlowController, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_LevelController Object. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_LevelController = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.BoilersArea_BoilerBravo_LevelController, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_CustomController Object. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_CustomController = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.BoilersArea_BoilerBravo_CustomController, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_Simulation Object. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_Simulation = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.BoilersArea_BoilerBravo_Simulation, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie Object. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.BoilersArea_BoilerCharlie, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_InputPipe Object. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_InputPipe = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.BoilersArea_BoilerCharlie_InputPipe, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_InputPipe_FlowTransmitter1 Object. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_InputPipe_FlowTransmitter1 = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.BoilersArea_BoilerCharlie_InputPipe_FlowTransmitter1, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_InputPipe_Valve Object. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_InputPipe_Valve = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.BoilersArea_BoilerCharlie_InputPipe_Valve, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_Drum Object. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_Drum = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.BoilersArea_BoilerCharlie_Drum, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_Drum_LevelIndicator Object. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_Drum_LevelIndicator = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.BoilersArea_BoilerCharlie_Drum_LevelIndicator, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_OutputPipe Object. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_OutputPipe = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.BoilersArea_BoilerCharlie_OutputPipe, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_OutputPipe_FlowTransmitter2 Object. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_OutputPipe_FlowTransmitter2 = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.BoilersArea_BoilerCharlie_OutputPipe_FlowTransmitter2, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_FlowController Object. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_FlowController = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.BoilersArea_BoilerCharlie_FlowController, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_LevelController Object. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_LevelController = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.BoilersArea_BoilerCharlie_LevelController, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_CustomController Object. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_CustomController = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.BoilersArea_BoilerCharlie_CustomController, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation Object. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_Simulation = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.BoilersArea_BoilerCharlie_Simulation, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta Object. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.BoilersArea_BoilerDelta, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_InputPipe Object. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_InputPipe = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.BoilersArea_BoilerDelta_InputPipe, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_InputPipe_FlowTransmitter1 Object. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_InputPipe_FlowTransmitter1 = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.BoilersArea_BoilerDelta_InputPipe_FlowTransmitter1, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_InputPipe_Valve Object. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_InputPipe_Valve = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.BoilersArea_BoilerDelta_InputPipe_Valve, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_Drum Object. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_Drum = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.BoilersArea_BoilerDelta_Drum, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_Drum_LevelIndicator Object. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_Drum_LevelIndicator = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.BoilersArea_BoilerDelta_Drum_LevelIndicator, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_OutputPipe Object. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_OutputPipe = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.BoilersArea_BoilerDelta_OutputPipe, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_OutputPipe_FlowTransmitter2 Object. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_OutputPipe_FlowTransmitter2 = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.BoilersArea_BoilerDelta_OutputPipe_FlowTransmitter2, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_FlowController Object. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_FlowController = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.BoilersArea_BoilerDelta_FlowController, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_LevelController Object. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_LevelController = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.BoilersArea_BoilerDelta_LevelController, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_CustomController Object. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_CustomController = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.BoilersArea_BoilerDelta_CustomController, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_Simulation Object. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_Simulation = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.BoilersArea_BoilerDelta_Simulation, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the Drums Object. /// public static readonly ExpandedNodeId Drums = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.Drums, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the Pipes Object. /// public static readonly ExpandedNodeId Pipes = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.Pipes, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); } #endregion #region Variable Node Identifiers /// /// A class that declares constants for all Variables in the Model Design. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class VariableIds { /// /// The identifier for the BoilersArea_BoilerAlpha_InputPipe_FlowTransmitter1_Output Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_InputPipe_FlowTransmitter1_Output = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerAlpha_InputPipe_FlowTransmitter1_Output, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_InputPipe_FlowTransmitter1_Output_EURange Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_InputPipe_FlowTransmitter1_Output_EURange = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerAlpha_InputPipe_FlowTransmitter1_Output_EURange, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_InputPipe_Valve_Input Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_InputPipe_Valve_Input = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerAlpha_InputPipe_Valve_Input, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_InputPipe_Valve_Input_EURange Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_InputPipe_Valve_Input_EURange = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerAlpha_InputPipe_Valve_Input_EURange, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_Drum_LevelIndicator_Output Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_Drum_LevelIndicator_Output = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerAlpha_Drum_LevelIndicator_Output, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_Drum_LevelIndicator_Output_EURange Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_Drum_LevelIndicator_Output_EURange = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerAlpha_Drum_LevelIndicator_Output_EURange, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_OutputPipe_FlowTransmitter2_Output Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_OutputPipe_FlowTransmitter2_Output = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerAlpha_OutputPipe_FlowTransmitter2_Output, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_OutputPipe_FlowTransmitter2_Output_EURange Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_OutputPipe_FlowTransmitter2_Output_EURange = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerAlpha_OutputPipe_FlowTransmitter2_Output_EURange, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_FlowController_Measurement Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_FlowController_Measurement = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerAlpha_FlowController_Measurement, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_FlowController_SetPoint Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_FlowController_SetPoint = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerAlpha_FlowController_SetPoint, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_FlowController_ControlOut Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_FlowController_ControlOut = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerAlpha_FlowController_ControlOut, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_LevelController_Measurement Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_LevelController_Measurement = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerAlpha_LevelController_Measurement, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_LevelController_SetPoint Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_LevelController_SetPoint = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerAlpha_LevelController_SetPoint, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_LevelController_ControlOut Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_LevelController_ControlOut = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerAlpha_LevelController_ControlOut, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_CustomController_Input1 Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_CustomController_Input1 = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerAlpha_CustomController_Input1, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_CustomController_Input2 Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_CustomController_Input2 = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerAlpha_CustomController_Input2, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_CustomController_Input3 Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_CustomController_Input3 = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerAlpha_CustomController_Input3, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_CustomController_ControlOut Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_CustomController_ControlOut = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerAlpha_CustomController_ControlOut, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_CustomController_DescriptionX Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_CustomController_DescriptionX = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerAlpha_CustomController_DescriptionX, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_CurrentState Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_Simulation_CurrentState = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerAlpha_Simulation_CurrentState, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_CurrentState_Id Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_Simulation_CurrentState_Id = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerAlpha_Simulation_CurrentState_Id, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_CurrentState_Number Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_Simulation_CurrentState_Number = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerAlpha_Simulation_CurrentState_Number, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_LastTransition Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_Simulation_LastTransition = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerAlpha_Simulation_LastTransition, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_LastTransition_Id Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_Simulation_LastTransition_Id = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerAlpha_Simulation_LastTransition_Id, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_LastTransition_Number Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_Simulation_LastTransition_Number = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerAlpha_Simulation_LastTransition_Number, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_LastTransition_TransitionTime Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_Simulation_LastTransition_TransitionTime = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerAlpha_Simulation_LastTransition_TransitionTime, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_Deletable Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_Simulation_Deletable = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerAlpha_Simulation_Deletable, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_RecycleCount Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_Simulation_RecycleCount = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerAlpha_Simulation_RecycleCount, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_CreateSessionId Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_CreateSessionId = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_CreateSessionId, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_CreateClientName Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_CreateClientName = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_CreateClientName, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_InvocationCreationTime Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_InvocationCreationTime = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_InvocationCreationTime, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_LastTransitionTime Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_LastTransitionTime = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_LastTransitionTime, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_LastMethodCall Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_LastMethodCall = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_LastMethodCall, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_LastMethodSessionId Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_LastMethodSessionId = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_LastMethodSessionId, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_LastMethodInputArguments Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_LastMethodInputArguments = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_LastMethodInputArguments, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_LastMethodOutputArguments Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_LastMethodOutputArguments = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_LastMethodOutputArguments, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_LastMethodCallTime Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_LastMethodCallTime = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_LastMethodCallTime, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_LastMethodReturnStatus Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_LastMethodReturnStatus = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_LastMethodReturnStatus, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_UpdateRate Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_Simulation_UpdateRate = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerAlpha_Simulation_UpdateRate, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_InputPipe_FlowTransmitter1_Output Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_InputPipe_FlowTransmitter1_Output = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerBravo_InputPipe_FlowTransmitter1_Output, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_InputPipe_FlowTransmitter1_Output_EURange Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_InputPipe_FlowTransmitter1_Output_EURange = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerBravo_InputPipe_FlowTransmitter1_Output_EURange, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_InputPipe_Valve_Input Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_InputPipe_Valve_Input = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerBravo_InputPipe_Valve_Input, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_InputPipe_Valve_Input_EURange Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_InputPipe_Valve_Input_EURange = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerBravo_InputPipe_Valve_Input_EURange, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_Drum_LevelIndicator_Output Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_Drum_LevelIndicator_Output = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerBravo_Drum_LevelIndicator_Output, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_Drum_LevelIndicator_Output_EURange Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_Drum_LevelIndicator_Output_EURange = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerBravo_Drum_LevelIndicator_Output_EURange, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_OutputPipe_FlowTransmitter2_Output Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_OutputPipe_FlowTransmitter2_Output = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerBravo_OutputPipe_FlowTransmitter2_Output, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_OutputPipe_FlowTransmitter2_Output_EURange Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_OutputPipe_FlowTransmitter2_Output_EURange = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerBravo_OutputPipe_FlowTransmitter2_Output_EURange, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_FlowController_Measurement Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_FlowController_Measurement = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerBravo_FlowController_Measurement, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_FlowController_SetPoint Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_FlowController_SetPoint = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerBravo_FlowController_SetPoint, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_FlowController_ControlOut Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_FlowController_ControlOut = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerBravo_FlowController_ControlOut, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_LevelController_Measurement Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_LevelController_Measurement = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerBravo_LevelController_Measurement, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_LevelController_SetPoint Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_LevelController_SetPoint = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerBravo_LevelController_SetPoint, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_LevelController_ControlOut Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_LevelController_ControlOut = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerBravo_LevelController_ControlOut, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_CustomController_Input1 Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_CustomController_Input1 = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerBravo_CustomController_Input1, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_CustomController_Input2 Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_CustomController_Input2 = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerBravo_CustomController_Input2, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_CustomController_Input3 Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_CustomController_Input3 = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerBravo_CustomController_Input3, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_CustomController_ControlOut Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_CustomController_ControlOut = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerBravo_CustomController_ControlOut, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_CustomController_DescriptionX Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_CustomController_DescriptionX = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerBravo_CustomController_DescriptionX, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_CurrentState Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_Simulation_CurrentState = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerBravo_Simulation_CurrentState, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_CurrentState_Id Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_Simulation_CurrentState_Id = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerBravo_Simulation_CurrentState_Id, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_CurrentState_Number Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_Simulation_CurrentState_Number = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerBravo_Simulation_CurrentState_Number, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_LastTransition Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_Simulation_LastTransition = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerBravo_Simulation_LastTransition, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_LastTransition_Id Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_Simulation_LastTransition_Id = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerBravo_Simulation_LastTransition_Id, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_LastTransition_Number Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_Simulation_LastTransition_Number = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerBravo_Simulation_LastTransition_Number, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_LastTransition_TransitionTime Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_Simulation_LastTransition_TransitionTime = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerBravo_Simulation_LastTransition_TransitionTime, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_Deletable Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_Simulation_Deletable = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerBravo_Simulation_Deletable, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_RecycleCount Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_Simulation_RecycleCount = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerBravo_Simulation_RecycleCount, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_CreateSessionId Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_CreateSessionId = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_CreateSessionId, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_CreateClientName Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_CreateClientName = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_CreateClientName, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_InvocationCreationTime Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_InvocationCreationTime = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_InvocationCreationTime, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_LastTransitionTime Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_LastTransitionTime = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_LastTransitionTime, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_LastMethodCall Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_LastMethodCall = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_LastMethodCall, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_LastMethodSessionId Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_LastMethodSessionId = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_LastMethodSessionId, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_LastMethodInputArguments Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_LastMethodInputArguments = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_LastMethodInputArguments, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_LastMethodOutputArguments Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_LastMethodOutputArguments = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_LastMethodOutputArguments, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_LastMethodCallTime Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_LastMethodCallTime = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_LastMethodCallTime, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_LastMethodReturnStatus Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_LastMethodReturnStatus = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_LastMethodReturnStatus, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_UpdateRate Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_Simulation_UpdateRate = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerBravo_Simulation_UpdateRate, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_InputPipe_FlowTransmitter1_Output Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_InputPipe_FlowTransmitter1_Output = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerCharlie_InputPipe_FlowTransmitter1_Output, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_InputPipe_FlowTransmitter1_Output_EURange Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_InputPipe_FlowTransmitter1_Output_EURange = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerCharlie_InputPipe_FlowTransmitter1_Output_EURange, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_InputPipe_Valve_Input Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_InputPipe_Valve_Input = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerCharlie_InputPipe_Valve_Input, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_InputPipe_Valve_Input_EURange Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_InputPipe_Valve_Input_EURange = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerCharlie_InputPipe_Valve_Input_EURange, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_Drum_LevelIndicator_Output Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_Drum_LevelIndicator_Output = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerCharlie_Drum_LevelIndicator_Output, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_Drum_LevelIndicator_Output_EURange Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_Drum_LevelIndicator_Output_EURange = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerCharlie_Drum_LevelIndicator_Output_EURange, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_OutputPipe_FlowTransmitter2_Output Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_OutputPipe_FlowTransmitter2_Output = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerCharlie_OutputPipe_FlowTransmitter2_Output, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_OutputPipe_FlowTransmitter2_Output_EURange Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_OutputPipe_FlowTransmitter2_Output_EURange = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerCharlie_OutputPipe_FlowTransmitter2_Output_EURange, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_FlowController_Measurement Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_FlowController_Measurement = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerCharlie_FlowController_Measurement, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_FlowController_SetPoint Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_FlowController_SetPoint = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerCharlie_FlowController_SetPoint, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_FlowController_ControlOut Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_FlowController_ControlOut = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerCharlie_FlowController_ControlOut, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_LevelController_Measurement Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_LevelController_Measurement = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerCharlie_LevelController_Measurement, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_LevelController_SetPoint Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_LevelController_SetPoint = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerCharlie_LevelController_SetPoint, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_LevelController_ControlOut Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_LevelController_ControlOut = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerCharlie_LevelController_ControlOut, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_CustomController_Input1 Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_CustomController_Input1 = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerCharlie_CustomController_Input1, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_CustomController_Input2 Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_CustomController_Input2 = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerCharlie_CustomController_Input2, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_CustomController_Input3 Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_CustomController_Input3 = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerCharlie_CustomController_Input3, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_CustomController_ControlOut Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_CustomController_ControlOut = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerCharlie_CustomController_ControlOut, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_CustomController_DescriptionX Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_CustomController_DescriptionX = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerCharlie_CustomController_DescriptionX, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_CurrentState Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_Simulation_CurrentState = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerCharlie_Simulation_CurrentState, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_CurrentState_Id Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_Simulation_CurrentState_Id = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerCharlie_Simulation_CurrentState_Id, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_CurrentState_Number Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_Simulation_CurrentState_Number = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerCharlie_Simulation_CurrentState_Number, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_LastTransition Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_Simulation_LastTransition = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerCharlie_Simulation_LastTransition, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_LastTransition_Id Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_Simulation_LastTransition_Id = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerCharlie_Simulation_LastTransition_Id, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_LastTransition_Number Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_Simulation_LastTransition_Number = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerCharlie_Simulation_LastTransition_Number, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_LastTransition_TransitionTime Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_Simulation_LastTransition_TransitionTime = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerCharlie_Simulation_LastTransition_TransitionTime, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_Deletable Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_Simulation_Deletable = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerCharlie_Simulation_Deletable, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_RecycleCount Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_Simulation_RecycleCount = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerCharlie_Simulation_RecycleCount, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_CreateSessionId Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_CreateSessionId = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_CreateSessionId, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_CreateClientName Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_CreateClientName = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_CreateClientName, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_InvocationCreationTime Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_InvocationCreationTime = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_InvocationCreationTime, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_LastTransitionTime Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_LastTransitionTime = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_LastTransitionTime, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_LastMethodCall Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_LastMethodCall = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_LastMethodCall, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_LastMethodSessionId Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_LastMethodSessionId = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_LastMethodSessionId, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_LastMethodInputArguments Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_LastMethodInputArguments = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_LastMethodInputArguments, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_LastMethodOutputArguments Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_LastMethodOutputArguments = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_LastMethodOutputArguments, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_LastMethodCallTime Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_LastMethodCallTime = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_LastMethodCallTime, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_LastMethodReturnStatus Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_LastMethodReturnStatus = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_LastMethodReturnStatus, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_UpdateRate Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_Simulation_UpdateRate = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerCharlie_Simulation_UpdateRate, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_InputPipe_FlowTransmitter1_Output Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_InputPipe_FlowTransmitter1_Output = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerDelta_InputPipe_FlowTransmitter1_Output, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_InputPipe_FlowTransmitter1_Output_EURange Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_InputPipe_FlowTransmitter1_Output_EURange = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerDelta_InputPipe_FlowTransmitter1_Output_EURange, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_InputPipe_Valve_Input Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_InputPipe_Valve_Input = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerDelta_InputPipe_Valve_Input, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_InputPipe_Valve_Input_EURange Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_InputPipe_Valve_Input_EURange = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerDelta_InputPipe_Valve_Input_EURange, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_Drum_LevelIndicator_Output Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_Drum_LevelIndicator_Output = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerDelta_Drum_LevelIndicator_Output, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_Drum_LevelIndicator_Output_EURange Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_Drum_LevelIndicator_Output_EURange = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerDelta_Drum_LevelIndicator_Output_EURange, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_OutputPipe_FlowTransmitter2_Output Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_OutputPipe_FlowTransmitter2_Output = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerDelta_OutputPipe_FlowTransmitter2_Output, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_OutputPipe_FlowTransmitter2_Output_EURange Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_OutputPipe_FlowTransmitter2_Output_EURange = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerDelta_OutputPipe_FlowTransmitter2_Output_EURange, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_FlowController_Measurement Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_FlowController_Measurement = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerDelta_FlowController_Measurement, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_FlowController_SetPoint Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_FlowController_SetPoint = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerDelta_FlowController_SetPoint, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_FlowController_ControlOut Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_FlowController_ControlOut = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerDelta_FlowController_ControlOut, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_LevelController_Measurement Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_LevelController_Measurement = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerDelta_LevelController_Measurement, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_LevelController_SetPoint Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_LevelController_SetPoint = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerDelta_LevelController_SetPoint, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_LevelController_ControlOut Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_LevelController_ControlOut = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerDelta_LevelController_ControlOut, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_CustomController_Input1 Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_CustomController_Input1 = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerDelta_CustomController_Input1, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_CustomController_Input2 Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_CustomController_Input2 = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerDelta_CustomController_Input2, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_CustomController_Input3 Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_CustomController_Input3 = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerDelta_CustomController_Input3, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_CustomController_ControlOut Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_CustomController_ControlOut = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerDelta_CustomController_ControlOut, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_CustomController_DescriptionX Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_CustomController_DescriptionX = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerDelta_CustomController_DescriptionX, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_CurrentState Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_Simulation_CurrentState = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerDelta_Simulation_CurrentState, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_CurrentState_Id Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_Simulation_CurrentState_Id = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerDelta_Simulation_CurrentState_Id, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_CurrentState_Number Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_Simulation_CurrentState_Number = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerDelta_Simulation_CurrentState_Number, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_LastTransition Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_Simulation_LastTransition = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerDelta_Simulation_LastTransition, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_LastTransition_Id Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_Simulation_LastTransition_Id = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerDelta_Simulation_LastTransition_Id, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_LastTransition_Number Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_Simulation_LastTransition_Number = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerDelta_Simulation_LastTransition_Number, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_LastTransition_TransitionTime Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_Simulation_LastTransition_TransitionTime = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerDelta_Simulation_LastTransition_TransitionTime, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_Deletable Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_Simulation_Deletable = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerDelta_Simulation_Deletable, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_RecycleCount Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_Simulation_RecycleCount = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerDelta_Simulation_RecycleCount, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_CreateSessionId Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_CreateSessionId = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_CreateSessionId, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_CreateClientName Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_CreateClientName = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_CreateClientName, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_InvocationCreationTime Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_InvocationCreationTime = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_InvocationCreationTime, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_LastTransitionTime Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_LastTransitionTime = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_LastTransitionTime, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_LastMethodCall Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_LastMethodCall = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_LastMethodCall, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_LastMethodSessionId Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_LastMethodSessionId = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_LastMethodSessionId, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_LastMethodInputArguments Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_LastMethodInputArguments = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_LastMethodInputArguments, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_LastMethodOutputArguments Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_LastMethodOutputArguments = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_LastMethodOutputArguments, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_LastMethodCallTime Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_LastMethodCallTime = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_LastMethodCallTime, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_LastMethodReturnStatus Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_LastMethodReturnStatus = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_LastMethodReturnStatus, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_UpdateRate Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_Simulation_UpdateRate = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerDelta_Simulation_UpdateRate, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); } #endregion #region BrowseName Declarations /// /// Declares all of the BrowseNames used in the Model Design. /// public static partial class BrowseNames { /// /// The BrowseName for the BoilerAlpha component. /// public const string BoilerAlpha = "Boiler #1"; /// /// The BrowseName for the BoilerBravo component. /// public const string BoilerBravo = "Boiler #2"; /// /// The BrowseName for the BoilerCharlie component. /// public const string BoilerCharlie = "Boiler #3"; /// /// The BrowseName for the BoilerDelta component. /// public const string BoilerDelta = "Boiler #4"; /// /// The BrowseName for the BoilersArea component. /// public const string BoilersArea = "BoilersArea"; /// /// The BrowseName for the Drums component. /// public const string Drums = "Drums"; /// /// The BrowseName for the Pipes component. /// public const string Pipes = "Pipes"; } #endregion #region Namespace Declarations /// /// Defines constants for all namespaces referenced by the model design. /// public static partial class Namespaces { /// /// The URI for the OpcUa namespace (.NET code namespace is 'Opc.Ua'). /// public const string OpcUa = "http://opcfoundation.org/UA/"; /// /// The URI for the OpcUaXsd namespace (.NET code namespace is 'Opc.Ua'). /// public const string OpcUaXsd = "http://opcfoundation.org/UA/2008/02/Types.xsd"; /// /// The URI for the BoilerType namespace (.NET code namespace is 'tempuri.org.UA.Examples.BoilerType'). /// public const string BoilerType = "http://tempuri.org/UA/Examples/BoilerType"; /// /// The URI for the BoilerTypeXsd namespace (.NET code namespace is 'tempuri.org.UA.Examples.BoilerType'). /// public const string BoilerTypeXsd = "http://tempuri.org/UA/Examples/BoilerType/Types.xsd"; /// /// The URI for the BoilersSet namespace (.NET code namespace is 'Commsvr.UA.Examples.BoilersSet'). /// public const string BoilersSet = "http://commsvr.com/UA/Examples/BoilersSet"; /// /// The URI for the BoilersSetXsd namespace (.NET code namespace is 'Commsvr.UA.Examples.BoilersSet'). /// public const string BoilersSetXsd = "http://commsvr.com/UA/Examples/BoilersSet/Types.xsd"; } #endregion } ================================================ FILE: Networking/Simulator.Boiler/Model/CustomControllerState.cs ================================================  using UAOOI.Networking.Simulator.Boiler.AddressSpace; using UAOOI.SemanticData.UANodeSetValidation.DataSerialization; namespace tempuri.org.UA.Examples.BoilerType { partial class CustomControllerState { public CustomControllerState(NodeState parent, string browseName) : base(parent, browseName) { this.ControlOut = new PropertyState(this, BrowseNames.ControlOut); this.DescriptionX = new PropertyState(this, BrowseNames.DescriptionX); this.Input1 = new PropertyState(this, BrowseNames.Input1); this.Input2 = new PropertyState(this, BrowseNames.Input2); this.Input3 = new PropertyState(this, BrowseNames.Input3); } } } ================================================ FILE: Networking/Simulator.Boiler/Model/GenericControllerState.cs ================================================  using System; using UAOOI.Networking.Simulator.Boiler.AddressSpace; using UAOOI.Networking.Simulator.Boiler.Model; using UAOOI.SemanticData.UANodeSetValidation.DataSerialization; namespace tempuri.org.UA.Examples.BoilerType { /// /// Class GenericControllerState - an object representing a generic controller. /// /// /// This part adds behavior to generated class public partial class GenericControllerState { public GenericControllerState(NodeState parent, QualifiedName browseName) : base(parent, browseName) { this.ControlOut = new PropertyState(this, BrowseNames.ControlOut); this.Measurement = new PropertyState(this, BrowseNames.Measurement); this.SetPoint = new PropertyState(this, BrowseNames.SetPoint); } #region Public Interface /// /// Updates the measurement and calculates the new control output. /// public double UpdateMeasurement(AnalogItemState source) { Range range = source.EURange.Value; m_measurement.Value = source.Value; // clamp the set-point. if (range != null) { if (m_setPoint.Value > range.High) m_setPoint.Value = range.High; if (m_setPoint.Value < range.Low) m_setPoint.Value = range.Low; } // calculate error. m_controlOut.Value = m_setPoint.Value - m_measurement.Value; if (range != null) { m_controlOut.Value /= range.Magnitude(); if (Math.Abs(m_controlOut.Value) > 1.0) m_controlOut.Value = (m_controlOut.Value < 0) ? -1.0 : +1.0; } // return the new output. return m_controlOut.Value; } #endregion } } ================================================ FILE: Networking/Simulator.Boiler/Model/LevelIndicatorState.cs ================================================ using UAOOI.Networking.Simulator.Boiler.AddressSpace; using UAOOI.Networking.Simulator.Boiler.Model; using UAOOI.SemanticData.UANodeSetValidation.DataSerialization; namespace tempuri.org.UA.Examples.BoilerType { } ================================================ FILE: Networking/Simulator.Boiler/Model/tempuri.org.UA.Examples.BoilerType.Classes.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2021, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System; using System.Collections.Generic; using UAOOI.Networking.Simulator.Boiler.AddressSpace; using UAOOI.SemanticData.UANodeSetValidation; using UAOOI.SemanticData.UANodeSetValidation.DataSerialization; namespace tempuri.org.UA.Examples.BoilerType { #region Object Identifiers /// /// A class that declares constants for all Objects in the Model Design. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class Objects { /// /// The identifier for the BoilerInputPipeType_FlowTransmitter1 Object. /// public const uint BoilerInputPipeType_FlowTransmitter1 = 121; /// /// The identifier for the BoilerInputPipeType_Valve Object. /// public const uint BoilerInputPipeType_Valve = 128; /// /// The identifier for the BoilerDrumType_LevelIndicator Object. /// public const uint BoilerDrumType_LevelIndicator = 136; /// /// The identifier for the BoilerOutputPipeType_FlowTransmitter2 Object. /// public const uint BoilerOutputPipeType_FlowTransmitter2 = 144; /// /// The identifier for the BoilerType_InputPipe Object. /// public const uint BoilerType_InputPipe = 152; /// /// The identifier for the BoilerType_InputPipe_FlowTransmitter1 Object. /// public const uint BoilerType_InputPipe_FlowTransmitter1 = 153; /// /// The identifier for the BoilerType_InputPipe_Valve Object. /// public const uint BoilerType_InputPipe_Valve = 160; /// /// The identifier for the BoilerType_Drum Object. /// public const uint BoilerType_Drum = 167; /// /// The identifier for the BoilerType_Drum_LevelIndicator Object. /// public const uint BoilerType_Drum_LevelIndicator = 168; /// /// The identifier for the BoilerType_OutputPipe Object. /// public const uint BoilerType_OutputPipe = 175; /// /// The identifier for the BoilerType_OutputPipe_FlowTransmitter2 Object. /// public const uint BoilerType_OutputPipe_FlowTransmitter2 = 176; /// /// The identifier for the BoilerType_FlowController Object. /// public const uint BoilerType_FlowController = 183; /// /// The identifier for the BoilerType_LevelController Object. /// public const uint BoilerType_LevelController = 187; /// /// The identifier for the BoilerType_CustomController Object. /// public const uint BoilerType_CustomController = 191; /// /// The identifier for the BoilerType_Simulation Object. /// public const uint BoilerType_Simulation = 197; } #endregion Object Identifiers #region ObjectType Identifiers /// /// A class that declares constants for all ObjectTypes in the Model Design. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class ObjectTypes { /// /// The identifier for the GenericControllerType ObjectType. /// public const uint GenericControllerType = 4; /// /// The identifier for the GenericSensorType ObjectType. /// public const uint GenericSensorType = 8; /// /// The identifier for the GenericActuatorType ObjectType. /// public const uint GenericActuatorType = 15; /// /// The identifier for the CustomControllerType ObjectType. /// public const uint CustomControllerType = 22; /// /// The identifier for the ValveType ObjectType. /// public const uint ValveType = 28; /// /// The identifier for the LevelControllerType ObjectType. /// public const uint LevelControllerType = 35; /// /// The identifier for the FlowControllerType ObjectType. /// public const uint FlowControllerType = 39; /// /// The identifier for the LevelIndicatorType ObjectType. /// public const uint LevelIndicatorType = 43; /// /// The identifier for the FlowTransmitterType ObjectType. /// public const uint FlowTransmitterType = 50; /// /// The identifier for the BoilerStateMachineType ObjectType. /// public const uint BoilerStateMachineType = 57; /// /// The identifier for the BoilerInputPipeType ObjectType. /// public const uint BoilerInputPipeType = 120; /// /// The identifier for the BoilerDrumType ObjectType. /// public const uint BoilerDrumType = 135; /// /// The identifier for the BoilerOutputPipeType ObjectType. /// public const uint BoilerOutputPipeType = 143; /// /// The identifier for the BoilerType ObjectType. /// public const uint BoilerType = 151; } #endregion ObjectType Identifiers #region ReferenceType Identifiers /// /// A class that declares constants for all ReferenceTypes in the Model Design. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class ReferenceTypes { /// /// The identifier for the FlowTo ReferenceType. /// public const uint FlowTo = 1; /// /// The identifier for the HotFlowTo ReferenceType. /// public const uint HotFlowTo = 2; /// /// The identifier for the SignalTo ReferenceType. /// public const uint SignalTo = 3; } #endregion ReferenceType Identifiers #region Variable Identifiers /// /// A class that declares constants for all Variables in the Model Design. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class Variables { /// /// The identifier for the GenericControllerType_Measurement Variable. /// public const uint GenericControllerType_Measurement = 5; /// /// The identifier for the GenericControllerType_SetPoint Variable. /// public const uint GenericControllerType_SetPoint = 6; /// /// The identifier for the GenericControllerType_ControlOut Variable. /// public const uint GenericControllerType_ControlOut = 7; /// /// The identifier for the GenericSensorType_Output Variable. /// public const uint GenericSensorType_Output = 9; /// /// The identifier for the GenericSensorType_Output_EURange Variable. /// public const uint GenericSensorType_Output_EURange = 13; /// /// The identifier for the GenericActuatorType_Input Variable. /// public const uint GenericActuatorType_Input = 16; /// /// The identifier for the GenericActuatorType_Input_EURange Variable. /// public const uint GenericActuatorType_Input_EURange = 20; /// /// The identifier for the CustomControllerType_Input1 Variable. /// public const uint CustomControllerType_Input1 = 23; /// /// The identifier for the CustomControllerType_Input2 Variable. /// public const uint CustomControllerType_Input2 = 24; /// /// The identifier for the CustomControllerType_Input3 Variable. /// public const uint CustomControllerType_Input3 = 25; /// /// The identifier for the CustomControllerType_ControlOut Variable. /// public const uint CustomControllerType_ControlOut = 26; /// /// The identifier for the CustomControllerType_DescriptionX Variable. /// public const uint CustomControllerType_DescriptionX = 27; /// /// The identifier for the BoilerStateMachineType_UpdateRate Variable. /// public const uint BoilerStateMachineType_UpdateRate = 119; /// /// The identifier for the BoilerType_InputPipe_FlowTransmitter1_Output Variable. /// public const uint BoilerType_InputPipe_FlowTransmitter1_Output = 154; /// /// The identifier for the BoilerType_InputPipe_Valve_Input Variable. /// public const uint BoilerType_InputPipe_Valve_Input = 161; /// /// The identifier for the BoilerType_Drum_LevelIndicator_Output Variable. /// public const uint BoilerType_Drum_LevelIndicator_Output = 169; /// /// The identifier for the BoilerType_OutputPipe_FlowTransmitter2_Output Variable. /// public const uint BoilerType_OutputPipe_FlowTransmitter2_Output = 177; /// /// The identifier for the BoilerType_FlowController_Measurement Variable. /// public const uint BoilerType_FlowController_Measurement = 184; /// /// The identifier for the BoilerType_FlowController_SetPoint Variable. /// public const uint BoilerType_FlowController_SetPoint = 185; /// /// The identifier for the BoilerType_FlowController_ControlOut Variable. /// public const uint BoilerType_FlowController_ControlOut = 186; /// /// The identifier for the BoilerType_LevelController_Measurement Variable. /// public const uint BoilerType_LevelController_Measurement = 188; /// /// The identifier for the BoilerType_LevelController_SetPoint Variable. /// public const uint BoilerType_LevelController_SetPoint = 189; /// /// The identifier for the BoilerType_LevelController_ControlOut Variable. /// public const uint BoilerType_LevelController_ControlOut = 190; /// /// The identifier for the BoilerType_CustomController_Input1 Variable. /// public const uint BoilerType_CustomController_Input1 = 192; /// /// The identifier for the BoilerType_CustomController_Input2 Variable. /// public const uint BoilerType_CustomController_Input2 = 193; /// /// The identifier for the BoilerType_CustomController_Input3 Variable. /// public const uint BoilerType_CustomController_Input3 = 194; /// /// The identifier for the BoilerType_CustomController_ControlOut Variable. /// public const uint BoilerType_CustomController_ControlOut = 195; /// /// The identifier for the BoilerType_CustomController_DescriptionX Variable. /// public const uint BoilerType_CustomController_DescriptionX = 196; /// /// The identifier for the BoilerType_Simulation_UpdateRate Variable. /// public const uint BoilerType_Simulation_UpdateRate = 229; } #endregion Variable Identifiers #region Object Node Identifiers /// /// A class that declares constants for all Objects in the Model Design. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class ObjectIds { /// /// The identifier for the BoilerInputPipeType_FlowTransmitter1 Object. /// public static readonly ExpandedNodeId BoilerInputPipeType_FlowTransmitter1 = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.Objects.BoilerInputPipeType_FlowTransmitter1, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the BoilerInputPipeType_Valve Object. /// public static readonly ExpandedNodeId BoilerInputPipeType_Valve = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.Objects.BoilerInputPipeType_Valve, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the BoilerDrumType_LevelIndicator Object. /// public static readonly ExpandedNodeId BoilerDrumType_LevelIndicator = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.Objects.BoilerDrumType_LevelIndicator, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the BoilerOutputPipeType_FlowTransmitter2 Object. /// public static readonly ExpandedNodeId BoilerOutputPipeType_FlowTransmitter2 = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.Objects.BoilerOutputPipeType_FlowTransmitter2, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the BoilerType_InputPipe Object. /// public static readonly ExpandedNodeId BoilerType_InputPipe = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.Objects.BoilerType_InputPipe, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the BoilerType_InputPipe_FlowTransmitter1 Object. /// public static readonly ExpandedNodeId BoilerType_InputPipe_FlowTransmitter1 = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.Objects.BoilerType_InputPipe_FlowTransmitter1, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the BoilerType_InputPipe_Valve Object. /// public static readonly ExpandedNodeId BoilerType_InputPipe_Valve = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.Objects.BoilerType_InputPipe_Valve, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the BoilerType_Drum Object. /// public static readonly ExpandedNodeId BoilerType_Drum = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.Objects.BoilerType_Drum, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the BoilerType_Drum_LevelIndicator Object. /// public static readonly ExpandedNodeId BoilerType_Drum_LevelIndicator = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.Objects.BoilerType_Drum_LevelIndicator, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the BoilerType_OutputPipe Object. /// public static readonly ExpandedNodeId BoilerType_OutputPipe = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.Objects.BoilerType_OutputPipe, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the BoilerType_OutputPipe_FlowTransmitter2 Object. /// public static readonly ExpandedNodeId BoilerType_OutputPipe_FlowTransmitter2 = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.Objects.BoilerType_OutputPipe_FlowTransmitter2, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the BoilerType_FlowController Object. /// public static readonly ExpandedNodeId BoilerType_FlowController = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.Objects.BoilerType_FlowController, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the BoilerType_LevelController Object. /// public static readonly ExpandedNodeId BoilerType_LevelController = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.Objects.BoilerType_LevelController, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the BoilerType_CustomController Object. /// public static readonly ExpandedNodeId BoilerType_CustomController = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.Objects.BoilerType_CustomController, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the BoilerType_Simulation Object. /// public static readonly ExpandedNodeId BoilerType_Simulation = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.Objects.BoilerType_Simulation, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); } #endregion Object Node Identifiers #region ObjectType Node Identifiers /// /// A class that declares constants for all ObjectTypes in the Model Design. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class ObjectTypeIds { /// /// The identifier for the GenericControllerType ObjectType. /// public static readonly ExpandedNodeId GenericControllerType = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.ObjectTypes.GenericControllerType, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the GenericSensorType ObjectType. /// public static readonly ExpandedNodeId GenericSensorType = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.ObjectTypes.GenericSensorType, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the GenericActuatorType ObjectType. /// public static readonly ExpandedNodeId GenericActuatorType = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.ObjectTypes.GenericActuatorType, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the CustomControllerType ObjectType. /// public static readonly ExpandedNodeId CustomControllerType = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.ObjectTypes.CustomControllerType, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the ValveType ObjectType. /// public static readonly ExpandedNodeId ValveType = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.ObjectTypes.ValveType, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the LevelControllerType ObjectType. /// public static readonly ExpandedNodeId LevelControllerType = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.ObjectTypes.LevelControllerType, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the FlowControllerType ObjectType. /// public static readonly ExpandedNodeId FlowControllerType = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.ObjectTypes.FlowControllerType, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the LevelIndicatorType ObjectType. /// public static readonly ExpandedNodeId LevelIndicatorType = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.ObjectTypes.LevelIndicatorType, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the FlowTransmitterType ObjectType. /// public static readonly ExpandedNodeId FlowTransmitterType = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.ObjectTypes.FlowTransmitterType, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the BoilerStateMachineType ObjectType. /// public static readonly ExpandedNodeId BoilerStateMachineType = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.ObjectTypes.BoilerStateMachineType, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the BoilerInputPipeType ObjectType. /// public static readonly ExpandedNodeId BoilerInputPipeType = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.ObjectTypes.BoilerInputPipeType, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the BoilerDrumType ObjectType. /// public static readonly ExpandedNodeId BoilerDrumType = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.ObjectTypes.BoilerDrumType, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the BoilerOutputPipeType ObjectType. /// public static readonly ExpandedNodeId BoilerOutputPipeType = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.ObjectTypes.BoilerOutputPipeType, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the BoilerType ObjectType. /// public static readonly ExpandedNodeId BoilerType = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.ObjectTypes.BoilerType, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); } #endregion ObjectType Node Identifiers #region ReferenceType Node Identifiers /// /// A class that declares constants for all ReferenceTypes in the Model Design. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class ReferenceTypeIds { /// /// The identifier for the FlowTo ReferenceType. /// public static readonly ExpandedNodeId FlowTo = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.ReferenceTypes.FlowTo, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the HotFlowTo ReferenceType. /// public static readonly ExpandedNodeId HotFlowTo = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.ReferenceTypes.HotFlowTo, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the SignalTo ReferenceType. /// public static readonly ExpandedNodeId SignalTo = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.ReferenceTypes.SignalTo, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); } #endregion ReferenceType Node Identifiers #region Variable Node Identifiers /// /// A class that declares constants for all Variables in the Model Design. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class VariableIds { /// /// The identifier for the GenericControllerType_Measurement Variable. /// public static readonly ExpandedNodeId GenericControllerType_Measurement = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.Variables.GenericControllerType_Measurement, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the GenericControllerType_SetPoint Variable. /// public static readonly ExpandedNodeId GenericControllerType_SetPoint = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.Variables.GenericControllerType_SetPoint, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the GenericControllerType_ControlOut Variable. /// public static readonly ExpandedNodeId GenericControllerType_ControlOut = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.Variables.GenericControllerType_ControlOut, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the GenericSensorType_Output Variable. /// public static readonly ExpandedNodeId GenericSensorType_Output = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.Variables.GenericSensorType_Output, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the GenericSensorType_Output_EURange Variable. /// public static readonly ExpandedNodeId GenericSensorType_Output_EURange = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.Variables.GenericSensorType_Output_EURange, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the GenericActuatorType_Input Variable. /// public static readonly ExpandedNodeId GenericActuatorType_Input = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.Variables.GenericActuatorType_Input, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the GenericActuatorType_Input_EURange Variable. /// public static readonly ExpandedNodeId GenericActuatorType_Input_EURange = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.Variables.GenericActuatorType_Input_EURange, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the CustomControllerType_Input1 Variable. /// public static readonly ExpandedNodeId CustomControllerType_Input1 = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.Variables.CustomControllerType_Input1, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the CustomControllerType_Input2 Variable. /// public static readonly ExpandedNodeId CustomControllerType_Input2 = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.Variables.CustomControllerType_Input2, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the CustomControllerType_Input3 Variable. /// public static readonly ExpandedNodeId CustomControllerType_Input3 = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.Variables.CustomControllerType_Input3, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the CustomControllerType_ControlOut Variable. /// public static readonly ExpandedNodeId CustomControllerType_ControlOut = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.Variables.CustomControllerType_ControlOut, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the CustomControllerType_DescriptionX Variable. /// public static readonly ExpandedNodeId CustomControllerType_DescriptionX = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.Variables.CustomControllerType_DescriptionX, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the BoilerStateMachineType_UpdateRate Variable. /// public static readonly ExpandedNodeId BoilerStateMachineType_UpdateRate = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.Variables.BoilerStateMachineType_UpdateRate, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the BoilerType_InputPipe_FlowTransmitter1_Output Variable. /// public static readonly ExpandedNodeId BoilerType_InputPipe_FlowTransmitter1_Output = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.Variables.BoilerType_InputPipe_FlowTransmitter1_Output, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the BoilerType_InputPipe_Valve_Input Variable. /// public static readonly ExpandedNodeId BoilerType_InputPipe_Valve_Input = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.Variables.BoilerType_InputPipe_Valve_Input, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the BoilerType_Drum_LevelIndicator_Output Variable. /// public static readonly ExpandedNodeId BoilerType_Drum_LevelIndicator_Output = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.Variables.BoilerType_Drum_LevelIndicator_Output, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the BoilerType_OutputPipe_FlowTransmitter2_Output Variable. /// public static readonly ExpandedNodeId BoilerType_OutputPipe_FlowTransmitter2_Output = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.Variables.BoilerType_OutputPipe_FlowTransmitter2_Output, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the BoilerType_FlowController_Measurement Variable. /// public static readonly ExpandedNodeId BoilerType_FlowController_Measurement = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.Variables.BoilerType_FlowController_Measurement, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the BoilerType_FlowController_SetPoint Variable. /// public static readonly ExpandedNodeId BoilerType_FlowController_SetPoint = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.Variables.BoilerType_FlowController_SetPoint, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the BoilerType_FlowController_ControlOut Variable. /// public static readonly ExpandedNodeId BoilerType_FlowController_ControlOut = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.Variables.BoilerType_FlowController_ControlOut, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the BoilerType_LevelController_Measurement Variable. /// public static readonly ExpandedNodeId BoilerType_LevelController_Measurement = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.Variables.BoilerType_LevelController_Measurement, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the BoilerType_LevelController_SetPoint Variable. /// public static readonly ExpandedNodeId BoilerType_LevelController_SetPoint = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.Variables.BoilerType_LevelController_SetPoint, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the BoilerType_LevelController_ControlOut Variable. /// public static readonly ExpandedNodeId BoilerType_LevelController_ControlOut = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.Variables.BoilerType_LevelController_ControlOut, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the BoilerType_CustomController_Input1 Variable. /// public static readonly ExpandedNodeId BoilerType_CustomController_Input1 = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.Variables.BoilerType_CustomController_Input1, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the BoilerType_CustomController_Input2 Variable. /// public static readonly ExpandedNodeId BoilerType_CustomController_Input2 = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.Variables.BoilerType_CustomController_Input2, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the BoilerType_CustomController_Input3 Variable. /// public static readonly ExpandedNodeId BoilerType_CustomController_Input3 = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.Variables.BoilerType_CustomController_Input3, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the BoilerType_CustomController_ControlOut Variable. /// public static readonly ExpandedNodeId BoilerType_CustomController_ControlOut = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.Variables.BoilerType_CustomController_ControlOut, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the BoilerType_CustomController_DescriptionX Variable. /// public static readonly ExpandedNodeId BoilerType_CustomController_DescriptionX = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.Variables.BoilerType_CustomController_DescriptionX, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the BoilerType_Simulation_UpdateRate Variable. /// public static readonly ExpandedNodeId BoilerType_Simulation_UpdateRate = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.Variables.BoilerType_Simulation_UpdateRate, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); } #endregion Variable Node Identifiers #region BrowseName Declarations /// /// Declares all of the BrowseNames used in the Model Design. /// public static partial class BrowseNames { /// /// The BrowseName for the BoilerDrumType component. /// public const string BoilerDrumType = "BoilerDrumType"; /// /// The BrowseName for the BoilerInputPipeType component. /// public const string BoilerInputPipeType = "BoilerInputPipeType"; /// /// The BrowseName for the BoilerOutputPipeType component. /// public const string BoilerOutputPipeType = "BoilerOutputPipeType"; /// /// The BrowseName for the BoilerStateMachineType component. /// public const string BoilerStateMachineType = "BoilerStateMachineType"; /// /// The BrowseName for the BoilerType component. /// public const string BoilerType = "BoilerType"; /// /// The BrowseName for the ControlOut component. /// public const string ControlOut = "ControlOut"; /// /// The BrowseName for the CustomController component. /// public const string CustomController = "CCX001"; /// /// The BrowseName for the CustomControllerType component. /// public const string CustomControllerType = "CustomControllerType"; /// /// The BrowseName for the DescriptionX component. /// public const string DescriptionX = "Description"; /// /// The BrowseName for the Drum component. /// public const string Drum = "DrumX001"; /// /// The BrowseName for the FlowController component. /// public const string FlowController = "FCX001"; /// /// The BrowseName for the FlowControllerType component. /// public const string FlowControllerType = "FlowControllerType"; /// /// The BrowseName for the FlowTo component. /// public const string FlowTo = "FlowTo"; /// /// The BrowseName for the FlowTransmitter1 component. /// public const string FlowTransmitter1 = "FTX001"; /// /// The BrowseName for the FlowTransmitter2 component. /// public const string FlowTransmitter2 = "FTX002"; /// /// The BrowseName for the FlowTransmitterType component. /// public const string FlowTransmitterType = "FlowTransmitterType"; /// /// The BrowseName for the GenericActuatorType component. /// public const string GenericActuatorType = "GenericActuatorType"; /// /// The BrowseName for the GenericControllerType component. /// public const string GenericControllerType = "GenericControllerType"; /// /// The BrowseName for the GenericSensorType component. /// public const string GenericSensorType = "GenericSensorType"; /// /// The BrowseName for the HotFlowTo component. /// public const string HotFlowTo = "HotFlowTo"; /// /// The BrowseName for the Input component. /// public const string Input = "Input"; /// /// The BrowseName for the Input1 component. /// public const string Input1 = "Input1"; /// /// The BrowseName for the Input2 component. /// public const string Input2 = "Input2"; /// /// The BrowseName for the Input3 component. /// public const string Input3 = "Input3"; /// /// The BrowseName for the InputPipe component. /// public const string InputPipe = "PipeX001"; /// /// The BrowseName for the LevelController component. /// public const string LevelController = "LCX001"; /// /// The BrowseName for the LevelControllerType component. /// public const string LevelControllerType = "LevelControllerType"; /// /// The BrowseName for the LevelIndicator component. /// public const string LevelIndicator = "LIX001"; /// /// The BrowseName for the LevelIndicatorType component. /// public const string LevelIndicatorType = "LevelIndicatorType"; /// /// The BrowseName for the Measurement component. /// public const string Measurement = "Measurement"; /// /// The BrowseName for the Output component. /// public const string Output = "Output"; /// /// The BrowseName for the OutputPipe component. /// public const string OutputPipe = "PipeX002"; /// /// The BrowseName for the SetPoint component. /// public const string SetPoint = "SetPoint"; /// /// The BrowseName for the SignalTo component. /// public const string SignalTo = "SignalTo"; /// /// The BrowseName for the Simulation component. /// public const string Simulation = "Simulation"; /// /// The BrowseName for the UpdateRate component. /// public const string UpdateRate = "UpdateRate"; /// /// The BrowseName for the Valve component. /// public const string Valve = "ValveX001"; /// /// The BrowseName for the ValveType component. /// public const string ValveType = "ValveType"; } #endregion BrowseName Declarations #region Namespace Declarations /// /// Defines constants for all namespaces referenced by the model design. /// public static partial class Namespaces { /// /// The URI for the OpcUa namespace (.NET code namespace is 'Opc.Ua'). /// public const string OpcUa = "http://opcfoundation.org/UA/"; /// /// The URI for the OpcUaXsd namespace (.NET code namespace is 'Opc.Ua'). /// public const string OpcUaXsd = "http://opcfoundation.org/UA/2008/02/Types.xsd"; /// /// The URI for the BoilerType namespace (.NET code namespace is 'tempuri.org.UA.Examples.BoilerType'). /// public const string BoilerType = "http://tempuri.org/UA/Examples/BoilerType"; /// /// The URI for the BoilerTypeXsd namespace (.NET code namespace is 'tempuri.org.UA.Examples.BoilerType'). /// public const string BoilerTypeXsd = "http://tempuri.org/UA/Examples/BoilerType/Types.xsd"; } #endregion Namespace Declarations #region GenericControllerState Class #if (!OPCUA_EXCLUDE_GenericControllerState) /// /// Stores an instance of the GenericControllerType ObjectType. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public partial class GenericControllerState : BaseObjectState { #region Constructors /// /// Initializes the type with its default attribute values. /// public GenericControllerState(NodeState parent) : base(parent) { } /// /// Returns the id of the default type definition node for the instance. /// protected override NodeId GetDefaultTypeDefinitionId(NamespaceTable namespaceUris) { return NodeId.Create(tempuri.org.UA.Examples.BoilerType.ObjectTypes.GenericControllerType, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType, namespaceUris); } #if (!OPCUA_EXCLUDE_InitializationStrings) /// /// Initializes the instance. /// protected override void Initialize(ISystemContext context) { Initialize(context, InitializationString); InitializeOptionalChildren(context); } /// /// Initializes the any option children defined for the instance. /// protected override void InitializeOptionalChildren(ISystemContext context) { base.InitializeOptionalChildren(context); } #region Initialization String private const string InitializationString = "AQAAACkAAABodHRwOi8vdGVtcHVyaS5vcmcvVUEvRXhhbXBsZXMvQm9pbGVyVHlwZf////8EYIAAAQAA" + "AAEAHQAAAEdlbmVyaWNDb250cm9sbGVyVHlwZUluc3RhbmNlAQEEAAEBBAD/////AwAAABVgiQoCAAAA" + "AQALAAAATWVhc3VyZW1lbnQBAQUAAC4ARAUAAAAAC/////8BAf////8AAAAAFWCJCgIAAAABAAgAAABT" + "ZXRQb2ludAEBBgAALgBEBgAAAAAL/////wMD/////wAAAAAVYIkKAgAAAAEACgAAAENvbnRyb2xPdXQB" + "AQcAAC4ARAcAAAAAC/////8BAf////8AAAAA"; #endregion Initialization String #endif #endregion Constructors #region Public Properties /// /// A description for the Measurement Property. /// public PropertyState Measurement { get => m_measurement; set { if (!Object.ReferenceEquals(m_measurement, value)) { ChangeMasks |= NodeStateChangeMasks.Children; } m_measurement = value; } } /// /// A description for the SetPoint Property. /// public PropertyState SetPoint { get => m_setPoint; set { if (!Object.ReferenceEquals(m_setPoint, value)) { ChangeMasks |= NodeStateChangeMasks.Children; } m_setPoint = value; } } /// /// A description for the ControlOut Property. /// public PropertyState ControlOut { get => m_controlOut; set { if (!Object.ReferenceEquals(m_controlOut, value)) { ChangeMasks |= NodeStateChangeMasks.Children; } m_controlOut = value; } } #endregion Public Properties #region Overridden Methods /// /// Populates a list with the children that belong to the node. /// /// The context for the system being accessed. /// The list of children to populate. public override void GetChildren( ISystemContext context, IList children) { if (m_measurement != null) { children.Add(m_measurement); } if (m_setPoint != null) { children.Add(m_setPoint); } if (m_controlOut != null) { children.Add(m_controlOut); } base.GetChildren(context, children); } /// /// Finds the child with the specified browse name. /// protected override BaseInstanceState FindChild( ISystemContext context, QualifiedName browseName, bool createOrReplace, BaseInstanceState replacement) { if (QualifiedName.IsNull(browseName)) { return null; } BaseInstanceState instance = null; switch (browseName.Name) { case tempuri.org.UA.Examples.BoilerType.BrowseNames.Measurement: { if (createOrReplace) { if (Measurement == null) { if (replacement == null) { Measurement = new PropertyState(this); } else { Measurement = (PropertyState)replacement; } } } instance = Measurement; break; } case tempuri.org.UA.Examples.BoilerType.BrowseNames.SetPoint: { if (createOrReplace) { if (SetPoint == null) { if (replacement == null) { SetPoint = new PropertyState(this); } else { SetPoint = (PropertyState)replacement; } } } instance = SetPoint; break; } case tempuri.org.UA.Examples.BoilerType.BrowseNames.ControlOut: { if (createOrReplace) { if (ControlOut == null) { if (replacement == null) { ControlOut = new PropertyState(this); } else { ControlOut = (PropertyState)replacement; } } } instance = ControlOut; break; } } if (instance != null) { return instance; } return base.FindChild(context, browseName, createOrReplace, replacement); } #endregion Overridden Methods #region Private Fields private PropertyState m_measurement; private PropertyState m_setPoint; private PropertyState m_controlOut; #endregion Private Fields } #endif #endregion GenericControllerState Class #region GenericSensorState Class #if (!OPCUA_EXCLUDE_GenericSensorState) /// /// Stores an instance of the GenericSensorType ObjectType. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public partial class GenericSensorState : BaseObjectState { #region Constructors /// /// Initializes the type with its default attribute values. /// public GenericSensorState(NodeState parent) : base(parent) { } /// /// Returns the id of the default type definition node for the instance. /// protected override NodeId GetDefaultTypeDefinitionId(NamespaceTable namespaceUris) { return NodeId.Create(tempuri.org.UA.Examples.BoilerType.ObjectTypes.GenericSensorType, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType, namespaceUris); } #if (!OPCUA_EXCLUDE_InitializationStrings) /// /// Initializes the instance. /// protected override void Initialize(ISystemContext context) { Initialize(context, InitializationString); InitializeOptionalChildren(context); } /// /// Initializes the any option children defined for the instance. /// protected override void InitializeOptionalChildren(ISystemContext context) { base.InitializeOptionalChildren(context); } #region Initialization String private const string InitializationString = "AQAAACkAAABodHRwOi8vdGVtcHVyaS5vcmcvVUEvRXhhbXBsZXMvQm9pbGVyVHlwZf////8EYIAAAQAA" + "AAEAGQAAAEdlbmVyaWNTZW5zb3JUeXBlSW5zdGFuY2UBAQgAAQEIAP////8BAAAAFWCJCgIAAAABAAYA" + "AABPdXRwdXQBAQkAAC8BAEAJCQAAAAAL/////wEB/////wEAAAAVYIkKAgAAAAAABwAAAEVVUmFuZ2UB" + "AQ0AAC4ARA0AAAABAHQD/////wEB/////wAAAAA="; #endregion Initialization String #endif #endregion Constructors #region Public Properties /// /// A description for the Output Variable. /// public AnalogItemState Output { get => m_output; set { if (!Object.ReferenceEquals(m_output, value)) { ChangeMasks |= NodeStateChangeMasks.Children; } m_output = value; } } #endregion Public Properties #region Overridden Methods /// /// Populates a list with the children that belong to the node. /// /// The context for the system being accessed. /// The list of children to populate. public override void GetChildren( ISystemContext context, IList children) { if (m_output != null) { children.Add(m_output); } base.GetChildren(context, children); } /// /// Finds the child with the specified browse name. /// protected override BaseInstanceState FindChild( ISystemContext context, QualifiedName browseName, bool createOrReplace, BaseInstanceState replacement) { if (QualifiedName.IsNull(browseName)) { return null; } BaseInstanceState instance = null; switch (browseName.Name) { case tempuri.org.UA.Examples.BoilerType.BrowseNames.Output: { if (createOrReplace) { if (Output == null) { if (replacement == null) { Output = new AnalogItemState(this); } else { Output = (AnalogItemState)replacement; } } } instance = Output; break; } } if (instance != null) { return instance; } return base.FindChild(context, browseName, createOrReplace, replacement); } #endregion Overridden Methods #region Private Fields private AnalogItemState m_output; #endregion Private Fields } #endif #endregion GenericSensorState Class #region GenericActuatorState Class #if (!OPCUA_EXCLUDE_GenericActuatorState) /// /// Stores an instance of the GenericActuatorType ObjectType. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public partial class GenericActuatorState : BaseObjectState { #region Constructors /// /// Initializes the type with its default attribute values. /// public GenericActuatorState(NodeState parent) : base(parent) { } /// /// Returns the id of the default type definition node for the instance. /// protected override NodeId GetDefaultTypeDefinitionId(NamespaceTable namespaceUris) { return NodeId.Create(tempuri.org.UA.Examples.BoilerType.ObjectTypes.GenericActuatorType, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType, namespaceUris); } #if (!OPCUA_EXCLUDE_InitializationStrings) /// /// Initializes the instance. /// protected override void Initialize(ISystemContext context) { Initialize(context, InitializationString); InitializeOptionalChildren(context); } /// /// Initializes the any option children defined for the instance. /// protected override void InitializeOptionalChildren(ISystemContext context) { base.InitializeOptionalChildren(context); } #region Initialization String private const string InitializationString = "AQAAACkAAABodHRwOi8vdGVtcHVyaS5vcmcvVUEvRXhhbXBsZXMvQm9pbGVyVHlwZf////8EYIAAAQAA" + "AAEAGwAAAEdlbmVyaWNBY3R1YXRvclR5cGVJbnN0YW5jZQEBDwABAQ8A/////wEAAAAVYIkKAgAAAAEA" + "BQAAAElucHV0AQEQAAAvAQBACRAAAAAAC/////8CAv////8BAAAAFWCJCgIAAAAAAAcAAABFVVJhbmdl" + "AQEUAAAuAEQUAAAAAQB0A/////8BAf////8AAAAA"; #endregion Initialization String #endif #endregion Constructors #region Public Properties /// /// A description for the Input Variable. /// public AnalogItemState Input { get => m_input; set { if (!Object.ReferenceEquals(m_input, value)) { ChangeMasks |= NodeStateChangeMasks.Children; } m_input = value; } } #endregion Public Properties #region Overridden Methods /// /// Populates a list with the children that belong to the node. /// /// The context for the system being accessed. /// The list of children to populate. public override void GetChildren( ISystemContext context, IList children) { if (m_input != null) { children.Add(m_input); } base.GetChildren(context, children); } /// /// Finds the child with the specified browse name. /// protected override BaseInstanceState FindChild( ISystemContext context, QualifiedName browseName, bool createOrReplace, BaseInstanceState replacement) { if (QualifiedName.IsNull(browseName)) { return null; } BaseInstanceState instance = null; switch (browseName.Name) { case tempuri.org.UA.Examples.BoilerType.BrowseNames.Input: { if (createOrReplace) { if (Input == null) { if (replacement == null) { Input = new AnalogItemState(this); } else { Input = (AnalogItemState)replacement; } } } instance = Input; break; } } if (instance != null) { return instance; } return base.FindChild(context, browseName, createOrReplace, replacement); } #endregion Overridden Methods #region Private Fields private AnalogItemState m_input; #endregion Private Fields } #endif #endregion GenericActuatorState Class #region CustomControllerState Class #if (!OPCUA_EXCLUDE_CustomControllerState) /// /// Stores an instance of the CustomControllerType ObjectType. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public partial class CustomControllerState : BaseObjectState { #region Constructors /// /// Initializes the type with its default attribute values. /// public CustomControllerState(NodeState parent) : base(parent) { } /// /// Returns the id of the default type definition node for the instance. /// protected override NodeId GetDefaultTypeDefinitionId(NamespaceTable namespaceUris) { return NodeId.Create(tempuri.org.UA.Examples.BoilerType.ObjectTypes.CustomControllerType, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType, namespaceUris); } #if (!OPCUA_EXCLUDE_InitializationStrings) /// /// Initializes the instance. /// protected override void Initialize(ISystemContext context) { Initialize(context, InitializationString); InitializeOptionalChildren(context); } /// /// Initializes the any option children defined for the instance. /// protected override void InitializeOptionalChildren(ISystemContext context) { base.InitializeOptionalChildren(context); } #region Initialization String private const string InitializationString = "AQAAACkAAABodHRwOi8vdGVtcHVyaS5vcmcvVUEvRXhhbXBsZXMvQm9pbGVyVHlwZf////8EYIAAAQAA" + "AAEAHAAAAEN1c3RvbUNvbnRyb2xsZXJUeXBlSW5zdGFuY2UBARYAAQEWAP////8FAAAAFWCJCgIAAAAB" + "AAYAAABJbnB1dDEBARcAAC4ARBcAAAAAC/////8CAv////8AAAAAFWCJCgIAAAABAAYAAABJbnB1dDIB" + "ARgAAC4ARBgAAAAAC/////8CAv////8AAAAAFWCJCgIAAAABAAYAAABJbnB1dDMBARkAAC4ARBkAAAAA" + "C/////8CAv////8AAAAAFWCJCgIAAAABAAoAAABDb250cm9sT3V0AQEaAAAuAEQaAAAAAAv/////AQH/" + "////AAAAABVgyQoCAAAADAAAAERlc2NyaXB0aW9uWAEACwAAAERlc2NyaXB0aW9uAQEbAAAuAEQbAAAA" + "ABX/////AQH/////AAAAAA=="; #endregion Initialization String #endif #endregion Constructors #region Public Properties /// /// A description for the Input1 Property. /// public PropertyState Input1 { get => m_input1; set { if (!Object.ReferenceEquals(m_input1, value)) { ChangeMasks |= NodeStateChangeMasks.Children; } m_input1 = value; } } /// /// A description for the Input2 Property. /// public PropertyState Input2 { get => m_input2; set { if (!Object.ReferenceEquals(m_input2, value)) { ChangeMasks |= NodeStateChangeMasks.Children; } m_input2 = value; } } /// /// A description for the Input3 Property. /// public PropertyState Input3 { get => m_input3; set { if (!Object.ReferenceEquals(m_input3, value)) { ChangeMasks |= NodeStateChangeMasks.Children; } m_input3 = value; } } /// /// A description for the ControlOut Property. /// public PropertyState ControlOut { get => m_controlOut; set { if (!Object.ReferenceEquals(m_controlOut, value)) { ChangeMasks |= NodeStateChangeMasks.Children; } m_controlOut = value; } } /// /// A description for the Description Property. /// public PropertyState DescriptionX { get => m_descriptionX; set { if (!Object.ReferenceEquals(m_descriptionX, value)) { ChangeMasks |= NodeStateChangeMasks.Children; } m_descriptionX = value; } } #endregion Public Properties #region Overridden Methods /// /// Populates a list with the children that belong to the node. /// /// The context for the system being accessed. /// The list of children to populate. public override void GetChildren( ISystemContext context, IList children) { if (m_input1 != null) { children.Add(m_input1); } if (m_input2 != null) { children.Add(m_input2); } if (m_input3 != null) { children.Add(m_input3); } if (m_controlOut != null) { children.Add(m_controlOut); } if (m_descriptionX != null) { children.Add(m_descriptionX); } base.GetChildren(context, children); } /// /// Finds the child with the specified browse name. /// protected override BaseInstanceState FindChild( ISystemContext context, QualifiedName browseName, bool createOrReplace, BaseInstanceState replacement) { if (QualifiedName.IsNull(browseName)) { return null; } BaseInstanceState instance = null; switch (browseName.Name) { case tempuri.org.UA.Examples.BoilerType.BrowseNames.Input1: { if (createOrReplace) { if (Input1 == null) { if (replacement == null) { Input1 = new PropertyState(this); } else { Input1 = (PropertyState)replacement; } } } instance = Input1; break; } case tempuri.org.UA.Examples.BoilerType.BrowseNames.Input2: { if (createOrReplace) { if (Input2 == null) { if (replacement == null) { Input2 = new PropertyState(this); } else { Input2 = (PropertyState)replacement; } } } instance = Input2; break; } case tempuri.org.UA.Examples.BoilerType.BrowseNames.Input3: { if (createOrReplace) { if (Input3 == null) { if (replacement == null) { Input3 = new PropertyState(this); } else { Input3 = (PropertyState)replacement; } } } instance = Input3; break; } case tempuri.org.UA.Examples.BoilerType.BrowseNames.ControlOut: { if (createOrReplace) { if (ControlOut == null) { if (replacement == null) { ControlOut = new PropertyState(this); } else { ControlOut = (PropertyState)replacement; } } } instance = ControlOut; break; } case tempuri.org.UA.Examples.BoilerType.BrowseNames.DescriptionX: { if (createOrReplace) { if (DescriptionX == null) { if (replacement == null) { DescriptionX = new PropertyState(this); } else { DescriptionX = (PropertyState)replacement; } } } instance = DescriptionX; break; } } if (instance != null) { return instance; } return base.FindChild(context, browseName, createOrReplace, replacement); } #endregion Overridden Methods #region Private Fields private PropertyState m_input1; private PropertyState m_input2; private PropertyState m_input3; private PropertyState m_controlOut; private PropertyState m_descriptionX; #endregion Private Fields } #endif #endregion CustomControllerState Class #region ValveState Class #if (!OPCUA_EXCLUDE_ValveState) /// /// Stores an instance of the ValveType ObjectType. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public partial class ValveState : GenericActuatorState { #region Constructors /// /// Initializes the type with its default attribute values. /// public ValveState(NodeState parent) : base(parent) { } /// /// Returns the id of the default type definition node for the instance. /// protected override NodeId GetDefaultTypeDefinitionId(NamespaceTable namespaceUris) { return NodeId.Create(tempuri.org.UA.Examples.BoilerType.ObjectTypes.ValveType, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType, namespaceUris); } #if (!OPCUA_EXCLUDE_InitializationStrings) /// /// Initializes the instance. /// protected override void Initialize(ISystemContext context) { Initialize(context, InitializationString); InitializeOptionalChildren(context); } /// /// Initializes the any option children defined for the instance. /// protected override void InitializeOptionalChildren(ISystemContext context) { base.InitializeOptionalChildren(context); } #region Initialization String private const string InitializationString = "AQAAACkAAABodHRwOi8vdGVtcHVyaS5vcmcvVUEvRXhhbXBsZXMvQm9pbGVyVHlwZf////8EYIAAAQAA" + "AAEAEQAAAFZhbHZlVHlwZUluc3RhbmNlAQEcAAEBHAD/////AQAAABVgiQoCAAAAAQAFAAAASW5wdXQB" + "AR0AAC8BAEAJHQAAAAAL/////wIC/////wEAAAAVYIkKAgAAAAAABwAAAEVVUmFuZ2UBASEAAC4ARCEA" + "AAABAHQD/////wEB/////wAAAAA="; #endregion Initialization String #endif #endregion Constructors } #endif #endregion ValveState Class #region LevelControllerState Class #if (!OPCUA_EXCLUDE_LevelControllerState) /// /// Stores an instance of the LevelControllerType ObjectType. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public partial class LevelControllerState : GenericControllerState { #region Constructors /// /// Initializes the type with its default attribute values. /// public LevelControllerState(NodeState parent) : base(parent) { } /// /// Returns the id of the default type definition node for the instance. /// protected override NodeId GetDefaultTypeDefinitionId(NamespaceTable namespaceUris) { return NodeId.Create(tempuri.org.UA.Examples.BoilerType.ObjectTypes.LevelControllerType, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType, namespaceUris); } #if (!OPCUA_EXCLUDE_InitializationStrings) /// /// Initializes the instance. /// protected override void Initialize(ISystemContext context) { Initialize(context, InitializationString); InitializeOptionalChildren(context); } /// /// Initializes the any option children defined for the instance. /// protected override void InitializeOptionalChildren(ISystemContext context) { base.InitializeOptionalChildren(context); } #region Initialization String private const string InitializationString = "AQAAACkAAABodHRwOi8vdGVtcHVyaS5vcmcvVUEvRXhhbXBsZXMvQm9pbGVyVHlwZf////8EYIAAAQAA" + "AAEAGwAAAExldmVsQ29udHJvbGxlclR5cGVJbnN0YW5jZQEBIwABASMA/////wMAAAAVYIkKAgAAAAEA" + "CwAAAE1lYXN1cmVtZW50AQEkAAAuAEQkAAAAAAv/////AQH/////AAAAABVgiQoCAAAAAQAIAAAAU2V0" + "UG9pbnQBASUAAC4ARCUAAAAAC/////8DA/////8AAAAAFWCJCgIAAAABAAoAAABDb250cm9sT3V0AQEm" + "AAAuAEQmAAAAAAv/////AQH/////AAAAAA=="; #endregion Initialization String #endif #endregion Constructors } #endif #endregion LevelControllerState Class #region FlowControllerState Class #if (!OPCUA_EXCLUDE_FlowControllerState) /// /// Stores an instance of the FlowControllerType ObjectType. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public partial class FlowControllerState : GenericControllerState { #region Constructors /// /// Initializes the type with its default attribute values. /// public FlowControllerState(NodeState parent) : base(parent) { } /// /// Returns the id of the default type definition node for the instance. /// protected override NodeId GetDefaultTypeDefinitionId(NamespaceTable namespaceUris) { return NodeId.Create(tempuri.org.UA.Examples.BoilerType.ObjectTypes.FlowControllerType, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType, namespaceUris); } #if (!OPCUA_EXCLUDE_InitializationStrings) /// /// Initializes the instance. /// protected override void Initialize(ISystemContext context) { Initialize(context, InitializationString); InitializeOptionalChildren(context); } /// /// Initializes the any option children defined for the instance. /// protected override void InitializeOptionalChildren(ISystemContext context) { base.InitializeOptionalChildren(context); } #region Initialization String private const string InitializationString = "AQAAACkAAABodHRwOi8vdGVtcHVyaS5vcmcvVUEvRXhhbXBsZXMvQm9pbGVyVHlwZf////8EYIAAAQAA" + "AAEAGgAAAEZsb3dDb250cm9sbGVyVHlwZUluc3RhbmNlAQEnAAEBJwD/////AwAAABVgiQoCAAAAAQAL" + "AAAATWVhc3VyZW1lbnQBASgAAC4ARCgAAAAAC/////8BAf////8AAAAAFWCJCgIAAAABAAgAAABTZXRQ" + "b2ludAEBKQAALgBEKQAAAAAL/////wMD/////wAAAAAVYIkKAgAAAAEACgAAAENvbnRyb2xPdXQBASoA" + "AC4ARCoAAAAAC/////8BAf////8AAAAA"; #endregion Initialization String #endif #endregion Constructors } #endif #endregion FlowControllerState Class #region LevelIndicatorState Class #if (!OPCUA_EXCLUDE_LevelIndicatorState) /// /// Stores an instance of the LevelIndicatorType ObjectType. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public partial class LevelIndicatorState : GenericSensorState { #region Constructors /// /// Initializes the type with its default attribute values. /// public LevelIndicatorState(NodeState parent) : base(parent) { } /// /// Returns the id of the default type definition node for the instance. /// protected override NodeId GetDefaultTypeDefinitionId(NamespaceTable namespaceUris) { return NodeId.Create(tempuri.org.UA.Examples.BoilerType.ObjectTypes.LevelIndicatorType, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType, namespaceUris); } #if (!OPCUA_EXCLUDE_InitializationStrings) /// /// Initializes the instance. /// protected override void Initialize(ISystemContext context) { Initialize(context, InitializationString); InitializeOptionalChildren(context); } /// /// Initializes the any option children defined for the instance. /// protected override void InitializeOptionalChildren(ISystemContext context) { base.InitializeOptionalChildren(context); } #region Initialization String private const string InitializationString = "AQAAACkAAABodHRwOi8vdGVtcHVyaS5vcmcvVUEvRXhhbXBsZXMvQm9pbGVyVHlwZf////8EYIAAAQAA" + "AAEAGgAAAExldmVsSW5kaWNhdG9yVHlwZUluc3RhbmNlAQErAAEBKwD/////AQAAABVgiQoCAAAAAQAG" + "AAAAT3V0cHV0AQEsAAAvAQBACSwAAAAAC/////8BAf////8BAAAAFWCJCgIAAAAAAAcAAABFVVJhbmdl" + "AQEwAAAuAEQwAAAAAQB0A/////8BAf////8AAAAA"; #endregion Initialization String #endif #endregion Constructors } #endif #endregion LevelIndicatorState Class #region FlowTransmitterState Class #if (!OPCUA_EXCLUDE_FlowTransmitterState) /// /// Stores an instance of the FlowTransmitterType ObjectType. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public partial class FlowTransmitterState : GenericSensorState { #region Constructors /// /// Initializes the type with its default attribute values. /// public FlowTransmitterState(NodeState parent) : base(parent) { } /// /// Returns the id of the default type definition node for the instance. /// protected override NodeId GetDefaultTypeDefinitionId(NamespaceTable namespaceUris) { return NodeId.Create(tempuri.org.UA.Examples.BoilerType.ObjectTypes.FlowTransmitterType, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType, namespaceUris); } #if (!OPCUA_EXCLUDE_InitializationStrings) /// /// Initializes the instance. /// protected override void Initialize(ISystemContext context) { Initialize(context, InitializationString); InitializeOptionalChildren(context); } /// /// Initializes the any option children defined for the instance. /// protected override void InitializeOptionalChildren(ISystemContext context) { base.InitializeOptionalChildren(context); } #region Initialization String private const string InitializationString = "AQAAACkAAABodHRwOi8vdGVtcHVyaS5vcmcvVUEvRXhhbXBsZXMvQm9pbGVyVHlwZf////8EYIAAAQAA" + "AAEAGwAAAEZsb3dUcmFuc21pdHRlclR5cGVJbnN0YW5jZQEBMgABATIA/////wEAAAAVYIkKAgAAAAEA" + "BgAAAE91dHB1dAEBMwAALwEAQAkzAAAAAAv/////AQH/////AQAAABVgiQoCAAAAAAAHAAAARVVSYW5n" + "ZQEBNwAALgBENwAAAAEAdAP/////AQH/////AAAAAA=="; #endregion Initialization String #endif #endregion Constructors } #endif #endregion FlowTransmitterState Class #region BoilerStateMachineState Class #if (!OPCUA_EXCLUDE_BoilerStateMachineState) /// /// Stores an instance of the BoilerStateMachineType ObjectType. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public partial class BoilerStateMachineState : ProgramStateMachineState { #region Constructors /// /// Initializes the type with its default attribute values. /// public BoilerStateMachineState(NodeState parent) : base(parent) { } /// /// Returns the id of the default type definition node for the instance. /// protected override NodeId GetDefaultTypeDefinitionId(NamespaceTable namespaceUris) { return NodeId.Create(tempuri.org.UA.Examples.BoilerType.ObjectTypes.BoilerStateMachineType, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType, namespaceUris); } #if (!OPCUA_EXCLUDE_InitializationStrings) /// /// Initializes the instance. /// protected override void Initialize(ISystemContext context) { Initialize(context, InitializationString); InitializeOptionalChildren(context); } /// /// Initializes the any option children defined for the instance. /// protected override void InitializeOptionalChildren(ISystemContext context) { base.InitializeOptionalChildren(context); } #region Initialization String private const string InitializationString = "AQAAACkAAABodHRwOi8vdGVtcHVyaS5vcmcvVUEvRXhhbXBsZXMvQm9pbGVyVHlwZf////8EYIAAAQAA" + "AAEAHgAAAEJvaWxlclN0YXRlTWFjaGluZVR5cGVJbnN0YW5jZQEBOQABATkA/////woAAAAVYIkKAgAA" + "AAAADAAAAEN1cnJlbnRTdGF0ZQEBOgAALwEAyAo6AAAAABX/////AQH/////AgAAABVgiQoCAAAAAAAC" + "AAAASWQBATsAAC4ARDsAAAAAEf////8BAf////8AAAAAFWCJCgIAAAAAAAYAAABOdW1iZXIBAT0AAC4A" + "RD0AAAAAB/////8BAf////8AAAAAFWCJCgIAAAAAAA4AAABMYXN0VHJhbnNpdGlvbgEBPwAALwEAzwo/" + "AAAAABX/////AQH/////AwAAABVgiQoCAAAAAAACAAAASWQBAUAAAC4AREAAAAAAEf////8BAf////8A" + "AAAAFWCJCgIAAAAAAAYAAABOdW1iZXIBAUIAAC4AREIAAAAAB/////8BAf////8AAAAAFWCJCgIAAAAA" + "AA4AAABUcmFuc2l0aW9uVGltZQEBQwAALgBEQwAAAAEAJgH/////AQH/////AAAAABVgiQoCAAAAAAAJ" + "AAAARGVsZXRhYmxlAQFGAAAuAERGAAAAAAH/////AQH/////AAAAABVgiQoCAAAAAAAMAAAAUmVjeWNs" + "ZUNvdW50AQFIAAAuAERIAAAAAAb/////AQH/////AAAAACRhggoEAAAAAAAFAAAAU3RhcnQBAXIAAwAA" + "AABLAAAAQ2F1c2VzIHRoZSBQcm9ncmFtIHRvIHRyYW5zaXRpb24gZnJvbSB0aGUgUmVhZHkgc3RhdGUg" + "dG8gdGhlIFJ1bm5pbmcgc3RhdGUuAC8BAHoJcgAAAAEBAQAAAAA1AQEBYgAAAAAAJGGCCgQAAAAAAAcA" + "AABTdXNwZW5kAQFzAAMAAAAATwAAAENhdXNlcyB0aGUgUHJvZ3JhbSB0byB0cmFuc2l0aW9uIGZyb20g" + "dGhlIFJ1bm5pbmcgc3RhdGUgdG8gdGhlIFN1c3BlbmRlZCBzdGF0ZS4ALwEAewlzAAAAAQEBAAAAADUB" + "AQFoAAAAAAAkYYIKBAAAAAAABgAAAFJlc3VtZQEBdAADAAAAAE8AAABDYXVzZXMgdGhlIFByb2dyYW0g" + "dG8gdHJhbnNpdGlvbiBmcm9tIHRoZSBTdXNwZW5kZWQgc3RhdGUgdG8gdGhlIFJ1bm5pbmcgc3RhdGUu" + "AC8BAHwJdAAAAAEBAQAAAAA1AQEBagAAAAAAJGGCCgQAAAAAAAQAAABIYWx0AQF1AAMAAAAAYAAAAENh" + "dXNlcyB0aGUgUHJvZ3JhbSB0byB0cmFuc2l0aW9uIGZyb20gdGhlIFJlYWR5LCBSdW5uaW5nIG9yIFN1" + "c3BlbmRlZCBzdGF0ZSB0byB0aGUgSGFsdGVkIHN0YXRlLgAvAQB9CXUAAAABAQMAAAAANQEBAWQAADUB" + "AQFsAAA1AQEBcAAAAAAAJGGCCgQAAAAAAAUAAABSZXNldAEBdgADAAAAAEoAAABDYXVzZXMgdGhlIFBy" + "b2dyYW0gdG8gdHJhbnNpdGlvbiBmcm9tIHRoZSBIYWx0ZWQgc3RhdGUgdG8gdGhlIFJlYWR5IHN0YXRl" + "LgAvAQB+CXYAAAABAQEAAAAANQEBAWAAAAAAADVgiQoCAAAAAQAKAAAAVXBkYXRlUmF0ZQEBdwADAAAA" + "ACYAAABUaGUgcmF0ZSBhdCB3aGljaCB0aGUgc2ltdWxhdGlvbiBydW5zLgAuAER3AAAAAAf/////AwP/" + "////AAAAAA=="; #endregion Initialization String #endif #endregion Constructors #region Public Properties /// /// The rate at which the simulation runs. /// public PropertyState UpdateRate { get => m_updateRate; set { if (!Object.ReferenceEquals(m_updateRate, value)) { ChangeMasks |= NodeStateChangeMasks.Children; } m_updateRate = value; } } #endregion Public Properties #region Overridden Methods /// /// Populates a list with the children that belong to the node. /// /// The context for the system being accessed. /// The list of children to populate. public override void GetChildren( ISystemContext context, IList children) { if (m_updateRate != null) { children.Add(m_updateRate); } base.GetChildren(context, children); } /// /// Finds the child with the specified browse name. /// protected override BaseInstanceState FindChild( ISystemContext context, QualifiedName browseName, bool createOrReplace, BaseInstanceState replacement) { if (QualifiedName.IsNull(browseName)) { return null; } BaseInstanceState instance = null; switch (browseName.Name) { case tempuri.org.UA.Examples.BoilerType.BrowseNames.UpdateRate: { if (createOrReplace) { if (UpdateRate == null) { if (replacement == null) { UpdateRate = new PropertyState(this); } else { UpdateRate = (PropertyState)replacement; } } } instance = UpdateRate; break; } } if (instance != null) { return instance; } return base.FindChild(context, browseName, createOrReplace, replacement); } #endregion Overridden Methods #region Private Fields private PropertyState m_updateRate; #endregion Private Fields } #endif #endregion BoilerStateMachineState Class #region BoilerInputPipeState Class #if (!OPCUA_EXCLUDE_BoilerInputPipeState) /// /// Stores an instance of the BoilerInputPipeType ObjectType. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public partial class BoilerInputPipeState : FolderState { #region Constructors /// /// Initializes the type with its default attribute values. /// public BoilerInputPipeState(NodeState parent) : base(parent) { } /// /// Returns the id of the default type definition node for the instance. /// protected override NodeId GetDefaultTypeDefinitionId(NamespaceTable namespaceUris) { return NodeId.Create(tempuri.org.UA.Examples.BoilerType.ObjectTypes.BoilerInputPipeType, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType, namespaceUris); } #if (!OPCUA_EXCLUDE_InitializationStrings) /// /// Initializes the instance. /// protected override void Initialize(ISystemContext context) { Initialize(context, InitializationString); InitializeOptionalChildren(context); } /// /// Initializes the any option children defined for the instance. /// protected override void InitializeOptionalChildren(ISystemContext context) { base.InitializeOptionalChildren(context); } #region Initialization String private const string InitializationString = "AQAAACkAAABodHRwOi8vdGVtcHVyaS5vcmcvVUEvRXhhbXBsZXMvQm9pbGVyVHlwZf////8EYIAAAQAA" + "AAEAGwAAAEJvaWxlcklucHV0UGlwZVR5cGVJbnN0YW5jZQEBeAABAXgAAQAAAAAwAAEBeQACAAAAxGDA" + "CgEAAAAQAAAARmxvd1RyYW5zbWl0dGVyMQEABgAAAEZUWDAwMQEBeQADAAAAABAAAABGbG93VHJhbnNt" + "aXR0ZXIxAC8BATIAeQAAAAEBAAAAADABAQF4AAEAAAAVYIkKAgAAAAEABgAAAE91dHB1dAEBegAALwEA" + "QAl6AAAAAAv/////AQH/////AQAAABVgiQoCAAAAAAAHAAAARVVSYW5nZQEBfgAALgBEfgAAAAEAdAP/" + "////AQH/////AAAAAMRgwAoBAAAABQAAAFZhbHZlAQAJAAAAVmFsdmVYMDAxAQGAAAMAAAAABQAAAFZh" + "bHZlAC8BARwAgAAAAAH/////AQAAABVgiQoCAAAAAQAFAAAASW5wdXQBAYEAAC8BAEAJgQAAAAAL////" + "/wIC/////wEAAAAVYIkKAgAAAAAABwAAAEVVUmFuZ2UBAYUAAC4ARIUAAAABAHQD/////wEB/////wAA" + "AAA="; #endregion Initialization String #endif #endregion Constructors #region Public Properties /// /// A description for the FTX001 Object. /// public FlowTransmitterState FlowTransmitter1 { get => m_flowTransmitter1; set { if (!Object.ReferenceEquals(m_flowTransmitter1, value)) { ChangeMasks |= NodeStateChangeMasks.Children; } m_flowTransmitter1 = value; } } /// /// A description for the ValveX001 Object. /// public ValveState Valve { get => m_valve; set { if (!Object.ReferenceEquals(m_valve, value)) { ChangeMasks |= NodeStateChangeMasks.Children; } m_valve = value; } } #endregion Public Properties #region Overridden Methods /// /// Populates a list with the children that belong to the node. /// /// The context for the system being accessed. /// The list of children to populate. public override void GetChildren( ISystemContext context, IList children) { if (m_flowTransmitter1 != null) { children.Add(m_flowTransmitter1); } if (m_valve != null) { children.Add(m_valve); } base.GetChildren(context, children); } /// /// Finds the child with the specified browse name. /// protected override BaseInstanceState FindChild( ISystemContext context, QualifiedName browseName, bool createOrReplace, BaseInstanceState replacement) { if (QualifiedName.IsNull(browseName)) { return null; } BaseInstanceState instance = null; switch (browseName.Name) { case tempuri.org.UA.Examples.BoilerType.BrowseNames.FlowTransmitter1: { if (createOrReplace) { if (FlowTransmitter1 == null) { if (replacement == null) { FlowTransmitter1 = new FlowTransmitterState(this); } else { FlowTransmitter1 = (FlowTransmitterState)replacement; } } } instance = FlowTransmitter1; break; } case tempuri.org.UA.Examples.BoilerType.BrowseNames.Valve: { if (createOrReplace) { if (Valve == null) { if (replacement == null) { Valve = new ValveState(this); } else { Valve = (ValveState)replacement; } } } instance = Valve; break; } } if (instance != null) { return instance; } return base.FindChild(context, browseName, createOrReplace, replacement); } #endregion Overridden Methods #region Private Fields private FlowTransmitterState m_flowTransmitter1; private ValveState m_valve; #endregion Private Fields } #endif #endregion BoilerInputPipeState Class #region BoilerDrumState Class #if (!OPCUA_EXCLUDE_BoilerDrumState) /// /// Stores an instance of the BoilerDrumType ObjectType. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public partial class BoilerDrumState : FolderState { #region Constructors /// /// Initializes the type with its default attribute values. /// public BoilerDrumState(NodeState parent) : base(parent) { } /// /// Returns the id of the default type definition node for the instance. /// protected override NodeId GetDefaultTypeDefinitionId(NamespaceTable namespaceUris) { return NodeId.Create(tempuri.org.UA.Examples.BoilerType.ObjectTypes.BoilerDrumType, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType, namespaceUris); } #if (!OPCUA_EXCLUDE_InitializationStrings) /// /// Initializes the instance. /// protected override void Initialize(ISystemContext context) { Initialize(context, InitializationString); InitializeOptionalChildren(context); } /// /// Initializes the any option children defined for the instance. /// protected override void InitializeOptionalChildren(ISystemContext context) { base.InitializeOptionalChildren(context); } #region Initialization String private const string InitializationString = "AQAAACkAAABodHRwOi8vdGVtcHVyaS5vcmcvVUEvRXhhbXBsZXMvQm9pbGVyVHlwZf////8EYIAAAQAA" + "AAEAFgAAAEJvaWxlckRydW1UeXBlSW5zdGFuY2UBAYcAAQGHAAEAAAAAMAABAYgAAQAAAIRgwAoBAAAA" + "DgAAAExldmVsSW5kaWNhdG9yAQAGAAAATElYMDAxAQGIAAAvAQErAIgAAAABAQAAAAAwAQEBhwABAAAA" + "FWCJCgIAAAABAAYAAABPdXRwdXQBAYkAAC8BAEAJiQAAAAAL/////wEB/////wEAAAAVYIkKAgAAAAAA" + "BwAAAEVVUmFuZ2UBAY0AAC4ARI0AAAABAHQD/////wEB/////wAAAAA="; #endregion Initialization String #endif #endregion Constructors #region Public Properties /// /// A description for the LIX001 Object. /// public LevelIndicatorState LevelIndicator { get => m_levelIndicator; set { if (!Object.ReferenceEquals(m_levelIndicator, value)) { ChangeMasks |= NodeStateChangeMasks.Children; } m_levelIndicator = value; } } #endregion Public Properties #region Overridden Methods /// /// Populates a list with the children that belong to the node. /// /// The context for the system being accessed. /// The list of children to populate. public override void GetChildren( ISystemContext context, IList children) { if (m_levelIndicator != null) { children.Add(m_levelIndicator); } base.GetChildren(context, children); } /// /// Finds the child with the specified browse name. /// protected override BaseInstanceState FindChild( ISystemContext context, QualifiedName browseName, bool createOrReplace, BaseInstanceState replacement) { if (QualifiedName.IsNull(browseName)) { return null; } BaseInstanceState instance = null; switch (browseName.Name) { case tempuri.org.UA.Examples.BoilerType.BrowseNames.LevelIndicator: { if (createOrReplace) { if (LevelIndicator == null) { if (replacement == null) { LevelIndicator = new LevelIndicatorState(this); } else { LevelIndicator = (LevelIndicatorState)replacement; } } } instance = LevelIndicator; break; } } if (instance != null) { return instance; } return base.FindChild(context, browseName, createOrReplace, replacement); } #endregion Overridden Methods #region Private Fields private LevelIndicatorState m_levelIndicator; #endregion Private Fields } #endif #endregion BoilerDrumState Class #region BoilerOutputPipeState Class #if (!OPCUA_EXCLUDE_BoilerOutputPipeState) /// /// Stores an instance of the BoilerOutputPipeType ObjectType. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public partial class BoilerOutputPipeState : FolderState { #region Constructors /// /// Initializes the type with its default attribute values. /// public BoilerOutputPipeState(NodeState parent) : base(parent) { } /// /// Returns the id of the default type definition node for the instance. /// protected override NodeId GetDefaultTypeDefinitionId(NamespaceTable namespaceUris) { return NodeId.Create(tempuri.org.UA.Examples.BoilerType.ObjectTypes.BoilerOutputPipeType, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType, namespaceUris); } #if (!OPCUA_EXCLUDE_InitializationStrings) /// /// Initializes the instance. /// protected override void Initialize(ISystemContext context) { Initialize(context, InitializationString); InitializeOptionalChildren(context); } /// /// Initializes the any option children defined for the instance. /// protected override void InitializeOptionalChildren(ISystemContext context) { base.InitializeOptionalChildren(context); } #region Initialization String private const string InitializationString = "AQAAACkAAABodHRwOi8vdGVtcHVyaS5vcmcvVUEvRXhhbXBsZXMvQm9pbGVyVHlwZf////8EYIAAAQAA" + "AAEAHAAAAEJvaWxlck91dHB1dFBpcGVUeXBlSW5zdGFuY2UBAY8AAQGPAAEAAAAAMAABAZAAAQAAAIRg" + "wAoBAAAAEAAAAEZsb3dUcmFuc21pdHRlcjIBAAYAAABGVFgwMDIBAZAAAC8BATIAkAAAAAEBAAAAADAB" + "AQGPAAEAAAAVYIkKAgAAAAEABgAAAE91dHB1dAEBkQAALwEAQAmRAAAAAAv/////AQH/////AQAAABVg" + "iQoCAAAAAAAHAAAARVVSYW5nZQEBlQAALgBElQAAAAEAdAP/////AQH/////AAAAAA=="; #endregion Initialization String #endif #endregion Constructors #region Public Properties /// /// A description for the FTX002 Object. /// public FlowTransmitterState FlowTransmitter2 { get => m_flowTransmitter2; set { if (!Object.ReferenceEquals(m_flowTransmitter2, value)) { ChangeMasks |= NodeStateChangeMasks.Children; } m_flowTransmitter2 = value; } } #endregion Public Properties #region Overridden Methods /// /// Populates a list with the children that belong to the node. /// /// The context for the system being accessed. /// The list of children to populate. public override void GetChildren( ISystemContext context, IList children) { if (m_flowTransmitter2 != null) { children.Add(m_flowTransmitter2); } base.GetChildren(context, children); } /// /// Finds the child with the specified browse name. /// protected override BaseInstanceState FindChild( ISystemContext context, QualifiedName browseName, bool createOrReplace, BaseInstanceState replacement) { if (QualifiedName.IsNull(browseName)) { return null; } BaseInstanceState instance = null; switch (browseName.Name) { case tempuri.org.UA.Examples.BoilerType.BrowseNames.FlowTransmitter2: { if (createOrReplace) { if (FlowTransmitter2 == null) { if (replacement == null) { FlowTransmitter2 = new FlowTransmitterState(this); } else { FlowTransmitter2 = (FlowTransmitterState)replacement; } } } instance = FlowTransmitter2; break; } } if (instance != null) { return instance; } return base.FindChild(context, browseName, createOrReplace, replacement); } #endregion Overridden Methods #region Private Fields private FlowTransmitterState m_flowTransmitter2; #endregion Private Fields } #endif #endregion BoilerOutputPipeState Class #region BoilerState Class #if (!OPCUA_EXCLUDE_BoilerState) /// /// Stores an instance of the BoilerType ObjectType. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public partial class BoilerState : BaseObjectState { #region Constructors /// /// Initializes the type with its default attribute values. /// public BoilerState(NodeState parent) : base(parent) { } /// /// Returns the id of the default type definition node for the instance. /// protected override NodeId GetDefaultTypeDefinitionId(NamespaceTable namespaceUris) { return NodeId.Create(tempuri.org.UA.Examples.BoilerType.ObjectTypes.BoilerType, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType, namespaceUris); } #if (!OPCUA_EXCLUDE_InitializationStrings) /// /// Initializes the instance. /// protected override void Initialize(ISystemContext context) { Initialize(context, InitializationString); InitializeOptionalChildren(context); } /// /// Initializes the any option children defined for the instance. /// protected override void InitializeOptionalChildren(ISystemContext context) { base.InitializeOptionalChildren(context); } #region Initialization String private const string InitializationString = "AQAAACkAAABodHRwOi8vdGVtcHVyaS5vcmcvVUEvRXhhbXBsZXMvQm9pbGVyVHlwZf////+EYIAAAQAA" + "AAEAEgAAAEJvaWxlclR5cGVJbnN0YW5jZQEBlwABAZcAAQQAAAAAMAABAZgAADAAAQGnAAAwAAEBrwAA" + "JAABAcUABwAAAMRgwAoBAAAACQAAAElucHV0UGlwZQEACAAAAFBpcGVYMDAxAQGYAAMAAAAACQAAAElu" + "cHV0UGlwZQAvAQF4AJgAAAABAwAAAAAwAQEBlwAAMAABAZkAAQEBAAABAacAAgAAAMRgwAoBAAAAEAAA" + "AEZsb3dUcmFuc21pdHRlcjEBAAYAAABGVFgwMDEBAZkAAwAAAAAQAAAARmxvd1RyYW5zbWl0dGVyMQAv" + "AQEyAJkAAAABAQAAAAAwAQEBmAABAAAAFWCJCgIAAAABAAYAAABPdXRwdXQBAZoAAC8BAEAJmgAAAAAL" + "/////wEBAgAAAAEBAwAAAQG4AAEBAwAAAQHBAAEAAAAVYIkKAgAAAAAABwAAAEVVUmFuZ2UBAZ4AAC4A" + "RJ4AAAABAHQD/////wEB/////wAAAADEYMAKAQAAAAUAAABWYWx2ZQEACQAAAFZhbHZlWDAwMQEBoAAD" + "AAAAAAUAAABWYWx2ZQAvAQEcAKAAAAAB/////wEAAAAVYIkKAgAAAAEABQAAAElucHV0AQGhAAAvAQBA" + "CaEAAAAAC/////8CAgEAAAABAQMAAQEBugABAAAAFWCJCgIAAAAAAAcAAABFVVJhbmdlAQGlAAAuAESl" + "AAAAAQB0A/////8BAf////8AAAAAxGDACgEAAAAEAAAARHJ1bQEACAAAAERydW1YMDAxAQGnAAMAAAAA" + "BAAAAERydW0ALwEBhwCnAAAAAQQAAAAAMAEBAZcAAQEBAAEBAZgAADAAAQGoAAEBAgAAAQGvAAEAAACE" + "YMAKAQAAAA4AAABMZXZlbEluZGljYXRvcgEABgAAAExJWDAwMQEBqAAALwEBKwCoAAAAAQEAAAAAMAEB" + "AacAAQAAABVgiQoCAAAAAQAGAAAAT3V0cHV0AQGpAAAvAQBACakAAAAAGv////8BAQEAAAABAQMAAAEB" + "vAABAAAAFWCJCgIAAAAAAAcAAABFVVJhbmdlAQGtAAAuAEStAAAAAQB0A/////8BAf////8AAAAAxGDA" + "CgEAAAAKAAAAT3V0cHV0UGlwZQEACAAAAFBpcGVYMDAyAQGvAAMAAAAACgAAAE91dHB1dFBpcGUALwEB" + "jwCvAAAAAQMAAAAAMAEBAZcAAQECAAEBAacAADAAAQGwAAEAAACEYMAKAQAAABAAAABGbG93VHJhbnNt" + "aXR0ZXIyAQAGAAAARlRYMDAyAQGwAAAvAQEyALAAAAABAQAAAAAwAQEBrwABAAAAFWCJCgIAAAABAAYA" + "AABPdXRwdXQBAbEAAC8BAEAJsQAAAAAL/////wEBAQAAAAEBAwAAAQHCAAEAAAAVYIkKAgAAAAAABwAA" + "AEVVUmFuZ2UBAbUAAC4ARLUAAAABAHQD/////wEB/////wAAAABEYMAKAQAAAA4AAABGbG93Q29udHJv" + "bGxlcgEABgAAAEZDWDAwMQEBtwADAAAAAA4AAABGbG93Q29udHJvbGxlcgAvAQEnALcAAAD/////AwAA" + "ABVgiQoCAAAAAQALAAAATWVhc3VyZW1lbnQBAbgAAC4ARLgAAAAAC/////8BAQEAAAABAQMAAQEBmgAA" + "AAAAFWCJCgIAAAABAAgAAABTZXRQb2ludAEBuQAALgBEuQAAAAAL/////wMDAQAAAAEBAwABAQHDAAAA" + "AAAVYIkKAgAAAAEACgAAAENvbnRyb2xPdXQBAboAAC4ARLoAAAAAC/////8BAQEAAAABAQMAAAEBoQAA" + "AAAARGDACgEAAAAPAAAATGV2ZWxDb250cm9sbGVyAQAGAAAATENYMDAxAQG7AAMAAAAADwAAAExldmVs" + "Q29udHJvbGxlcgAvAQEjALsAAAD/////AwAAABVgiQoCAAAAAQALAAAATWVhc3VyZW1lbnQBAbwAAC4A" + "RLwAAAAAC/////8BAQEAAAABAQMAAQEBqQAAAAAAFWCJCgIAAAABAAgAAABTZXRQb2ludAEBvQAALgBE" + "vQAAAAAL/////wMD/////wAAAAAVYIkKAgAAAAEACgAAAENvbnRyb2xPdXQBAb4AAC4ARL4AAAAAC///" + "//8BAQEAAAABAQMAAAEBwAAAAAAARGDACgEAAAAQAAAAQ3VzdG9tQ29udHJvbGxlcgEABgAAAENDWDAw" + "MQEBvwADAAAAABAAAABDdXN0b21Db250cm9sbGVyAC8BARYAvwAAAP////8FAAAAFWCJCgIAAAABAAYA" + "AABJbnB1dDEBAcAAAC4ARMAAAAAAC/////8CAgEAAAABAQMAAQEBvgAAAAAAFWCJCgIAAAABAAYAAABJ" + "bnB1dDIBAcEAAC4ARMEAAAAAC/////8CAgEAAAABAQMAAQEBmgAAAAAAFWCJCgIAAAABAAYAAABJbnB1" + "dDMBAcIAAC4ARMIAAAAAC/////8CAgEAAAABAQMAAQEBsQAAAAAAFWCJCgIAAAABAAoAAABDb250cm9s" + "T3V0AQHDAAAuAETDAAAAAAv/////AQEBAAAAAQEDAAABAbkAAAAAABVgyQoCAAAADAAAAERlc2NyaXB0" + "aW9uWAEACwAAAERlc2NyaXB0aW9uAQHEAAAuAETEAAAAABX/////AQH/////AAAAAIRggAoBAAAAAQAK" + "AAAAU2ltdWxhdGlvbgEBxQAALwEBOQDFAAAAAQEAAAAAJAEBAZcACgAAABVgiQoCAAAAAAAMAAAAQ3Vy" + "cmVudFN0YXRlAQHGAAAvAQDICsYAAAAAFf////8BAf////8CAAAAFWCJCgIAAAAAAAIAAABJZAEBxwAA" + "LgBExwAAAAAR/////wEB/////wAAAAAVYIkKAgAAAAAABgAAAE51bWJlcgEByQAALgBEyQAAAAAH////" + "/wEB/////wAAAAAVYIkKAgAAAAAADgAAAExhc3RUcmFuc2l0aW9uAQHLAAAvAQDPCssAAAAAFf////8B" + "Af////8DAAAAFWCJCgIAAAAAAAIAAABJZAEBzAAALgBEzAAAAAAR/////wEB/////wAAAAAVYIkKAgAA" + "AAAABgAAAE51bWJlcgEBzgAALgBEzgAAAAAH/////wEB/////wAAAAAVYIkKAgAAAAAADgAAAFRyYW5z" + "aXRpb25UaW1lAQHPAAAuAETPAAAAAQAmAf////8BAf////8AAAAAFWCJCgIAAAAAAAkAAABEZWxldGFi" + "bGUBAdEAAC4ARNEAAAAAAf////8BAf////8AAAAAFWCJCgIAAAAAAAwAAABSZWN5Y2xlQ291bnQBAdMA" + "AC4ARNMAAAAABv////8BAf////8AAAAAJGGCCgQAAAAAAAUAAABTdGFydAEB4AADAAAAAEsAAABDYXVz" + "ZXMgdGhlIFByb2dyYW0gdG8gdHJhbnNpdGlvbiBmcm9tIHRoZSBSZWFkeSBzdGF0ZSB0byB0aGUgUnVu" + "bmluZyBzdGF0ZS4ALwEAegngAAAAAQH/////AAAAACRhggoEAAAAAAAHAAAAU3VzcGVuZAEB4QADAAAA" + "AE8AAABDYXVzZXMgdGhlIFByb2dyYW0gdG8gdHJhbnNpdGlvbiBmcm9tIHRoZSBSdW5uaW5nIHN0YXRl" + "IHRvIHRoZSBTdXNwZW5kZWQgc3RhdGUuAC8BAHsJ4QAAAAEB/////wAAAAAkYYIKBAAAAAAABgAAAFJl" + "c3VtZQEB4gADAAAAAE8AAABDYXVzZXMgdGhlIFByb2dyYW0gdG8gdHJhbnNpdGlvbiBmcm9tIHRoZSBT" + "dXNwZW5kZWQgc3RhdGUgdG8gdGhlIFJ1bm5pbmcgc3RhdGUuAC8BAHwJ4gAAAAEB/////wAAAAAkYYIK" + "BAAAAAAABAAAAEhhbHQBAeMAAwAAAABgAAAAQ2F1c2VzIHRoZSBQcm9ncmFtIHRvIHRyYW5zaXRpb24g" + "ZnJvbSB0aGUgUmVhZHksIFJ1bm5pbmcgb3IgU3VzcGVuZGVkIHN0YXRlIHRvIHRoZSBIYWx0ZWQgc3Rh" + "dGUuAC8BAH0J4wAAAAEB/////wAAAAAkYYIKBAAAAAAABQAAAFJlc2V0AQHkAAMAAAAASgAAAENhdXNl" + "cyB0aGUgUHJvZ3JhbSB0byB0cmFuc2l0aW9uIGZyb20gdGhlIEhhbHRlZCBzdGF0ZSB0byB0aGUgUmVh" + "ZHkgc3RhdGUuAC8BAH4J5AAAAAEB/////wAAAAA1YIkKAgAAAAEACgAAAFVwZGF0ZVJhdGUBAeUAAwAA" + "AAAmAAAAVGhlIHJhdGUgYXQgd2hpY2ggdGhlIHNpbXVsYXRpb24gcnVucy4ALgBE5QAAAAAH/////wMD" + "/////wAAAAA="; #endregion Initialization String #endif #endregion Constructors #region Public Properties /// /// A description for the PipeX001 Object. /// public BoilerInputPipeState InputPipe { get => m_inputPipe; set { if (!Object.ReferenceEquals(m_inputPipe, value)) { ChangeMasks |= NodeStateChangeMasks.Children; } m_inputPipe = value; } } /// /// A description for the DrumX001 Object. /// public BoilerDrumState Drum { get => m_drum; set { if (!Object.ReferenceEquals(m_drum, value)) { ChangeMasks |= NodeStateChangeMasks.Children; } m_drum = value; } } /// /// A description for the PipeX002 Object. /// public BoilerOutputPipeState OutputPipe { get => m_outputPipe; set { if (!Object.ReferenceEquals(m_outputPipe, value)) { ChangeMasks |= NodeStateChangeMasks.Children; } m_outputPipe = value; } } /// /// A description for the FCX001 Object. /// public FlowControllerState FlowController { get => m_flowController; set { if (!Object.ReferenceEquals(m_flowController, value)) { ChangeMasks |= NodeStateChangeMasks.Children; } m_flowController = value; } } /// /// A description for the LCX001 Object. /// public LevelControllerState LevelController { get => m_levelController; set { if (!Object.ReferenceEquals(m_levelController, value)) { ChangeMasks |= NodeStateChangeMasks.Children; } m_levelController = value; } } /// /// A description for the CCX001 Object. /// public CustomControllerState CustomController { get => m_customController; set { if (!Object.ReferenceEquals(m_customController, value)) { ChangeMasks |= NodeStateChangeMasks.Children; } m_customController = value; } } /// /// A description for the Simulation Object. /// public BoilerStateMachineState Simulation { get => m_simulation; set { if (!Object.ReferenceEquals(m_simulation, value)) { ChangeMasks |= NodeStateChangeMasks.Children; } m_simulation = value; } } #endregion Public Properties #region Overridden Methods /// /// Populates a list with the children that belong to the node. /// /// The context for the system being accessed. /// The list of children to populate. public override void GetChildren( ISystemContext context, IList children) { if (m_inputPipe != null) { children.Add(m_inputPipe); } if (m_drum != null) { children.Add(m_drum); } if (m_outputPipe != null) { children.Add(m_outputPipe); } if (m_flowController != null) { children.Add(m_flowController); } if (m_levelController != null) { children.Add(m_levelController); } if (m_customController != null) { children.Add(m_customController); } if (m_simulation != null) { children.Add(m_simulation); } base.GetChildren(context, children); } /// /// Finds the child with the specified browse name. /// protected override BaseInstanceState FindChild( ISystemContext context, QualifiedName browseName, bool createOrReplace, BaseInstanceState replacement) { if (QualifiedName.IsNull(browseName)) { return null; } BaseInstanceState instance = null; switch (browseName.Name) { case tempuri.org.UA.Examples.BoilerType.BrowseNames.InputPipe: { if (createOrReplace) { if (InputPipe == null) { if (replacement == null) { InputPipe = new BoilerInputPipeState(this); } else { InputPipe = (BoilerInputPipeState)replacement; } } } instance = InputPipe; break; } case tempuri.org.UA.Examples.BoilerType.BrowseNames.Drum: { if (createOrReplace) { if (Drum == null) { if (replacement == null) { Drum = new BoilerDrumState(this); } else { Drum = (BoilerDrumState)replacement; } } } instance = Drum; break; } case tempuri.org.UA.Examples.BoilerType.BrowseNames.OutputPipe: { if (createOrReplace) { if (OutputPipe == null) { if (replacement == null) { OutputPipe = new BoilerOutputPipeState(this); } else { OutputPipe = (BoilerOutputPipeState)replacement; } } } instance = OutputPipe; break; } case tempuri.org.UA.Examples.BoilerType.BrowseNames.FlowController: { if (createOrReplace) { if (FlowController == null) { if (replacement == null) { FlowController = new FlowControllerState(this); } else { FlowController = (FlowControllerState)replacement; } } } instance = FlowController; break; } case tempuri.org.UA.Examples.BoilerType.BrowseNames.LevelController: { if (createOrReplace) { if (LevelController == null) { if (replacement == null) { LevelController = new LevelControllerState(this); } else { LevelController = (LevelControllerState)replacement; } } } instance = LevelController; break; } case tempuri.org.UA.Examples.BoilerType.BrowseNames.CustomController: { if (createOrReplace) { if (CustomController == null) { if (replacement == null) { CustomController = new CustomControllerState(this); } else { CustomController = (CustomControllerState)replacement; } } } instance = CustomController; break; } case tempuri.org.UA.Examples.BoilerType.BrowseNames.Simulation: { if (createOrReplace) { if (Simulation == null) { if (replacement == null) { Simulation = new BoilerStateMachineState(this); } else { Simulation = (BoilerStateMachineState)replacement; } } } instance = Simulation; break; } } if (instance != null) { return instance; } return base.FindChild(context, browseName, createOrReplace, replacement); } #endregion Overridden Methods #region Private Fields private BoilerInputPipeState m_inputPipe; private BoilerDrumState m_drum; private BoilerOutputPipeState m_outputPipe; private FlowControllerState m_flowController; private LevelControllerState m_levelController; private CustomControllerState m_customController; private BoilerStateMachineState m_simulation; #endregion Private Fields } #endif #endregion BoilerState Class } ================================================ FILE: Networking/Simulator.Boiler/Networking.Simulator.Boiler.csproj ================================================  netstandard2.0 UAOOI.Networking.Simulator.Boiler UAOOI.Networking.Simulator.Boiler 4.0.1 MPostol commsvr.com Simulator of a set of boilers used to produce steam for a turbine. Object Oriented Internet Copyright MPostol (c) 2018 https://github.com/mpostol/OPC-UA-OOI/blob/master/license.md https://commsvr.gitbook.io/ooi GitHub Object Oriented Internet, OPC UA, CommServer, Reactive Networking. https://github.com/mpostol/OPC-UA-OOI true OPCUAOOIKey.snk 4.0.1.1 TRACE;DEBUG;OPCUA_EXCLUDE_InitializationStrings;NETSTANDARD2_0 1701;1702;1705;IDE0001,IDE0002,IDE0003 TRACE;OPCUA_EXCLUDE_InitializationStrings PreserveNewest Always PreserveNewest ================================================ FILE: Networking/Simulator.Boiler/ProducerConfigurationFactory.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2018, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using CommonServiceLocator; using System; using System.Diagnostics; using UAOOI.Common.Infrastructure.Diagnostic; using UAOOI.Configuration.Networking; using UAOOI.Configuration.Networking.Serialization; namespace UAOOI.Networking.Simulator.Boiler { /// /// Class ProducerConfigurationFactory - provides implementation of the for the producer. /// Implements the /// /// internal class ProducerConfigurationFactory : ConfigurationFactoryBase { #region constructor /// /// Initializes a new instance of the class. /// /// Name of the producer configuration file. public ProducerConfigurationFactory(string configurationFileName) : base(configurationFileName) { IServiceLocator _serviceLocator = ServiceLocator.Current; //TODO Create and Register the EventSource #455 _TraceSource = _serviceLocator.GetInstance(); _TraceSource.TraceData(TraceEventType.Information, 36, $"Starting {nameof(ProducerConfigurationFactory)} with the configuration file name {configurationFileName}"); } #endregion constructor #region ConfigurationFactoryBase /// /// Occurs after the association configuration has been changed. /// public override event EventHandler OnAssociationConfigurationChange; /// /// Occurs after the communication configuration has been changed. /// public override event EventHandler OnMessageHandlerConfigurationChange; protected override void TraceData(TraceEventType eventType, int id, object data) { _TraceSource.TraceData(eventType, id, data); } protected override void RaiseEvents() { OnAssociationConfigurationChange?.Invoke(this, EventArgs.Empty); OnMessageHandlerConfigurationChange?.Invoke(this, EventArgs.Empty); } #endregion ConfigurationFactoryBase #region private private ITraceSource _TraceSource = null; #endregion private } } ================================================ FILE: Networking/Simulator.Boiler/Properties/AssemblyInfo.cs ================================================ using System.Reflection; using System.Runtime.CompilerServices; [assembly: AssemblyTrademark("Object Oriented Internet")] [assembly: AssemblyCulture("")] [assembly: InternalsVisibleTo( "UAOOI.Networking.Simulator.Boiler.UnitTest, PublicKey=" + "00240000048000009400000006020000002400005253413100040000010001005b97a0972ff6b13a" + "8a9ff9c09503aea0e5e2fe29cb2275a0c0942182f4c3431814b6bc9a556d9fe0d7e7823439c1ba28" + "521f6318e4c936c4461604ef668e9686c2021571b093e1bfba071b373bc56a07a3afdc120c5313d3" + "9a935cda64b759f857ebb3db483641444a5347e1564f8ba6d4fad2f968d3caf9991a4fa6aa019ebe" )] ================================================ FILE: Networking/Simulator.Boiler/README.md ================================================ # `ReferenceApplication` Producer - Boilers Set Simulator ## Introduction The project `Networking.Simulator.Boiler` is a part of the proof of concept with the aim of verifying that the reactive communication implemented using the `Networking.SemanticData` library is well suited to deploy Internet of Things (IoT) paradigm for highly distributed applications. A set of unmanned boilers spread geographically, which have to be monitored and remotely controlled is used as an example in this proof of concept. It is assumed that they produce a lot of process data describing the state and behavior of each boiler. In case some alarms have been raised a serviceman must be called to investigate and fix the problem. So we are facing the following problems: - **Mobility** – the serviceman must be informed in any localization in the service area (say agglomeration) - **Navigation** – the serviceman must be routed from the place currently he is to the affected area - **Remote control** – the serviceman must be able to control remotely the industrial object (in this case the boiler) to avoid any catastrophic behavior - **Data reusability** – the data must be also available and shared by others helping him minimize danger and fix the problem in the shortest possible time The main goal of this proof of concept is to demonstrate the feasibility of process data generation and publication using **PubSub** reactive networking concept against selected OPC UA Information Model. It also demonstrates how to design the pluggable software module dedicated to implementing the **Producer** role that is developed solely on top of the library [Reactive Networking of Semantic-Data Library](../../Networking/SemanticData/README.MD). By design it is composable component of the [`ReferenceApplication`](../../Networking/ReferenceApplication/README.MD). This component may be integrated with the `ReferenceApplication` as the `Producer`. The source code of the OPC UA Information Model is added to the project and is located in the folder `UAInformationModel`. The folder also contains the solution file that can be opened using the Address Space Model Designer [\[ 2\]][CAS.ASMD]. A detailed description of the OPC UA Information Model deployment is covered by [\[1\]][CAS.OPCUAIMD]. ## Informal Model of Boiler This example considers a real process in a boiler producing steam from water. The piping and instrumentation diagram (P&ID) in Figure 1 shows the piping and process equipment together with the instrumentation and control devices. It consists of an input pipe feeding water, a boiler drum producing steam that is carried away by an output pipe. To meet the process requirements, flow and level controllers use a valve on the input pipe to control water flow in the feedback loop. ![Figure 1. Boiler P&ID diagram](../../CommonResources/Media/Boiler/image001.png) ## OPC UA Information Model of Boiler One purpose of this example is to illustrate modeling against OPC UA Information Model. A simplified model of the presented process is illustrated in Figure 2 showing part of an OPC UA Information Model where the `BoilerType` type is defined. ![Figure 2. Boiler simplified model](../../CommonResources/Media/Boiler/image003.png) Objects of this type are complex and consist of the following components: `InputPipe`, `Drum`, `OutputPipe`, `FlowController`, `LevelController`, `CustomController`. For all of these objects corresponding types are defined. To reflect the process behavior, a `FlowTo` reference type is used to interconnect relevant objects and provide clients short browsing paths. It is derived from `NonHierarchicalReferences` (Figure 3) what is exposed in the Address Space of the server. It is good illustration how the requirements that server should expose the OPC UA Information Model are realized in the practice, i.e. the server exposes the types as nodes using predefined layout merging all selected Information Model domains. It is also worth noting that we can find the same type definition in many places in the Address Space (e.g. Figure 2 , Figure 3 , and Figure 4 ). The `BoilerType` can be instantiated every time a new boiler process is to be represented. As a result of instantiation of this type, all mandatory node chains referenced consecutively by the `HierarchicalReferences` in the forward direction (i.e. all components defined in Figure 2 and all their subcomponents) are instantiated as well. Analyzing the whole process model is impractical here. To illustrate the design practice using this model, we will focus only on one selected brand of type definition inheritance hierarchy (see Figure 4). The whole model is added to the project and is located in the folder 'UAInformationModel'. The folder also contains the solution file that can be opened using the Address Space Model Designer [\[ 2\]][CAS.ASMD]. ![Figure 3. New FlowTo reference type definition](../../CommonResources/Media/Boiler/image005.png) The model of the `BoilerInputPipeType` consists of two mandatory object components: `FlowTransmitter1`(`FTC001`) and `Valve`(`Valve001`) (Figure 5). After parent type instantiation, they are also created as components of that type and, therefore, called instance declaration. The newly created nodes have the same browse names (`FTC001`, `Valve001`) and display names (`FlowTransmitter1`, `Valve`) as in the type definition. Since browse names shall be unique in the context of the parent type definition, new nodes may be created without any fear of breaking the browse path uniqueness rules. A graphical element programmed against the `BoilerType` may need to display the value of the `Valve`. If the main graphical element is called `Boiler1` (an instance of `BoilerType`) it will need to refer to the target using the browse path: `Boiler1.Pipe001.Valve001`. This browse path is always unique, because the browse name of the created main object should be unique in the context it is located in and all instance declarations should have unique browse names in the context of types they are defined by. ![Figure 4 Model of the BoilerInputPipeType inheritance hierarchy](../../CommonResources/Media/Boiler/image007.png) `FlowTransmiter1` is of `FlowTransmitterType` type, which indirectly inherits from `GenericSensorType`, based finally on the standard `BaseObjectType`. `GenericSensorType` has a component, namely an `Output` variable of the standard `AnalogItemType`, which has three properties: `EURange`, `InstrumentRange` and `EngineeringUnits`, but only `EURange` is mandatory. `InstrumentRange` and `EngineeringUnits` are optional, therefore should be created if needed. In the case of optional instance declaration, clients are responsible for examining the exposed Address Space to check if the predefined nodes are instantiated. ## OPC UA Address Space of `BoilersArea` After instantiation of the `BoilerType` and adding reference to it in the `Objects.BoilersArea` folder, we obtain the Address Space presented in Figure 5 exposed by the server to clients. It should be noted that objects could have names other than in the definition. It is because each node in the Information Model has `DisplayName` attribute that contains the localized name of the node. Clients should use this attribute if they want to display the node name to the user. They should not use the browse name for this purpose. In this example only mandatory nodes have been instantiated. ![Figure 5 `BoilersArea` Object exposed by the server](../../CommonResources/Media/Boiler/image009.png) ## See also > - [ 1] Mariusz Postol. OPC UA Information Model Deployment, 2016. Version 1.2, DOI: 10.5281/zenodo.2586616 [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.2586616.svg)](https://doi.org/10.5281/zenodo.2586616) > - [ 2] [OPC UA Address Space Model Designer, 2019][CAS.ASMD] > - [ 3] [OPC UA Information Model How to Create Instances Video][CAS.VideoInstances] [CAS.ASMD]:https://github.com/mpostol/ASMD [CAS.OPCUAIMD]:https://zenodo.org/record/2586616#.XdAUQFdKiUk [CAS.VideoInstances]:https://youtu.be/LvGHl-hRwZw ================================================ FILE: Networking/Simulator.Boiler/SimulatorDataManagementSetup.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2020, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using CommonServiceLocator; using System; using System.ComponentModel.Composition; using System.Diagnostics; using UAOOI.Networking.Core; using UAOOI.Networking.ReferenceApplication.Core; using UAOOI.Networking.ReferenceApplication.Core.Diagnostic; using UAOOI.Networking.SemanticData; namespace UAOOI.Networking.Simulator.Boiler { /// /// Class SimulatorDataManagementSetup represents a data producer in the Reference Application. It is responsible to compose all parts making up a producer. /// This class cannot be inherited. /// Implements the /// Implements the /// Implements the /// /// /// [Export(typeof(IDataRepositoryStartup))] [PartCreationPolicy(CreationPolicy.Shared)] public sealed class SimulatorDataManagementSetup : DataManagementSetup, IDataRepositoryStartup { #region Composition /// /// Initializes a new instance of the class. /// public SimulatorDataManagementSetup() { IServiceLocator _serviceLocator = ServiceLocator.Current; string _configurationFileName = _serviceLocator.GetInstance(CompositionSettings.ConfigurationFileNameContract); m_ViewModel = _serviceLocator.GetInstance(); ConfigurationFactory = new ProducerConfigurationFactory(_configurationFileName); EncodingFactory = _serviceLocator.GetInstance(); BindingFactory = m_DataGenerator = new DataGenerator(); MessageHandlerFactory = _serviceLocator.GetInstance(); } #endregion Composition #region IProducerDataManagementSetup /// /// Setups this instance. /// public void Setup() { try { ReferenceApplicationEventSource.Log.Initialization($"{nameof(SimulatorDataManagementSetup)}.{nameof(Setup)} starting"); m_ViewModel.ChangeProducerCommand(() => { m_ViewModel.ProducerErrorMessage = "Restarted"; }); Start(); m_ViewModel.ProducerErrorMessage = "Running"; ReferenceApplicationEventSource.Log.Initialization($" Setup of the producer engine has been accomplished and it starts sending data."); } catch (Exception _ex) { ReferenceApplicationEventSource.Log.LogException(_ex); m_ViewModel.ProducerErrorMessage = "ERROR"; throw; } } #endregion IProducerDataManagementSetup #region IDisposable /// /// Releases unmanaged and - optionally - managed resources. /// /// true to release both managed and unmanaged resources; false to release only unmanaged resources. protected override void Dispose(bool disposing) { m_onDispose(disposing); base.Dispose(disposing); if (!disposing || m_disposed) return; m_disposed = true; m_DataGenerator.Dispose(); } #endregion IDisposable #region private /// /// Gets or sets the view model to be used for diagnostic purpose.. /// /// The view model. private ProducerViewModel m_ViewModel; private DataGenerator m_DataGenerator = null; /// /// Gets a value indicating whether this is disposed. /// /// true if disposed; otherwise, false. private bool m_disposed = false; private Action m_onDispose = disposing => { }; #endregion private #region Unit tests instrumentation [Conditional("DEBUG")] internal void DisposeCheck(Action onDispose) { m_onDispose = onDispose; } #endregion Unit tests instrumentation } } ================================================ FILE: Networking/Simulator.Boiler/UAInformationModel/BoilerExampleSolution.uamdsl ================================================ Boiler Example Solution BoilerType $(ProjectFileName).csv $(ProjectFileName) DemoConfiguration\BoilerType.xml BoilersSet $(ProjectFileName).csv $(ProjectFileName) DemoConfiguration\BoilersSet.xml ================================================ FILE: Networking/Simulator.Boiler/UAInformationModel/DemoConfiguration/BoilerExample.oses ================================================ 47 CAS.CommServer.OPC.Da.Server opcda://localhost/CAS.CommServer.OPC.Da.Server/{2032fe45-c774-46d7-9aa3-b844e8658919} CC603642-66D7-48f1-B69A-B625E73652D7 Data Access 3.00 true 9 141 47 Registers 1000 0 0 true true true 142 47 Flags 1000 0 0 true true true 143 47 Generator 1000 0 0 true true true 1119 141 PLC/R/100 true 1120 141 PLC/R/101 true 1121 141 PLC/R/102 true 1122 141 PLC/R/103 true 1123 141 PLC/R/104 true 1124 141 PLC/R/105 true 1125 141 PLC/R/106 true 1126 141 PLC/R/107 true 1127 141 PLC/R/108 true 1128 141 PLC/R/109 true 1129 141 PLC/R/110 true 1130 142 PLC/F/100 true 1131 142 PLC/F/101 true 1132 142 PLC/F/102 true 1133 142 PLC/F/103 true 1134 142 PLC/F/104 true 1135 142 PLC/F/105 true 1136 142 PLC/F/106 true 1137 142 PLC/F/107 true 1138 142 PLC/F/108 true 1139 142 PLC/F/109 true 1140 143 PLC/G/000 true 1141 143 PLC/G/001 true 1142 143 PLC/G/002 true 323 Transaction0 5000 1000 true 324 Transaction1 1000 1000 true 325 Transaction2 1000 1000 true 326 Transaction3 1000 1000 true 327 Transaction4 1000 1000 true 328 Transaction5 1000 1000 true 329 Transaction6 1000 1000 true 330 Transaction7 1000 1000 true 331 Transaction8 1000 1000 true 2479 Write R 100 323 5292af0f-843e-4da4-aeed-dd923ac923f0 1119 2480 Random(100) 323 100 60898b48-0904-4873-a6cb-63f6277789b5 2481 Seconds 323 System.DateTime.Now.Minute cd797098-538f-4862-830d-3ce5a80ffc14 2482 Write R 101 323 5292af0f-843e-4da4-aeed-dd923ac923f0 1120 2483 Set constant 123 323 123 492a4fe5-4dc0-44cd-b3b9-d72c18d4b84e 2484 Write R 102 323 5292af0f-843e-4da4-aeed-dd923ac923f0 1121 2485 Read R 100 (2) 324 ffe785ac-1a89-4546-89e4-d3543d2e8fd3 1119 2486 splitter 324 d308dbe6-0ff9-4906-b81c-fe65bf342f85 2487 Read R 101 324 ffe785ac-1a89-4546-89e4-d3543d2e8fd3 1120 2488 adder 324 a87ba598-fd9f-4183-b30d-e12fc5a42faa 2489 Write R 105 324 5292af0f-843e-4da4-aeed-dd923ac923f0 1124 2490 Write R 106 324 5292af0f-843e-4da4-aeed-dd923ac923f0 1125 2491 Read R 101 (2) 325 ffe785ac-1a89-4546-89e4-d3543d2e8fd3 1120 2492 Set Const 10 325 10 492a4fe5-4dc0-44cd-b3b9-d72c18d4b84e 2493 splitter_1 325 d308dbe6-0ff9-4906-b81c-fe65bf342f85 2494 multiplicity 325 effe8adf-b4ce-4b64-9113-218d1cdfcbc2 2495 POW (1) 325 1 848e14ce-28b4-47d3-b9ba-19507d0451d3 2496 Write R 107 325 5292af0f-843e-4da4-aeed-dd923ac923f0 1126 2497 Write R 108 325 5292af0f-843e-4da4-aeed-dd923ac923f0 1127 2498 Read R 103 326 ffe785ac-1a89-4546-89e4-d3543d2e8fd3 1122 2499 Read R 104 326 ffe785ac-1a89-4546-89e4-d3543d2e8fd3 1123 2500 Read R 103 (2) 326 ffe785ac-1a89-4546-89e4-d3543d2e8fd3 1122 2501 splitter_2 326 d308dbe6-0ff9-4906-b81c-fe65bf342f85 2502 adder_1 326 a87ba598-fd9f-4183-b30d-e12fc5a42faa 2503 multiplicity_1 326 effe8adf-b4ce-4b64-9113-218d1cdfcbc2 2504 Write R 109 326 5292af0f-843e-4da4-aeed-dd923ac923f0 1128 2505 Write R 110 326 5292af0f-843e-4da4-aeed-dd923ac923f0 1129 2506 Read R 100 (3) 327 ffe785ac-1a89-4546-89e4-d3543d2e8fd3 1119 2507 splitter_3 327 d308dbe6-0ff9-4906-b81c-fe65bf342f85 2508 Read R 100 (4) 327 ffe785ac-1a89-4546-89e4-d3543d2e8fd3 1119 2509 splitter_4 327 d308dbe6-0ff9-4906-b81c-fe65bf342f85 2510 in range 327 <?xml version="1.0" encoding="utf-16"?> <ValueInRangeParameter xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <LowLimit>0</LowLimit> <HiLimit>100</HiLimit> <LowLimitCanBeEqual>true</LowLimitCanBeEqual> <HiLimitCanBeEqual>true</HiLimitCanBeEqual> </ValueInRangeParameter> 7c3f78b8-994d-4371-866c-63da71a6c238 2511 set const 2 327 2 492a4fe5-4dc0-44cd-b3b9-d72c18d4b84e 2512 add 327 a87ba598-fd9f-4183-b30d-e12fc5a42faa 2513 multiply 327 effe8adf-b4ce-4b64-9113-218d1cdfcbc2 2514 equal 327 abf91b3c-2c09-4a16-8927-d39dad80cd51 2515 Write F 100 327 5292af0f-843e-4da4-aeed-dd923ac923f0 1130 2516 Write F 101 327 5292af0f-843e-4da4-aeed-dd923ac923f0 1131 2517 Read R 101 (3) 328 ffe785ac-1a89-4546-89e4-d3543d2e8fd3 1120 2518 Read R 101 (4) 328 ffe785ac-1a89-4546-89e4-d3543d2e8fd3 1120 2519 splitter_5 328 d308dbe6-0ff9-4906-b81c-fe65bf342f85 2520 divide 328 5446258c-3f07-40a2-b659-0670c4e6eb59 2521 subtract 328 23f1ab6a-8616-4239-8f18-7a07f8badb4a 2522 Read R 101 (5) 328 ffe785ac-1a89-4546-89e4-d3543d2e8fd3 1120 2523 Write F 102 328 5292af0f-843e-4da4-aeed-dd923ac923f0 1132 2524 Write F 103 328 5292af0f-843e-4da4-aeed-dd923ac923f0 1133 2525 set const 1 328 1 492a4fe5-4dc0-44cd-b3b9-d72c18d4b84e 2526 set const 0 328 0 492a4fe5-4dc0-44cd-b3b9-d72c18d4b84e 2527 equals_2 328 abf91b3c-2c09-4a16-8927-d39dad80cd51 2528 equals_3 328 abf91b3c-2c09-4a16-8927-d39dad80cd51 2529 Read R 100 (6) 329 ffe785ac-1a89-4546-89e4-d3543d2e8fd3 1119 2530 splitter_6 329 d308dbe6-0ff9-4906-b81c-fe65bf342f85 2531 pow 10 (2) 329 2 848e14ce-28b4-47d3-b9ba-19507d0451d3 2532 set const 100 329 100 492a4fe5-4dc0-44cd-b3b9-d72c18d4b84e 2533 multiply_1 329 effe8adf-b4ce-4b64-9113-218d1cdfcbc2 2534 Write F 104 329 5292af0f-843e-4da4-aeed-dd923ac923f0 1134 2535 subtract_1 329 23f1ab6a-8616-4239-8f18-7a07f8badb4a 2536 in range (les than 1) 329 <?xml version="1.0" encoding="utf-16"?> <ValueInRangeParameter xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <LowLimit>0</LowLimit> <HiLimit>1</HiLimit> <LowLimitCanBeEqual>true</LowLimitCanBeEqual> <HiLimitCanBeEqual>false</HiLimitCanBeEqual> </ValueInRangeParameter> 7c3f78b8-994d-4371-866c-63da71a6c238 2537 Read R 105_1 330 ffe785ac-1a89-4546-89e4-d3543d2e8fd3 1124 2538 Read R 103_1 330 ffe785ac-1a89-4546-89e4-d3543d2e8fd3 1122 2539 Read R 104_1 330 ffe785ac-1a89-4546-89e4-d3543d2e8fd3 1123 2540 in range (0 , 50) 330 <?xml version="1.0" encoding="utf-16"?> <ValueInRangeParameter xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <LowLimit>0</LowLimit> <HiLimit>50</HiLimit> <LowLimitCanBeEqual>true</LowLimitCanBeEqual> <HiLimitCanBeEqual>true</HiLimitCanBeEqual> </ValueInRangeParameter> 7c3f78b8-994d-4371-866c-63da71a6c238 2541 equals_1 330 abf91b3c-2c09-4a16-8927-d39dad80cd51 2542 Write F 105 330 5292af0f-843e-4da4-aeed-dd923ac923f0 1135 2543 Write F 106 330 5292af0f-843e-4da4-aeed-dd923ac923f0 1136 2544 Read R 109 331 ffe785ac-1a89-4546-89e4-d3543d2e8fd3 1128 2545 Read R 110 331 ffe785ac-1a89-4546-89e4-d3543d2e8fd3 1129 2546 in range <0,100>_1 331 <?xml version="1.0" encoding="utf-16"?> <ValueInRangeParameter xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <LowLimit>0</LowLimit> <HiLimit>100</HiLimit> <LowLimitCanBeEqual>true</LowLimitCanBeEqual> <HiLimitCanBeEqual>true</HiLimitCanBeEqual> </ValueInRangeParameter> 7c3f78b8-994d-4371-866c-63da71a6c238 2547 in range <0,100> 331 <?xml version="1.0" encoding="utf-16"?> <ValueInRangeParameter xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <LowLimit>0</LowLimit> <HiLimit>100</HiLimit> <LowLimitCanBeEqual>true</LowLimitCanBeEqual> <HiLimitCanBeEqual>true</HiLimitCanBeEqual> </ValueInRangeParameter> 7c3f78b8-994d-4371-866c-63da71a6c238 2548 Write F 107 331 5292af0f-843e-4da4-aeed-dd923ac923f0 1137 2549 Write F 108 331 5292af0f-843e-4da4-aeed-dd923ac923f0 1138 2479 0 2480 0 2482 0 2481 0 2484 0 2483 0 2489 0 2486 0 2486 0 2485 0 2490 0 2488 0 2488 0 2486 1 2488 1 2487 0 2496 0 2494 0 2494 0 2492 0 2494 1 2493 0 2493 0 2491 0 2497 0 2495 0 2495 0 2493 1 2504 0 2502 0 2502 0 2498 0 2502 1 2501 0 2501 0 2499 0 2505 0 2503 0 2503 0 2501 1 2503 1 2500 0 2515 0 2510 0 2510 0 2507 0 2507 0 2506 0 2516 0 2514 0 2514 0 2512 0 2512 0 2507 1 2512 1 2509 0 2509 0 2508 0 2514 1 2513 0 2513 0 2509 1 2513 1 2511 0 2523 0 2527 0 2527 0 2520 0 2520 0 2517 0 2520 1 2519 0 2519 0 2518 0 2527 1 2525 0 2524 0 2528 0 2528 0 2521 0 2521 0 2519 1 2521 1 2522 0 2528 1 2526 0 2534 0 2536 0 2536 0 2535 0 2535 0 2531 0 2531 0 2530 0 2530 0 2529 0 2535 1 2533 0 2533 0 2530 1 2533 1 2532 0 2542 0 2540 0 2540 0 2537 0 2543 0 2541 0 2541 0 2538 0 2541 1 2539 0 2548 0 2546 0 2546 0 2544 0 2549 0 2547 0 2547 0 2545 0 ================================================ FILE: Networking/Simulator.Boiler/UAInformationModel/DemoConfiguration/BoilerExample.uasconfig ================================================  CAS.CommServer.UA.Server urn:localhost:UA:CAS_UA_Server urn:cas.eu:UA:Server Server_0 Windows LocalMachine\My My LocalMachine CN=CommServer/O=CAS/C=PL Windows LocalMachine\CAS UA Certificate Authorities CAS UA Certificate Authorities LocalMachine Windows LocalMachine\UA Applications UA Applications LocalMachine Windows LocalMachine\My My LocalMachine UA Client 32 %CommonApplicationData%\CAS\CAS.CommServerUA\RejectedCertificates Directory %CommonApplicationData%\CAS\CAS.CommServerUA\RejectedCertificates false 600000 1048576 4194304 65535 4194304 65535 300000 3600000 opc.tcp://localhost:51234/UA/CAS_UA_Server http://localhost:51235/UA/CAS_UA_Server http://loclhost:51235/UA/CAS.CommServer.UA.Server SignAndEncrypt_3 http://opcfoundation.org/UA/SecurityPolicy#Basic128Rsa15 3 Sign_2 http://opcfoundation.org/UA/SecurityPolicy#Basic256 2 None_1 http://opcfoundation.org/UA/SecurityPolicy#None 0 5 100 2000 Anonymous_0 UserName_1 Certificate_2 false 100 10000 3600000 10 10 100 600000 100 3600000 50 3600000 100 100 1000 1000 http://localhost:52601/UADiscovery/registration urn:localhost:UADiscovery DiscoveryServer_3 http://localhost:52601/UADiscovery SignAndEncrypt_3 1 30000 CAS.UA.Server.nodes.xml 10000 20 20 10000 %CommonApplicationData%\CAS\CAS.CommServerUA\log\CAS.UA.Server.starting.log true 5 true BoilerExample.oses DefaultConfig.xml Object d6p1:Boilers Object d6p1:Boilers_Boiler1 Object d6p1:Boilers_Boiler1_CustomController Object d6p1:Boilers_Boiler1_Drum Object d6p1:Boilers_Boiler1_FlowController Object d6p1:Boilers_Boiler1_InputPipe Object d6p1:Boilers_Boiler1_LevelController Object d6p1:Boilers_CASBoiler Object d6p1:Boilers_CASBoiler_Drum Object d6p1:Boilers_CASBoiler_InputPipe Object d6p1:Boilers_ObjectsFolder Object d6p1:BoilersArea true Object d6p1:BoilerInputPipeType_FlowTransmitter1 true Object d6p1:BoilerInputPipeType_Valve Object d6p1:Boilers Object d6p1:Boilers_Boiler1 true Object d6p1:Boilers_Boiler1_CustomController d6p1:Double true Object d6p1:Boilers_Boiler1_CustomController_Input1 true Object d6p1:Boilers_Boiler1_Drum true Object d6p1:Boilers_Boiler1_FlowController true Object d6p1:Boilers_Boiler1_InputPipe true Object d6p1:Boilers_Boiler1_InputPipe_FlowTransmitter1 true Object d6p1:Boilers_Boiler1_LevelController true Object d6p1:Boilers_Boiler1_OutputPipe true Object d6p1:Boilers_Boiler1_Simulation true Object d6p1:BoilerType_CustomController true Object d6p1:BoilerType_Drum true Object d6p1:BoilerType_FlowController true Object d6p1:BoilerType_InputPipe true Object d6p1:BoilerType_InputPipe_FlowTransmitter1 true Object d6p1:BoilerType_LevelController true Object d6p1:BoilerType_OutputPipe true Object d6p1:BoilerType_Simulation d6p1:Double true Object d6p1:CustomControllerType_Input1 Object d6p1:BoilersArea Object d6p1:BoilersArea_BoilerAlpha Object d6p1:BoilersArea_BoilerAlpha_OutputPipe Object d6p1:BoilersArea_BoilerBravo Object d6p1:BoilersArea_BoilerBravo_InputPipe Object d6p1:BoilersArea_BoilerCharlie Object d6p1:BoilersArea_BoilerDelta Object d6p1:BoilersArea_CASBoiler Object d6p1:BoilersArea_CASBoiler_CustomController Object d6p1:BoilersArea_CASBoiler_Drum true Object d6p1:BoilersArea_CASBoiler_Drum_LevelIndicator d6p1:Double true Variable d6p1:BoilersArea_CASBoiler_Drum_LevelIndicator_Output Object d6p1:BoilersArea_CASBoiler_InputPipe Object d6p1:BoilersArea_CASBoiler_InputPipe_FlowTransmitter1 d6p1:Double true Variable d6p1:BoilersArea_CASBoiler_InputPipe_FlowTransmitter1_Output d6p1:Range true Object d6p1:BoilersArea_CASBoiler_InputPipe_FlowTransmitter1_Output_EURange Object d6p1:BoilersArea_CASBoiler_LevelController Object d6p1:BoilersArea_CASBoiler_OutputPipe Object d6p1:BoilersArea_ObjectsFolder Object d6p1:Drums Object d6p1:Drums_Drum Object d6p1:Measurements Object d6p1:Measurements_ObjectsFolder Object d6p1:Pipes Object d6p1:Pipes_InputPipe Object d6p1:Pipes_OutputPipe d6p1:Range true Object d6p1:AnalogItemType_EURange Object d6p1:HistoryServerCapabilities_ServerCapabilities Object d6p1:ModellingRule_Mandatory Object d6p1:ModellingRule_Mandatory_NameNotSet1 Object d6p1:ModellingRule_MandatoryPlaceholder Object d6p1:ObjectsFolder Object d6p1:ReferenceTypesFolder Object d6p1:RootFolder true Object d6p1:BoilerDrumType_LevelIndicator Object d6p1:Boilers true Object d6p1:BoilerType_Drum true Object d6p1:BoilerType_InputPipe true Object d6p1:BoilerType_LevelController true Object d6p1:BoilerType_LevelController_ControlOut d6p1:Double true Variable d6p1:GenericSensorType_Output BoilerExample.csv BoilerExample\CAS.UA.Server.Demo.PredefinedNodes.uanodes http://cas.eu/UA/Demo/ ================================================ FILE: Networking/Simulator.Boiler/UAInformationModel/DemoConfiguration/BoilerType/tempuri.org.UA.Examples.BoilerType.Classes.cs ================================================ /* ======================================================================== * Copyright (c) 2005-2011 The OPC Foundation, Inc. All rights reserved. * * OPC Foundation MIT License 1.00 * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, * copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following * conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. * * The complete license agreement can be found here: * http://opcfoundation.org/License/MIT/1.00/ * ======================================================================*/ using System; using System.Collections.Generic; using System.Text; using System.Reflection; using System.Xml; using System.Runtime.Serialization; using Opc.Ua; namespace tempuri.org.UA.Examples.BoilerType { #region Object Identifiers /// /// A class that declares constants for all Objects in the Model Design. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class Objects { /// /// The identifier for the BoilerInputPipeType_FlowTransmitter1 Object. /// public const uint BoilerInputPipeType_FlowTransmitter1 = 121; /// /// The identifier for the BoilerInputPipeType_Valve Object. /// public const uint BoilerInputPipeType_Valve = 128; /// /// The identifier for the BoilerDrumType_LevelIndicator Object. /// public const uint BoilerDrumType_LevelIndicator = 136; /// /// The identifier for the BoilerOutputPipeType_FlowTransmitter2 Object. /// public const uint BoilerOutputPipeType_FlowTransmitter2 = 144; /// /// The identifier for the BoilerType_InputPipe Object. /// public const uint BoilerType_InputPipe = 152; /// /// The identifier for the BoilerType_InputPipe_FlowTransmitter1 Object. /// public const uint BoilerType_InputPipe_FlowTransmitter1 = 153; /// /// The identifier for the BoilerType_InputPipe_Valve Object. /// public const uint BoilerType_InputPipe_Valve = 160; /// /// The identifier for the BoilerType_Drum Object. /// public const uint BoilerType_Drum = 167; /// /// The identifier for the BoilerType_Drum_LevelIndicator Object. /// public const uint BoilerType_Drum_LevelIndicator = 168; /// /// The identifier for the BoilerType_OutputPipe Object. /// public const uint BoilerType_OutputPipe = 175; /// /// The identifier for the BoilerType_OutputPipe_FlowTransmitter2 Object. /// public const uint BoilerType_OutputPipe_FlowTransmitter2 = 176; /// /// The identifier for the BoilerType_FlowController Object. /// public const uint BoilerType_FlowController = 183; /// /// The identifier for the BoilerType_LevelController Object. /// public const uint BoilerType_LevelController = 187; /// /// The identifier for the BoilerType_CustomController Object. /// public const uint BoilerType_CustomController = 191; /// /// The identifier for the BoilerType_Simulation Object. /// public const uint BoilerType_Simulation = 197; } #endregion #region ObjectType Identifiers /// /// A class that declares constants for all ObjectTypes in the Model Design. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class ObjectTypes { /// /// The identifier for the GenericControllerType ObjectType. /// public const uint GenericControllerType = 4; /// /// The identifier for the GenericSensorType ObjectType. /// public const uint GenericSensorType = 8; /// /// The identifier for the GenericActuatorType ObjectType. /// public const uint GenericActuatorType = 15; /// /// The identifier for the CustomControllerType ObjectType. /// public const uint CustomControllerType = 22; /// /// The identifier for the ValveType ObjectType. /// public const uint ValveType = 28; /// /// The identifier for the LevelControllerType ObjectType. /// public const uint LevelControllerType = 35; /// /// The identifier for the FlowControllerType ObjectType. /// public const uint FlowControllerType = 39; /// /// The identifier for the LevelIndicatorType ObjectType. /// public const uint LevelIndicatorType = 43; /// /// The identifier for the FlowTransmitterType ObjectType. /// public const uint FlowTransmitterType = 50; /// /// The identifier for the BoilerStateMachineType ObjectType. /// public const uint BoilerStateMachineType = 57; /// /// The identifier for the BoilerInputPipeType ObjectType. /// public const uint BoilerInputPipeType = 120; /// /// The identifier for the BoilerDrumType ObjectType. /// public const uint BoilerDrumType = 135; /// /// The identifier for the BoilerOutputPipeType ObjectType. /// public const uint BoilerOutputPipeType = 143; /// /// The identifier for the BoilerType ObjectType. /// public const uint BoilerType = 151; } #endregion #region ReferenceType Identifiers /// /// A class that declares constants for all ReferenceTypes in the Model Design. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class ReferenceTypes { /// /// The identifier for the FlowTo ReferenceType. /// public const uint FlowTo = 1; /// /// The identifier for the HotFlowTo ReferenceType. /// public const uint HotFlowTo = 2; /// /// The identifier for the SignalTo ReferenceType. /// public const uint SignalTo = 3; } #endregion #region Variable Identifiers /// /// A class that declares constants for all Variables in the Model Design. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class Variables { /// /// The identifier for the GenericControllerType_Measurement Variable. /// public const uint GenericControllerType_Measurement = 5; /// /// The identifier for the GenericControllerType_SetPoint Variable. /// public const uint GenericControllerType_SetPoint = 6; /// /// The identifier for the GenericControllerType_ControlOut Variable. /// public const uint GenericControllerType_ControlOut = 7; /// /// The identifier for the GenericSensorType_Output Variable. /// public const uint GenericSensorType_Output = 9; /// /// The identifier for the GenericSensorType_Output_EURange Variable. /// public const uint GenericSensorType_Output_EURange = 13; /// /// The identifier for the GenericActuatorType_Input Variable. /// public const uint GenericActuatorType_Input = 16; /// /// The identifier for the GenericActuatorType_Input_EURange Variable. /// public const uint GenericActuatorType_Input_EURange = 20; /// /// The identifier for the CustomControllerType_Input1 Variable. /// public const uint CustomControllerType_Input1 = 23; /// /// The identifier for the CustomControllerType_Input2 Variable. /// public const uint CustomControllerType_Input2 = 24; /// /// The identifier for the CustomControllerType_Input3 Variable. /// public const uint CustomControllerType_Input3 = 25; /// /// The identifier for the CustomControllerType_ControlOut Variable. /// public const uint CustomControllerType_ControlOut = 26; /// /// The identifier for the CustomControllerType_DescriptionX Variable. /// public const uint CustomControllerType_DescriptionX = 27; /// /// The identifier for the BoilerStateMachineType_UpdateRate Variable. /// public const uint BoilerStateMachineType_UpdateRate = 119; /// /// The identifier for the BoilerType_InputPipe_FlowTransmitter1_Output Variable. /// public const uint BoilerType_InputPipe_FlowTransmitter1_Output = 154; /// /// The identifier for the BoilerType_InputPipe_Valve_Input Variable. /// public const uint BoilerType_InputPipe_Valve_Input = 161; /// /// The identifier for the BoilerType_Drum_LevelIndicator_Output Variable. /// public const uint BoilerType_Drum_LevelIndicator_Output = 169; /// /// The identifier for the BoilerType_OutputPipe_FlowTransmitter2_Output Variable. /// public const uint BoilerType_OutputPipe_FlowTransmitter2_Output = 177; /// /// The identifier for the BoilerType_FlowController_Measurement Variable. /// public const uint BoilerType_FlowController_Measurement = 184; /// /// The identifier for the BoilerType_FlowController_SetPoint Variable. /// public const uint BoilerType_FlowController_SetPoint = 185; /// /// The identifier for the BoilerType_FlowController_ControlOut Variable. /// public const uint BoilerType_FlowController_ControlOut = 186; /// /// The identifier for the BoilerType_LevelController_Measurement Variable. /// public const uint BoilerType_LevelController_Measurement = 188; /// /// The identifier for the BoilerType_LevelController_SetPoint Variable. /// public const uint BoilerType_LevelController_SetPoint = 189; /// /// The identifier for the BoilerType_LevelController_ControlOut Variable. /// public const uint BoilerType_LevelController_ControlOut = 190; /// /// The identifier for the BoilerType_CustomController_Input1 Variable. /// public const uint BoilerType_CustomController_Input1 = 192; /// /// The identifier for the BoilerType_CustomController_Input2 Variable. /// public const uint BoilerType_CustomController_Input2 = 193; /// /// The identifier for the BoilerType_CustomController_Input3 Variable. /// public const uint BoilerType_CustomController_Input3 = 194; /// /// The identifier for the BoilerType_CustomController_ControlOut Variable. /// public const uint BoilerType_CustomController_ControlOut = 195; /// /// The identifier for the BoilerType_CustomController_DescriptionX Variable. /// public const uint BoilerType_CustomController_DescriptionX = 196; /// /// The identifier for the BoilerType_Simulation_UpdateRate Variable. /// public const uint BoilerType_Simulation_UpdateRate = 229; } #endregion #region Object Node Identifiers /// /// A class that declares constants for all Objects in the Model Design. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class ObjectIds { /// /// The identifier for the BoilerInputPipeType_FlowTransmitter1 Object. /// public static readonly ExpandedNodeId BoilerInputPipeType_FlowTransmitter1 = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.Objects.BoilerInputPipeType_FlowTransmitter1, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the BoilerInputPipeType_Valve Object. /// public static readonly ExpandedNodeId BoilerInputPipeType_Valve = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.Objects.BoilerInputPipeType_Valve, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the BoilerDrumType_LevelIndicator Object. /// public static readonly ExpandedNodeId BoilerDrumType_LevelIndicator = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.Objects.BoilerDrumType_LevelIndicator, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the BoilerOutputPipeType_FlowTransmitter2 Object. /// public static readonly ExpandedNodeId BoilerOutputPipeType_FlowTransmitter2 = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.Objects.BoilerOutputPipeType_FlowTransmitter2, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the BoilerType_InputPipe Object. /// public static readonly ExpandedNodeId BoilerType_InputPipe = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.Objects.BoilerType_InputPipe, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the BoilerType_InputPipe_FlowTransmitter1 Object. /// public static readonly ExpandedNodeId BoilerType_InputPipe_FlowTransmitter1 = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.Objects.BoilerType_InputPipe_FlowTransmitter1, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the BoilerType_InputPipe_Valve Object. /// public static readonly ExpandedNodeId BoilerType_InputPipe_Valve = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.Objects.BoilerType_InputPipe_Valve, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the BoilerType_Drum Object. /// public static readonly ExpandedNodeId BoilerType_Drum = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.Objects.BoilerType_Drum, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the BoilerType_Drum_LevelIndicator Object. /// public static readonly ExpandedNodeId BoilerType_Drum_LevelIndicator = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.Objects.BoilerType_Drum_LevelIndicator, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the BoilerType_OutputPipe Object. /// public static readonly ExpandedNodeId BoilerType_OutputPipe = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.Objects.BoilerType_OutputPipe, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the BoilerType_OutputPipe_FlowTransmitter2 Object. /// public static readonly ExpandedNodeId BoilerType_OutputPipe_FlowTransmitter2 = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.Objects.BoilerType_OutputPipe_FlowTransmitter2, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the BoilerType_FlowController Object. /// public static readonly ExpandedNodeId BoilerType_FlowController = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.Objects.BoilerType_FlowController, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the BoilerType_LevelController Object. /// public static readonly ExpandedNodeId BoilerType_LevelController = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.Objects.BoilerType_LevelController, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the BoilerType_CustomController Object. /// public static readonly ExpandedNodeId BoilerType_CustomController = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.Objects.BoilerType_CustomController, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the BoilerType_Simulation Object. /// public static readonly ExpandedNodeId BoilerType_Simulation = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.Objects.BoilerType_Simulation, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); } #endregion #region ObjectType Node Identifiers /// /// A class that declares constants for all ObjectTypes in the Model Design. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class ObjectTypeIds { /// /// The identifier for the GenericControllerType ObjectType. /// public static readonly ExpandedNodeId GenericControllerType = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.ObjectTypes.GenericControllerType, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the GenericSensorType ObjectType. /// public static readonly ExpandedNodeId GenericSensorType = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.ObjectTypes.GenericSensorType, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the GenericActuatorType ObjectType. /// public static readonly ExpandedNodeId GenericActuatorType = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.ObjectTypes.GenericActuatorType, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the CustomControllerType ObjectType. /// public static readonly ExpandedNodeId CustomControllerType = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.ObjectTypes.CustomControllerType, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the ValveType ObjectType. /// public static readonly ExpandedNodeId ValveType = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.ObjectTypes.ValveType, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the LevelControllerType ObjectType. /// public static readonly ExpandedNodeId LevelControllerType = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.ObjectTypes.LevelControllerType, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the FlowControllerType ObjectType. /// public static readonly ExpandedNodeId FlowControllerType = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.ObjectTypes.FlowControllerType, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the LevelIndicatorType ObjectType. /// public static readonly ExpandedNodeId LevelIndicatorType = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.ObjectTypes.LevelIndicatorType, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the FlowTransmitterType ObjectType. /// public static readonly ExpandedNodeId FlowTransmitterType = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.ObjectTypes.FlowTransmitterType, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the BoilerStateMachineType ObjectType. /// public static readonly ExpandedNodeId BoilerStateMachineType = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.ObjectTypes.BoilerStateMachineType, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the BoilerInputPipeType ObjectType. /// public static readonly ExpandedNodeId BoilerInputPipeType = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.ObjectTypes.BoilerInputPipeType, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the BoilerDrumType ObjectType. /// public static readonly ExpandedNodeId BoilerDrumType = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.ObjectTypes.BoilerDrumType, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the BoilerOutputPipeType ObjectType. /// public static readonly ExpandedNodeId BoilerOutputPipeType = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.ObjectTypes.BoilerOutputPipeType, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the BoilerType ObjectType. /// public static readonly ExpandedNodeId BoilerType = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.ObjectTypes.BoilerType, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); } #endregion #region ReferenceType Node Identifiers /// /// A class that declares constants for all ReferenceTypes in the Model Design. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class ReferenceTypeIds { /// /// The identifier for the FlowTo ReferenceType. /// public static readonly ExpandedNodeId FlowTo = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.ReferenceTypes.FlowTo, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the HotFlowTo ReferenceType. /// public static readonly ExpandedNodeId HotFlowTo = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.ReferenceTypes.HotFlowTo, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the SignalTo ReferenceType. /// public static readonly ExpandedNodeId SignalTo = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.ReferenceTypes.SignalTo, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); } #endregion #region Variable Node Identifiers /// /// A class that declares constants for all Variables in the Model Design. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class VariableIds { /// /// The identifier for the GenericControllerType_Measurement Variable. /// public static readonly ExpandedNodeId GenericControllerType_Measurement = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.Variables.GenericControllerType_Measurement, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the GenericControllerType_SetPoint Variable. /// public static readonly ExpandedNodeId GenericControllerType_SetPoint = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.Variables.GenericControllerType_SetPoint, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the GenericControllerType_ControlOut Variable. /// public static readonly ExpandedNodeId GenericControllerType_ControlOut = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.Variables.GenericControllerType_ControlOut, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the GenericSensorType_Output Variable. /// public static readonly ExpandedNodeId GenericSensorType_Output = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.Variables.GenericSensorType_Output, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the GenericSensorType_Output_EURange Variable. /// public static readonly ExpandedNodeId GenericSensorType_Output_EURange = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.Variables.GenericSensorType_Output_EURange, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the GenericActuatorType_Input Variable. /// public static readonly ExpandedNodeId GenericActuatorType_Input = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.Variables.GenericActuatorType_Input, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the GenericActuatorType_Input_EURange Variable. /// public static readonly ExpandedNodeId GenericActuatorType_Input_EURange = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.Variables.GenericActuatorType_Input_EURange, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the CustomControllerType_Input1 Variable. /// public static readonly ExpandedNodeId CustomControllerType_Input1 = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.Variables.CustomControllerType_Input1, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the CustomControllerType_Input2 Variable. /// public static readonly ExpandedNodeId CustomControllerType_Input2 = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.Variables.CustomControllerType_Input2, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the CustomControllerType_Input3 Variable. /// public static readonly ExpandedNodeId CustomControllerType_Input3 = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.Variables.CustomControllerType_Input3, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the CustomControllerType_ControlOut Variable. /// public static readonly ExpandedNodeId CustomControllerType_ControlOut = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.Variables.CustomControllerType_ControlOut, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the CustomControllerType_DescriptionX Variable. /// public static readonly ExpandedNodeId CustomControllerType_DescriptionX = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.Variables.CustomControllerType_DescriptionX, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the BoilerStateMachineType_UpdateRate Variable. /// public static readonly ExpandedNodeId BoilerStateMachineType_UpdateRate = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.Variables.BoilerStateMachineType_UpdateRate, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the BoilerType_InputPipe_FlowTransmitter1_Output Variable. /// public static readonly ExpandedNodeId BoilerType_InputPipe_FlowTransmitter1_Output = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.Variables.BoilerType_InputPipe_FlowTransmitter1_Output, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the BoilerType_InputPipe_Valve_Input Variable. /// public static readonly ExpandedNodeId BoilerType_InputPipe_Valve_Input = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.Variables.BoilerType_InputPipe_Valve_Input, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the BoilerType_Drum_LevelIndicator_Output Variable. /// public static readonly ExpandedNodeId BoilerType_Drum_LevelIndicator_Output = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.Variables.BoilerType_Drum_LevelIndicator_Output, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the BoilerType_OutputPipe_FlowTransmitter2_Output Variable. /// public static readonly ExpandedNodeId BoilerType_OutputPipe_FlowTransmitter2_Output = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.Variables.BoilerType_OutputPipe_FlowTransmitter2_Output, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the BoilerType_FlowController_Measurement Variable. /// public static readonly ExpandedNodeId BoilerType_FlowController_Measurement = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.Variables.BoilerType_FlowController_Measurement, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the BoilerType_FlowController_SetPoint Variable. /// public static readonly ExpandedNodeId BoilerType_FlowController_SetPoint = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.Variables.BoilerType_FlowController_SetPoint, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the BoilerType_FlowController_ControlOut Variable. /// public static readonly ExpandedNodeId BoilerType_FlowController_ControlOut = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.Variables.BoilerType_FlowController_ControlOut, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the BoilerType_LevelController_Measurement Variable. /// public static readonly ExpandedNodeId BoilerType_LevelController_Measurement = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.Variables.BoilerType_LevelController_Measurement, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the BoilerType_LevelController_SetPoint Variable. /// public static readonly ExpandedNodeId BoilerType_LevelController_SetPoint = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.Variables.BoilerType_LevelController_SetPoint, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the BoilerType_LevelController_ControlOut Variable. /// public static readonly ExpandedNodeId BoilerType_LevelController_ControlOut = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.Variables.BoilerType_LevelController_ControlOut, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the BoilerType_CustomController_Input1 Variable. /// public static readonly ExpandedNodeId BoilerType_CustomController_Input1 = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.Variables.BoilerType_CustomController_Input1, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the BoilerType_CustomController_Input2 Variable. /// public static readonly ExpandedNodeId BoilerType_CustomController_Input2 = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.Variables.BoilerType_CustomController_Input2, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the BoilerType_CustomController_Input3 Variable. /// public static readonly ExpandedNodeId BoilerType_CustomController_Input3 = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.Variables.BoilerType_CustomController_Input3, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the BoilerType_CustomController_ControlOut Variable. /// public static readonly ExpandedNodeId BoilerType_CustomController_ControlOut = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.Variables.BoilerType_CustomController_ControlOut, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the BoilerType_CustomController_DescriptionX Variable. /// public static readonly ExpandedNodeId BoilerType_CustomController_DescriptionX = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.Variables.BoilerType_CustomController_DescriptionX, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); /// /// The identifier for the BoilerType_Simulation_UpdateRate Variable. /// public static readonly ExpandedNodeId BoilerType_Simulation_UpdateRate = new ExpandedNodeId(tempuri.org.UA.Examples.BoilerType.Variables.BoilerType_Simulation_UpdateRate, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType); } #endregion #region BrowseName Declarations /// /// Declares all of the BrowseNames used in the Model Design. /// public static partial class BrowseNames { /// /// The BrowseName for the BoilerDrumType component. /// public const string BoilerDrumType = "BoilerDrumType"; /// /// The BrowseName for the BoilerInputPipeType component. /// public const string BoilerInputPipeType = "BoilerInputPipeType"; /// /// The BrowseName for the BoilerOutputPipeType component. /// public const string BoilerOutputPipeType = "BoilerOutputPipeType"; /// /// The BrowseName for the BoilerStateMachineType component. /// public const string BoilerStateMachineType = "BoilerStateMachineType"; /// /// The BrowseName for the BoilerType component. /// public const string BoilerType = "BoilerType"; /// /// The BrowseName for the ControlOut component. /// public const string ControlOut = "ControlOut"; /// /// The BrowseName for the CustomController component. /// public const string CustomController = "CCX001"; /// /// The BrowseName for the CustomControllerType component. /// public const string CustomControllerType = "CustomControllerType"; /// /// The BrowseName for the DescriptionX component. /// public const string DescriptionX = "Description"; /// /// The BrowseName for the Drum component. /// public const string Drum = "DrumX001"; /// /// The BrowseName for the FlowController component. /// public const string FlowController = "FCX001"; /// /// The BrowseName for the FlowControllerType component. /// public const string FlowControllerType = "FlowControllerType"; /// /// The BrowseName for the FlowTo component. /// public const string FlowTo = "FlowTo"; /// /// The BrowseName for the FlowTransmitter1 component. /// public const string FlowTransmitter1 = "FTX001"; /// /// The BrowseName for the FlowTransmitter2 component. /// public const string FlowTransmitter2 = "FTX002"; /// /// The BrowseName for the FlowTransmitterType component. /// public const string FlowTransmitterType = "FlowTransmitterType"; /// /// The BrowseName for the GenericActuatorType component. /// public const string GenericActuatorType = "GenericActuatorType"; /// /// The BrowseName for the GenericControllerType component. /// public const string GenericControllerType = "GenericControllerType"; /// /// The BrowseName for the GenericSensorType component. /// public const string GenericSensorType = "GenericSensorType"; /// /// The BrowseName for the HotFlowTo component. /// public const string HotFlowTo = "HotFlowTo"; /// /// The BrowseName for the Input component. /// public const string Input = "Input"; /// /// The BrowseName for the Input1 component. /// public const string Input1 = "Input1"; /// /// The BrowseName for the Input2 component. /// public const string Input2 = "Input2"; /// /// The BrowseName for the Input3 component. /// public const string Input3 = "Input3"; /// /// The BrowseName for the InputPipe component. /// public const string InputPipe = "PipeX001"; /// /// The BrowseName for the LevelController component. /// public const string LevelController = "LCX001"; /// /// The BrowseName for the LevelControllerType component. /// public const string LevelControllerType = "LevelControllerType"; /// /// The BrowseName for the LevelIndicator component. /// public const string LevelIndicator = "LIX001"; /// /// The BrowseName for the LevelIndicatorType component. /// public const string LevelIndicatorType = "LevelIndicatorType"; /// /// The BrowseName for the Measurement component. /// public const string Measurement = "Measurement"; /// /// The BrowseName for the Output component. /// public const string Output = "Output"; /// /// The BrowseName for the OutputPipe component. /// public const string OutputPipe = "PipeX002"; /// /// The BrowseName for the SetPoint component. /// public const string SetPoint = "SetPoint"; /// /// The BrowseName for the SignalTo component. /// public const string SignalTo = "SignalTo"; /// /// The BrowseName for the Simulation component. /// public const string Simulation = "Simulation"; /// /// The BrowseName for the UpdateRate component. /// public const string UpdateRate = "UpdateRate"; /// /// The BrowseName for the Valve component. /// public const string Valve = "ValveX001"; /// /// The BrowseName for the ValveType component. /// public const string ValveType = "ValveType"; } #endregion #region Namespace Declarations /// /// Defines constants for all namespaces referenced by the model design. /// public static partial class Namespaces { /// /// The URI for the OpcUa namespace (.NET code namespace is 'Opc.Ua'). /// public const string OpcUa = "http://opcfoundation.org/UA/"; /// /// The URI for the OpcUaXsd namespace (.NET code namespace is 'Opc.Ua'). /// public const string OpcUaXsd = "http://opcfoundation.org/UA/2008/02/Types.xsd"; /// /// The URI for the BoilerType namespace (.NET code namespace is 'tempuri.org.UA.Examples.BoilerType'). /// public const string BoilerType = "http://tempuri.org/UA/Examples/BoilerType"; /// /// The URI for the BoilerTypeXsd namespace (.NET code namespace is 'tempuri.org.UA.Examples.BoilerType'). /// public const string BoilerTypeXsd = "http://tempuri.org/UA/Examples/BoilerType/Types.xsd"; } #endregion #region GenericControllerState Class #if (!OPCUA_EXCLUDE_GenericControllerState) /// /// Stores an instance of the GenericControllerType ObjectType. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public partial class GenericControllerState : BaseObjectState { #region Constructors /// /// Initializes the type with its default attribute values. /// public GenericControllerState(NodeState parent) : base(parent) { } /// /// Returns the id of the default type definition node for the instance. /// protected override NodeId GetDefaultTypeDefinitionId(NamespaceTable namespaceUris) { return Opc.Ua.NodeId.Create(tempuri.org.UA.Examples.BoilerType.ObjectTypes.GenericControllerType, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType, namespaceUris); } #if (!OPCUA_EXCLUDE_InitializationStrings) /// /// Initializes the instance. /// protected override void Initialize(ISystemContext context) { Initialize(context, InitializationString); InitializeOptionalChildren(context); } /// /// Initializes the any option children defined for the instance. /// protected override void InitializeOptionalChildren(ISystemContext context) { base.InitializeOptionalChildren(context); } #region Initialization String private const string InitializationString = "AQAAACkAAABodHRwOi8vdGVtcHVyaS5vcmcvVUEvRXhhbXBsZXMvQm9pbGVyVHlwZf////8EYIAAAQAA" + "AAEAHQAAAEdlbmVyaWNDb250cm9sbGVyVHlwZUluc3RhbmNlAQEEAAEBBAD/////AwAAABVgiQoCAAAA" + "AQALAAAATWVhc3VyZW1lbnQBAQUAAC4ARAUAAAAAC/////8BAf////8AAAAAFWCJCgIAAAABAAgAAABT" + "ZXRQb2ludAEBBgAALgBEBgAAAAAL/////wMD/////wAAAAAVYIkKAgAAAAEACgAAAENvbnRyb2xPdXQB" + "AQcAAC4ARAcAAAAAC/////8BAf////8AAAAA"; #endregion #endif #endregion #region Public Properties /// /// A description for the Measurement Property. /// public PropertyState Measurement { get { return m_measurement; } set { if (!Object.ReferenceEquals(m_measurement, value)) { ChangeMasks |= NodeStateChangeMasks.Children; } m_measurement = value; } } /// /// A description for the SetPoint Property. /// public PropertyState SetPoint { get { return m_setPoint; } set { if (!Object.ReferenceEquals(m_setPoint, value)) { ChangeMasks |= NodeStateChangeMasks.Children; } m_setPoint = value; } } /// /// A description for the ControlOut Property. /// public PropertyState ControlOut { get { return m_controlOut; } set { if (!Object.ReferenceEquals(m_controlOut, value)) { ChangeMasks |= NodeStateChangeMasks.Children; } m_controlOut = value; } } #endregion #region Overridden Methods /// /// Populates a list with the children that belong to the node. /// /// The context for the system being accessed. /// The list of children to populate. public override void GetChildren( ISystemContext context, IList children) { if (m_measurement != null) { children.Add(m_measurement); } if (m_setPoint != null) { children.Add(m_setPoint); } if (m_controlOut != null) { children.Add(m_controlOut); } base.GetChildren(context, children); } /// /// Finds the child with the specified browse name. /// protected override BaseInstanceState FindChild( ISystemContext context, QualifiedName browseName, bool createOrReplace, BaseInstanceState replacement) { if (QualifiedName.IsNull(browseName)) { return null; } BaseInstanceState instance = null; switch (browseName.Name) { case tempuri.org.UA.Examples.BoilerType.BrowseNames.Measurement: { if (createOrReplace) { if (Measurement == null) { if (replacement == null) { Measurement = new PropertyState(this); } else { Measurement = (PropertyState)replacement; } } } instance = Measurement; break; } case tempuri.org.UA.Examples.BoilerType.BrowseNames.SetPoint: { if (createOrReplace) { if (SetPoint == null) { if (replacement == null) { SetPoint = new PropertyState(this); } else { SetPoint = (PropertyState)replacement; } } } instance = SetPoint; break; } case tempuri.org.UA.Examples.BoilerType.BrowseNames.ControlOut: { if (createOrReplace) { if (ControlOut == null) { if (replacement == null) { ControlOut = new PropertyState(this); } else { ControlOut = (PropertyState)replacement; } } } instance = ControlOut; break; } } if (instance != null) { return instance; } return base.FindChild(context, browseName, createOrReplace, replacement); } #endregion #region Private Fields private PropertyState m_measurement; private PropertyState m_setPoint; private PropertyState m_controlOut; #endregion } #endif #endregion #region GenericSensorState Class #if (!OPCUA_EXCLUDE_GenericSensorState) /// /// Stores an instance of the GenericSensorType ObjectType. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public partial class GenericSensorState : BaseObjectState { #region Constructors /// /// Initializes the type with its default attribute values. /// public GenericSensorState(NodeState parent) : base(parent) { } /// /// Returns the id of the default type definition node for the instance. /// protected override NodeId GetDefaultTypeDefinitionId(NamespaceTable namespaceUris) { return Opc.Ua.NodeId.Create(tempuri.org.UA.Examples.BoilerType.ObjectTypes.GenericSensorType, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType, namespaceUris); } #if (!OPCUA_EXCLUDE_InitializationStrings) /// /// Initializes the instance. /// protected override void Initialize(ISystemContext context) { Initialize(context, InitializationString); InitializeOptionalChildren(context); } /// /// Initializes the any option children defined for the instance. /// protected override void InitializeOptionalChildren(ISystemContext context) { base.InitializeOptionalChildren(context); } #region Initialization String private const string InitializationString = "AQAAACkAAABodHRwOi8vdGVtcHVyaS5vcmcvVUEvRXhhbXBsZXMvQm9pbGVyVHlwZf////8EYIAAAQAA" + "AAEAGQAAAEdlbmVyaWNTZW5zb3JUeXBlSW5zdGFuY2UBAQgAAQEIAP////8BAAAAFWCJCgIAAAABAAYA" + "AABPdXRwdXQBAQkAAC8BAEAJCQAAAAAL/////wEB/////wEAAAAVYIkKAgAAAAAABwAAAEVVUmFuZ2UB" + "AQ0AAC4ARA0AAAABAHQD/////wEB/////wAAAAA="; #endregion #endif #endregion #region Public Properties /// /// A description for the Output Variable. /// public AnalogItemState Output { get { return m_output; } set { if (!Object.ReferenceEquals(m_output, value)) { ChangeMasks |= NodeStateChangeMasks.Children; } m_output = value; } } #endregion #region Overridden Methods /// /// Populates a list with the children that belong to the node. /// /// The context for the system being accessed. /// The list of children to populate. public override void GetChildren( ISystemContext context, IList children) { if (m_output != null) { children.Add(m_output); } base.GetChildren(context, children); } /// /// Finds the child with the specified browse name. /// protected override BaseInstanceState FindChild( ISystemContext context, QualifiedName browseName, bool createOrReplace, BaseInstanceState replacement) { if (QualifiedName.IsNull(browseName)) { return null; } BaseInstanceState instance = null; switch (browseName.Name) { case tempuri.org.UA.Examples.BoilerType.BrowseNames.Output: { if (createOrReplace) { if (Output == null) { if (replacement == null) { Output = new AnalogItemState(this); } else { Output = (AnalogItemState)replacement; } } } instance = Output; break; } } if (instance != null) { return instance; } return base.FindChild(context, browseName, createOrReplace, replacement); } #endregion #region Private Fields private AnalogItemState m_output; #endregion } #endif #endregion #region GenericActuatorState Class #if (!OPCUA_EXCLUDE_GenericActuatorState) /// /// Stores an instance of the GenericActuatorType ObjectType. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public partial class GenericActuatorState : BaseObjectState { #region Constructors /// /// Initializes the type with its default attribute values. /// public GenericActuatorState(NodeState parent) : base(parent) { } /// /// Returns the id of the default type definition node for the instance. /// protected override NodeId GetDefaultTypeDefinitionId(NamespaceTable namespaceUris) { return Opc.Ua.NodeId.Create(tempuri.org.UA.Examples.BoilerType.ObjectTypes.GenericActuatorType, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType, namespaceUris); } #if (!OPCUA_EXCLUDE_InitializationStrings) /// /// Initializes the instance. /// protected override void Initialize(ISystemContext context) { Initialize(context, InitializationString); InitializeOptionalChildren(context); } /// /// Initializes the any option children defined for the instance. /// protected override void InitializeOptionalChildren(ISystemContext context) { base.InitializeOptionalChildren(context); } #region Initialization String private const string InitializationString = "AQAAACkAAABodHRwOi8vdGVtcHVyaS5vcmcvVUEvRXhhbXBsZXMvQm9pbGVyVHlwZf////8EYIAAAQAA" + "AAEAGwAAAEdlbmVyaWNBY3R1YXRvclR5cGVJbnN0YW5jZQEBDwABAQ8A/////wEAAAAVYIkKAgAAAAEA" + "BQAAAElucHV0AQEQAAAvAQBACRAAAAAAC/////8CAv////8BAAAAFWCJCgIAAAAAAAcAAABFVVJhbmdl" + "AQEUAAAuAEQUAAAAAQB0A/////8BAf////8AAAAA"; #endregion #endif #endregion #region Public Properties /// /// A description for the Input Variable. /// public AnalogItemState Input { get { return m_input; } set { if (!Object.ReferenceEquals(m_input, value)) { ChangeMasks |= NodeStateChangeMasks.Children; } m_input = value; } } #endregion #region Overridden Methods /// /// Populates a list with the children that belong to the node. /// /// The context for the system being accessed. /// The list of children to populate. public override void GetChildren( ISystemContext context, IList children) { if (m_input != null) { children.Add(m_input); } base.GetChildren(context, children); } /// /// Finds the child with the specified browse name. /// protected override BaseInstanceState FindChild( ISystemContext context, QualifiedName browseName, bool createOrReplace, BaseInstanceState replacement) { if (QualifiedName.IsNull(browseName)) { return null; } BaseInstanceState instance = null; switch (browseName.Name) { case tempuri.org.UA.Examples.BoilerType.BrowseNames.Input: { if (createOrReplace) { if (Input == null) { if (replacement == null) { Input = new AnalogItemState(this); } else { Input = (AnalogItemState)replacement; } } } instance = Input; break; } } if (instance != null) { return instance; } return base.FindChild(context, browseName, createOrReplace, replacement); } #endregion #region Private Fields private AnalogItemState m_input; #endregion } #endif #endregion #region CustomControllerState Class #if (!OPCUA_EXCLUDE_CustomControllerState) /// /// Stores an instance of the CustomControllerType ObjectType. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public partial class CustomControllerState : BaseObjectState { #region Constructors /// /// Initializes the type with its default attribute values. /// public CustomControllerState(NodeState parent) : base(parent) { } /// /// Returns the id of the default type definition node for the instance. /// protected override NodeId GetDefaultTypeDefinitionId(NamespaceTable namespaceUris) { return Opc.Ua.NodeId.Create(tempuri.org.UA.Examples.BoilerType.ObjectTypes.CustomControllerType, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType, namespaceUris); } #if (!OPCUA_EXCLUDE_InitializationStrings) /// /// Initializes the instance. /// protected override void Initialize(ISystemContext context) { Initialize(context, InitializationString); InitializeOptionalChildren(context); } /// /// Initializes the any option children defined for the instance. /// protected override void InitializeOptionalChildren(ISystemContext context) { base.InitializeOptionalChildren(context); } #region Initialization String private const string InitializationString = "AQAAACkAAABodHRwOi8vdGVtcHVyaS5vcmcvVUEvRXhhbXBsZXMvQm9pbGVyVHlwZf////8EYIAAAQAA" + "AAEAHAAAAEN1c3RvbUNvbnRyb2xsZXJUeXBlSW5zdGFuY2UBARYAAQEWAP////8FAAAAFWCJCgIAAAAB" + "AAYAAABJbnB1dDEBARcAAC4ARBcAAAAAC/////8CAv////8AAAAAFWCJCgIAAAABAAYAAABJbnB1dDIB" + "ARgAAC4ARBgAAAAAC/////8CAv////8AAAAAFWCJCgIAAAABAAYAAABJbnB1dDMBARkAAC4ARBkAAAAA" + "C/////8CAv////8AAAAAFWCJCgIAAAABAAoAAABDb250cm9sT3V0AQEaAAAuAEQaAAAAAAv/////AQH/" + "////AAAAABVgyQoCAAAADAAAAERlc2NyaXB0aW9uWAEACwAAAERlc2NyaXB0aW9uAQEbAAAuAEQbAAAA" + "ABX/////AQH/////AAAAAA=="; #endregion #endif #endregion #region Public Properties /// /// A description for the Input1 Property. /// public PropertyState Input1 { get { return m_input1; } set { if (!Object.ReferenceEquals(m_input1, value)) { ChangeMasks |= NodeStateChangeMasks.Children; } m_input1 = value; } } /// /// A description for the Input2 Property. /// public PropertyState Input2 { get { return m_input2; } set { if (!Object.ReferenceEquals(m_input2, value)) { ChangeMasks |= NodeStateChangeMasks.Children; } m_input2 = value; } } /// /// A description for the Input3 Property. /// public PropertyState Input3 { get { return m_input3; } set { if (!Object.ReferenceEquals(m_input3, value)) { ChangeMasks |= NodeStateChangeMasks.Children; } m_input3 = value; } } /// /// A description for the ControlOut Property. /// public PropertyState ControlOut { get { return m_controlOut; } set { if (!Object.ReferenceEquals(m_controlOut, value)) { ChangeMasks |= NodeStateChangeMasks.Children; } m_controlOut = value; } } /// /// A description for the Description Property. /// public PropertyState DescriptionX { get { return m_descriptionX; } set { if (!Object.ReferenceEquals(m_descriptionX, value)) { ChangeMasks |= NodeStateChangeMasks.Children; } m_descriptionX = value; } } #endregion #region Overridden Methods /// /// Populates a list with the children that belong to the node. /// /// The context for the system being accessed. /// The list of children to populate. public override void GetChildren( ISystemContext context, IList children) { if (m_input1 != null) { children.Add(m_input1); } if (m_input2 != null) { children.Add(m_input2); } if (m_input3 != null) { children.Add(m_input3); } if (m_controlOut != null) { children.Add(m_controlOut); } if (m_descriptionX != null) { children.Add(m_descriptionX); } base.GetChildren(context, children); } /// /// Finds the child with the specified browse name. /// protected override BaseInstanceState FindChild( ISystemContext context, QualifiedName browseName, bool createOrReplace, BaseInstanceState replacement) { if (QualifiedName.IsNull(browseName)) { return null; } BaseInstanceState instance = null; switch (browseName.Name) { case tempuri.org.UA.Examples.BoilerType.BrowseNames.Input1: { if (createOrReplace) { if (Input1 == null) { if (replacement == null) { Input1 = new PropertyState(this); } else { Input1 = (PropertyState)replacement; } } } instance = Input1; break; } case tempuri.org.UA.Examples.BoilerType.BrowseNames.Input2: { if (createOrReplace) { if (Input2 == null) { if (replacement == null) { Input2 = new PropertyState(this); } else { Input2 = (PropertyState)replacement; } } } instance = Input2; break; } case tempuri.org.UA.Examples.BoilerType.BrowseNames.Input3: { if (createOrReplace) { if (Input3 == null) { if (replacement == null) { Input3 = new PropertyState(this); } else { Input3 = (PropertyState)replacement; } } } instance = Input3; break; } case tempuri.org.UA.Examples.BoilerType.BrowseNames.ControlOut: { if (createOrReplace) { if (ControlOut == null) { if (replacement == null) { ControlOut = new PropertyState(this); } else { ControlOut = (PropertyState)replacement; } } } instance = ControlOut; break; } case tempuri.org.UA.Examples.BoilerType.BrowseNames.DescriptionX: { if (createOrReplace) { if (DescriptionX == null) { if (replacement == null) { DescriptionX = new PropertyState(this); } else { DescriptionX = (PropertyState)replacement; } } } instance = DescriptionX; break; } } if (instance != null) { return instance; } return base.FindChild(context, browseName, createOrReplace, replacement); } #endregion #region Private Fields private PropertyState m_input1; private PropertyState m_input2; private PropertyState m_input3; private PropertyState m_controlOut; private PropertyState m_descriptionX; #endregion } #endif #endregion #region ValveState Class #if (!OPCUA_EXCLUDE_ValveState) /// /// Stores an instance of the ValveType ObjectType. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public partial class ValveState : GenericActuatorState { #region Constructors /// /// Initializes the type with its default attribute values. /// public ValveState(NodeState parent) : base(parent) { } /// /// Returns the id of the default type definition node for the instance. /// protected override NodeId GetDefaultTypeDefinitionId(NamespaceTable namespaceUris) { return Opc.Ua.NodeId.Create(tempuri.org.UA.Examples.BoilerType.ObjectTypes.ValveType, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType, namespaceUris); } #if (!OPCUA_EXCLUDE_InitializationStrings) /// /// Initializes the instance. /// protected override void Initialize(ISystemContext context) { Initialize(context, InitializationString); InitializeOptionalChildren(context); } /// /// Initializes the any option children defined for the instance. /// protected override void InitializeOptionalChildren(ISystemContext context) { base.InitializeOptionalChildren(context); } #region Initialization String private const string InitializationString = "AQAAACkAAABodHRwOi8vdGVtcHVyaS5vcmcvVUEvRXhhbXBsZXMvQm9pbGVyVHlwZf////8EYIAAAQAA" + "AAEAEQAAAFZhbHZlVHlwZUluc3RhbmNlAQEcAAEBHAD/////AQAAABVgiQoCAAAAAQAFAAAASW5wdXQB" + "AR0AAC8BAEAJHQAAAAAL/////wIC/////wEAAAAVYIkKAgAAAAAABwAAAEVVUmFuZ2UBASEAAC4ARCEA" + "AAABAHQD/////wEB/////wAAAAA="; #endregion #endif #endregion #region Public Properties #endregion #region Overridden Methods #endregion #region Private Fields #endregion } #endif #endregion #region LevelControllerState Class #if (!OPCUA_EXCLUDE_LevelControllerState) /// /// Stores an instance of the LevelControllerType ObjectType. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public partial class LevelControllerState : GenericControllerState { #region Constructors /// /// Initializes the type with its default attribute values. /// public LevelControllerState(NodeState parent) : base(parent) { } /// /// Returns the id of the default type definition node for the instance. /// protected override NodeId GetDefaultTypeDefinitionId(NamespaceTable namespaceUris) { return Opc.Ua.NodeId.Create(tempuri.org.UA.Examples.BoilerType.ObjectTypes.LevelControllerType, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType, namespaceUris); } #if (!OPCUA_EXCLUDE_InitializationStrings) /// /// Initializes the instance. /// protected override void Initialize(ISystemContext context) { Initialize(context, InitializationString); InitializeOptionalChildren(context); } /// /// Initializes the any option children defined for the instance. /// protected override void InitializeOptionalChildren(ISystemContext context) { base.InitializeOptionalChildren(context); } #region Initialization String private const string InitializationString = "AQAAACkAAABodHRwOi8vdGVtcHVyaS5vcmcvVUEvRXhhbXBsZXMvQm9pbGVyVHlwZf////8EYIAAAQAA" + "AAEAGwAAAExldmVsQ29udHJvbGxlclR5cGVJbnN0YW5jZQEBIwABASMA/////wMAAAAVYIkKAgAAAAEA" + "CwAAAE1lYXN1cmVtZW50AQEkAAAuAEQkAAAAAAv/////AQH/////AAAAABVgiQoCAAAAAQAIAAAAU2V0" + "UG9pbnQBASUAAC4ARCUAAAAAC/////8DA/////8AAAAAFWCJCgIAAAABAAoAAABDb250cm9sT3V0AQEm" + "AAAuAEQmAAAAAAv/////AQH/////AAAAAA=="; #endregion #endif #endregion #region Public Properties #endregion #region Overridden Methods #endregion #region Private Fields #endregion } #endif #endregion #region FlowControllerState Class #if (!OPCUA_EXCLUDE_FlowControllerState) /// /// Stores an instance of the FlowControllerType ObjectType. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public partial class FlowControllerState : GenericControllerState { #region Constructors /// /// Initializes the type with its default attribute values. /// public FlowControllerState(NodeState parent) : base(parent) { } /// /// Returns the id of the default type definition node for the instance. /// protected override NodeId GetDefaultTypeDefinitionId(NamespaceTable namespaceUris) { return Opc.Ua.NodeId.Create(tempuri.org.UA.Examples.BoilerType.ObjectTypes.FlowControllerType, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType, namespaceUris); } #if (!OPCUA_EXCLUDE_InitializationStrings) /// /// Initializes the instance. /// protected override void Initialize(ISystemContext context) { Initialize(context, InitializationString); InitializeOptionalChildren(context); } /// /// Initializes the any option children defined for the instance. /// protected override void InitializeOptionalChildren(ISystemContext context) { base.InitializeOptionalChildren(context); } #region Initialization String private const string InitializationString = "AQAAACkAAABodHRwOi8vdGVtcHVyaS5vcmcvVUEvRXhhbXBsZXMvQm9pbGVyVHlwZf////8EYIAAAQAA" + "AAEAGgAAAEZsb3dDb250cm9sbGVyVHlwZUluc3RhbmNlAQEnAAEBJwD/////AwAAABVgiQoCAAAAAQAL" + "AAAATWVhc3VyZW1lbnQBASgAAC4ARCgAAAAAC/////8BAf////8AAAAAFWCJCgIAAAABAAgAAABTZXRQ" + "b2ludAEBKQAALgBEKQAAAAAL/////wMD/////wAAAAAVYIkKAgAAAAEACgAAAENvbnRyb2xPdXQBASoA" + "AC4ARCoAAAAAC/////8BAf////8AAAAA"; #endregion #endif #endregion #region Public Properties #endregion #region Overridden Methods #endregion #region Private Fields #endregion } #endif #endregion #region LevelIndicatorState Class #if (!OPCUA_EXCLUDE_LevelIndicatorState) /// /// Stores an instance of the LevelIndicatorType ObjectType. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public partial class LevelIndicatorState : GenericSensorState { #region Constructors /// /// Initializes the type with its default attribute values. /// public LevelIndicatorState(NodeState parent) : base(parent) { } /// /// Returns the id of the default type definition node for the instance. /// protected override NodeId GetDefaultTypeDefinitionId(NamespaceTable namespaceUris) { return Opc.Ua.NodeId.Create(tempuri.org.UA.Examples.BoilerType.ObjectTypes.LevelIndicatorType, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType, namespaceUris); } #if (!OPCUA_EXCLUDE_InitializationStrings) /// /// Initializes the instance. /// protected override void Initialize(ISystemContext context) { Initialize(context, InitializationString); InitializeOptionalChildren(context); } /// /// Initializes the any option children defined for the instance. /// protected override void InitializeOptionalChildren(ISystemContext context) { base.InitializeOptionalChildren(context); } #region Initialization String private const string InitializationString = "AQAAACkAAABodHRwOi8vdGVtcHVyaS5vcmcvVUEvRXhhbXBsZXMvQm9pbGVyVHlwZf////8EYIAAAQAA" + "AAEAGgAAAExldmVsSW5kaWNhdG9yVHlwZUluc3RhbmNlAQErAAEBKwD/////AQAAABVgiQoCAAAAAQAG" + "AAAAT3V0cHV0AQEsAAAvAQBACSwAAAAAC/////8BAf////8BAAAAFWCJCgIAAAAAAAcAAABFVVJhbmdl" + "AQEwAAAuAEQwAAAAAQB0A/////8BAf////8AAAAA"; #endregion #endif #endregion #region Public Properties #endregion #region Overridden Methods #endregion #region Private Fields #endregion } #endif #endregion #region FlowTransmitterState Class #if (!OPCUA_EXCLUDE_FlowTransmitterState) /// /// Stores an instance of the FlowTransmitterType ObjectType. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public partial class FlowTransmitterState : GenericSensorState { #region Constructors /// /// Initializes the type with its default attribute values. /// public FlowTransmitterState(NodeState parent) : base(parent) { } /// /// Returns the id of the default type definition node for the instance. /// protected override NodeId GetDefaultTypeDefinitionId(NamespaceTable namespaceUris) { return Opc.Ua.NodeId.Create(tempuri.org.UA.Examples.BoilerType.ObjectTypes.FlowTransmitterType, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType, namespaceUris); } #if (!OPCUA_EXCLUDE_InitializationStrings) /// /// Initializes the instance. /// protected override void Initialize(ISystemContext context) { Initialize(context, InitializationString); InitializeOptionalChildren(context); } /// /// Initializes the any option children defined for the instance. /// protected override void InitializeOptionalChildren(ISystemContext context) { base.InitializeOptionalChildren(context); } #region Initialization String private const string InitializationString = "AQAAACkAAABodHRwOi8vdGVtcHVyaS5vcmcvVUEvRXhhbXBsZXMvQm9pbGVyVHlwZf////8EYIAAAQAA" + "AAEAGwAAAEZsb3dUcmFuc21pdHRlclR5cGVJbnN0YW5jZQEBMgABATIA/////wEAAAAVYIkKAgAAAAEA" + "BgAAAE91dHB1dAEBMwAALwEAQAkzAAAAAAv/////AQH/////AQAAABVgiQoCAAAAAAAHAAAARVVSYW5n" + "ZQEBNwAALgBENwAAAAEAdAP/////AQH/////AAAAAA=="; #endregion #endif #endregion #region Public Properties #endregion #region Overridden Methods #endregion #region Private Fields #endregion } #endif #endregion #region BoilerStateMachineState Class #if (!OPCUA_EXCLUDE_BoilerStateMachineState) /// /// Stores an instance of the BoilerStateMachineType ObjectType. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public partial class BoilerStateMachineState : ProgramStateMachineState { #region Constructors /// /// Initializes the type with its default attribute values. /// public BoilerStateMachineState(NodeState parent) : base(parent) { } /// /// Returns the id of the default type definition node for the instance. /// protected override NodeId GetDefaultTypeDefinitionId(NamespaceTable namespaceUris) { return Opc.Ua.NodeId.Create(tempuri.org.UA.Examples.BoilerType.ObjectTypes.BoilerStateMachineType, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType, namespaceUris); } #if (!OPCUA_EXCLUDE_InitializationStrings) /// /// Initializes the instance. /// protected override void Initialize(ISystemContext context) { Initialize(context, InitializationString); InitializeOptionalChildren(context); } /// /// Initializes the any option children defined for the instance. /// protected override void InitializeOptionalChildren(ISystemContext context) { base.InitializeOptionalChildren(context); } #region Initialization String private const string InitializationString = "AQAAACkAAABodHRwOi8vdGVtcHVyaS5vcmcvVUEvRXhhbXBsZXMvQm9pbGVyVHlwZf////8EYIAAAQAA" + "AAEAHgAAAEJvaWxlclN0YXRlTWFjaGluZVR5cGVJbnN0YW5jZQEBOQABATkA/////woAAAAVYIkKAgAA" + "AAAADAAAAEN1cnJlbnRTdGF0ZQEBOgAALwEAyAo6AAAAABX/////AQH/////AgAAABVgiQoCAAAAAAAC" + "AAAASWQBATsAAC4ARDsAAAAAEf////8BAf////8AAAAAFWCJCgIAAAAAAAYAAABOdW1iZXIBAT0AAC4A" + "RD0AAAAAB/////8BAf////8AAAAAFWCJCgIAAAAAAA4AAABMYXN0VHJhbnNpdGlvbgEBPwAALwEAzwo/" + "AAAAABX/////AQH/////AwAAABVgiQoCAAAAAAACAAAASWQBAUAAAC4AREAAAAAAEf////8BAf////8A" + "AAAAFWCJCgIAAAAAAAYAAABOdW1iZXIBAUIAAC4AREIAAAAAB/////8BAf////8AAAAAFWCJCgIAAAAA" + "AA4AAABUcmFuc2l0aW9uVGltZQEBQwAALgBEQwAAAAEAJgH/////AQH/////AAAAABVgiQoCAAAAAAAJ" + "AAAARGVsZXRhYmxlAQFGAAAuAERGAAAAAAH/////AQH/////AAAAABVgiQoCAAAAAAAMAAAAUmVjeWNs" + "ZUNvdW50AQFIAAAuAERIAAAAAAb/////AQH/////AAAAACRhggoEAAAAAAAFAAAAU3RhcnQBAXIAAwAA" + "AABLAAAAQ2F1c2VzIHRoZSBQcm9ncmFtIHRvIHRyYW5zaXRpb24gZnJvbSB0aGUgUmVhZHkgc3RhdGUg" + "dG8gdGhlIFJ1bm5pbmcgc3RhdGUuAC8BAHoJcgAAAAEBAQAAAAA1AQEBYgAAAAAAJGGCCgQAAAAAAAcA" + "AABTdXNwZW5kAQFzAAMAAAAATwAAAENhdXNlcyB0aGUgUHJvZ3JhbSB0byB0cmFuc2l0aW9uIGZyb20g" + "dGhlIFJ1bm5pbmcgc3RhdGUgdG8gdGhlIFN1c3BlbmRlZCBzdGF0ZS4ALwEAewlzAAAAAQEBAAAAADUB" + "AQFoAAAAAAAkYYIKBAAAAAAABgAAAFJlc3VtZQEBdAADAAAAAE8AAABDYXVzZXMgdGhlIFByb2dyYW0g" + "dG8gdHJhbnNpdGlvbiBmcm9tIHRoZSBTdXNwZW5kZWQgc3RhdGUgdG8gdGhlIFJ1bm5pbmcgc3RhdGUu" + "AC8BAHwJdAAAAAEBAQAAAAA1AQEBagAAAAAAJGGCCgQAAAAAAAQAAABIYWx0AQF1AAMAAAAAYAAAAENh" + "dXNlcyB0aGUgUHJvZ3JhbSB0byB0cmFuc2l0aW9uIGZyb20gdGhlIFJlYWR5LCBSdW5uaW5nIG9yIFN1" + "c3BlbmRlZCBzdGF0ZSB0byB0aGUgSGFsdGVkIHN0YXRlLgAvAQB9CXUAAAABAQMAAAAANQEBAWQAADUB" + "AQFsAAA1AQEBcAAAAAAAJGGCCgQAAAAAAAUAAABSZXNldAEBdgADAAAAAEoAAABDYXVzZXMgdGhlIFBy" + "b2dyYW0gdG8gdHJhbnNpdGlvbiBmcm9tIHRoZSBIYWx0ZWQgc3RhdGUgdG8gdGhlIFJlYWR5IHN0YXRl" + "LgAvAQB+CXYAAAABAQEAAAAANQEBAWAAAAAAADVgiQoCAAAAAQAKAAAAVXBkYXRlUmF0ZQEBdwADAAAA" + "ACYAAABUaGUgcmF0ZSBhdCB3aGljaCB0aGUgc2ltdWxhdGlvbiBydW5zLgAuAER3AAAAAAf/////AwP/" + "////AAAAAA=="; #endregion #endif #endregion #region Public Properties /// /// The rate at which the simulation runs. /// public PropertyState UpdateRate { get { return m_updateRate; } set { if (!Object.ReferenceEquals(m_updateRate, value)) { ChangeMasks |= NodeStateChangeMasks.Children; } m_updateRate = value; } } #endregion #region Overridden Methods /// /// Populates a list with the children that belong to the node. /// /// The context for the system being accessed. /// The list of children to populate. public override void GetChildren( ISystemContext context, IList children) { if (m_updateRate != null) { children.Add(m_updateRate); } base.GetChildren(context, children); } /// /// Finds the child with the specified browse name. /// protected override BaseInstanceState FindChild( ISystemContext context, QualifiedName browseName, bool createOrReplace, BaseInstanceState replacement) { if (QualifiedName.IsNull(browseName)) { return null; } BaseInstanceState instance = null; switch (browseName.Name) { case tempuri.org.UA.Examples.BoilerType.BrowseNames.UpdateRate: { if (createOrReplace) { if (UpdateRate == null) { if (replacement == null) { UpdateRate = new PropertyState(this); } else { UpdateRate = (PropertyState)replacement; } } } instance = UpdateRate; break; } } if (instance != null) { return instance; } return base.FindChild(context, browseName, createOrReplace, replacement); } #endregion #region Private Fields private PropertyState m_updateRate; #endregion } #endif #endregion #region BoilerInputPipeState Class #if (!OPCUA_EXCLUDE_BoilerInputPipeState) /// /// Stores an instance of the BoilerInputPipeType ObjectType. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public partial class BoilerInputPipeState : FolderState { #region Constructors /// /// Initializes the type with its default attribute values. /// public BoilerInputPipeState(NodeState parent) : base(parent) { } /// /// Returns the id of the default type definition node for the instance. /// protected override NodeId GetDefaultTypeDefinitionId(NamespaceTable namespaceUris) { return Opc.Ua.NodeId.Create(tempuri.org.UA.Examples.BoilerType.ObjectTypes.BoilerInputPipeType, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType, namespaceUris); } #if (!OPCUA_EXCLUDE_InitializationStrings) /// /// Initializes the instance. /// protected override void Initialize(ISystemContext context) { Initialize(context, InitializationString); InitializeOptionalChildren(context); } /// /// Initializes the any option children defined for the instance. /// protected override void InitializeOptionalChildren(ISystemContext context) { base.InitializeOptionalChildren(context); } #region Initialization String private const string InitializationString = "AQAAACkAAABodHRwOi8vdGVtcHVyaS5vcmcvVUEvRXhhbXBsZXMvQm9pbGVyVHlwZf////8EYIAAAQAA" + "AAEAGwAAAEJvaWxlcklucHV0UGlwZVR5cGVJbnN0YW5jZQEBeAABAXgAAQAAAAAwAAEBeQACAAAAxGDA" + "CgEAAAAQAAAARmxvd1RyYW5zbWl0dGVyMQEABgAAAEZUWDAwMQEBeQADAAAAABAAAABGbG93VHJhbnNt" + "aXR0ZXIxAC8BATIAeQAAAAEBAAAAADABAQF4AAEAAAAVYIkKAgAAAAEABgAAAE91dHB1dAEBegAALwEA" + "QAl6AAAAAAv/////AQH/////AQAAABVgiQoCAAAAAAAHAAAARVVSYW5nZQEBfgAALgBEfgAAAAEAdAP/" + "////AQH/////AAAAAMRgwAoBAAAABQAAAFZhbHZlAQAJAAAAVmFsdmVYMDAxAQGAAAMAAAAABQAAAFZh" + "bHZlAC8BARwAgAAAAAH/////AQAAABVgiQoCAAAAAQAFAAAASW5wdXQBAYEAAC8BAEAJgQAAAAAL////" + "/wIC/////wEAAAAVYIkKAgAAAAAABwAAAEVVUmFuZ2UBAYUAAC4ARIUAAAABAHQD/////wEB/////wAA" + "AAA="; #endregion #endif #endregion #region Public Properties /// /// A description for the FTX001 Object. /// public FlowTransmitterState FlowTransmitter1 { get { return m_flowTransmitter1; } set { if (!Object.ReferenceEquals(m_flowTransmitter1, value)) { ChangeMasks |= NodeStateChangeMasks.Children; } m_flowTransmitter1 = value; } } /// /// A description for the ValveX001 Object. /// public ValveState Valve { get { return m_valve; } set { if (!Object.ReferenceEquals(m_valve, value)) { ChangeMasks |= NodeStateChangeMasks.Children; } m_valve = value; } } #endregion #region Overridden Methods /// /// Populates a list with the children that belong to the node. /// /// The context for the system being accessed. /// The list of children to populate. public override void GetChildren( ISystemContext context, IList children) { if (m_flowTransmitter1 != null) { children.Add(m_flowTransmitter1); } if (m_valve != null) { children.Add(m_valve); } base.GetChildren(context, children); } /// /// Finds the child with the specified browse name. /// protected override BaseInstanceState FindChild( ISystemContext context, QualifiedName browseName, bool createOrReplace, BaseInstanceState replacement) { if (QualifiedName.IsNull(browseName)) { return null; } BaseInstanceState instance = null; switch (browseName.Name) { case tempuri.org.UA.Examples.BoilerType.BrowseNames.FlowTransmitter1: { if (createOrReplace) { if (FlowTransmitter1 == null) { if (replacement == null) { FlowTransmitter1 = new FlowTransmitterState(this); } else { FlowTransmitter1 = (FlowTransmitterState)replacement; } } } instance = FlowTransmitter1; break; } case tempuri.org.UA.Examples.BoilerType.BrowseNames.Valve: { if (createOrReplace) { if (Valve == null) { if (replacement == null) { Valve = new ValveState(this); } else { Valve = (ValveState)replacement; } } } instance = Valve; break; } } if (instance != null) { return instance; } return base.FindChild(context, browseName, createOrReplace, replacement); } #endregion #region Private Fields private FlowTransmitterState m_flowTransmitter1; private ValveState m_valve; #endregion } #endif #endregion #region BoilerDrumState Class #if (!OPCUA_EXCLUDE_BoilerDrumState) /// /// Stores an instance of the BoilerDrumType ObjectType. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public partial class BoilerDrumState : FolderState { #region Constructors /// /// Initializes the type with its default attribute values. /// public BoilerDrumState(NodeState parent) : base(parent) { } /// /// Returns the id of the default type definition node for the instance. /// protected override NodeId GetDefaultTypeDefinitionId(NamespaceTable namespaceUris) { return Opc.Ua.NodeId.Create(tempuri.org.UA.Examples.BoilerType.ObjectTypes.BoilerDrumType, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType, namespaceUris); } #if (!OPCUA_EXCLUDE_InitializationStrings) /// /// Initializes the instance. /// protected override void Initialize(ISystemContext context) { Initialize(context, InitializationString); InitializeOptionalChildren(context); } /// /// Initializes the any option children defined for the instance. /// protected override void InitializeOptionalChildren(ISystemContext context) { base.InitializeOptionalChildren(context); } #region Initialization String private const string InitializationString = "AQAAACkAAABodHRwOi8vdGVtcHVyaS5vcmcvVUEvRXhhbXBsZXMvQm9pbGVyVHlwZf////8EYIAAAQAA" + "AAEAFgAAAEJvaWxlckRydW1UeXBlSW5zdGFuY2UBAYcAAQGHAAEAAAAAMAABAYgAAQAAAIRgwAoBAAAA" + "DgAAAExldmVsSW5kaWNhdG9yAQAGAAAATElYMDAxAQGIAAAvAQErAIgAAAABAQAAAAAwAQEBhwABAAAA" + "FWCJCgIAAAABAAYAAABPdXRwdXQBAYkAAC8BAEAJiQAAAAAL/////wEB/////wEAAAAVYIkKAgAAAAAA" + "BwAAAEVVUmFuZ2UBAY0AAC4ARI0AAAABAHQD/////wEB/////wAAAAA="; #endregion #endif #endregion #region Public Properties /// /// A description for the LIX001 Object. /// public LevelIndicatorState LevelIndicator { get { return m_levelIndicator; } set { if (!Object.ReferenceEquals(m_levelIndicator, value)) { ChangeMasks |= NodeStateChangeMasks.Children; } m_levelIndicator = value; } } #endregion #region Overridden Methods /// /// Populates a list with the children that belong to the node. /// /// The context for the system being accessed. /// The list of children to populate. public override void GetChildren( ISystemContext context, IList children) { if (m_levelIndicator != null) { children.Add(m_levelIndicator); } base.GetChildren(context, children); } /// /// Finds the child with the specified browse name. /// protected override BaseInstanceState FindChild( ISystemContext context, QualifiedName browseName, bool createOrReplace, BaseInstanceState replacement) { if (QualifiedName.IsNull(browseName)) { return null; } BaseInstanceState instance = null; switch (browseName.Name) { case tempuri.org.UA.Examples.BoilerType.BrowseNames.LevelIndicator: { if (createOrReplace) { if (LevelIndicator == null) { if (replacement == null) { LevelIndicator = new LevelIndicatorState(this); } else { LevelIndicator = (LevelIndicatorState)replacement; } } } instance = LevelIndicator; break; } } if (instance != null) { return instance; } return base.FindChild(context, browseName, createOrReplace, replacement); } #endregion #region Private Fields private LevelIndicatorState m_levelIndicator; #endregion } #endif #endregion #region BoilerOutputPipeState Class #if (!OPCUA_EXCLUDE_BoilerOutputPipeState) /// /// Stores an instance of the BoilerOutputPipeType ObjectType. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public partial class BoilerOutputPipeState : FolderState { #region Constructors /// /// Initializes the type with its default attribute values. /// public BoilerOutputPipeState(NodeState parent) : base(parent) { } /// /// Returns the id of the default type definition node for the instance. /// protected override NodeId GetDefaultTypeDefinitionId(NamespaceTable namespaceUris) { return Opc.Ua.NodeId.Create(tempuri.org.UA.Examples.BoilerType.ObjectTypes.BoilerOutputPipeType, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType, namespaceUris); } #if (!OPCUA_EXCLUDE_InitializationStrings) /// /// Initializes the instance. /// protected override void Initialize(ISystemContext context) { Initialize(context, InitializationString); InitializeOptionalChildren(context); } /// /// Initializes the any option children defined for the instance. /// protected override void InitializeOptionalChildren(ISystemContext context) { base.InitializeOptionalChildren(context); } #region Initialization String private const string InitializationString = "AQAAACkAAABodHRwOi8vdGVtcHVyaS5vcmcvVUEvRXhhbXBsZXMvQm9pbGVyVHlwZf////8EYIAAAQAA" + "AAEAHAAAAEJvaWxlck91dHB1dFBpcGVUeXBlSW5zdGFuY2UBAY8AAQGPAAEAAAAAMAABAZAAAQAAAIRg" + "wAoBAAAAEAAAAEZsb3dUcmFuc21pdHRlcjIBAAYAAABGVFgwMDIBAZAAAC8BATIAkAAAAAEBAAAAADAB" + "AQGPAAEAAAAVYIkKAgAAAAEABgAAAE91dHB1dAEBkQAALwEAQAmRAAAAAAv/////AQH/////AQAAABVg" + "iQoCAAAAAAAHAAAARVVSYW5nZQEBlQAALgBElQAAAAEAdAP/////AQH/////AAAAAA=="; #endregion #endif #endregion #region Public Properties /// /// A description for the FTX002 Object. /// public FlowTransmitterState FlowTransmitter2 { get { return m_flowTransmitter2; } set { if (!Object.ReferenceEquals(m_flowTransmitter2, value)) { ChangeMasks |= NodeStateChangeMasks.Children; } m_flowTransmitter2 = value; } } #endregion #region Overridden Methods /// /// Populates a list with the children that belong to the node. /// /// The context for the system being accessed. /// The list of children to populate. public override void GetChildren( ISystemContext context, IList children) { if (m_flowTransmitter2 != null) { children.Add(m_flowTransmitter2); } base.GetChildren(context, children); } /// /// Finds the child with the specified browse name. /// protected override BaseInstanceState FindChild( ISystemContext context, QualifiedName browseName, bool createOrReplace, BaseInstanceState replacement) { if (QualifiedName.IsNull(browseName)) { return null; } BaseInstanceState instance = null; switch (browseName.Name) { case tempuri.org.UA.Examples.BoilerType.BrowseNames.FlowTransmitter2: { if (createOrReplace) { if (FlowTransmitter2 == null) { if (replacement == null) { FlowTransmitter2 = new FlowTransmitterState(this); } else { FlowTransmitter2 = (FlowTransmitterState)replacement; } } } instance = FlowTransmitter2; break; } } if (instance != null) { return instance; } return base.FindChild(context, browseName, createOrReplace, replacement); } #endregion #region Private Fields private FlowTransmitterState m_flowTransmitter2; #endregion } #endif #endregion #region BoilerState Class #if (!OPCUA_EXCLUDE_BoilerState) /// /// Stores an instance of the BoilerType ObjectType. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public partial class BoilerState : BaseObjectState { #region Constructors /// /// Initializes the type with its default attribute values. /// public BoilerState(NodeState parent) : base(parent) { } /// /// Returns the id of the default type definition node for the instance. /// protected override NodeId GetDefaultTypeDefinitionId(NamespaceTable namespaceUris) { return Opc.Ua.NodeId.Create(tempuri.org.UA.Examples.BoilerType.ObjectTypes.BoilerType, tempuri.org.UA.Examples.BoilerType.Namespaces.BoilerType, namespaceUris); } #if (!OPCUA_EXCLUDE_InitializationStrings) /// /// Initializes the instance. /// protected override void Initialize(ISystemContext context) { Initialize(context, InitializationString); InitializeOptionalChildren(context); } /// /// Initializes the any option children defined for the instance. /// protected override void InitializeOptionalChildren(ISystemContext context) { base.InitializeOptionalChildren(context); } #region Initialization String private const string InitializationString = "AQAAACkAAABodHRwOi8vdGVtcHVyaS5vcmcvVUEvRXhhbXBsZXMvQm9pbGVyVHlwZf////+EYIAAAQAA" + "AAEAEgAAAEJvaWxlclR5cGVJbnN0YW5jZQEBlwABAZcAAQQAAAAAMAABAZgAADAAAQGnAAAwAAEBrwAA" + "JAABAcUABwAAAMRgwAoBAAAACQAAAElucHV0UGlwZQEACAAAAFBpcGVYMDAxAQGYAAMAAAAACQAAAElu" + "cHV0UGlwZQAvAQF4AJgAAAABAwAAAAAwAQEBlwAAMAABAZkAAQEBAAABAacAAgAAAMRgwAoBAAAAEAAA" + "AEZsb3dUcmFuc21pdHRlcjEBAAYAAABGVFgwMDEBAZkAAwAAAAAQAAAARmxvd1RyYW5zbWl0dGVyMQAv" + "AQEyAJkAAAABAQAAAAAwAQEBmAABAAAAFWCJCgIAAAABAAYAAABPdXRwdXQBAZoAAC8BAEAJmgAAAAAL" + "/////wEBAgAAAAEBAwAAAQG4AAEBAwAAAQHBAAEAAAAVYIkKAgAAAAAABwAAAEVVUmFuZ2UBAZ4AAC4A" + "RJ4AAAABAHQD/////wEB/////wAAAADEYMAKAQAAAAUAAABWYWx2ZQEACQAAAFZhbHZlWDAwMQEBoAAD" + "AAAAAAUAAABWYWx2ZQAvAQEcAKAAAAAB/////wEAAAAVYIkKAgAAAAEABQAAAElucHV0AQGhAAAvAQBA" + "CaEAAAAAC/////8CAgEAAAABAQMAAQEBugABAAAAFWCJCgIAAAAAAAcAAABFVVJhbmdlAQGlAAAuAESl" + "AAAAAQB0A/////8BAf////8AAAAAxGDACgEAAAAEAAAARHJ1bQEACAAAAERydW1YMDAxAQGnAAMAAAAA" + "BAAAAERydW0ALwEBhwCnAAAAAQQAAAAAMAEBAZcAAQEBAAEBAZgAADAAAQGoAAEBAgAAAQGvAAEAAACE" + "YMAKAQAAAA4AAABMZXZlbEluZGljYXRvcgEABgAAAExJWDAwMQEBqAAALwEBKwCoAAAAAQEAAAAAMAEB" + "AacAAQAAABVgiQoCAAAAAQAGAAAAT3V0cHV0AQGpAAAvAQBACakAAAAAGv////8BAQEAAAABAQMAAAEB" + "vAABAAAAFWCJCgIAAAAAAAcAAABFVVJhbmdlAQGtAAAuAEStAAAAAQB0A/////8BAf////8AAAAAxGDA" + "CgEAAAAKAAAAT3V0cHV0UGlwZQEACAAAAFBpcGVYMDAyAQGvAAMAAAAACgAAAE91dHB1dFBpcGUALwEB" + "jwCvAAAAAQMAAAAAMAEBAZcAAQECAAEBAacAADAAAQGwAAEAAACEYMAKAQAAABAAAABGbG93VHJhbnNt" + "aXR0ZXIyAQAGAAAARlRYMDAyAQGwAAAvAQEyALAAAAABAQAAAAAwAQEBrwABAAAAFWCJCgIAAAABAAYA" + "AABPdXRwdXQBAbEAAC8BAEAJsQAAAAAL/////wEBAQAAAAEBAwAAAQHCAAEAAAAVYIkKAgAAAAAABwAA" + "AEVVUmFuZ2UBAbUAAC4ARLUAAAABAHQD/////wEB/////wAAAABEYMAKAQAAAA4AAABGbG93Q29udHJv" + "bGxlcgEABgAAAEZDWDAwMQEBtwADAAAAAA4AAABGbG93Q29udHJvbGxlcgAvAQEnALcAAAD/////AwAA" + "ABVgiQoCAAAAAQALAAAATWVhc3VyZW1lbnQBAbgAAC4ARLgAAAAAC/////8BAQEAAAABAQMAAQEBmgAA" + "AAAAFWCJCgIAAAABAAgAAABTZXRQb2ludAEBuQAALgBEuQAAAAAL/////wMDAQAAAAEBAwABAQHDAAAA" + "AAAVYIkKAgAAAAEACgAAAENvbnRyb2xPdXQBAboAAC4ARLoAAAAAC/////8BAQEAAAABAQMAAAEBoQAA" + "AAAARGDACgEAAAAPAAAATGV2ZWxDb250cm9sbGVyAQAGAAAATENYMDAxAQG7AAMAAAAADwAAAExldmVs" + "Q29udHJvbGxlcgAvAQEjALsAAAD/////AwAAABVgiQoCAAAAAQALAAAATWVhc3VyZW1lbnQBAbwAAC4A" + "RLwAAAAAC/////8BAQEAAAABAQMAAQEBqQAAAAAAFWCJCgIAAAABAAgAAABTZXRQb2ludAEBvQAALgBE" + "vQAAAAAL/////wMD/////wAAAAAVYIkKAgAAAAEACgAAAENvbnRyb2xPdXQBAb4AAC4ARL4AAAAAC///" + "//8BAQEAAAABAQMAAAEBwAAAAAAARGDACgEAAAAQAAAAQ3VzdG9tQ29udHJvbGxlcgEABgAAAENDWDAw" + "MQEBvwADAAAAABAAAABDdXN0b21Db250cm9sbGVyAC8BARYAvwAAAP////8FAAAAFWCJCgIAAAABAAYA" + "AABJbnB1dDEBAcAAAC4ARMAAAAAAC/////8CAgEAAAABAQMAAQEBvgAAAAAAFWCJCgIAAAABAAYAAABJ" + "bnB1dDIBAcEAAC4ARMEAAAAAC/////8CAgEAAAABAQMAAQEBmgAAAAAAFWCJCgIAAAABAAYAAABJbnB1" + "dDMBAcIAAC4ARMIAAAAAC/////8CAgEAAAABAQMAAQEBsQAAAAAAFWCJCgIAAAABAAoAAABDb250cm9s" + "T3V0AQHDAAAuAETDAAAAAAv/////AQEBAAAAAQEDAAABAbkAAAAAABVgyQoCAAAADAAAAERlc2NyaXB0" + "aW9uWAEACwAAAERlc2NyaXB0aW9uAQHEAAAuAETEAAAAABX/////AQH/////AAAAAIRggAoBAAAAAQAK" + "AAAAU2ltdWxhdGlvbgEBxQAALwEBOQDFAAAAAQEAAAAAJAEBAZcACgAAABVgiQoCAAAAAAAMAAAAQ3Vy" + "cmVudFN0YXRlAQHGAAAvAQDICsYAAAAAFf////8BAf////8CAAAAFWCJCgIAAAAAAAIAAABJZAEBxwAA" + "LgBExwAAAAAR/////wEB/////wAAAAAVYIkKAgAAAAAABgAAAE51bWJlcgEByQAALgBEyQAAAAAH////" + "/wEB/////wAAAAAVYIkKAgAAAAAADgAAAExhc3RUcmFuc2l0aW9uAQHLAAAvAQDPCssAAAAAFf////8B" + "Af////8DAAAAFWCJCgIAAAAAAAIAAABJZAEBzAAALgBEzAAAAAAR/////wEB/////wAAAAAVYIkKAgAA" + "AAAABgAAAE51bWJlcgEBzgAALgBEzgAAAAAH/////wEB/////wAAAAAVYIkKAgAAAAAADgAAAFRyYW5z" + "aXRpb25UaW1lAQHPAAAuAETPAAAAAQAmAf////8BAf////8AAAAAFWCJCgIAAAAAAAkAAABEZWxldGFi" + "bGUBAdEAAC4ARNEAAAAAAf////8BAf////8AAAAAFWCJCgIAAAAAAAwAAABSZWN5Y2xlQ291bnQBAdMA" + "AC4ARNMAAAAABv////8BAf////8AAAAAJGGCCgQAAAAAAAUAAABTdGFydAEB4AADAAAAAEsAAABDYXVz" + "ZXMgdGhlIFByb2dyYW0gdG8gdHJhbnNpdGlvbiBmcm9tIHRoZSBSZWFkeSBzdGF0ZSB0byB0aGUgUnVu" + "bmluZyBzdGF0ZS4ALwEAegngAAAAAQH/////AAAAACRhggoEAAAAAAAHAAAAU3VzcGVuZAEB4QADAAAA" + "AE8AAABDYXVzZXMgdGhlIFByb2dyYW0gdG8gdHJhbnNpdGlvbiBmcm9tIHRoZSBSdW5uaW5nIHN0YXRl" + "IHRvIHRoZSBTdXNwZW5kZWQgc3RhdGUuAC8BAHsJ4QAAAAEB/////wAAAAAkYYIKBAAAAAAABgAAAFJl" + "c3VtZQEB4gADAAAAAE8AAABDYXVzZXMgdGhlIFByb2dyYW0gdG8gdHJhbnNpdGlvbiBmcm9tIHRoZSBT" + "dXNwZW5kZWQgc3RhdGUgdG8gdGhlIFJ1bm5pbmcgc3RhdGUuAC8BAHwJ4gAAAAEB/////wAAAAAkYYIK" + "BAAAAAAABAAAAEhhbHQBAeMAAwAAAABgAAAAQ2F1c2VzIHRoZSBQcm9ncmFtIHRvIHRyYW5zaXRpb24g" + "ZnJvbSB0aGUgUmVhZHksIFJ1bm5pbmcgb3IgU3VzcGVuZGVkIHN0YXRlIHRvIHRoZSBIYWx0ZWQgc3Rh" + "dGUuAC8BAH0J4wAAAAEB/////wAAAAAkYYIKBAAAAAAABQAAAFJlc2V0AQHkAAMAAAAASgAAAENhdXNl" + "cyB0aGUgUHJvZ3JhbSB0byB0cmFuc2l0aW9uIGZyb20gdGhlIEhhbHRlZCBzdGF0ZSB0byB0aGUgUmVh" + "ZHkgc3RhdGUuAC8BAH4J5AAAAAEB/////wAAAAA1YIkKAgAAAAEACgAAAFVwZGF0ZVJhdGUBAeUAAwAA" + "AAAmAAAAVGhlIHJhdGUgYXQgd2hpY2ggdGhlIHNpbXVsYXRpb24gcnVucy4ALgBE5QAAAAAH/////wMD" + "/////wAAAAA="; #endregion #endif #endregion #region Public Properties /// /// A description for the PipeX001 Object. /// public BoilerInputPipeState InputPipe { get { return m_inputPipe; } set { if (!Object.ReferenceEquals(m_inputPipe, value)) { ChangeMasks |= NodeStateChangeMasks.Children; } m_inputPipe = value; } } /// /// A description for the DrumX001 Object. /// public BoilerDrumState Drum { get { return m_drum; } set { if (!Object.ReferenceEquals(m_drum, value)) { ChangeMasks |= NodeStateChangeMasks.Children; } m_drum = value; } } /// /// A description for the PipeX002 Object. /// public BoilerOutputPipeState OutputPipe { get { return m_outputPipe; } set { if (!Object.ReferenceEquals(m_outputPipe, value)) { ChangeMasks |= NodeStateChangeMasks.Children; } m_outputPipe = value; } } /// /// A description for the FCX001 Object. /// public FlowControllerState FlowController { get { return m_flowController; } set { if (!Object.ReferenceEquals(m_flowController, value)) { ChangeMasks |= NodeStateChangeMasks.Children; } m_flowController = value; } } /// /// A description for the LCX001 Object. /// public LevelControllerState LevelController { get { return m_levelController; } set { if (!Object.ReferenceEquals(m_levelController, value)) { ChangeMasks |= NodeStateChangeMasks.Children; } m_levelController = value; } } /// /// A description for the CCX001 Object. /// public CustomControllerState CustomController { get { return m_customController; } set { if (!Object.ReferenceEquals(m_customController, value)) { ChangeMasks |= NodeStateChangeMasks.Children; } m_customController = value; } } /// /// A description for the Simulation Object. /// public BoilerStateMachineState Simulation { get { return m_simulation; } set { if (!Object.ReferenceEquals(m_simulation, value)) { ChangeMasks |= NodeStateChangeMasks.Children; } m_simulation = value; } } #endregion #region Overridden Methods /// /// Populates a list with the children that belong to the node. /// /// The context for the system being accessed. /// The list of children to populate. public override void GetChildren( ISystemContext context, IList children) { if (m_inputPipe != null) { children.Add(m_inputPipe); } if (m_drum != null) { children.Add(m_drum); } if (m_outputPipe != null) { children.Add(m_outputPipe); } if (m_flowController != null) { children.Add(m_flowController); } if (m_levelController != null) { children.Add(m_levelController); } if (m_customController != null) { children.Add(m_customController); } if (m_simulation != null) { children.Add(m_simulation); } base.GetChildren(context, children); } /// /// Finds the child with the specified browse name. /// protected override BaseInstanceState FindChild( ISystemContext context, QualifiedName browseName, bool createOrReplace, BaseInstanceState replacement) { if (QualifiedName.IsNull(browseName)) { return null; } BaseInstanceState instance = null; switch (browseName.Name) { case tempuri.org.UA.Examples.BoilerType.BrowseNames.InputPipe: { if (createOrReplace) { if (InputPipe == null) { if (replacement == null) { InputPipe = new BoilerInputPipeState(this); } else { InputPipe = (BoilerInputPipeState)replacement; } } } instance = InputPipe; break; } case tempuri.org.UA.Examples.BoilerType.BrowseNames.Drum: { if (createOrReplace) { if (Drum == null) { if (replacement == null) { Drum = new BoilerDrumState(this); } else { Drum = (BoilerDrumState)replacement; } } } instance = Drum; break; } case tempuri.org.UA.Examples.BoilerType.BrowseNames.OutputPipe: { if (createOrReplace) { if (OutputPipe == null) { if (replacement == null) { OutputPipe = new BoilerOutputPipeState(this); } else { OutputPipe = (BoilerOutputPipeState)replacement; } } } instance = OutputPipe; break; } case tempuri.org.UA.Examples.BoilerType.BrowseNames.FlowController: { if (createOrReplace) { if (FlowController == null) { if (replacement == null) { FlowController = new FlowControllerState(this); } else { FlowController = (FlowControllerState)replacement; } } } instance = FlowController; break; } case tempuri.org.UA.Examples.BoilerType.BrowseNames.LevelController: { if (createOrReplace) { if (LevelController == null) { if (replacement == null) { LevelController = new LevelControllerState(this); } else { LevelController = (LevelControllerState)replacement; } } } instance = LevelController; break; } case tempuri.org.UA.Examples.BoilerType.BrowseNames.CustomController: { if (createOrReplace) { if (CustomController == null) { if (replacement == null) { CustomController = new CustomControllerState(this); } else { CustomController = (CustomControllerState)replacement; } } } instance = CustomController; break; } case tempuri.org.UA.Examples.BoilerType.BrowseNames.Simulation: { if (createOrReplace) { if (Simulation == null) { if (replacement == null) { Simulation = new BoilerStateMachineState(this); } else { Simulation = (BoilerStateMachineState)replacement; } } } instance = Simulation; break; } } if (instance != null) { return instance; } return base.FindChild(context, browseName, createOrReplace, replacement); } #endregion #region Private Fields private BoilerInputPipeState m_inputPipe; private BoilerDrumState m_drum; private BoilerOutputPipeState m_outputPipe; private FlowControllerState m_flowController; private LevelControllerState m_levelController; private CustomControllerState m_customController; private BoilerStateMachineState m_simulation; #endregion } #endif #endregion } ================================================ FILE: Networking/Simulator.Boiler/UAInformationModel/DemoConfiguration/BoilerType/tempuri.org.UA.Examples.BoilerType.NodeSet.xml ================================================  http://opcfoundation.org/UA/ http://tempuri.org/UA/Examples/BoilerType ns=1;i=1 ReferenceType_32 1 FlowTo FlowTo A reference that indicates a flow between two objects. 0 0 i=45 true i=32 i=45 false ns=1;i=2 false false FlowFrom ns=1;i=2 ReferenceType_32 1 HotFlowTo HotFlowTo A reference that indicates a high temperature flow between two objects. 0 0 i=45 true ns=1;i=1 false false HotFlowFrom ns=1;i=3 ReferenceType_32 1 SignalTo SignalTo A reference that indicates an electrical signal between two variables. 0 0 i=45 true i=32 false false SignalFrom ns=1;i=4 ObjectType_8 1 GenericControllerType GenericControllerType A generic PID controller 0 0 i=45 true i=58 i=46 false ns=1;i=5 i=46 false ns=1;i=6 i=46 false ns=1;i=7 i=45 false ns=1;i=35 i=45 false ns=1;i=39 false ns=1;i=5 Variable_2 1 Measurement Measurement 0 0 i=46 true ns=1;i=4 i=40 false i=68 i=37 false i=78 0 i=11 -1 1 1 0 false ns=1;i=6 Variable_2 1 SetPoint SetPoint 0 0 i=46 true ns=1;i=4 i=40 false i=68 i=37 false i=78 0 i=11 -1 3 3 0 false ns=1;i=7 Variable_2 1 ControlOut ControlOut 0 0 i=46 true ns=1;i=4 i=40 false i=68 i=37 false i=78 0 i=11 -1 1 1 0 false ns=1;i=8 ObjectType_8 1 GenericSensorType GenericSensorType A generic sensor that read a process value. 0 0 i=45 true i=58 i=47 false ns=1;i=9 i=45 false ns=1;i=43 i=45 false ns=1;i=50 false ns=1;i=9 Variable_2 1 Output Output 0 0 i=47 true ns=1;i=8 i=40 false i=2368 i=37 false i=78 i=46 false ns=1;i=13 0 i=11 -1 1 1 0 false ns=1;i=13 Variable_2 0 EURange EURange 0 0 i=46 true ns=1;i=9 i=40 false i=68 i=37 false i=78 i=884 -1 1 1 0 false ns=1;i=15 ObjectType_8 1 GenericActuatorType GenericActuatorType Represents a piece of equipment that causes some action to occur. 0 0 i=45 true i=58 i=47 false ns=1;i=16 i=45 false ns=1;i=28 false ns=1;i=16 Variable_2 1 Input Input 0 0 i=47 true ns=1;i=15 i=40 false i=2368 i=37 false i=78 i=46 false ns=1;i=20 0 i=11 -1 2 2 0 false ns=1;i=20 Variable_2 0 EURange EURange 0 0 i=46 true ns=1;i=16 i=40 false i=68 i=37 false i=78 i=884 -1 1 1 0 false ns=1;i=22 ObjectType_8 1 CustomControllerType CustomControllerType A custom PID controller with 3 inputs 0 0 i=45 true i=58 i=46 false ns=1;i=23 i=46 false ns=1;i=24 i=46 false ns=1;i=25 i=46 false ns=1;i=26 i=46 false ns=1;i=27 false ns=1;i=23 Variable_2 1 Input1 Input1 0 0 i=46 true ns=1;i=22 i=40 false i=68 i=37 false i=78 0 i=11 -1 2 2 0 false ns=1;i=24 Variable_2 1 Input2 Input2 0 0 i=46 true ns=1;i=22 i=40 false i=68 i=37 false i=78 0 i=11 -1 2 2 0 false ns=1;i=25 Variable_2 1 Input3 Input3 0 0 i=46 true ns=1;i=22 i=40 false i=68 i=37 false i=78 0 i=11 -1 2 2 0 false ns=1;i=26 Variable_2 1 ControlOut ControlOut 0 0 i=46 true ns=1;i=22 i=40 false i=68 i=37 false i=78 0 i=11 -1 1 1 0 false ns=1;i=27 Variable_2 1 Description Description 0 0 i=46 true ns=1;i=22 i=40 false i=68 i=37 false i=78 i=21 -1 1 1 0 false ns=1;i=28 ObjectType_8 1 ValveType ValveType An actuator that controls the flow through a pipe. 0 0 i=45 true ns=1;i=15 false ns=1;i=35 ObjectType_8 1 LevelControllerType LevelControllerType A controller for the level of a fluid in a drum. 0 0 i=45 true ns=1;i=4 false ns=1;i=39 ObjectType_8 1 FlowControllerType FlowControllerType A controller for the flow of a fluid through a pipe. 0 0 i=45 true ns=1;i=4 false ns=1;i=43 ObjectType_8 1 LevelIndicatorType LevelIndicatorType A sensor that reports the level of a liquid in a tank. 0 0 i=45 true ns=1;i=8 false ns=1;i=50 ObjectType_8 1 FlowTransmitterType FlowTransmitterType A sensor that reports the flow of a liquid through a pipe. 0 0 i=45 true ns=1;i=8 false ns=1;i=57 ObjectType_8 1 BoilerStateMachineType BoilerStateMachineType A program that produces simulated values for a running boiler. 0 0 i=45 true i=2391 i=46 false ns=1;i=119 false ns=1;i=119 Variable_2 1 UpdateRate UpdateRate The rate at which the simulation runs. 0 0 i=46 true ns=1;i=57 i=40 false i=68 i=37 false i=78 0 i=7 -1 3 3 0 false ns=1;i=120 ObjectType_8 1 BoilerInputPipeType BoilerInputPipeType 0 0 i=45 true i=61 i=48 false ns=1;i=121 i=47 false ns=1;i=121 i=47 false ns=1;i=128 false ns=1;i=121 Object_1 1 FTX001 FlowTransmitter1 0 0 i=47 true ns=1;i=120 i=40 false ns=1;i=50 i=37 false i=78 i=47 false ns=1;i=122 1 ns=1;i=122 Variable_2 1 Output Output 0 0 i=47 true ns=1;i=121 i=40 false i=2368 i=37 false i=78 i=46 false ns=1;i=126 0 i=11 -1 1 1 0 false ns=1;i=126 Variable_2 0 EURange EURange 0 0 i=46 true ns=1;i=122 i=40 false i=68 i=37 false i=78 i=884 -1 1 1 0 false ns=1;i=128 Object_1 1 ValveX001 Valve 0 0 i=47 true ns=1;i=120 i=40 false ns=1;i=28 i=37 false i=78 i=47 false ns=1;i=129 1 ns=1;i=129 Variable_2 1 Input Input 0 0 i=47 true ns=1;i=128 i=40 false i=2368 i=37 false i=78 i=46 false ns=1;i=133 0 i=11 -1 2 2 0 false ns=1;i=133 Variable_2 0 EURange EURange 0 0 i=46 true ns=1;i=129 i=40 false i=68 i=37 false i=78 i=884 -1 1 1 0 false ns=1;i=135 ObjectType_8 1 BoilerDrumType BoilerDrumType 0 0 i=45 true i=61 i=48 false ns=1;i=136 i=47 false ns=1;i=136 false ns=1;i=136 Object_1 1 LIX001 LIX001 0 0 i=47 true ns=1;i=135 i=40 false ns=1;i=43 i=37 false i=78 i=47 false ns=1;i=137 1 ns=1;i=137 Variable_2 1 Output Output 0 0 i=47 true ns=1;i=136 i=40 false i=2368 i=37 false i=78 i=46 false ns=1;i=141 0 i=11 -1 1 1 0 false ns=1;i=141 Variable_2 0 EURange EURange 0 0 i=46 true ns=1;i=137 i=40 false i=68 i=37 false i=78 i=884 -1 1 1 0 false ns=1;i=143 ObjectType_8 1 BoilerOutputPipeType BoilerOutputPipeType 0 0 i=45 true i=61 i=48 false ns=1;i=144 i=47 false ns=1;i=144 false ns=1;i=144 Object_1 1 FTX002 FTX002 0 0 i=47 true ns=1;i=143 i=40 false ns=1;i=50 i=37 false i=78 i=47 false ns=1;i=145 1 ns=1;i=145 Variable_2 1 Output Output 0 0 i=47 true ns=1;i=144 i=40 false i=2368 i=37 false i=78 i=46 false ns=1;i=149 0 i=11 -1 1 1 0 false ns=1;i=149 Variable_2 0 EURange EURange 0 0 i=46 true ns=1;i=145 i=40 false i=68 i=37 false i=78 i=884 -1 1 1 0 false ns=1;i=151 ObjectType_8 1 BoilerType BoilerType A boiler used to produce steam for a turbine. 0 0 i=45 true i=58 i=48 false ns=1;i=152 i=48 false ns=1;i=167 i=48 false ns=1;i=175 i=36 false ns=1;i=197 i=47 false ns=1;i=152 i=47 false ns=1;i=167 i=47 false ns=1;i=175 i=47 false ns=1;i=183 i=47 false ns=1;i=187 i=47 false ns=1;i=191 i=47 false ns=1;i=197 false ns=1;i=152 Object_1 1 PipeX001 InputPipe 0 0 i=47 true ns=1;i=151 i=40 false ns=1;i=120 i=37 false i=78 i=48 false ns=1;i=153 ns=1;i=1 false ns=1;i=167 i=47 false ns=1;i=153 i=47 false ns=1;i=160 1 ns=1;i=153 Object_1 1 FTX001 FlowTransmitter1 0 0 i=47 true ns=1;i=152 i=40 false ns=1;i=50 i=37 false i=78 i=48 true ns=1;i=152 i=47 false ns=1;i=154 1 ns=1;i=154 Variable_2 1 Output Output 0 0 i=47 true ns=1;i=153 i=40 false i=2368 i=37 false i=78 ns=1;i=3 false ns=1;i=184 ns=1;i=3 false ns=1;i=193 i=46 false ns=1;i=158 0 i=11 -1 1 1 0 false ns=1;i=158 Variable_2 0 EURange EURange 0 0 i=46 true ns=1;i=154 i=40 false i=68 i=37 false i=78 i=884 -1 1 1 0 false ns=1;i=160 Object_1 1 ValveX001 Valve 0 0 i=47 true ns=1;i=152 i=40 false ns=1;i=28 i=37 false i=78 i=47 false ns=1;i=161 1 ns=1;i=161 Variable_2 1 Input Input 0 0 i=47 true ns=1;i=160 i=40 false i=2368 i=37 false i=78 ns=1;i=3 true ns=1;i=186 i=46 false ns=1;i=165 0 i=11 -1 2 2 0 false ns=1;i=165 Variable_2 0 EURange EURange 0 0 i=46 true ns=1;i=161 i=40 false i=68 i=37 false i=78 i=884 -1 1 1 0 false ns=1;i=167 Object_1 1 DrumX001 Drum 0 0 i=47 true ns=1;i=151 i=40 false ns=1;i=135 i=37 false i=78 ns=1;i=1 true ns=1;i=152 i=48 false ns=1;i=168 ns=1;i=2 false ns=1;i=175 i=47 false ns=1;i=168 1 ns=1;i=168 Object_1 1 LIX001 LIX001 0 0 i=47 true ns=1;i=167 i=40 false ns=1;i=43 i=37 false i=78 i=48 true ns=1;i=167 i=47 false ns=1;i=169 1 ns=1;i=169 Variable_2 1 Output Output 0 0 i=47 true ns=1;i=168 i=40 false i=2368 i=37 false i=78 ns=1;i=3 false ns=1;i=188 i=46 false ns=1;i=173 0 i=26 -1 1 1 0 false ns=1;i=173 Variable_2 0 EURange EURange 0 0 i=46 true ns=1;i=169 i=40 false i=68 i=37 false i=78 i=884 -1 1 1 0 false ns=1;i=175 Object_1 1 PipeX002 OutputPipe 0 0 i=47 true ns=1;i=151 i=40 false ns=1;i=143 i=37 false i=78 ns=1;i=2 true ns=1;i=167 i=48 false ns=1;i=176 i=47 false ns=1;i=176 1 ns=1;i=176 Object_1 1 FTX002 FTX002 0 0 i=47 true ns=1;i=175 i=40 false ns=1;i=50 i=37 false i=78 i=48 true ns=1;i=175 i=47 false ns=1;i=177 1 ns=1;i=177 Variable_2 1 Output Output 0 0 i=47 true ns=1;i=176 i=40 false i=2368 i=37 false i=78 ns=1;i=3 false ns=1;i=194 i=46 false ns=1;i=181 0 i=11 -1 1 1 0 false ns=1;i=181 Variable_2 0 EURange EURange 0 0 i=46 true ns=1;i=177 i=40 false i=68 i=37 false i=78 i=884 -1 1 1 0 false ns=1;i=183 Object_1 1 FCX001 FlowController 0 0 i=47 true ns=1;i=151 i=40 false ns=1;i=39 i=37 false i=78 i=46 false ns=1;i=184 i=46 false ns=1;i=185 i=46 false ns=1;i=186 0 ns=1;i=184 Variable_2 1 Measurement Measurement 0 0 i=46 true ns=1;i=183 i=40 false i=68 i=37 false i=78 ns=1;i=3 true ns=1;i=154 0 i=11 -1 1 1 0 false ns=1;i=185 Variable_2 1 SetPoint SetPoint 0 0 i=46 true ns=1;i=183 i=40 false i=68 i=37 false i=78 ns=1;i=3 true ns=1;i=195 0 i=11 -1 3 3 0 false ns=1;i=186 Variable_2 1 ControlOut ControlOut 0 0 i=46 true ns=1;i=183 i=40 false i=68 i=37 false i=78 ns=1;i=3 false ns=1;i=161 0 i=11 -1 1 1 0 false ns=1;i=187 Object_1 1 LCX001 LevelController 0 0 i=47 true ns=1;i=151 i=40 false ns=1;i=35 i=37 false i=78 i=46 false ns=1;i=188 i=46 false ns=1;i=189 i=46 false ns=1;i=190 0 ns=1;i=188 Variable_2 1 Measurement Measurement 0 0 i=46 true ns=1;i=187 i=40 false i=68 i=37 false i=78 ns=1;i=3 true ns=1;i=169 0 i=11 -1 1 1 0 false ns=1;i=189 Variable_2 1 SetPoint SetPoint 0 0 i=46 true ns=1;i=187 i=40 false i=68 i=37 false i=78 0 i=11 -1 3 3 0 false ns=1;i=190 Variable_2 1 ControlOut ControlOut 0 0 i=46 true ns=1;i=187 i=40 false i=68 i=37 false i=78 ns=1;i=3 false ns=1;i=192 0 i=11 -1 1 1 0 false ns=1;i=191 Object_1 1 CCX001 CustomController 0 0 i=47 true ns=1;i=151 i=40 false ns=1;i=22 i=37 false i=78 i=46 false ns=1;i=192 i=46 false ns=1;i=193 i=46 false ns=1;i=194 i=46 false ns=1;i=195 i=46 false ns=1;i=196 0 ns=1;i=192 Variable_2 1 Input1 Input1 0 0 i=46 true ns=1;i=191 i=40 false i=68 i=37 false i=78 ns=1;i=3 true ns=1;i=190 0 i=11 -1 2 2 0 false ns=1;i=193 Variable_2 1 Input2 Input2 0 0 i=46 true ns=1;i=191 i=40 false i=68 i=37 false i=78 ns=1;i=3 true ns=1;i=154 0 i=11 -1 2 2 0 false ns=1;i=194 Variable_2 1 Input3 Input3 0 0 i=46 true ns=1;i=191 i=40 false i=68 i=37 false i=78 ns=1;i=3 true ns=1;i=177 0 i=11 -1 2 2 0 false ns=1;i=195 Variable_2 1 ControlOut ControlOut 0 0 i=46 true ns=1;i=191 i=40 false i=68 i=37 false i=78 ns=1;i=3 false ns=1;i=185 0 i=11 -1 1 1 0 false ns=1;i=196 Variable_2 1 Description Description 0 0 i=46 true ns=1;i=191 i=40 false i=68 i=37 false i=78 i=21 -1 1 1 0 false ns=1;i=197 Object_1 1 Simulation Simulation 0 0 i=47 true ns=1;i=151 i=40 false ns=1;i=57 i=37 false i=78 i=47 false ns=1;i=198 i=47 false ns=1;i=203 i=46 false ns=1;i=209 i=46 false ns=1;i=211 i=47 false ns=1;i=224 i=47 false ns=1;i=225 i=47 false ns=1;i=226 i=47 false ns=1;i=227 i=47 false ns=1;i=228 i=46 false ns=1;i=229 1 ns=1;i=198 Variable_2 0 CurrentState CurrentState 0 0 i=47 true ns=1;i=197 i=40 false i=2760 i=37 false i=78 i=46 false ns=1;i=199 i=46 false ns=1;i=201 i=21 -1 1 1 0 false ns=1;i=199 Variable_2 0 Id Id 0 0 i=46 true ns=1;i=198 i=40 false i=68 i=37 false i=78 i=0 i=17 -1 1 1 0 false ns=1;i=201 Variable_2 0 Number Number 0 0 i=46 true ns=1;i=198 i=40 false i=68 i=37 false i=78 0 i=7 -1 1 1 0 false ns=1;i=203 Variable_2 0 LastTransition LastTransition 0 0 i=47 true ns=1;i=197 i=40 false i=2767 i=37 false i=78 i=46 false ns=1;i=204 i=46 false ns=1;i=206 i=46 false ns=1;i=207 i=21 -1 1 1 0 false ns=1;i=204 Variable_2 0 Id Id 0 0 i=46 true ns=1;i=203 i=40 false i=68 i=37 false i=78 i=0 i=17 -1 1 1 0 false ns=1;i=206 Variable_2 0 Number Number 0 0 i=46 true ns=1;i=203 i=40 false i=68 i=37 false i=78 0 i=7 -1 1 1 0 false ns=1;i=207 Variable_2 0 TransitionTime TransitionTime 0 0 i=46 true ns=1;i=203 i=40 false i=68 i=37 false i=78 0001-01-01T00:00:00 i=294 -1 1 1 0 false ns=1;i=209 Variable_2 0 Deletable Deletable 0 0 i=46 true ns=1;i=197 i=40 false i=68 i=37 false i=78 false i=1 -1 1 1 0 false ns=1;i=211 Variable_2 0 RecycleCount RecycleCount 0 0 i=46 true ns=1;i=197 i=40 false i=68 i=37 false i=78 0 i=6 -1 1 1 0 false ns=1;i=224 Method_4 0 Start Start Causes the Program to transition from the Ready state to the Running state. 0 0 i=47 true ns=1;i=197 i=40 false i=2426 i=37 false i=78 true true ns=1;i=225 Method_4 0 Suspend Suspend Causes the Program to transition from the Running state to the Suspended state. 0 0 i=47 true ns=1;i=197 i=40 false i=2427 i=37 false i=78 true true ns=1;i=226 Method_4 0 Resume Resume Causes the Program to transition from the Suspended state to the Running state. 0 0 i=47 true ns=1;i=197 i=40 false i=2428 i=37 false i=78 true true ns=1;i=227 Method_4 0 Halt Halt Causes the Program to transition from the Ready, Running or Suspended state to the Halted state. 0 0 i=47 true ns=1;i=197 i=40 false i=2429 i=37 false i=78 true true ns=1;i=228 Method_4 0 Reset Reset Causes the Program to transition from the Halted state to the Ready state. 0 0 i=47 true ns=1;i=197 i=40 false i=2430 i=37 false i=78 true true ns=1;i=229 Variable_2 1 UpdateRate UpdateRate The rate at which the simulation runs. 0 0 i=46 true ns=1;i=197 i=40 false i=68 i=37 false i=78 0 i=7 -1 3 3 0 false ================================================ FILE: Networking/Simulator.Boiler/UAInformationModel/DemoConfiguration/BoilerType/tempuri.org.UA.Examples.BoilerType.NodeSet2.xml ================================================  http://tempuri.org/UA/Examples/BoilerType i=1 i=2 i=3 i=4 i=5 i=6 i=7 i=8 i=9 i=10 i=11 i=13 i=12 i=15 i=14 i=16 i=17 i=18 i=20 i=21 i=19 i=22 i=26 i=27 i=28 i=47 i=46 i=35 i=36 i=48 i=45 i=40 i=37 i=38 i=39 FlowTo A reference that indicates a flow between two objects. i=32 FlowFrom HotFlowTo A reference that indicates a high temperature flow between two objects. ns=1;i=1 HotFlowFrom SignalTo A reference that indicates an electrical signal between two variables. i=32 SignalFrom GenericControllerType A generic PID controller ns=1;i=5 ns=1;i=6 ns=1;i=7 i=58 Measurement i=68 i=78 ns=1;i=4 SetPoint i=68 i=78 ns=1;i=4 ControlOut i=68 i=78 ns=1;i=4 GenericSensorType A generic sensor that read a process value. ns=1;i=9 i=58 Output ns=1;i=13 i=2368 i=78 ns=1;i=8 EURange i=68 i=78 ns=1;i=9 GenericActuatorType Represents a piece of equipment that causes some action to occur. ns=1;i=16 i=58 Input ns=1;i=20 i=2368 i=78 ns=1;i=15 EURange i=68 i=78 ns=1;i=16 CustomControllerType A custom PID controller with 3 inputs ns=1;i=23 ns=1;i=24 ns=1;i=25 ns=1;i=26 ns=1;i=27 i=58 Input1 i=68 i=78 ns=1;i=22 Input2 i=68 i=78 ns=1;i=22 Input3 i=68 i=78 ns=1;i=22 ControlOut i=68 i=78 ns=1;i=22 Description i=68 i=78 ns=1;i=22 ValveType An actuator that controls the flow through a pipe. ns=1;i=15 LevelControllerType A controller for the level of a fluid in a drum. ns=1;i=4 FlowControllerType A controller for the flow of a fluid through a pipe. ns=1;i=4 LevelIndicatorType A sensor that reports the level of a liquid in a tank. ns=1;i=8 FlowTransmitterType A sensor that reports the flow of a liquid through a pipe. ns=1;i=8 BoilerStateMachineType A program that produces simulated values for a running boiler. ns=1;i=119 i=2391 UpdateRate The rate at which the simulation runs. i=68 i=78 ns=1;i=57 BoilerInputPipeType ns=1;i=121 ns=1;i=128 ns=1;i=121 i=61 FlowTransmitter1 ns=1;i=122 ns=1;i=50 i=78 ns=1;i=120 Output ns=1;i=126 i=2368 i=78 ns=1;i=121 EURange i=68 i=78 ns=1;i=122 Valve ns=1;i=129 ns=1;i=28 i=78 ns=1;i=120 Input ns=1;i=133 i=2368 i=78 ns=1;i=128 EURange i=68 i=78 ns=1;i=129 BoilerDrumType ns=1;i=136 ns=1;i=136 i=61 LIX001 ns=1;i=137 ns=1;i=43 i=78 ns=1;i=135 Output ns=1;i=141 i=2368 i=78 ns=1;i=136 EURange i=68 i=78 ns=1;i=137 BoilerOutputPipeType ns=1;i=144 ns=1;i=144 i=61 FTX002 ns=1;i=145 ns=1;i=50 i=78 ns=1;i=143 Output ns=1;i=149 i=2368 i=78 ns=1;i=144 EURange i=68 i=78 ns=1;i=145 BoilerType A boiler used to produce steam for a turbine. ns=1;i=152 ns=1;i=167 ns=1;i=175 ns=1;i=183 ns=1;i=187 ns=1;i=191 ns=1;i=197 ns=1;i=152 ns=1;i=167 ns=1;i=175 ns=1;i=197 i=58 InputPipe ns=1;i=153 ns=1;i=160 ns=1;i=153 ns=1;i=167 ns=1;i=120 i=78 ns=1;i=151 FlowTransmitter1 ns=1;i=154 ns=1;i=152 ns=1;i=50 i=78 ns=1;i=152 Output ns=1;i=158 ns=1;i=184 ns=1;i=193 i=2368 i=78 ns=1;i=153 EURange i=68 i=78 ns=1;i=154 Valve ns=1;i=161 ns=1;i=28 i=78 ns=1;i=152 Input ns=1;i=165 ns=1;i=186 i=2368 i=78 ns=1;i=160 EURange i=68 i=78 ns=1;i=161 Drum ns=1;i=168 ns=1;i=152 ns=1;i=168 ns=1;i=175 ns=1;i=135 i=78 ns=1;i=151 LIX001 ns=1;i=169 ns=1;i=167 ns=1;i=43 i=78 ns=1;i=167 Output ns=1;i=173 ns=1;i=188 i=2368 i=78 ns=1;i=168 EURange i=68 i=78 ns=1;i=169 OutputPipe ns=1;i=176 ns=1;i=167 ns=1;i=176 ns=1;i=143 i=78 ns=1;i=151 FTX002 ns=1;i=177 ns=1;i=175 ns=1;i=50 i=78 ns=1;i=175 Output ns=1;i=181 ns=1;i=194 i=2368 i=78 ns=1;i=176 EURange i=68 i=78 ns=1;i=177 FlowController ns=1;i=184 ns=1;i=185 ns=1;i=186 ns=1;i=39 i=78 ns=1;i=151 Measurement ns=1;i=154 i=68 i=78 ns=1;i=183 SetPoint ns=1;i=195 i=68 i=78 ns=1;i=183 ControlOut ns=1;i=161 i=68 i=78 ns=1;i=183 LevelController ns=1;i=188 ns=1;i=189 ns=1;i=190 ns=1;i=35 i=78 ns=1;i=151 Measurement ns=1;i=169 i=68 i=78 ns=1;i=187 SetPoint i=68 i=78 ns=1;i=187 ControlOut ns=1;i=192 i=68 i=78 ns=1;i=187 CustomController ns=1;i=192 ns=1;i=193 ns=1;i=194 ns=1;i=195 ns=1;i=196 ns=1;i=22 i=78 ns=1;i=151 Input1 ns=1;i=190 i=68 i=78 ns=1;i=191 Input2 ns=1;i=154 i=68 i=78 ns=1;i=191 Input3 ns=1;i=177 i=68 i=78 ns=1;i=191 ControlOut ns=1;i=185 i=68 i=78 ns=1;i=191 Description i=68 i=78 ns=1;i=191 Simulation ns=1;i=198 ns=1;i=203 ns=1;i=209 ns=1;i=211 ns=1;i=224 ns=1;i=225 ns=1;i=226 ns=1;i=227 ns=1;i=228 ns=1;i=229 ns=1;i=57 i=78 ns=1;i=151 CurrentState ns=1;i=199 ns=1;i=201 i=2760 i=78 ns=1;i=197 Id i=68 i=78 ns=1;i=198 Number i=68 i=78 ns=1;i=198 LastTransition ns=1;i=204 ns=1;i=206 ns=1;i=207 i=2767 i=78 ns=1;i=197 Id i=68 i=78 ns=1;i=203 Number i=68 i=78 ns=1;i=203 TransitionTime i=68 i=78 ns=1;i=203 Deletable i=68 i=78 ns=1;i=197 RecycleCount i=68 i=78 ns=1;i=197 Start Causes the Program to transition from the Ready state to the Running state. i=78 ns=1;i=197 Suspend Causes the Program to transition from the Running state to the Suspended state. i=78 ns=1;i=197 Resume Causes the Program to transition from the Suspended state to the Running state. i=78 ns=1;i=197 Halt Causes the Program to transition from the Ready, Running or Suspended state to the Halted state. i=78 ns=1;i=197 Reset Causes the Program to transition from the Halted state to the Ready state. i=78 ns=1;i=197 UpdateRate The rate at which the simulation runs. i=68 i=78 ns=1;i=197 ================================================ FILE: Networking/Simulator.Boiler/UAInformationModel/DemoConfiguration/BoilerType/tempuri.org.UA.Examples.BoilerType.PredefinedNodes.xml ================================================  http://tempuri.org/UA/Examples/BoilerType ReferenceType_32 ns=1;i=1 1 FlowTo A reference that indicates a flow between two objects. i=32 FlowFrom ReferenceType_32 ns=1;i=2 1 HotFlowTo A reference that indicates a high temperature flow between two objects. ns=1;i=1 HotFlowFrom ReferenceType_32 ns=1;i=3 1 SignalTo A reference that indicates an electrical signal between two variables. i=32 SignalFrom ObjectType_8 ns=1;i=4 1 GenericControllerType A generic PID controller i=58 Variable_2 ns=1;i=5 1 Measurement i=46 i=68 i=78 5 i=11 -1 1 1 Variable_2 ns=1;i=6 1 SetPoint i=46 i=68 i=78 6 i=11 -1 3 3 Variable_2 ns=1;i=7 1 ControlOut i=46 i=68 i=78 7 i=11 -1 1 1 ObjectType_8 ns=1;i=8 1 GenericSensorType A generic sensor that read a process value. i=58 Variable_2 ns=1;i=9 1 Output i=47 i=2368 i=78 9 i=11 -1 1 1 Variable_2 ns=1;i=13 0 EURange i=46 i=68 i=78 13 i=884 -1 1 1 ObjectType_8 ns=1;i=15 1 GenericActuatorType Represents a piece of equipment that causes some action to occur. i=58 Variable_2 ns=1;i=16 1 Input i=47 i=2368 i=78 16 i=11 -1 2 2 Variable_2 ns=1;i=20 0 EURange i=46 i=68 i=78 20 i=884 -1 1 1 ObjectType_8 ns=1;i=22 1 CustomControllerType A custom PID controller with 3 inputs i=58 Variable_2 ns=1;i=23 1 Input1 i=46 i=68 i=78 23 i=11 -1 2 2 Variable_2 ns=1;i=24 1 Input2 i=46 i=68 i=78 24 i=11 -1 2 2 Variable_2 ns=1;i=25 1 Input3 i=46 i=68 i=78 25 i=11 -1 2 2 Variable_2 ns=1;i=26 1 ControlOut i=46 i=68 i=78 26 i=11 -1 1 1 Variable_2 ns=1;i=27 1 Description i=46 i=68 i=78 27 i=21 -1 1 1 ObjectType_8 ns=1;i=28 1 ValveType An actuator that controls the flow through a pipe. ns=1;i=15 ObjectType_8 ns=1;i=35 1 LevelControllerType A controller for the level of a fluid in a drum. ns=1;i=4 ObjectType_8 ns=1;i=39 1 FlowControllerType A controller for the flow of a fluid through a pipe. ns=1;i=4 ObjectType_8 ns=1;i=43 1 LevelIndicatorType A sensor that reports the level of a liquid in a tank. ns=1;i=8 ObjectType_8 ns=1;i=50 1 FlowTransmitterType A sensor that reports the flow of a liquid through a pipe. ns=1;i=8 ObjectType_8 ns=1;i=57 1 BoilerStateMachineType A program that produces simulated values for a running boiler. i=2391 Variable_2 ns=1;i=119 1 UpdateRate The rate at which the simulation runs. i=46 i=68 i=78 119 i=7 -1 3 3 ObjectType_8 ns=1;i=120 1 BoilerInputPipeType i=61 i=48 ns=1;i=121 Object_1 ns=1;i=121 1 FTX001 FlowTransmitter1 i=47 ns=1;i=50 i=78 121 1 Variable_2 ns=1;i=122 1 Output i=47 i=2368 i=78 122 i=11 -1 1 1 Variable_2 ns=1;i=126 0 EURange i=46 i=68 i=78 126 i=884 -1 1 1 Object_1 ns=1;i=128 1 ValveX001 Valve i=47 ns=1;i=28 i=78 128 1 Variable_2 ns=1;i=129 1 Input i=47 i=2368 i=78 129 i=11 -1 2 2 Variable_2 ns=1;i=133 0 EURange i=46 i=68 i=78 133 i=884 -1 1 1 ObjectType_8 ns=1;i=135 1 BoilerDrumType i=61 i=48 ns=1;i=136 Object_1 ns=1;i=136 1 LIX001 i=47 ns=1;i=43 i=78 136 1 Variable_2 ns=1;i=137 1 Output i=47 i=2368 i=78 137 i=11 -1 1 1 Variable_2 ns=1;i=141 0 EURange i=46 i=68 i=78 141 i=884 -1 1 1 ObjectType_8 ns=1;i=143 1 BoilerOutputPipeType i=61 i=48 ns=1;i=144 Object_1 ns=1;i=144 1 FTX002 i=47 ns=1;i=50 i=78 144 1 Variable_2 ns=1;i=145 1 Output i=47 i=2368 i=78 145 i=11 -1 1 1 Variable_2 ns=1;i=149 0 EURange i=46 i=68 i=78 149 i=884 -1 1 1 ObjectType_8 ns=1;i=151 1 BoilerType A boiler used to produce steam for a turbine. i=58 i=48 ns=1;i=152 i=48 ns=1;i=167 i=48 ns=1;i=175 i=36 ns=1;i=197 Object_1 ns=1;i=152 1 PipeX001 InputPipe i=47 ns=1;i=120 i=78 152 1 i=48 ns=1;i=153 ns=1;i=1 ns=1;i=167 Object_1 ns=1;i=153 1 FTX001 FlowTransmitter1 i=47 ns=1;i=50 i=78 153 1 i=48 true ns=1;i=152 Variable_2 ns=1;i=154 1 Output i=47 i=2368 i=78 154 i=11 -1 1 1 ns=1;i=3 ns=1;i=184 ns=1;i=3 ns=1;i=193 Variable_2 ns=1;i=158 0 EURange i=46 i=68 i=78 158 i=884 -1 1 1 Object_1 ns=1;i=160 1 ValveX001 Valve i=47 ns=1;i=28 i=78 160 1 Variable_2 ns=1;i=161 1 Input i=47 i=2368 i=78 161 i=11 -1 2 2 ns=1;i=3 true ns=1;i=186 Variable_2 ns=1;i=165 0 EURange i=46 i=68 i=78 165 i=884 -1 1 1 Object_1 ns=1;i=167 1 DrumX001 Drum i=47 ns=1;i=135 i=78 167 1 ns=1;i=1 true ns=1;i=152 i=48 ns=1;i=168 ns=1;i=2 ns=1;i=175 Object_1 ns=1;i=168 1 LIX001 i=47 ns=1;i=43 i=78 168 1 i=48 true ns=1;i=167 Variable_2 ns=1;i=169 1 Output i=47 i=2368 i=78 169 i=26 -1 1 1 ns=1;i=3 ns=1;i=188 Variable_2 ns=1;i=173 0 EURange i=46 i=68 i=78 173 i=884 -1 1 1 Object_1 ns=1;i=175 1 PipeX002 OutputPipe i=47 ns=1;i=143 i=78 175 1 ns=1;i=2 true ns=1;i=167 i=48 ns=1;i=176 Object_1 ns=1;i=176 1 FTX002 i=47 ns=1;i=50 i=78 176 1 i=48 true ns=1;i=175 Variable_2 ns=1;i=177 1 Output i=47 i=2368 i=78 177 i=11 -1 1 1 ns=1;i=3 ns=1;i=194 Variable_2 ns=1;i=181 0 EURange i=46 i=68 i=78 181 i=884 -1 1 1 Object_1 ns=1;i=183 1 FCX001 FlowController i=47 ns=1;i=39 i=78 183 Variable_2 ns=1;i=184 1 Measurement i=46 i=68 i=78 184 i=11 -1 1 1 ns=1;i=3 true ns=1;i=154 Variable_2 ns=1;i=185 1 SetPoint i=46 i=68 i=78 185 i=11 -1 3 3 ns=1;i=3 true ns=1;i=195 Variable_2 ns=1;i=186 1 ControlOut i=46 i=68 i=78 186 i=11 -1 1 1 ns=1;i=3 ns=1;i=161 Object_1 ns=1;i=187 1 LCX001 LevelController i=47 ns=1;i=35 i=78 187 Variable_2 ns=1;i=188 1 Measurement i=46 i=68 i=78 188 i=11 -1 1 1 ns=1;i=3 true ns=1;i=169 Variable_2 ns=1;i=189 1 SetPoint i=46 i=68 i=78 189 i=11 -1 3 3 Variable_2 ns=1;i=190 1 ControlOut i=46 i=68 i=78 190 i=11 -1 1 1 ns=1;i=3 ns=1;i=192 Object_1 ns=1;i=191 1 CCX001 CustomController i=47 ns=1;i=22 i=78 191 Variable_2 ns=1;i=192 1 Input1 i=46 i=68 i=78 192 i=11 -1 2 2 ns=1;i=3 true ns=1;i=190 Variable_2 ns=1;i=193 1 Input2 i=46 i=68 i=78 193 i=11 -1 2 2 ns=1;i=3 true ns=1;i=154 Variable_2 ns=1;i=194 1 Input3 i=46 i=68 i=78 194 i=11 -1 2 2 ns=1;i=3 true ns=1;i=177 Variable_2 ns=1;i=195 1 ControlOut i=46 i=68 i=78 195 i=11 -1 1 1 ns=1;i=3 ns=1;i=185 Variable_2 ns=1;i=196 1 Description i=46 i=68 i=78 196 i=21 -1 1 1 Object_1 ns=1;i=197 1 Simulation i=47 ns=1;i=57 i=78 197 1 Variable_2 ns=1;i=198 0 CurrentState i=47 i=2760 i=78 198 i=21 -1 1 1 Variable_2 ns=1;i=199 0 Id i=46 i=68 i=78 199 i=17 -1 1 1 Variable_2 ns=1;i=201 0 Number i=46 i=68 i=78 201 i=7 -1 1 1 Variable_2 ns=1;i=203 0 LastTransition i=47 i=2767 i=78 203 i=21 -1 1 1 Variable_2 ns=1;i=204 0 Id i=46 i=68 i=78 204 i=17 -1 1 1 Variable_2 ns=1;i=206 0 Number i=46 i=68 i=78 206 i=7 -1 1 1 Variable_2 ns=1;i=207 0 TransitionTime i=46 i=68 i=78 207 i=294 -1 1 1 Variable_2 ns=1;i=209 0 Deletable i=46 i=68 i=78 209 i=1 -1 1 1 Variable_2 ns=1;i=211 0 RecycleCount i=46 i=68 i=78 211 i=6 -1 1 1 Method_4 ns=1;i=224 0 Start Causes the Program to transition from the Ready state to the Running state. i=47 i=2426 i=78 224 true true Method_4 ns=1;i=225 0 Suspend Causes the Program to transition from the Running state to the Suspended state. i=47 i=2427 i=78 225 true true Method_4 ns=1;i=226 0 Resume Causes the Program to transition from the Suspended state to the Running state. i=47 i=2428 i=78 226 true true Method_4 ns=1;i=227 0 Halt Causes the Program to transition from the Ready, Running or Suspended state to the Halted state. i=47 i=2429 i=78 227 true true Method_4 ns=1;i=228 0 Reset Causes the Program to transition from the Halted state to the Ready state. i=47 i=2430 i=78 228 true true Variable_2 ns=1;i=229 1 UpdateRate The rate at which the simulation runs. i=46 i=68 i=78 229 i=7 -1 3 3 ================================================ FILE: Networking/Simulator.Boiler/UAInformationModel/DemoConfiguration/BoilerType/tempuri.org.UA.Examples.BoilerType.Types.bsd ================================================ ================================================ FILE: Networking/Simulator.Boiler/UAInformationModel/DemoConfiguration/BoilerType/tempuri.org.UA.Examples.BoilerType.Types.xsd ================================================ ================================================ FILE: Networking/Simulator.Boiler/UAInformationModel/DemoConfiguration/BoilerType.csv ================================================ FlowTo,1,ReferenceType HotFlowTo,2,ReferenceType SignalTo,3,ReferenceType GenericControllerType,4,ObjectType GenericControllerType_Measurement,5,Variable GenericControllerType_SetPoint,6,Variable GenericControllerType_ControlOut,7,Variable GenericSensorType,8,ObjectType GenericSensorType_Output,9,Variable GenericSensorType_Output_Definition,10,Variable GenericSensorType_Output_ValuePrecision,11,Variable GenericSensorType_Output_InstrumentRange,12,Variable GenericSensorType_Output_EURange,13,Variable GenericSensorType_Output_EngineeringUnits,14,Variable GenericActuatorType,15,ObjectType GenericActuatorType_Input,16,Variable GenericActuatorType_Input_Definition,17,Variable GenericActuatorType_Input_ValuePrecision,18,Variable GenericActuatorType_Input_InstrumentRange,19,Variable GenericActuatorType_Input_EURange,20,Variable GenericActuatorType_Input_EngineeringUnits,21,Variable CustomControllerType,22,ObjectType CustomControllerType_Input1,23,Variable CustomControllerType_Input2,24,Variable CustomControllerType_Input3,25,Variable CustomControllerType_ControlOut,26,Variable CustomControllerType_DescriptionX,27,Variable ValveType,28,ObjectType ValveType_Input,29,Variable ValveType_Input_Definition,30,Variable ValveType_Input_ValuePrecision,31,Variable ValveType_Input_InstrumentRange,32,Variable ValveType_Input_EURange,33,Variable ValveType_Input_EngineeringUnits,34,Variable LevelControllerType,35,ObjectType LevelControllerType_Measurement,36,Variable LevelControllerType_SetPoint,37,Variable LevelControllerType_ControlOut,38,Variable FlowControllerType,39,ObjectType FlowControllerType_Measurement,40,Variable FlowControllerType_SetPoint,41,Variable FlowControllerType_ControlOut,42,Variable LevelIndicatorType,43,ObjectType LevelIndicatorType_Output,44,Variable LevelIndicatorType_Output_Definition,45,Variable LevelIndicatorType_Output_ValuePrecision,46,Variable LevelIndicatorType_Output_InstrumentRange,47,Variable LevelIndicatorType_Output_EURange,48,Variable LevelIndicatorType_Output_EngineeringUnits,49,Variable FlowTransmitterType,50,ObjectType FlowTransmitterType_Output,51,Variable FlowTransmitterType_Output_Definition,52,Variable FlowTransmitterType_Output_ValuePrecision,53,Variable FlowTransmitterType_Output_InstrumentRange,54,Variable FlowTransmitterType_Output_EURange,55,Variable FlowTransmitterType_Output_EngineeringUnits,56,Variable BoilerStateMachineType,57,ObjectType BoilerStateMachineType_CurrentState,58,Variable BoilerStateMachineType_CurrentState_Id,59,Variable BoilerStateMachineType_CurrentState_Name,60,Variable BoilerStateMachineType_CurrentState_Number,61,Variable BoilerStateMachineType_CurrentState_EffectiveDisplayName,62,Variable BoilerStateMachineType_LastTransition,63,Variable BoilerStateMachineType_LastTransition_Id,64,Variable BoilerStateMachineType_LastTransition_Name,65,Variable BoilerStateMachineType_LastTransition_Number,66,Variable BoilerStateMachineType_LastTransition_TransitionTime,67,Variable BoilerStateMachineType_LastTransition_EffectiveTransitionTime,68,Variable BoilerStateMachineType_Creatable,69,Variable BoilerStateMachineType_Deletable,70,Variable BoilerStateMachineType_AutoDelete,71,Variable BoilerStateMachineType_RecycleCount,72,Variable BoilerStateMachineType_InstanceCount,73,Variable BoilerStateMachineType_MaxInstanceCount,74,Variable BoilerStateMachineType_MaxRecycleCount,75,Variable BoilerStateMachineType_ProgramDiagnostics,76,Variable BoilerStateMachineType_ProgramDiagnostics_CreateSessionId,77,Variable BoilerStateMachineType_ProgramDiagnostics_CreateClientName,78,Variable BoilerStateMachineType_ProgramDiagnostics_InvocationCreationTime,79,Variable BoilerStateMachineType_ProgramDiagnostics_LastTransitionTime,80,Variable BoilerStateMachineType_ProgramDiagnostics_LastMethodCall,81,Variable BoilerStateMachineType_ProgramDiagnostics_LastMethodSessionId,82,Variable BoilerStateMachineType_ProgramDiagnostics_LastMethodInputArguments,83,Variable BoilerStateMachineType_ProgramDiagnostics_LastMethodOutputArguments,84,Variable BoilerStateMachineType_ProgramDiagnostics_LastMethodCallTime,85,Variable BoilerStateMachineType_ProgramDiagnostics_LastMethodReturnStatus,86,Variable BoilerStateMachineType_FinalResultData,87,Object BoilerStateMachineType_Ready,88,Object BoilerStateMachineType_Ready_StateNumber,89,Variable BoilerStateMachineType_Running,90,Object BoilerStateMachineType_Running_StateNumber,91,Variable BoilerStateMachineType_Suspended,92,Object BoilerStateMachineType_Suspended_StateNumber,93,Variable BoilerStateMachineType_Halted,94,Object BoilerStateMachineType_Halted_StateNumber,95,Variable BoilerStateMachineType_HaltedToReady,96,Object BoilerStateMachineType_HaltedToReady_TransitionNumber,97,Variable BoilerStateMachineType_ReadyToRunning,98,Object BoilerStateMachineType_ReadyToRunning_TransitionNumber,99,Variable BoilerStateMachineType_RunningToHalted,100,Object BoilerStateMachineType_RunningToHalted_TransitionNumber,101,Variable BoilerStateMachineType_RunningToReady,102,Object BoilerStateMachineType_RunningToReady_TransitionNumber,103,Variable BoilerStateMachineType_RunningToSuspended,104,Object BoilerStateMachineType_RunningToSuspended_TransitionNumber,105,Variable BoilerStateMachineType_SuspendedToRunning,106,Object BoilerStateMachineType_SuspendedToRunning_TransitionNumber,107,Variable BoilerStateMachineType_SuspendedToHalted,108,Object BoilerStateMachineType_SuspendedToHalted_TransitionNumber,109,Variable BoilerStateMachineType_SuspendedToReady,110,Object BoilerStateMachineType_SuspendedToReady_TransitionNumber,111,Variable BoilerStateMachineType_ReadyToHalted,112,Object BoilerStateMachineType_ReadyToHalted_TransitionNumber,113,Variable BoilerStateMachineType_Start,114,Method BoilerStateMachineType_Suspend,115,Method BoilerStateMachineType_Resume,116,Method BoilerStateMachineType_Halt,117,Method BoilerStateMachineType_Reset,118,Method BoilerStateMachineType_UpdateRate,119,Variable BoilerInputPipeType,120,ObjectType BoilerInputPipeType_FlowTransmitter1,121,Object BoilerInputPipeType_FlowTransmitter1_Output,122,Variable BoilerInputPipeType_FlowTransmitter1_Output_Definition,123,Variable BoilerInputPipeType_FlowTransmitter1_Output_ValuePrecision,124,Variable BoilerInputPipeType_FlowTransmitter1_Output_InstrumentRange,125,Variable BoilerInputPipeType_FlowTransmitter1_Output_EURange,126,Variable BoilerInputPipeType_FlowTransmitter1_Output_EngineeringUnits,127,Variable BoilerInputPipeType_Valve,128,Object BoilerInputPipeType_Valve_Input,129,Variable BoilerInputPipeType_Valve_Input_Definition,130,Variable BoilerInputPipeType_Valve_Input_ValuePrecision,131,Variable BoilerInputPipeType_Valve_Input_InstrumentRange,132,Variable BoilerInputPipeType_Valve_Input_EURange,133,Variable BoilerInputPipeType_Valve_Input_EngineeringUnits,134,Variable BoilerDrumType,135,ObjectType BoilerDrumType_LevelIndicator,136,Object BoilerDrumType_LevelIndicator_Output,137,Variable BoilerDrumType_LevelIndicator_Output_Definition,138,Variable BoilerDrumType_LevelIndicator_Output_ValuePrecision,139,Variable BoilerDrumType_LevelIndicator_Output_InstrumentRange,140,Variable BoilerDrumType_LevelIndicator_Output_EURange,141,Variable BoilerDrumType_LevelIndicator_Output_EngineeringUnits,142,Variable BoilerOutputPipeType,143,ObjectType BoilerOutputPipeType_FlowTransmitter2,144,Object BoilerOutputPipeType_FlowTransmitter2_Output,145,Variable BoilerOutputPipeType_FlowTransmitter2_Output_Definition,146,Variable BoilerOutputPipeType_FlowTransmitter2_Output_ValuePrecision,147,Variable BoilerOutputPipeType_FlowTransmitter2_Output_InstrumentRange,148,Variable BoilerOutputPipeType_FlowTransmitter2_Output_EURange,149,Variable BoilerOutputPipeType_FlowTransmitter2_Output_EngineeringUnits,150,Variable BoilerType,151,ObjectType BoilerType_InputPipe,152,Object BoilerType_InputPipe_FlowTransmitter1,153,Object BoilerType_InputPipe_FlowTransmitter1_Output,154,Variable BoilerType_InputPipe_FlowTransmitter1_Output_Definition,155,Variable BoilerType_InputPipe_FlowTransmitter1_Output_ValuePrecision,156,Variable BoilerType_InputPipe_FlowTransmitter1_Output_InstrumentRange,157,Variable BoilerType_InputPipe_FlowTransmitter1_Output_EURange,158,Variable BoilerType_InputPipe_FlowTransmitter1_Output_EngineeringUnits,159,Variable BoilerType_InputPipe_Valve,160,Object BoilerType_InputPipe_Valve_Input,161,Variable BoilerType_InputPipe_Valve_Input_Definition,162,Variable BoilerType_InputPipe_Valve_Input_ValuePrecision,163,Variable BoilerType_InputPipe_Valve_Input_InstrumentRange,164,Variable BoilerType_InputPipe_Valve_Input_EURange,165,Variable BoilerType_InputPipe_Valve_Input_EngineeringUnits,166,Variable BoilerType_Drum,167,Object BoilerType_Drum_LevelIndicator,168,Object BoilerType_Drum_LevelIndicator_Output,169,Variable BoilerType_Drum_LevelIndicator_Output_Definition,170,Variable BoilerType_Drum_LevelIndicator_Output_ValuePrecision,171,Variable BoilerType_Drum_LevelIndicator_Output_InstrumentRange,172,Variable BoilerType_Drum_LevelIndicator_Output_EURange,173,Variable BoilerType_Drum_LevelIndicator_Output_EngineeringUnits,174,Variable BoilerType_OutputPipe,175,Object BoilerType_OutputPipe_FlowTransmitter2,176,Object BoilerType_OutputPipe_FlowTransmitter2_Output,177,Variable BoilerType_OutputPipe_FlowTransmitter2_Output_Definition,178,Variable BoilerType_OutputPipe_FlowTransmitter2_Output_ValuePrecision,179,Variable BoilerType_OutputPipe_FlowTransmitter2_Output_InstrumentRange,180,Variable BoilerType_OutputPipe_FlowTransmitter2_Output_EURange,181,Variable BoilerType_OutputPipe_FlowTransmitter2_Output_EngineeringUnits,182,Variable BoilerType_FlowController,183,Object BoilerType_FlowController_Measurement,184,Variable BoilerType_FlowController_SetPoint,185,Variable BoilerType_FlowController_ControlOut,186,Variable BoilerType_LevelController,187,Object BoilerType_LevelController_Measurement,188,Variable BoilerType_LevelController_SetPoint,189,Variable BoilerType_LevelController_ControlOut,190,Variable BoilerType_CustomController,191,Object BoilerType_CustomController_Input1,192,Variable BoilerType_CustomController_Input2,193,Variable BoilerType_CustomController_Input3,194,Variable BoilerType_CustomController_ControlOut,195,Variable BoilerType_CustomController_DescriptionX,196,Variable BoilerType_Simulation,197,Object BoilerType_Simulation_CurrentState,198,Variable BoilerType_Simulation_CurrentState_Id,199,Variable BoilerType_Simulation_CurrentState_Name,200,Variable BoilerType_Simulation_CurrentState_Number,201,Variable BoilerType_Simulation_CurrentState_EffectiveDisplayName,202,Variable BoilerType_Simulation_LastTransition,203,Variable BoilerType_Simulation_LastTransition_Id,204,Variable BoilerType_Simulation_LastTransition_Name,205,Variable BoilerType_Simulation_LastTransition_Number,206,Variable BoilerType_Simulation_LastTransition_TransitionTime,207,Variable BoilerType_Simulation_LastTransition_EffectiveTransitionTime,208,Variable BoilerType_Simulation_Deletable,209,Variable BoilerType_Simulation_AutoDelete,210,Variable BoilerType_Simulation_RecycleCount,211,Variable BoilerType_Simulation_ProgramDiagnostics,212,Variable BoilerType_Simulation_ProgramDiagnostics_CreateSessionId,213,Variable BoilerType_Simulation_ProgramDiagnostics_CreateClientName,214,Variable BoilerType_Simulation_ProgramDiagnostics_InvocationCreationTime,215,Variable BoilerType_Simulation_ProgramDiagnostics_LastTransitionTime,216,Variable BoilerType_Simulation_ProgramDiagnostics_LastMethodCall,217,Variable BoilerType_Simulation_ProgramDiagnostics_LastMethodSessionId,218,Variable BoilerType_Simulation_ProgramDiagnostics_LastMethodInputArguments,219,Variable BoilerType_Simulation_ProgramDiagnostics_LastMethodOutputArguments,220,Variable BoilerType_Simulation_ProgramDiagnostics_LastMethodCallTime,221,Variable BoilerType_Simulation_ProgramDiagnostics_LastMethodReturnStatus,222,Variable BoilerType_Simulation_FinalResultData,223,Object BoilerType_Simulation_Start,224,Method BoilerType_Simulation_Suspend,225,Method BoilerType_Simulation_Resume,226,Method BoilerType_Simulation_Halt,227,Method BoilerType_Simulation_Reset,228,Method BoilerType_Simulation_UpdateRate,229,Variable ================================================ FILE: Networking/Simulator.Boiler/UAInformationModel/DemoConfiguration/BoilerType.xml ================================================ http://opcfoundation.org/UA/ http://tempuri.org/UA/Examples/BoilerType A reference that indicates a flow between two objects. FlowFrom A reference that indicates a high temperature flow between two objects. HotFlowFrom A reference that indicates an electrical signal between two variables. SignalFrom A generic PID controller A generic sensor that read a process value. Represents a piece of equipment that causes some action to occur. A custom PID controller with 3 inputs Description An actuator that controls the flow through a pipe. A controller for the level of a fluid in a drum. A controller for the flow of a fluid through a pipe. A sensor that reports the level of a liquid in a tank. A sensor that reports the flow of a liquid through a pipe. A program that produces simulated values for a running boiler. The rate at which the simulation runs. FTX001 FlowTransmitter1 ValveX001 Valve OpcUa:HasNotifier bt:BoilerInputPipeType_FlowTransmitter1 LIX001 OpcUa:HasNotifier bt:BoilerDrumType_LevelIndicator FTX002 OpcUa:HasNotifier bt:BoilerOutputPipeType_FlowTransmitter2 A boiler used to produce steam for a turbine. PipeX001 InputPipe FTX001 ValveX001 bt:FlowTo bt:BoilerType_Drum DrumX001 Drum LIX001 bt:HotFlowTo bt:BoilerType_OutputPipe PipeX002 OutputPipe FTX002 FCX001 FlowController bt:SignalTo bt:BoilerType_InputPipe_FlowTransmitter1_Output bt:SignalTo bt:BoilerType_InputPipe_Valve_Input LCX001 LevelController bt:SignalTo bt:BoilerType_Drum_LevelIndicator_Output bt:SignalTo bt:BoilerType_CustomController_Input1 CCX001 CustomController bt:SignalTo bt:BoilerType_InputPipe_FlowTransmitter1_Output bt:SignalTo bt:BoilerType_OutputPipe_FlowTransmitter2_Output bt:SignalTo bt:BoilerType_FlowController_SetPoint OpcUa:HasNotifier bt:BoilerType_InputPipe OpcUa:HasNotifier bt:BoilerType_Drum OpcUa:HasNotifier bt:BoilerType_OutputPipe OpcUa:HasEventSource bt:BoilerType_Simulation ================================================ FILE: Networking/Simulator.Boiler/UAInformationModel/DemoConfiguration/BoilersSet/Commsvr.UA.Examples.BoilersSet.Classes.cs ================================================ /* ======================================================================== * Copyright (c) 2005-2011 The OPC Foundation, Inc. All rights reserved. * * OPC Foundation MIT License 1.00 * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, * copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following * conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. * * The complete license agreement can be found here: * http://opcfoundation.org/License/MIT/1.00/ * ======================================================================*/ using System; using System.Collections.Generic; using System.Text; using System.Reflection; using System.Xml; using System.Runtime.Serialization; using Opc.Ua; using tempuri.org.UA.Examples.BoilerType; namespace Commsvr.UA.Examples.BoilersSet { #region Method Identifiers /// /// A class that declares constants for all Methods in the Model Design. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class Methods { /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_Start Method. /// public const uint BoilersArea_BoilerAlpha_Simulation_Start = 154; /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_Suspend Method. /// public const uint BoilersArea_BoilerAlpha_Simulation_Suspend = 155; /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_Resume Method. /// public const uint BoilersArea_BoilerAlpha_Simulation_Resume = 156; /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_Halt Method. /// public const uint BoilersArea_BoilerAlpha_Simulation_Halt = 157; /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_Reset Method. /// public const uint BoilersArea_BoilerAlpha_Simulation_Reset = 158; /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_Start Method. /// public const uint BoilersArea_BoilerBravo_Simulation_Start = 233; /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_Suspend Method. /// public const uint BoilersArea_BoilerBravo_Simulation_Suspend = 234; /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_Resume Method. /// public const uint BoilersArea_BoilerBravo_Simulation_Resume = 235; /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_Halt Method. /// public const uint BoilersArea_BoilerBravo_Simulation_Halt = 236; /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_Reset Method. /// public const uint BoilersArea_BoilerBravo_Simulation_Reset = 237; /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_Start Method. /// public const uint BoilersArea_BoilerCharlie_Simulation_Start = 312; /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_Suspend Method. /// public const uint BoilersArea_BoilerCharlie_Simulation_Suspend = 313; /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_Resume Method. /// public const uint BoilersArea_BoilerCharlie_Simulation_Resume = 314; /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_Halt Method. /// public const uint BoilersArea_BoilerCharlie_Simulation_Halt = 315; /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_Reset Method. /// public const uint BoilersArea_BoilerCharlie_Simulation_Reset = 316; /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_Start Method. /// public const uint BoilersArea_BoilerDelta_Simulation_Start = 391; /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_Suspend Method. /// public const uint BoilersArea_BoilerDelta_Simulation_Suspend = 392; /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_Resume Method. /// public const uint BoilersArea_BoilerDelta_Simulation_Resume = 393; /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_Halt Method. /// public const uint BoilersArea_BoilerDelta_Simulation_Halt = 394; /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_Reset Method. /// public const uint BoilersArea_BoilerDelta_Simulation_Reset = 395; } #endregion #region Object Identifiers /// /// A class that declares constants for all Objects in the Model Design. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class Objects { /// /// The identifier for the BoilersArea Object. /// public const uint BoilersArea = 1; /// /// The identifier for the BoilersArea_BoilerAlpha Object. /// public const uint BoilersArea_BoilerAlpha = 81; /// /// The identifier for the BoilersArea_BoilerAlpha_InputPipe Object. /// public const uint BoilersArea_BoilerAlpha_InputPipe = 82; /// /// The identifier for the BoilersArea_BoilerAlpha_InputPipe_FlowTransmitter1 Object. /// public const uint BoilersArea_BoilerAlpha_InputPipe_FlowTransmitter1 = 83; /// /// The identifier for the BoilersArea_BoilerAlpha_InputPipe_Valve Object. /// public const uint BoilersArea_BoilerAlpha_InputPipe_Valve = 90; /// /// The identifier for the BoilersArea_BoilerAlpha_Drum Object. /// public const uint BoilersArea_BoilerAlpha_Drum = 97; /// /// The identifier for the BoilersArea_BoilerAlpha_Drum_LevelIndicator Object. /// public const uint BoilersArea_BoilerAlpha_Drum_LevelIndicator = 98; /// /// The identifier for the BoilersArea_BoilerAlpha_OutputPipe Object. /// public const uint BoilersArea_BoilerAlpha_OutputPipe = 105; /// /// The identifier for the BoilersArea_BoilerAlpha_OutputPipe_FlowTransmitter2 Object. /// public const uint BoilersArea_BoilerAlpha_OutputPipe_FlowTransmitter2 = 106; /// /// The identifier for the BoilersArea_BoilerAlpha_FlowController Object. /// public const uint BoilersArea_BoilerAlpha_FlowController = 113; /// /// The identifier for the BoilersArea_BoilerAlpha_LevelController Object. /// public const uint BoilersArea_BoilerAlpha_LevelController = 117; /// /// The identifier for the BoilersArea_BoilerAlpha_CustomController Object. /// public const uint BoilersArea_BoilerAlpha_CustomController = 121; /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation Object. /// public const uint BoilersArea_BoilerAlpha_Simulation = 127; /// /// The identifier for the BoilersArea_BoilerBravo Object. /// public const uint BoilersArea_BoilerBravo = 160; /// /// The identifier for the BoilersArea_BoilerBravo_InputPipe Object. /// public const uint BoilersArea_BoilerBravo_InputPipe = 161; /// /// The identifier for the BoilersArea_BoilerBravo_InputPipe_FlowTransmitter1 Object. /// public const uint BoilersArea_BoilerBravo_InputPipe_FlowTransmitter1 = 162; /// /// The identifier for the BoilersArea_BoilerBravo_InputPipe_Valve Object. /// public const uint BoilersArea_BoilerBravo_InputPipe_Valve = 169; /// /// The identifier for the BoilersArea_BoilerBravo_Drum Object. /// public const uint BoilersArea_BoilerBravo_Drum = 176; /// /// The identifier for the BoilersArea_BoilerBravo_Drum_LevelIndicator Object. /// public const uint BoilersArea_BoilerBravo_Drum_LevelIndicator = 177; /// /// The identifier for the BoilersArea_BoilerBravo_OutputPipe Object. /// public const uint BoilersArea_BoilerBravo_OutputPipe = 184; /// /// The identifier for the BoilersArea_BoilerBravo_OutputPipe_FlowTransmitter2 Object. /// public const uint BoilersArea_BoilerBravo_OutputPipe_FlowTransmitter2 = 185; /// /// The identifier for the BoilersArea_BoilerBravo_FlowController Object. /// public const uint BoilersArea_BoilerBravo_FlowController = 192; /// /// The identifier for the BoilersArea_BoilerBravo_LevelController Object. /// public const uint BoilersArea_BoilerBravo_LevelController = 196; /// /// The identifier for the BoilersArea_BoilerBravo_CustomController Object. /// public const uint BoilersArea_BoilerBravo_CustomController = 200; /// /// The identifier for the BoilersArea_BoilerBravo_Simulation Object. /// public const uint BoilersArea_BoilerBravo_Simulation = 206; /// /// The identifier for the BoilersArea_BoilerCharlie Object. /// public const uint BoilersArea_BoilerCharlie = 239; /// /// The identifier for the BoilersArea_BoilerCharlie_InputPipe Object. /// public const uint BoilersArea_BoilerCharlie_InputPipe = 240; /// /// The identifier for the BoilersArea_BoilerCharlie_InputPipe_FlowTransmitter1 Object. /// public const uint BoilersArea_BoilerCharlie_InputPipe_FlowTransmitter1 = 241; /// /// The identifier for the BoilersArea_BoilerCharlie_InputPipe_Valve Object. /// public const uint BoilersArea_BoilerCharlie_InputPipe_Valve = 248; /// /// The identifier for the BoilersArea_BoilerCharlie_Drum Object. /// public const uint BoilersArea_BoilerCharlie_Drum = 255; /// /// The identifier for the BoilersArea_BoilerCharlie_Drum_LevelIndicator Object. /// public const uint BoilersArea_BoilerCharlie_Drum_LevelIndicator = 256; /// /// The identifier for the BoilersArea_BoilerCharlie_OutputPipe Object. /// public const uint BoilersArea_BoilerCharlie_OutputPipe = 263; /// /// The identifier for the BoilersArea_BoilerCharlie_OutputPipe_FlowTransmitter2 Object. /// public const uint BoilersArea_BoilerCharlie_OutputPipe_FlowTransmitter2 = 264; /// /// The identifier for the BoilersArea_BoilerCharlie_FlowController Object. /// public const uint BoilersArea_BoilerCharlie_FlowController = 271; /// /// The identifier for the BoilersArea_BoilerCharlie_LevelController Object. /// public const uint BoilersArea_BoilerCharlie_LevelController = 275; /// /// The identifier for the BoilersArea_BoilerCharlie_CustomController Object. /// public const uint BoilersArea_BoilerCharlie_CustomController = 279; /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation Object. /// public const uint BoilersArea_BoilerCharlie_Simulation = 285; /// /// The identifier for the BoilersArea_BoilerDelta Object. /// public const uint BoilersArea_BoilerDelta = 318; /// /// The identifier for the BoilersArea_BoilerDelta_InputPipe Object. /// public const uint BoilersArea_BoilerDelta_InputPipe = 319; /// /// The identifier for the BoilersArea_BoilerDelta_InputPipe_FlowTransmitter1 Object. /// public const uint BoilersArea_BoilerDelta_InputPipe_FlowTransmitter1 = 320; /// /// The identifier for the BoilersArea_BoilerDelta_InputPipe_Valve Object. /// public const uint BoilersArea_BoilerDelta_InputPipe_Valve = 327; /// /// The identifier for the BoilersArea_BoilerDelta_Drum Object. /// public const uint BoilersArea_BoilerDelta_Drum = 334; /// /// The identifier for the BoilersArea_BoilerDelta_Drum_LevelIndicator Object. /// public const uint BoilersArea_BoilerDelta_Drum_LevelIndicator = 335; /// /// The identifier for the BoilersArea_BoilerDelta_OutputPipe Object. /// public const uint BoilersArea_BoilerDelta_OutputPipe = 342; /// /// The identifier for the BoilersArea_BoilerDelta_OutputPipe_FlowTransmitter2 Object. /// public const uint BoilersArea_BoilerDelta_OutputPipe_FlowTransmitter2 = 343; /// /// The identifier for the BoilersArea_BoilerDelta_FlowController Object. /// public const uint BoilersArea_BoilerDelta_FlowController = 350; /// /// The identifier for the BoilersArea_BoilerDelta_LevelController Object. /// public const uint BoilersArea_BoilerDelta_LevelController = 354; /// /// The identifier for the BoilersArea_BoilerDelta_CustomController Object. /// public const uint BoilersArea_BoilerDelta_CustomController = 358; /// /// The identifier for the BoilersArea_BoilerDelta_Simulation Object. /// public const uint BoilersArea_BoilerDelta_Simulation = 364; /// /// The identifier for the Drums Object. /// public const uint Drums = 398; /// /// The identifier for the Pipes Object. /// public const uint Pipes = 399; } #endregion #region Variable Identifiers /// /// A class that declares constants for all Variables in the Model Design. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class Variables { /// /// The identifier for the BoilersArea_BoilerAlpha_InputPipe_FlowTransmitter1_Output Variable. /// public const uint BoilersArea_BoilerAlpha_InputPipe_FlowTransmitter1_Output = 84; /// /// The identifier for the BoilersArea_BoilerAlpha_InputPipe_FlowTransmitter1_Output_EURange Variable. /// public const uint BoilersArea_BoilerAlpha_InputPipe_FlowTransmitter1_Output_EURange = 88; /// /// The identifier for the BoilersArea_BoilerAlpha_InputPipe_Valve_Input Variable. /// public const uint BoilersArea_BoilerAlpha_InputPipe_Valve_Input = 91; /// /// The identifier for the BoilersArea_BoilerAlpha_InputPipe_Valve_Input_EURange Variable. /// public const uint BoilersArea_BoilerAlpha_InputPipe_Valve_Input_EURange = 95; /// /// The identifier for the BoilersArea_BoilerAlpha_Drum_LevelIndicator_Output Variable. /// public const uint BoilersArea_BoilerAlpha_Drum_LevelIndicator_Output = 99; /// /// The identifier for the BoilersArea_BoilerAlpha_Drum_LevelIndicator_Output_EURange Variable. /// public const uint BoilersArea_BoilerAlpha_Drum_LevelIndicator_Output_EURange = 103; /// /// The identifier for the BoilersArea_BoilerAlpha_OutputPipe_FlowTransmitter2_Output Variable. /// public const uint BoilersArea_BoilerAlpha_OutputPipe_FlowTransmitter2_Output = 107; /// /// The identifier for the BoilersArea_BoilerAlpha_OutputPipe_FlowTransmitter2_Output_EURange Variable. /// public const uint BoilersArea_BoilerAlpha_OutputPipe_FlowTransmitter2_Output_EURange = 111; /// /// The identifier for the BoilersArea_BoilerAlpha_FlowController_Measurement Variable. /// public const uint BoilersArea_BoilerAlpha_FlowController_Measurement = 114; /// /// The identifier for the BoilersArea_BoilerAlpha_FlowController_SetPoint Variable. /// public const uint BoilersArea_BoilerAlpha_FlowController_SetPoint = 115; /// /// The identifier for the BoilersArea_BoilerAlpha_FlowController_ControlOut Variable. /// public const uint BoilersArea_BoilerAlpha_FlowController_ControlOut = 116; /// /// The identifier for the BoilersArea_BoilerAlpha_LevelController_Measurement Variable. /// public const uint BoilersArea_BoilerAlpha_LevelController_Measurement = 118; /// /// The identifier for the BoilersArea_BoilerAlpha_LevelController_SetPoint Variable. /// public const uint BoilersArea_BoilerAlpha_LevelController_SetPoint = 119; /// /// The identifier for the BoilersArea_BoilerAlpha_LevelController_ControlOut Variable. /// public const uint BoilersArea_BoilerAlpha_LevelController_ControlOut = 120; /// /// The identifier for the BoilersArea_BoilerAlpha_CustomController_Input1 Variable. /// public const uint BoilersArea_BoilerAlpha_CustomController_Input1 = 122; /// /// The identifier for the BoilersArea_BoilerAlpha_CustomController_Input2 Variable. /// public const uint BoilersArea_BoilerAlpha_CustomController_Input2 = 123; /// /// The identifier for the BoilersArea_BoilerAlpha_CustomController_Input3 Variable. /// public const uint BoilersArea_BoilerAlpha_CustomController_Input3 = 124; /// /// The identifier for the BoilersArea_BoilerAlpha_CustomController_ControlOut Variable. /// public const uint BoilersArea_BoilerAlpha_CustomController_ControlOut = 125; /// /// The identifier for the BoilersArea_BoilerAlpha_CustomController_DescriptionX Variable. /// public const uint BoilersArea_BoilerAlpha_CustomController_DescriptionX = 126; /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_CurrentState Variable. /// public const uint BoilersArea_BoilerAlpha_Simulation_CurrentState = 128; /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_CurrentState_Id Variable. /// public const uint BoilersArea_BoilerAlpha_Simulation_CurrentState_Id = 129; /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_CurrentState_Number Variable. /// public const uint BoilersArea_BoilerAlpha_Simulation_CurrentState_Number = 131; /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_LastTransition Variable. /// public const uint BoilersArea_BoilerAlpha_Simulation_LastTransition = 133; /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_LastTransition_Id Variable. /// public const uint BoilersArea_BoilerAlpha_Simulation_LastTransition_Id = 134; /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_LastTransition_Number Variable. /// public const uint BoilersArea_BoilerAlpha_Simulation_LastTransition_Number = 136; /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_LastTransition_TransitionTime Variable. /// public const uint BoilersArea_BoilerAlpha_Simulation_LastTransition_TransitionTime = 137; /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_Deletable Variable. /// public const uint BoilersArea_BoilerAlpha_Simulation_Deletable = 139; /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_RecycleCount Variable. /// public const uint BoilersArea_BoilerAlpha_Simulation_RecycleCount = 141; /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_CreateSessionId Variable. /// public const uint BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_CreateSessionId = 143; /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_CreateClientName Variable. /// public const uint BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_CreateClientName = 144; /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_InvocationCreationTime Variable. /// public const uint BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_InvocationCreationTime = 145; /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_LastTransitionTime Variable. /// public const uint BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_LastTransitionTime = 146; /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_LastMethodCall Variable. /// public const uint BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_LastMethodCall = 147; /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_LastMethodSessionId Variable. /// public const uint BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_LastMethodSessionId = 148; /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_LastMethodInputArguments Variable. /// public const uint BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_LastMethodInputArguments = 149; /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_LastMethodOutputArguments Variable. /// public const uint BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_LastMethodOutputArguments = 150; /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_LastMethodCallTime Variable. /// public const uint BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_LastMethodCallTime = 151; /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_LastMethodReturnStatus Variable. /// public const uint BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_LastMethodReturnStatus = 152; /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_UpdateRate Variable. /// public const uint BoilersArea_BoilerAlpha_Simulation_UpdateRate = 159; /// /// The identifier for the BoilersArea_BoilerBravo_InputPipe_FlowTransmitter1_Output Variable. /// public const uint BoilersArea_BoilerBravo_InputPipe_FlowTransmitter1_Output = 163; /// /// The identifier for the BoilersArea_BoilerBravo_InputPipe_FlowTransmitter1_Output_EURange Variable. /// public const uint BoilersArea_BoilerBravo_InputPipe_FlowTransmitter1_Output_EURange = 167; /// /// The identifier for the BoilersArea_BoilerBravo_InputPipe_Valve_Input Variable. /// public const uint BoilersArea_BoilerBravo_InputPipe_Valve_Input = 170; /// /// The identifier for the BoilersArea_BoilerBravo_InputPipe_Valve_Input_EURange Variable. /// public const uint BoilersArea_BoilerBravo_InputPipe_Valve_Input_EURange = 174; /// /// The identifier for the BoilersArea_BoilerBravo_Drum_LevelIndicator_Output Variable. /// public const uint BoilersArea_BoilerBravo_Drum_LevelIndicator_Output = 178; /// /// The identifier for the BoilersArea_BoilerBravo_Drum_LevelIndicator_Output_EURange Variable. /// public const uint BoilersArea_BoilerBravo_Drum_LevelIndicator_Output_EURange = 182; /// /// The identifier for the BoilersArea_BoilerBravo_OutputPipe_FlowTransmitter2_Output Variable. /// public const uint BoilersArea_BoilerBravo_OutputPipe_FlowTransmitter2_Output = 186; /// /// The identifier for the BoilersArea_BoilerBravo_OutputPipe_FlowTransmitter2_Output_EURange Variable. /// public const uint BoilersArea_BoilerBravo_OutputPipe_FlowTransmitter2_Output_EURange = 190; /// /// The identifier for the BoilersArea_BoilerBravo_FlowController_Measurement Variable. /// public const uint BoilersArea_BoilerBravo_FlowController_Measurement = 193; /// /// The identifier for the BoilersArea_BoilerBravo_FlowController_SetPoint Variable. /// public const uint BoilersArea_BoilerBravo_FlowController_SetPoint = 194; /// /// The identifier for the BoilersArea_BoilerBravo_FlowController_ControlOut Variable. /// public const uint BoilersArea_BoilerBravo_FlowController_ControlOut = 195; /// /// The identifier for the BoilersArea_BoilerBravo_LevelController_Measurement Variable. /// public const uint BoilersArea_BoilerBravo_LevelController_Measurement = 197; /// /// The identifier for the BoilersArea_BoilerBravo_LevelController_SetPoint Variable. /// public const uint BoilersArea_BoilerBravo_LevelController_SetPoint = 198; /// /// The identifier for the BoilersArea_BoilerBravo_LevelController_ControlOut Variable. /// public const uint BoilersArea_BoilerBravo_LevelController_ControlOut = 199; /// /// The identifier for the BoilersArea_BoilerBravo_CustomController_Input1 Variable. /// public const uint BoilersArea_BoilerBravo_CustomController_Input1 = 201; /// /// The identifier for the BoilersArea_BoilerBravo_CustomController_Input2 Variable. /// public const uint BoilersArea_BoilerBravo_CustomController_Input2 = 202; /// /// The identifier for the BoilersArea_BoilerBravo_CustomController_Input3 Variable. /// public const uint BoilersArea_BoilerBravo_CustomController_Input3 = 203; /// /// The identifier for the BoilersArea_BoilerBravo_CustomController_ControlOut Variable. /// public const uint BoilersArea_BoilerBravo_CustomController_ControlOut = 204; /// /// The identifier for the BoilersArea_BoilerBravo_CustomController_DescriptionX Variable. /// public const uint BoilersArea_BoilerBravo_CustomController_DescriptionX = 205; /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_CurrentState Variable. /// public const uint BoilersArea_BoilerBravo_Simulation_CurrentState = 207; /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_CurrentState_Id Variable. /// public const uint BoilersArea_BoilerBravo_Simulation_CurrentState_Id = 208; /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_CurrentState_Number Variable. /// public const uint BoilersArea_BoilerBravo_Simulation_CurrentState_Number = 210; /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_LastTransition Variable. /// public const uint BoilersArea_BoilerBravo_Simulation_LastTransition = 212; /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_LastTransition_Id Variable. /// public const uint BoilersArea_BoilerBravo_Simulation_LastTransition_Id = 213; /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_LastTransition_Number Variable. /// public const uint BoilersArea_BoilerBravo_Simulation_LastTransition_Number = 215; /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_LastTransition_TransitionTime Variable. /// public const uint BoilersArea_BoilerBravo_Simulation_LastTransition_TransitionTime = 216; /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_Deletable Variable. /// public const uint BoilersArea_BoilerBravo_Simulation_Deletable = 218; /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_RecycleCount Variable. /// public const uint BoilersArea_BoilerBravo_Simulation_RecycleCount = 220; /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_CreateSessionId Variable. /// public const uint BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_CreateSessionId = 222; /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_CreateClientName Variable. /// public const uint BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_CreateClientName = 223; /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_InvocationCreationTime Variable. /// public const uint BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_InvocationCreationTime = 224; /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_LastTransitionTime Variable. /// public const uint BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_LastTransitionTime = 225; /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_LastMethodCall Variable. /// public const uint BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_LastMethodCall = 226; /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_LastMethodSessionId Variable. /// public const uint BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_LastMethodSessionId = 227; /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_LastMethodInputArguments Variable. /// public const uint BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_LastMethodInputArguments = 228; /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_LastMethodOutputArguments Variable. /// public const uint BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_LastMethodOutputArguments = 229; /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_LastMethodCallTime Variable. /// public const uint BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_LastMethodCallTime = 230; /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_LastMethodReturnStatus Variable. /// public const uint BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_LastMethodReturnStatus = 231; /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_UpdateRate Variable. /// public const uint BoilersArea_BoilerBravo_Simulation_UpdateRate = 238; /// /// The identifier for the BoilersArea_BoilerCharlie_InputPipe_FlowTransmitter1_Output Variable. /// public const uint BoilersArea_BoilerCharlie_InputPipe_FlowTransmitter1_Output = 242; /// /// The identifier for the BoilersArea_BoilerCharlie_InputPipe_FlowTransmitter1_Output_EURange Variable. /// public const uint BoilersArea_BoilerCharlie_InputPipe_FlowTransmitter1_Output_EURange = 246; /// /// The identifier for the BoilersArea_BoilerCharlie_InputPipe_Valve_Input Variable. /// public const uint BoilersArea_BoilerCharlie_InputPipe_Valve_Input = 249; /// /// The identifier for the BoilersArea_BoilerCharlie_InputPipe_Valve_Input_EURange Variable. /// public const uint BoilersArea_BoilerCharlie_InputPipe_Valve_Input_EURange = 253; /// /// The identifier for the BoilersArea_BoilerCharlie_Drum_LevelIndicator_Output Variable. /// public const uint BoilersArea_BoilerCharlie_Drum_LevelIndicator_Output = 257; /// /// The identifier for the BoilersArea_BoilerCharlie_Drum_LevelIndicator_Output_EURange Variable. /// public const uint BoilersArea_BoilerCharlie_Drum_LevelIndicator_Output_EURange = 261; /// /// The identifier for the BoilersArea_BoilerCharlie_OutputPipe_FlowTransmitter2_Output Variable. /// public const uint BoilersArea_BoilerCharlie_OutputPipe_FlowTransmitter2_Output = 265; /// /// The identifier for the BoilersArea_BoilerCharlie_OutputPipe_FlowTransmitter2_Output_EURange Variable. /// public const uint BoilersArea_BoilerCharlie_OutputPipe_FlowTransmitter2_Output_EURange = 269; /// /// The identifier for the BoilersArea_BoilerCharlie_FlowController_Measurement Variable. /// public const uint BoilersArea_BoilerCharlie_FlowController_Measurement = 272; /// /// The identifier for the BoilersArea_BoilerCharlie_FlowController_SetPoint Variable. /// public const uint BoilersArea_BoilerCharlie_FlowController_SetPoint = 273; /// /// The identifier for the BoilersArea_BoilerCharlie_FlowController_ControlOut Variable. /// public const uint BoilersArea_BoilerCharlie_FlowController_ControlOut = 274; /// /// The identifier for the BoilersArea_BoilerCharlie_LevelController_Measurement Variable. /// public const uint BoilersArea_BoilerCharlie_LevelController_Measurement = 276; /// /// The identifier for the BoilersArea_BoilerCharlie_LevelController_SetPoint Variable. /// public const uint BoilersArea_BoilerCharlie_LevelController_SetPoint = 277; /// /// The identifier for the BoilersArea_BoilerCharlie_LevelController_ControlOut Variable. /// public const uint BoilersArea_BoilerCharlie_LevelController_ControlOut = 278; /// /// The identifier for the BoilersArea_BoilerCharlie_CustomController_Input1 Variable. /// public const uint BoilersArea_BoilerCharlie_CustomController_Input1 = 280; /// /// The identifier for the BoilersArea_BoilerCharlie_CustomController_Input2 Variable. /// public const uint BoilersArea_BoilerCharlie_CustomController_Input2 = 281; /// /// The identifier for the BoilersArea_BoilerCharlie_CustomController_Input3 Variable. /// public const uint BoilersArea_BoilerCharlie_CustomController_Input3 = 282; /// /// The identifier for the BoilersArea_BoilerCharlie_CustomController_ControlOut Variable. /// public const uint BoilersArea_BoilerCharlie_CustomController_ControlOut = 283; /// /// The identifier for the BoilersArea_BoilerCharlie_CustomController_DescriptionX Variable. /// public const uint BoilersArea_BoilerCharlie_CustomController_DescriptionX = 284; /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_CurrentState Variable. /// public const uint BoilersArea_BoilerCharlie_Simulation_CurrentState = 286; /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_CurrentState_Id Variable. /// public const uint BoilersArea_BoilerCharlie_Simulation_CurrentState_Id = 287; /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_CurrentState_Number Variable. /// public const uint BoilersArea_BoilerCharlie_Simulation_CurrentState_Number = 289; /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_LastTransition Variable. /// public const uint BoilersArea_BoilerCharlie_Simulation_LastTransition = 291; /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_LastTransition_Id Variable. /// public const uint BoilersArea_BoilerCharlie_Simulation_LastTransition_Id = 292; /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_LastTransition_Number Variable. /// public const uint BoilersArea_BoilerCharlie_Simulation_LastTransition_Number = 294; /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_LastTransition_TransitionTime Variable. /// public const uint BoilersArea_BoilerCharlie_Simulation_LastTransition_TransitionTime = 295; /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_Deletable Variable. /// public const uint BoilersArea_BoilerCharlie_Simulation_Deletable = 297; /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_RecycleCount Variable. /// public const uint BoilersArea_BoilerCharlie_Simulation_RecycleCount = 299; /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_CreateSessionId Variable. /// public const uint BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_CreateSessionId = 301; /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_CreateClientName Variable. /// public const uint BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_CreateClientName = 302; /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_InvocationCreationTime Variable. /// public const uint BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_InvocationCreationTime = 303; /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_LastTransitionTime Variable. /// public const uint BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_LastTransitionTime = 304; /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_LastMethodCall Variable. /// public const uint BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_LastMethodCall = 305; /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_LastMethodSessionId Variable. /// public const uint BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_LastMethodSessionId = 306; /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_LastMethodInputArguments Variable. /// public const uint BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_LastMethodInputArguments = 307; /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_LastMethodOutputArguments Variable. /// public const uint BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_LastMethodOutputArguments = 308; /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_LastMethodCallTime Variable. /// public const uint BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_LastMethodCallTime = 309; /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_LastMethodReturnStatus Variable. /// public const uint BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_LastMethodReturnStatus = 310; /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_UpdateRate Variable. /// public const uint BoilersArea_BoilerCharlie_Simulation_UpdateRate = 317; /// /// The identifier for the BoilersArea_BoilerDelta_InputPipe_FlowTransmitter1_Output Variable. /// public const uint BoilersArea_BoilerDelta_InputPipe_FlowTransmitter1_Output = 321; /// /// The identifier for the BoilersArea_BoilerDelta_InputPipe_FlowTransmitter1_Output_EURange Variable. /// public const uint BoilersArea_BoilerDelta_InputPipe_FlowTransmitter1_Output_EURange = 325; /// /// The identifier for the BoilersArea_BoilerDelta_InputPipe_Valve_Input Variable. /// public const uint BoilersArea_BoilerDelta_InputPipe_Valve_Input = 328; /// /// The identifier for the BoilersArea_BoilerDelta_InputPipe_Valve_Input_EURange Variable. /// public const uint BoilersArea_BoilerDelta_InputPipe_Valve_Input_EURange = 332; /// /// The identifier for the BoilersArea_BoilerDelta_Drum_LevelIndicator_Output Variable. /// public const uint BoilersArea_BoilerDelta_Drum_LevelIndicator_Output = 336; /// /// The identifier for the BoilersArea_BoilerDelta_Drum_LevelIndicator_Output_EURange Variable. /// public const uint BoilersArea_BoilerDelta_Drum_LevelIndicator_Output_EURange = 340; /// /// The identifier for the BoilersArea_BoilerDelta_OutputPipe_FlowTransmitter2_Output Variable. /// public const uint BoilersArea_BoilerDelta_OutputPipe_FlowTransmitter2_Output = 344; /// /// The identifier for the BoilersArea_BoilerDelta_OutputPipe_FlowTransmitter2_Output_EURange Variable. /// public const uint BoilersArea_BoilerDelta_OutputPipe_FlowTransmitter2_Output_EURange = 348; /// /// The identifier for the BoilersArea_BoilerDelta_FlowController_Measurement Variable. /// public const uint BoilersArea_BoilerDelta_FlowController_Measurement = 351; /// /// The identifier for the BoilersArea_BoilerDelta_FlowController_SetPoint Variable. /// public const uint BoilersArea_BoilerDelta_FlowController_SetPoint = 352; /// /// The identifier for the BoilersArea_BoilerDelta_FlowController_ControlOut Variable. /// public const uint BoilersArea_BoilerDelta_FlowController_ControlOut = 353; /// /// The identifier for the BoilersArea_BoilerDelta_LevelController_Measurement Variable. /// public const uint BoilersArea_BoilerDelta_LevelController_Measurement = 355; /// /// The identifier for the BoilersArea_BoilerDelta_LevelController_SetPoint Variable. /// public const uint BoilersArea_BoilerDelta_LevelController_SetPoint = 356; /// /// The identifier for the BoilersArea_BoilerDelta_LevelController_ControlOut Variable. /// public const uint BoilersArea_BoilerDelta_LevelController_ControlOut = 357; /// /// The identifier for the BoilersArea_BoilerDelta_CustomController_Input1 Variable. /// public const uint BoilersArea_BoilerDelta_CustomController_Input1 = 359; /// /// The identifier for the BoilersArea_BoilerDelta_CustomController_Input2 Variable. /// public const uint BoilersArea_BoilerDelta_CustomController_Input2 = 360; /// /// The identifier for the BoilersArea_BoilerDelta_CustomController_Input3 Variable. /// public const uint BoilersArea_BoilerDelta_CustomController_Input3 = 361; /// /// The identifier for the BoilersArea_BoilerDelta_CustomController_ControlOut Variable. /// public const uint BoilersArea_BoilerDelta_CustomController_ControlOut = 362; /// /// The identifier for the BoilersArea_BoilerDelta_CustomController_DescriptionX Variable. /// public const uint BoilersArea_BoilerDelta_CustomController_DescriptionX = 363; /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_CurrentState Variable. /// public const uint BoilersArea_BoilerDelta_Simulation_CurrentState = 365; /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_CurrentState_Id Variable. /// public const uint BoilersArea_BoilerDelta_Simulation_CurrentState_Id = 366; /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_CurrentState_Number Variable. /// public const uint BoilersArea_BoilerDelta_Simulation_CurrentState_Number = 368; /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_LastTransition Variable. /// public const uint BoilersArea_BoilerDelta_Simulation_LastTransition = 370; /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_LastTransition_Id Variable. /// public const uint BoilersArea_BoilerDelta_Simulation_LastTransition_Id = 371; /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_LastTransition_Number Variable. /// public const uint BoilersArea_BoilerDelta_Simulation_LastTransition_Number = 373; /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_LastTransition_TransitionTime Variable. /// public const uint BoilersArea_BoilerDelta_Simulation_LastTransition_TransitionTime = 374; /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_Deletable Variable. /// public const uint BoilersArea_BoilerDelta_Simulation_Deletable = 376; /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_RecycleCount Variable. /// public const uint BoilersArea_BoilerDelta_Simulation_RecycleCount = 378; /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_CreateSessionId Variable. /// public const uint BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_CreateSessionId = 380; /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_CreateClientName Variable. /// public const uint BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_CreateClientName = 381; /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_InvocationCreationTime Variable. /// public const uint BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_InvocationCreationTime = 382; /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_LastTransitionTime Variable. /// public const uint BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_LastTransitionTime = 383; /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_LastMethodCall Variable. /// public const uint BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_LastMethodCall = 384; /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_LastMethodSessionId Variable. /// public const uint BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_LastMethodSessionId = 385; /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_LastMethodInputArguments Variable. /// public const uint BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_LastMethodInputArguments = 386; /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_LastMethodOutputArguments Variable. /// public const uint BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_LastMethodOutputArguments = 387; /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_LastMethodCallTime Variable. /// public const uint BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_LastMethodCallTime = 388; /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_LastMethodReturnStatus Variable. /// public const uint BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_LastMethodReturnStatus = 389; /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_UpdateRate Variable. /// public const uint BoilersArea_BoilerDelta_Simulation_UpdateRate = 396; } #endregion #region Method Node Identifiers /// /// A class that declares constants for all Methods in the Model Design. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class MethodIds { /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_Start Method. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_Simulation_Start = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Methods.BoilersArea_BoilerAlpha_Simulation_Start, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_Suspend Method. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_Simulation_Suspend = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Methods.BoilersArea_BoilerAlpha_Simulation_Suspend, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_Resume Method. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_Simulation_Resume = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Methods.BoilersArea_BoilerAlpha_Simulation_Resume, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_Halt Method. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_Simulation_Halt = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Methods.BoilersArea_BoilerAlpha_Simulation_Halt, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_Reset Method. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_Simulation_Reset = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Methods.BoilersArea_BoilerAlpha_Simulation_Reset, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_Start Method. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_Simulation_Start = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Methods.BoilersArea_BoilerBravo_Simulation_Start, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_Suspend Method. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_Simulation_Suspend = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Methods.BoilersArea_BoilerBravo_Simulation_Suspend, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_Resume Method. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_Simulation_Resume = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Methods.BoilersArea_BoilerBravo_Simulation_Resume, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_Halt Method. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_Simulation_Halt = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Methods.BoilersArea_BoilerBravo_Simulation_Halt, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_Reset Method. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_Simulation_Reset = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Methods.BoilersArea_BoilerBravo_Simulation_Reset, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_Start Method. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_Simulation_Start = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Methods.BoilersArea_BoilerCharlie_Simulation_Start, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_Suspend Method. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_Simulation_Suspend = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Methods.BoilersArea_BoilerCharlie_Simulation_Suspend, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_Resume Method. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_Simulation_Resume = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Methods.BoilersArea_BoilerCharlie_Simulation_Resume, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_Halt Method. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_Simulation_Halt = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Methods.BoilersArea_BoilerCharlie_Simulation_Halt, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_Reset Method. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_Simulation_Reset = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Methods.BoilersArea_BoilerCharlie_Simulation_Reset, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_Start Method. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_Simulation_Start = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Methods.BoilersArea_BoilerDelta_Simulation_Start, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_Suspend Method. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_Simulation_Suspend = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Methods.BoilersArea_BoilerDelta_Simulation_Suspend, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_Resume Method. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_Simulation_Resume = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Methods.BoilersArea_BoilerDelta_Simulation_Resume, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_Halt Method. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_Simulation_Halt = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Methods.BoilersArea_BoilerDelta_Simulation_Halt, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_Reset Method. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_Simulation_Reset = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Methods.BoilersArea_BoilerDelta_Simulation_Reset, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); } #endregion #region Object Node Identifiers /// /// A class that declares constants for all Objects in the Model Design. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class ObjectIds { /// /// The identifier for the BoilersArea Object. /// public static readonly ExpandedNodeId BoilersArea = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.BoilersArea, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha Object. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.BoilersArea_BoilerAlpha, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_InputPipe Object. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_InputPipe = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.BoilersArea_BoilerAlpha_InputPipe, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_InputPipe_FlowTransmitter1 Object. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_InputPipe_FlowTransmitter1 = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.BoilersArea_BoilerAlpha_InputPipe_FlowTransmitter1, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_InputPipe_Valve Object. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_InputPipe_Valve = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.BoilersArea_BoilerAlpha_InputPipe_Valve, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_Drum Object. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_Drum = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.BoilersArea_BoilerAlpha_Drum, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_Drum_LevelIndicator Object. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_Drum_LevelIndicator = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.BoilersArea_BoilerAlpha_Drum_LevelIndicator, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_OutputPipe Object. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_OutputPipe = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.BoilersArea_BoilerAlpha_OutputPipe, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_OutputPipe_FlowTransmitter2 Object. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_OutputPipe_FlowTransmitter2 = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.BoilersArea_BoilerAlpha_OutputPipe_FlowTransmitter2, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_FlowController Object. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_FlowController = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.BoilersArea_BoilerAlpha_FlowController, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_LevelController Object. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_LevelController = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.BoilersArea_BoilerAlpha_LevelController, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_CustomController Object. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_CustomController = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.BoilersArea_BoilerAlpha_CustomController, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation Object. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_Simulation = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.BoilersArea_BoilerAlpha_Simulation, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo Object. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.BoilersArea_BoilerBravo, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_InputPipe Object. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_InputPipe = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.BoilersArea_BoilerBravo_InputPipe, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_InputPipe_FlowTransmitter1 Object. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_InputPipe_FlowTransmitter1 = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.BoilersArea_BoilerBravo_InputPipe_FlowTransmitter1, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_InputPipe_Valve Object. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_InputPipe_Valve = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.BoilersArea_BoilerBravo_InputPipe_Valve, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_Drum Object. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_Drum = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.BoilersArea_BoilerBravo_Drum, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_Drum_LevelIndicator Object. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_Drum_LevelIndicator = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.BoilersArea_BoilerBravo_Drum_LevelIndicator, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_OutputPipe Object. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_OutputPipe = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.BoilersArea_BoilerBravo_OutputPipe, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_OutputPipe_FlowTransmitter2 Object. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_OutputPipe_FlowTransmitter2 = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.BoilersArea_BoilerBravo_OutputPipe_FlowTransmitter2, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_FlowController Object. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_FlowController = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.BoilersArea_BoilerBravo_FlowController, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_LevelController Object. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_LevelController = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.BoilersArea_BoilerBravo_LevelController, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_CustomController Object. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_CustomController = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.BoilersArea_BoilerBravo_CustomController, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_Simulation Object. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_Simulation = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.BoilersArea_BoilerBravo_Simulation, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie Object. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.BoilersArea_BoilerCharlie, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_InputPipe Object. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_InputPipe = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.BoilersArea_BoilerCharlie_InputPipe, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_InputPipe_FlowTransmitter1 Object. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_InputPipe_FlowTransmitter1 = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.BoilersArea_BoilerCharlie_InputPipe_FlowTransmitter1, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_InputPipe_Valve Object. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_InputPipe_Valve = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.BoilersArea_BoilerCharlie_InputPipe_Valve, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_Drum Object. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_Drum = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.BoilersArea_BoilerCharlie_Drum, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_Drum_LevelIndicator Object. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_Drum_LevelIndicator = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.BoilersArea_BoilerCharlie_Drum_LevelIndicator, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_OutputPipe Object. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_OutputPipe = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.BoilersArea_BoilerCharlie_OutputPipe, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_OutputPipe_FlowTransmitter2 Object. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_OutputPipe_FlowTransmitter2 = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.BoilersArea_BoilerCharlie_OutputPipe_FlowTransmitter2, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_FlowController Object. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_FlowController = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.BoilersArea_BoilerCharlie_FlowController, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_LevelController Object. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_LevelController = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.BoilersArea_BoilerCharlie_LevelController, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_CustomController Object. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_CustomController = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.BoilersArea_BoilerCharlie_CustomController, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation Object. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_Simulation = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.BoilersArea_BoilerCharlie_Simulation, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta Object. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.BoilersArea_BoilerDelta, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_InputPipe Object. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_InputPipe = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.BoilersArea_BoilerDelta_InputPipe, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_InputPipe_FlowTransmitter1 Object. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_InputPipe_FlowTransmitter1 = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.BoilersArea_BoilerDelta_InputPipe_FlowTransmitter1, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_InputPipe_Valve Object. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_InputPipe_Valve = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.BoilersArea_BoilerDelta_InputPipe_Valve, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_Drum Object. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_Drum = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.BoilersArea_BoilerDelta_Drum, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_Drum_LevelIndicator Object. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_Drum_LevelIndicator = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.BoilersArea_BoilerDelta_Drum_LevelIndicator, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_OutputPipe Object. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_OutputPipe = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.BoilersArea_BoilerDelta_OutputPipe, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_OutputPipe_FlowTransmitter2 Object. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_OutputPipe_FlowTransmitter2 = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.BoilersArea_BoilerDelta_OutputPipe_FlowTransmitter2, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_FlowController Object. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_FlowController = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.BoilersArea_BoilerDelta_FlowController, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_LevelController Object. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_LevelController = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.BoilersArea_BoilerDelta_LevelController, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_CustomController Object. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_CustomController = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.BoilersArea_BoilerDelta_CustomController, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_Simulation Object. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_Simulation = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.BoilersArea_BoilerDelta_Simulation, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the Drums Object. /// public static readonly ExpandedNodeId Drums = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.Drums, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the Pipes Object. /// public static readonly ExpandedNodeId Pipes = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Objects.Pipes, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); } #endregion #region Variable Node Identifiers /// /// A class that declares constants for all Variables in the Model Design. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class VariableIds { /// /// The identifier for the BoilersArea_BoilerAlpha_InputPipe_FlowTransmitter1_Output Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_InputPipe_FlowTransmitter1_Output = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerAlpha_InputPipe_FlowTransmitter1_Output, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_InputPipe_FlowTransmitter1_Output_EURange Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_InputPipe_FlowTransmitter1_Output_EURange = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerAlpha_InputPipe_FlowTransmitter1_Output_EURange, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_InputPipe_Valve_Input Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_InputPipe_Valve_Input = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerAlpha_InputPipe_Valve_Input, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_InputPipe_Valve_Input_EURange Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_InputPipe_Valve_Input_EURange = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerAlpha_InputPipe_Valve_Input_EURange, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_Drum_LevelIndicator_Output Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_Drum_LevelIndicator_Output = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerAlpha_Drum_LevelIndicator_Output, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_Drum_LevelIndicator_Output_EURange Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_Drum_LevelIndicator_Output_EURange = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerAlpha_Drum_LevelIndicator_Output_EURange, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_OutputPipe_FlowTransmitter2_Output Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_OutputPipe_FlowTransmitter2_Output = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerAlpha_OutputPipe_FlowTransmitter2_Output, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_OutputPipe_FlowTransmitter2_Output_EURange Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_OutputPipe_FlowTransmitter2_Output_EURange = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerAlpha_OutputPipe_FlowTransmitter2_Output_EURange, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_FlowController_Measurement Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_FlowController_Measurement = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerAlpha_FlowController_Measurement, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_FlowController_SetPoint Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_FlowController_SetPoint = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerAlpha_FlowController_SetPoint, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_FlowController_ControlOut Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_FlowController_ControlOut = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerAlpha_FlowController_ControlOut, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_LevelController_Measurement Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_LevelController_Measurement = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerAlpha_LevelController_Measurement, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_LevelController_SetPoint Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_LevelController_SetPoint = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerAlpha_LevelController_SetPoint, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_LevelController_ControlOut Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_LevelController_ControlOut = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerAlpha_LevelController_ControlOut, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_CustomController_Input1 Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_CustomController_Input1 = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerAlpha_CustomController_Input1, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_CustomController_Input2 Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_CustomController_Input2 = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerAlpha_CustomController_Input2, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_CustomController_Input3 Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_CustomController_Input3 = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerAlpha_CustomController_Input3, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_CustomController_ControlOut Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_CustomController_ControlOut = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerAlpha_CustomController_ControlOut, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_CustomController_DescriptionX Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_CustomController_DescriptionX = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerAlpha_CustomController_DescriptionX, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_CurrentState Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_Simulation_CurrentState = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerAlpha_Simulation_CurrentState, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_CurrentState_Id Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_Simulation_CurrentState_Id = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerAlpha_Simulation_CurrentState_Id, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_CurrentState_Number Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_Simulation_CurrentState_Number = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerAlpha_Simulation_CurrentState_Number, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_LastTransition Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_Simulation_LastTransition = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerAlpha_Simulation_LastTransition, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_LastTransition_Id Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_Simulation_LastTransition_Id = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerAlpha_Simulation_LastTransition_Id, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_LastTransition_Number Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_Simulation_LastTransition_Number = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerAlpha_Simulation_LastTransition_Number, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_LastTransition_TransitionTime Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_Simulation_LastTransition_TransitionTime = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerAlpha_Simulation_LastTransition_TransitionTime, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_Deletable Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_Simulation_Deletable = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerAlpha_Simulation_Deletable, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_RecycleCount Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_Simulation_RecycleCount = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerAlpha_Simulation_RecycleCount, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_CreateSessionId Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_CreateSessionId = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_CreateSessionId, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_CreateClientName Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_CreateClientName = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_CreateClientName, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_InvocationCreationTime Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_InvocationCreationTime = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_InvocationCreationTime, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_LastTransitionTime Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_LastTransitionTime = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_LastTransitionTime, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_LastMethodCall Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_LastMethodCall = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_LastMethodCall, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_LastMethodSessionId Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_LastMethodSessionId = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_LastMethodSessionId, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_LastMethodInputArguments Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_LastMethodInputArguments = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_LastMethodInputArguments, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_LastMethodOutputArguments Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_LastMethodOutputArguments = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_LastMethodOutputArguments, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_LastMethodCallTime Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_LastMethodCallTime = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_LastMethodCallTime, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_LastMethodReturnStatus Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_LastMethodReturnStatus = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_LastMethodReturnStatus, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerAlpha_Simulation_UpdateRate Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerAlpha_Simulation_UpdateRate = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerAlpha_Simulation_UpdateRate, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_InputPipe_FlowTransmitter1_Output Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_InputPipe_FlowTransmitter1_Output = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerBravo_InputPipe_FlowTransmitter1_Output, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_InputPipe_FlowTransmitter1_Output_EURange Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_InputPipe_FlowTransmitter1_Output_EURange = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerBravo_InputPipe_FlowTransmitter1_Output_EURange, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_InputPipe_Valve_Input Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_InputPipe_Valve_Input = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerBravo_InputPipe_Valve_Input, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_InputPipe_Valve_Input_EURange Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_InputPipe_Valve_Input_EURange = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerBravo_InputPipe_Valve_Input_EURange, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_Drum_LevelIndicator_Output Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_Drum_LevelIndicator_Output = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerBravo_Drum_LevelIndicator_Output, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_Drum_LevelIndicator_Output_EURange Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_Drum_LevelIndicator_Output_EURange = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerBravo_Drum_LevelIndicator_Output_EURange, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_OutputPipe_FlowTransmitter2_Output Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_OutputPipe_FlowTransmitter2_Output = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerBravo_OutputPipe_FlowTransmitter2_Output, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_OutputPipe_FlowTransmitter2_Output_EURange Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_OutputPipe_FlowTransmitter2_Output_EURange = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerBravo_OutputPipe_FlowTransmitter2_Output_EURange, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_FlowController_Measurement Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_FlowController_Measurement = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerBravo_FlowController_Measurement, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_FlowController_SetPoint Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_FlowController_SetPoint = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerBravo_FlowController_SetPoint, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_FlowController_ControlOut Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_FlowController_ControlOut = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerBravo_FlowController_ControlOut, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_LevelController_Measurement Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_LevelController_Measurement = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerBravo_LevelController_Measurement, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_LevelController_SetPoint Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_LevelController_SetPoint = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerBravo_LevelController_SetPoint, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_LevelController_ControlOut Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_LevelController_ControlOut = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerBravo_LevelController_ControlOut, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_CustomController_Input1 Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_CustomController_Input1 = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerBravo_CustomController_Input1, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_CustomController_Input2 Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_CustomController_Input2 = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerBravo_CustomController_Input2, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_CustomController_Input3 Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_CustomController_Input3 = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerBravo_CustomController_Input3, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_CustomController_ControlOut Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_CustomController_ControlOut = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerBravo_CustomController_ControlOut, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_CustomController_DescriptionX Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_CustomController_DescriptionX = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerBravo_CustomController_DescriptionX, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_CurrentState Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_Simulation_CurrentState = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerBravo_Simulation_CurrentState, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_CurrentState_Id Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_Simulation_CurrentState_Id = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerBravo_Simulation_CurrentState_Id, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_CurrentState_Number Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_Simulation_CurrentState_Number = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerBravo_Simulation_CurrentState_Number, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_LastTransition Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_Simulation_LastTransition = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerBravo_Simulation_LastTransition, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_LastTransition_Id Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_Simulation_LastTransition_Id = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerBravo_Simulation_LastTransition_Id, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_LastTransition_Number Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_Simulation_LastTransition_Number = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerBravo_Simulation_LastTransition_Number, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_LastTransition_TransitionTime Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_Simulation_LastTransition_TransitionTime = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerBravo_Simulation_LastTransition_TransitionTime, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_Deletable Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_Simulation_Deletable = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerBravo_Simulation_Deletable, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_RecycleCount Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_Simulation_RecycleCount = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerBravo_Simulation_RecycleCount, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_CreateSessionId Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_CreateSessionId = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_CreateSessionId, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_CreateClientName Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_CreateClientName = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_CreateClientName, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_InvocationCreationTime Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_InvocationCreationTime = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_InvocationCreationTime, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_LastTransitionTime Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_LastTransitionTime = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_LastTransitionTime, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_LastMethodCall Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_LastMethodCall = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_LastMethodCall, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_LastMethodSessionId Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_LastMethodSessionId = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_LastMethodSessionId, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_LastMethodInputArguments Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_LastMethodInputArguments = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_LastMethodInputArguments, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_LastMethodOutputArguments Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_LastMethodOutputArguments = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_LastMethodOutputArguments, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_LastMethodCallTime Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_LastMethodCallTime = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_LastMethodCallTime, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_LastMethodReturnStatus Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_LastMethodReturnStatus = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_LastMethodReturnStatus, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerBravo_Simulation_UpdateRate Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerBravo_Simulation_UpdateRate = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerBravo_Simulation_UpdateRate, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_InputPipe_FlowTransmitter1_Output Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_InputPipe_FlowTransmitter1_Output = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerCharlie_InputPipe_FlowTransmitter1_Output, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_InputPipe_FlowTransmitter1_Output_EURange Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_InputPipe_FlowTransmitter1_Output_EURange = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerCharlie_InputPipe_FlowTransmitter1_Output_EURange, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_InputPipe_Valve_Input Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_InputPipe_Valve_Input = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerCharlie_InputPipe_Valve_Input, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_InputPipe_Valve_Input_EURange Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_InputPipe_Valve_Input_EURange = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerCharlie_InputPipe_Valve_Input_EURange, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_Drum_LevelIndicator_Output Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_Drum_LevelIndicator_Output = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerCharlie_Drum_LevelIndicator_Output, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_Drum_LevelIndicator_Output_EURange Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_Drum_LevelIndicator_Output_EURange = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerCharlie_Drum_LevelIndicator_Output_EURange, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_OutputPipe_FlowTransmitter2_Output Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_OutputPipe_FlowTransmitter2_Output = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerCharlie_OutputPipe_FlowTransmitter2_Output, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_OutputPipe_FlowTransmitter2_Output_EURange Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_OutputPipe_FlowTransmitter2_Output_EURange = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerCharlie_OutputPipe_FlowTransmitter2_Output_EURange, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_FlowController_Measurement Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_FlowController_Measurement = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerCharlie_FlowController_Measurement, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_FlowController_SetPoint Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_FlowController_SetPoint = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerCharlie_FlowController_SetPoint, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_FlowController_ControlOut Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_FlowController_ControlOut = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerCharlie_FlowController_ControlOut, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_LevelController_Measurement Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_LevelController_Measurement = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerCharlie_LevelController_Measurement, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_LevelController_SetPoint Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_LevelController_SetPoint = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerCharlie_LevelController_SetPoint, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_LevelController_ControlOut Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_LevelController_ControlOut = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerCharlie_LevelController_ControlOut, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_CustomController_Input1 Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_CustomController_Input1 = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerCharlie_CustomController_Input1, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_CustomController_Input2 Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_CustomController_Input2 = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerCharlie_CustomController_Input2, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_CustomController_Input3 Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_CustomController_Input3 = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerCharlie_CustomController_Input3, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_CustomController_ControlOut Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_CustomController_ControlOut = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerCharlie_CustomController_ControlOut, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_CustomController_DescriptionX Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_CustomController_DescriptionX = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerCharlie_CustomController_DescriptionX, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_CurrentState Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_Simulation_CurrentState = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerCharlie_Simulation_CurrentState, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_CurrentState_Id Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_Simulation_CurrentState_Id = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerCharlie_Simulation_CurrentState_Id, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_CurrentState_Number Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_Simulation_CurrentState_Number = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerCharlie_Simulation_CurrentState_Number, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_LastTransition Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_Simulation_LastTransition = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerCharlie_Simulation_LastTransition, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_LastTransition_Id Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_Simulation_LastTransition_Id = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerCharlie_Simulation_LastTransition_Id, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_LastTransition_Number Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_Simulation_LastTransition_Number = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerCharlie_Simulation_LastTransition_Number, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_LastTransition_TransitionTime Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_Simulation_LastTransition_TransitionTime = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerCharlie_Simulation_LastTransition_TransitionTime, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_Deletable Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_Simulation_Deletable = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerCharlie_Simulation_Deletable, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_RecycleCount Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_Simulation_RecycleCount = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerCharlie_Simulation_RecycleCount, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_CreateSessionId Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_CreateSessionId = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_CreateSessionId, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_CreateClientName Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_CreateClientName = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_CreateClientName, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_InvocationCreationTime Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_InvocationCreationTime = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_InvocationCreationTime, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_LastTransitionTime Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_LastTransitionTime = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_LastTransitionTime, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_LastMethodCall Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_LastMethodCall = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_LastMethodCall, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_LastMethodSessionId Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_LastMethodSessionId = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_LastMethodSessionId, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_LastMethodInputArguments Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_LastMethodInputArguments = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_LastMethodInputArguments, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_LastMethodOutputArguments Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_LastMethodOutputArguments = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_LastMethodOutputArguments, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_LastMethodCallTime Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_LastMethodCallTime = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_LastMethodCallTime, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_LastMethodReturnStatus Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_LastMethodReturnStatus = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_LastMethodReturnStatus, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerCharlie_Simulation_UpdateRate Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerCharlie_Simulation_UpdateRate = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerCharlie_Simulation_UpdateRate, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_InputPipe_FlowTransmitter1_Output Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_InputPipe_FlowTransmitter1_Output = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerDelta_InputPipe_FlowTransmitter1_Output, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_InputPipe_FlowTransmitter1_Output_EURange Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_InputPipe_FlowTransmitter1_Output_EURange = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerDelta_InputPipe_FlowTransmitter1_Output_EURange, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_InputPipe_Valve_Input Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_InputPipe_Valve_Input = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerDelta_InputPipe_Valve_Input, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_InputPipe_Valve_Input_EURange Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_InputPipe_Valve_Input_EURange = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerDelta_InputPipe_Valve_Input_EURange, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_Drum_LevelIndicator_Output Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_Drum_LevelIndicator_Output = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerDelta_Drum_LevelIndicator_Output, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_Drum_LevelIndicator_Output_EURange Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_Drum_LevelIndicator_Output_EURange = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerDelta_Drum_LevelIndicator_Output_EURange, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_OutputPipe_FlowTransmitter2_Output Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_OutputPipe_FlowTransmitter2_Output = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerDelta_OutputPipe_FlowTransmitter2_Output, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_OutputPipe_FlowTransmitter2_Output_EURange Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_OutputPipe_FlowTransmitter2_Output_EURange = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerDelta_OutputPipe_FlowTransmitter2_Output_EURange, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_FlowController_Measurement Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_FlowController_Measurement = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerDelta_FlowController_Measurement, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_FlowController_SetPoint Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_FlowController_SetPoint = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerDelta_FlowController_SetPoint, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_FlowController_ControlOut Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_FlowController_ControlOut = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerDelta_FlowController_ControlOut, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_LevelController_Measurement Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_LevelController_Measurement = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerDelta_LevelController_Measurement, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_LevelController_SetPoint Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_LevelController_SetPoint = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerDelta_LevelController_SetPoint, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_LevelController_ControlOut Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_LevelController_ControlOut = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerDelta_LevelController_ControlOut, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_CustomController_Input1 Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_CustomController_Input1 = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerDelta_CustomController_Input1, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_CustomController_Input2 Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_CustomController_Input2 = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerDelta_CustomController_Input2, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_CustomController_Input3 Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_CustomController_Input3 = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerDelta_CustomController_Input3, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_CustomController_ControlOut Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_CustomController_ControlOut = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerDelta_CustomController_ControlOut, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_CustomController_DescriptionX Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_CustomController_DescriptionX = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerDelta_CustomController_DescriptionX, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_CurrentState Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_Simulation_CurrentState = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerDelta_Simulation_CurrentState, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_CurrentState_Id Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_Simulation_CurrentState_Id = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerDelta_Simulation_CurrentState_Id, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_CurrentState_Number Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_Simulation_CurrentState_Number = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerDelta_Simulation_CurrentState_Number, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_LastTransition Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_Simulation_LastTransition = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerDelta_Simulation_LastTransition, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_LastTransition_Id Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_Simulation_LastTransition_Id = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerDelta_Simulation_LastTransition_Id, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_LastTransition_Number Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_Simulation_LastTransition_Number = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerDelta_Simulation_LastTransition_Number, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_LastTransition_TransitionTime Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_Simulation_LastTransition_TransitionTime = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerDelta_Simulation_LastTransition_TransitionTime, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_Deletable Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_Simulation_Deletable = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerDelta_Simulation_Deletable, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_RecycleCount Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_Simulation_RecycleCount = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerDelta_Simulation_RecycleCount, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_CreateSessionId Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_CreateSessionId = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_CreateSessionId, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_CreateClientName Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_CreateClientName = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_CreateClientName, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_InvocationCreationTime Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_InvocationCreationTime = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_InvocationCreationTime, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_LastTransitionTime Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_LastTransitionTime = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_LastTransitionTime, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_LastMethodCall Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_LastMethodCall = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_LastMethodCall, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_LastMethodSessionId Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_LastMethodSessionId = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_LastMethodSessionId, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_LastMethodInputArguments Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_LastMethodInputArguments = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_LastMethodInputArguments, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_LastMethodOutputArguments Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_LastMethodOutputArguments = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_LastMethodOutputArguments, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_LastMethodCallTime Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_LastMethodCallTime = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_LastMethodCallTime, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_LastMethodReturnStatus Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_LastMethodReturnStatus = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_LastMethodReturnStatus, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); /// /// The identifier for the BoilersArea_BoilerDelta_Simulation_UpdateRate Variable. /// public static readonly ExpandedNodeId BoilersArea_BoilerDelta_Simulation_UpdateRate = new ExpandedNodeId(Commsvr.UA.Examples.BoilersSet.Variables.BoilersArea_BoilerDelta_Simulation_UpdateRate, Commsvr.UA.Examples.BoilersSet.Namespaces.BoilersSet); } #endregion #region BrowseName Declarations /// /// Declares all of the BrowseNames used in the Model Design. /// public static partial class BrowseNames { /// /// The BrowseName for the BoilerAlpha component. /// public const string BoilerAlpha = "Boiler #1"; /// /// The BrowseName for the BoilerBravo component. /// public const string BoilerBravo = "Boiler #2"; /// /// The BrowseName for the BoilerCharlie component. /// public const string BoilerCharlie = "Boiler #3"; /// /// The BrowseName for the BoilerDelta component. /// public const string BoilerDelta = "Boiler #4"; /// /// The BrowseName for the BoilersArea component. /// public const string BoilersArea = "BoilersArea"; /// /// The BrowseName for the Drums component. /// public const string Drums = "Drums"; /// /// The BrowseName for the Pipes component. /// public const string Pipes = "Pipes"; } #endregion #region Namespace Declarations /// /// Defines constants for all namespaces referenced by the model design. /// public static partial class Namespaces { /// /// The URI for the OpcUa namespace (.NET code namespace is 'Opc.Ua'). /// public const string OpcUa = "http://opcfoundation.org/UA/"; /// /// The URI for the OpcUaXsd namespace (.NET code namespace is 'Opc.Ua'). /// public const string OpcUaXsd = "http://opcfoundation.org/UA/2008/02/Types.xsd"; /// /// The URI for the BoilerType namespace (.NET code namespace is 'tempuri.org.UA.Examples.BoilerType'). /// public const string BoilerType = "http://tempuri.org/UA/Examples/BoilerType"; /// /// The URI for the BoilerTypeXsd namespace (.NET code namespace is 'tempuri.org.UA.Examples.BoilerType'). /// public const string BoilerTypeXsd = "http://tempuri.org/UA/Examples/BoilerType/Types.xsd"; /// /// The URI for the BoilersSet namespace (.NET code namespace is 'Commsvr.UA.Examples.BoilersSet'). /// public const string BoilersSet = "http://commsvr.com/UA/Examples/BoilersSet"; /// /// The URI for the BoilersSetXsd namespace (.NET code namespace is 'Commsvr.UA.Examples.BoilersSet'). /// public const string BoilersSetXsd = "http://commsvr.com/UA/Examples/BoilersSet/Types.xsd"; } #endregion } ================================================ FILE: Networking/Simulator.Boiler/UAInformationModel/DemoConfiguration/BoilersSet/Commsvr.UA.Examples.BoilersSet.NodeSet.xml ================================================  http://opcfoundation.org/UA/ http://commsvr.com/UA/Examples/BoilersSet http://tempuri.org/UA/Examples/BoilerType ns=1;i=1 Object_1 1 BoilersArea BoilersArea 0 0 i=40 false i=61 i=35 true i=85 i=48 true i=2253 i=48 false ns=1;i=81 i=47 false ns=1;i=81 i=47 false ns=1;i=160 i=47 false ns=1;i=239 i=47 false ns=1;i=318 0 ns=1;i=81 Object_1 1 Boiler #1 Boiler #1 0 0 i=47 true ns=1;i=1 i=40 false ns=2;i=151 i=48 true ns=1;i=1 i=48 false ns=1;i=82 i=48 false ns=1;i=97 i=48 false ns=1;i=105 i=36 false ns=1;i=127 i=47 false ns=1;i=82 i=47 false ns=1;i=97 i=47 false ns=1;i=105 i=47 false ns=1;i=113 i=47 false ns=1;i=117 i=47 false ns=1;i=121 i=47 false ns=1;i=127 0 ns=1;i=82 Object_1 1 InputPipe Boiler #1: Pipe1001 0 0 i=47 true ns=1;i=81 i=40 false ns=2;i=120 i=48 true ns=1;i=81 i=48 false ns=1;i=83 ns=2;i=1 false ns=1;i=97 i=47 false ns=1;i=83 i=47 false ns=1;i=90 i=47 true ns=1;i=399 1 ns=1;i=83 Object_1 2 FTX001 FlowTransmitter1 0 0 i=47 true ns=1;i=82 i=40 false ns=2;i=50 i=48 true ns=1;i=82 i=47 false ns=1;i=84 1 ns=1;i=84 Variable_2 2 Output Output 0 0 i=47 true ns=1;i=83 i=40 false i=2368 ns=2;i=3 false ns=1;i=114 ns=2;i=3 false ns=1;i=123 i=46 false ns=1;i=88 0 i=11 -1 1 1 0 false ns=1;i=88 Variable_2 0 EURange EURange 0 0 i=46 true ns=1;i=84 i=40 false i=68 i=884 -1 1 1 0 false ns=1;i=90 Object_1 2 ValveX001 Valve 0 0 i=47 true ns=1;i=82 i=40 false ns=2;i=28 i=47 false ns=1;i=91 1 ns=1;i=91 Variable_2 2 Input Input 0 0 i=47 true ns=1;i=90 i=40 false i=2368 ns=2;i=3 true ns=1;i=116 i=46 false ns=1;i=95 0 i=11 -1 2 2 0 false ns=1;i=95 Variable_2 0 EURange EURange 0 0 i=46 true ns=1;i=91 i=40 false i=68 i=884 -1 1 1 0 false ns=1;i=97 Object_1 1 Drum Boiler #1: Drum1001 0 0 i=47 true ns=1;i=81 i=40 false ns=2;i=135 i=48 true ns=1;i=81 ns=2;i=1 true ns=1;i=82 i=48 false ns=1;i=98 ns=2;i=2 false ns=1;i=105 i=47 false ns=1;i=98 i=47 true ns=1;i=398 1 ns=1;i=98 Object_1 2 LIX001 LIX001 0 0 i=47 true ns=1;i=97 i=40 false ns=2;i=43 i=48 true ns=1;i=97 i=47 false ns=1;i=99 1 ns=1;i=99 Variable_2 2 Output Output 0 0 i=47 true ns=1;i=98 i=40 false i=2368 ns=2;i=3 false ns=1;i=118 i=46 false ns=1;i=103 0 i=26 -1 1 1 0 false ns=1;i=103 Variable_2 0 EURange EURange 0 0 i=46 true ns=1;i=99 i=40 false i=68 i=884 -1 1 1 0 false ns=1;i=105 Object_1 1 OutputPipe Boiler #1: Pipe1002 0 0 i=47 true ns=1;i=81 i=40 false ns=2;i=143 i=48 true ns=1;i=81 ns=2;i=2 true ns=1;i=97 i=48 false ns=1;i=106 i=47 false ns=1;i=106 i=47 true ns=1;i=399 1 ns=1;i=106 Object_1 2 FTX002 FTX002 0 0 i=47 true ns=1;i=105 i=40 false ns=2;i=50 i=48 true ns=1;i=105 i=47 false ns=1;i=107 1 ns=1;i=107 Variable_2 2 Output Output 0 0 i=47 true ns=1;i=106 i=40 false i=2368 ns=2;i=3 false ns=1;i=124 i=46 false ns=1;i=111 0 i=11 -1 1 1 0 false ns=1;i=111 Variable_2 0 EURange EURange 0 0 i=46 true ns=1;i=107 i=40 false i=68 i=884 -1 1 1 0 false ns=1;i=113 Object_1 1 FlowController Boiler #1: FC1001 0 0 i=47 true ns=1;i=81 i=40 false ns=2;i=39 i=46 false ns=1;i=114 i=46 false ns=1;i=115 i=46 false ns=1;i=116 0 ns=1;i=114 Variable_2 2 Measurement Measurement 0 0 i=46 true ns=1;i=113 i=40 false i=68 ns=2;i=3 true ns=1;i=84 0 i=11 -1 1 1 0 false ns=1;i=115 Variable_2 2 SetPoint SetPoint 0 0 i=46 true ns=1;i=113 i=40 false i=68 ns=2;i=3 true ns=1;i=125 0 i=11 -1 3 3 0 false ns=1;i=116 Variable_2 2 ControlOut ControlOut 0 0 i=46 true ns=1;i=113 i=40 false i=68 ns=2;i=3 false ns=1;i=91 0 i=11 -1 1 1 0 false ns=1;i=117 Object_1 1 LevelController Boiler #1: LC1001 0 0 i=47 true ns=1;i=81 i=40 false ns=2;i=35 i=46 false ns=1;i=118 i=46 false ns=1;i=119 i=46 false ns=1;i=120 0 ns=1;i=118 Variable_2 2 Measurement Measurement 0 0 i=46 true ns=1;i=117 i=40 false i=68 ns=2;i=3 true ns=1;i=99 0 i=11 -1 1 1 0 false ns=1;i=119 Variable_2 2 SetPoint SetPoint 0 0 i=46 true ns=1;i=117 i=40 false i=68 0 i=11 -1 3 3 0 false ns=1;i=120 Variable_2 2 ControlOut ControlOut 0 0 i=46 true ns=1;i=117 i=40 false i=68 ns=2;i=3 false ns=1;i=122 0 i=11 -1 1 1 0 false ns=1;i=121 Object_1 1 CustomController Boiler #1: CC1001 0 0 i=47 true ns=1;i=81 i=40 false ns=2;i=22 i=46 false ns=1;i=122 i=46 false ns=1;i=123 i=46 false ns=1;i=124 i=46 false ns=1;i=125 i=46 false ns=1;i=126 0 ns=1;i=122 Variable_2 2 Input1 Input1 0 0 i=46 true ns=1;i=121 i=40 false i=68 ns=2;i=3 true ns=1;i=120 0 i=11 -1 2 2 0 false ns=1;i=123 Variable_2 2 Input2 Input2 0 0 i=46 true ns=1;i=121 i=40 false i=68 ns=2;i=3 true ns=1;i=84 0 i=11 -1 2 2 0 false ns=1;i=124 Variable_2 2 Input3 Input3 0 0 i=46 true ns=1;i=121 i=40 false i=68 ns=2;i=3 true ns=1;i=107 0 i=11 -1 2 2 0 false ns=1;i=125 Variable_2 2 ControlOut ControlOut 0 0 i=46 true ns=1;i=121 i=40 false i=68 ns=2;i=3 false ns=1;i=115 0 i=11 -1 1 1 0 false ns=1;i=126 Variable_2 2 Description Description 0 0 i=46 true ns=1;i=121 i=40 false i=68 i=21 -1 1 1 0 false ns=1;i=127 Object_1 2 Simulation Simulation 0 0 i=47 true ns=1;i=81 i=40 false ns=2;i=57 i=36 true ns=1;i=81 i=47 false ns=1;i=128 i=47 false ns=1;i=133 i=46 false ns=1;i=139 i=46 false ns=1;i=141 i=47 false ns=1;i=154 i=47 false ns=1;i=155 i=47 false ns=1;i=156 i=47 false ns=1;i=157 i=47 false ns=1;i=158 i=46 false ns=1;i=159 1 ns=1;i=128 Variable_2 0 CurrentState CurrentState 0 0 i=47 true ns=1;i=127 i=40 false i=2760 i=46 false ns=1;i=129 i=46 false ns=1;i=131 i=21 -1 1 1 0 false ns=1;i=129 Variable_2 0 Id Id 0 0 i=46 true ns=1;i=128 i=40 false i=68 i=0 i=17 -1 1 1 0 false ns=1;i=131 Variable_2 0 Number Number 0 0 i=46 true ns=1;i=128 i=40 false i=68 0 i=7 -1 1 1 0 false ns=1;i=133 Variable_2 0 LastTransition LastTransition 0 0 i=47 true ns=1;i=127 i=40 false i=2767 i=46 false ns=1;i=134 i=46 false ns=1;i=136 i=46 false ns=1;i=137 i=21 -1 1 1 0 false ns=1;i=134 Variable_2 0 Id Id 0 0 i=46 true ns=1;i=133 i=40 false i=68 i=0 i=17 -1 1 1 0 false ns=1;i=136 Variable_2 0 Number Number 0 0 i=46 true ns=1;i=133 i=40 false i=68 0 i=7 -1 1 1 0 false ns=1;i=137 Variable_2 0 TransitionTime TransitionTime 0 0 i=46 true ns=1;i=133 i=40 false i=68 0001-01-01T00:00:00 i=294 -1 1 1 0 false ns=1;i=139 Variable_2 0 Deletable Deletable 0 0 i=46 true ns=1;i=127 i=40 false i=68 false i=1 -1 1 1 0 false ns=1;i=141 Variable_2 0 RecycleCount RecycleCount 0 0 i=46 true ns=1;i=127 i=40 false i=68 0 i=6 -1 1 1 0 false ns=1;i=154 Method_4 0 Start Start Causes the Program to transition from the Ready state to the Running state. 0 0 i=47 true ns=1;i=127 i=40 false i=2426 true true ns=1;i=155 Method_4 0 Suspend Suspend Causes the Program to transition from the Running state to the Suspended state. 0 0 i=47 true ns=1;i=127 i=40 false i=2427 true true ns=1;i=156 Method_4 0 Resume Resume Causes the Program to transition from the Suspended state to the Running state. 0 0 i=47 true ns=1;i=127 i=40 false i=2428 true true ns=1;i=157 Method_4 0 Halt Halt Causes the Program to transition from the Ready, Running or Suspended state to the Halted state. 0 0 i=47 true ns=1;i=127 i=40 false i=2429 true true ns=1;i=158 Method_4 0 Reset Reset Causes the Program to transition from the Halted state to the Ready state. 0 0 i=47 true ns=1;i=127 i=40 false i=2430 true true ns=1;i=159 Variable_2 2 UpdateRate UpdateRate The rate at which the simulation runs. 0 0 i=46 true ns=1;i=127 i=40 false i=68 0 i=7 -1 3 3 0 false ns=1;i=160 Object_1 1 Boiler #2 Boilers Second 0 0 i=47 true ns=1;i=1 i=40 false ns=2;i=151 i=48 false ns=1;i=161 i=48 false ns=1;i=176 i=48 false ns=1;i=184 i=36 false ns=1;i=206 i=47 false ns=1;i=161 i=47 false ns=1;i=176 i=47 false ns=1;i=184 i=47 false ns=1;i=192 i=47 false ns=1;i=196 i=47 false ns=1;i=200 i=47 false ns=1;i=206 0 ns=1;i=161 Object_1 1 InputPipe Boiler #2: Pipe1001 0 0 i=47 true ns=1;i=160 i=40 false ns=2;i=120 i=48 true ns=1;i=160 i=48 false ns=1;i=162 ns=2;i=1 false ns=1;i=176 i=47 false ns=1;i=162 i=47 false ns=1;i=169 i=47 true ns=1;i=399 1 ns=1;i=162 Object_1 2 FTX001 FlowTransmitter1 0 0 i=47 true ns=1;i=161 i=40 false ns=2;i=50 i=48 true ns=1;i=161 i=47 false ns=1;i=163 1 ns=1;i=163 Variable_2 2 Output Output 0 0 i=47 true ns=1;i=162 i=40 false i=2368 ns=2;i=3 false ns=1;i=193 ns=2;i=3 false ns=1;i=202 i=46 false ns=1;i=167 0 i=11 -1 1 1 0 false ns=1;i=167 Variable_2 0 EURange EURange 0 0 i=46 true ns=1;i=163 i=40 false i=68 i=884 -1 1 1 0 false ns=1;i=169 Object_1 2 ValveX001 Valve 0 0 i=47 true ns=1;i=161 i=40 false ns=2;i=28 i=47 false ns=1;i=170 1 ns=1;i=170 Variable_2 2 Input Input 0 0 i=47 true ns=1;i=169 i=40 false i=2368 ns=2;i=3 true ns=1;i=195 i=46 false ns=1;i=174 0 i=11 -1 2 2 0 false ns=1;i=174 Variable_2 0 EURange EURange 0 0 i=46 true ns=1;i=170 i=40 false i=68 i=884 -1 1 1 0 false ns=1;i=176 Object_1 1 Drum Boiler #2: Drum1001 0 0 i=47 true ns=1;i=160 i=40 false ns=2;i=135 i=48 true ns=1;i=160 ns=2;i=1 true ns=1;i=161 i=48 false ns=1;i=177 ns=2;i=2 false ns=1;i=184 i=47 false ns=1;i=177 i=47 true ns=1;i=398 1 ns=1;i=177 Object_1 2 LIX001 LIX001 0 0 i=47 true ns=1;i=176 i=40 false ns=2;i=43 i=48 true ns=1;i=176 i=47 false ns=1;i=178 1 ns=1;i=178 Variable_2 2 Output Output 0 0 i=47 true ns=1;i=177 i=40 false i=2368 ns=2;i=3 false ns=1;i=197 i=46 false ns=1;i=182 0 i=26 -1 1 1 0 false ns=1;i=182 Variable_2 0 EURange EURange 0 0 i=46 true ns=1;i=178 i=40 false i=68 i=884 -1 1 1 0 false ns=1;i=184 Object_1 1 OutputPipe Boiler #2: Pipe1002 0 0 i=47 true ns=1;i=160 i=40 false ns=2;i=143 i=48 true ns=1;i=160 ns=2;i=2 true ns=1;i=176 i=48 false ns=1;i=185 i=47 false ns=1;i=185 i=47 true ns=1;i=399 1 ns=1;i=185 Object_1 2 FTX002 FTX002 0 0 i=47 true ns=1;i=184 i=40 false ns=2;i=50 i=48 true ns=1;i=184 i=47 false ns=1;i=186 1 ns=1;i=186 Variable_2 2 Output Output 0 0 i=47 true ns=1;i=185 i=40 false i=2368 ns=2;i=3 false ns=1;i=203 i=46 false ns=1;i=190 0 i=11 -1 1 1 0 false ns=1;i=190 Variable_2 0 EURange EURange 0 0 i=46 true ns=1;i=186 i=40 false i=68 i=884 -1 1 1 0 false ns=1;i=192 Object_1 1 FlowController Boiler #2: FC1001 0 0 i=47 true ns=1;i=160 i=40 false ns=2;i=39 i=46 false ns=1;i=193 i=46 false ns=1;i=194 i=46 false ns=1;i=195 0 ns=1;i=193 Variable_2 2 Measurement Measurement 0 0 i=46 true ns=1;i=192 i=40 false i=68 ns=2;i=3 true ns=1;i=163 0 i=11 -1 1 1 0 false ns=1;i=194 Variable_2 2 SetPoint SetPoint 0 0 i=46 true ns=1;i=192 i=40 false i=68 ns=2;i=3 true ns=1;i=204 0 i=11 -1 3 3 0 false ns=1;i=195 Variable_2 2 ControlOut ControlOut 0 0 i=46 true ns=1;i=192 i=40 false i=68 ns=2;i=3 false ns=1;i=170 0 i=11 -1 1 1 0 false ns=1;i=196 Object_1 1 LevelController Boiler #2: LC1001 0 0 i=47 true ns=1;i=160 i=40 false ns=2;i=35 i=46 false ns=1;i=197 i=46 false ns=1;i=198 i=46 false ns=1;i=199 0 ns=1;i=197 Variable_2 2 Measurement Measurement 0 0 i=46 true ns=1;i=196 i=40 false i=68 ns=2;i=3 true ns=1;i=178 0 i=11 -1 1 1 0 false ns=1;i=198 Variable_2 2 SetPoint SetPoint 0 0 i=46 true ns=1;i=196 i=40 false i=68 0 i=11 -1 3 3 0 false ns=1;i=199 Variable_2 2 ControlOut ControlOut 0 0 i=46 true ns=1;i=196 i=40 false i=68 ns=2;i=3 false ns=1;i=201 0 i=11 -1 1 1 0 false ns=1;i=200 Object_1 1 CustomController Boiler #2: CC1001 0 0 i=47 true ns=1;i=160 i=40 false ns=2;i=22 i=46 false ns=1;i=201 i=46 false ns=1;i=202 i=46 false ns=1;i=203 i=46 false ns=1;i=204 i=46 false ns=1;i=205 0 ns=1;i=201 Variable_2 2 Input1 Input1 0 0 i=46 true ns=1;i=200 i=40 false i=68 ns=2;i=3 true ns=1;i=199 0 i=11 -1 2 2 0 false ns=1;i=202 Variable_2 2 Input2 Input2 0 0 i=46 true ns=1;i=200 i=40 false i=68 ns=2;i=3 true ns=1;i=163 0 i=11 -1 2 2 0 false ns=1;i=203 Variable_2 2 Input3 Input3 0 0 i=46 true ns=1;i=200 i=40 false i=68 ns=2;i=3 true ns=1;i=186 0 i=11 -1 2 2 0 false ns=1;i=204 Variable_2 2 ControlOut ControlOut 0 0 i=46 true ns=1;i=200 i=40 false i=68 ns=2;i=3 false ns=1;i=194 0 i=11 -1 1 1 0 false ns=1;i=205 Variable_2 2 Description Description 0 0 i=46 true ns=1;i=200 i=40 false i=68 i=21 -1 1 1 0 false ns=1;i=206 Object_1 2 Simulation Simulation 0 0 i=47 true ns=1;i=160 i=40 false ns=2;i=57 i=36 true ns=1;i=160 i=47 false ns=1;i=207 i=47 false ns=1;i=212 i=46 false ns=1;i=218 i=46 false ns=1;i=220 i=47 false ns=1;i=233 i=47 false ns=1;i=234 i=47 false ns=1;i=235 i=47 false ns=1;i=236 i=47 false ns=1;i=237 i=46 false ns=1;i=238 1 ns=1;i=207 Variable_2 0 CurrentState CurrentState 0 0 i=47 true ns=1;i=206 i=40 false i=2760 i=46 false ns=1;i=208 i=46 false ns=1;i=210 i=21 -1 1 1 0 false ns=1;i=208 Variable_2 0 Id Id 0 0 i=46 true ns=1;i=207 i=40 false i=68 i=0 i=17 -1 1 1 0 false ns=1;i=210 Variable_2 0 Number Number 0 0 i=46 true ns=1;i=207 i=40 false i=68 0 i=7 -1 1 1 0 false ns=1;i=212 Variable_2 0 LastTransition LastTransition 0 0 i=47 true ns=1;i=206 i=40 false i=2767 i=46 false ns=1;i=213 i=46 false ns=1;i=215 i=46 false ns=1;i=216 i=21 -1 1 1 0 false ns=1;i=213 Variable_2 0 Id Id 0 0 i=46 true ns=1;i=212 i=40 false i=68 i=0 i=17 -1 1 1 0 false ns=1;i=215 Variable_2 0 Number Number 0 0 i=46 true ns=1;i=212 i=40 false i=68 0 i=7 -1 1 1 0 false ns=1;i=216 Variable_2 0 TransitionTime TransitionTime 0 0 i=46 true ns=1;i=212 i=40 false i=68 0001-01-01T00:00:00 i=294 -1 1 1 0 false ns=1;i=218 Variable_2 0 Deletable Deletable 0 0 i=46 true ns=1;i=206 i=40 false i=68 false i=1 -1 1 1 0 false ns=1;i=220 Variable_2 0 RecycleCount RecycleCount 0 0 i=46 true ns=1;i=206 i=40 false i=68 0 i=6 -1 1 1 0 false ns=1;i=233 Method_4 0 Start Start Causes the Program to transition from the Ready state to the Running state. 0 0 i=47 true ns=1;i=206 i=40 false i=2426 true true ns=1;i=234 Method_4 0 Suspend Suspend Causes the Program to transition from the Running state to the Suspended state. 0 0 i=47 true ns=1;i=206 i=40 false i=2427 true true ns=1;i=235 Method_4 0 Resume Resume Causes the Program to transition from the Suspended state to the Running state. 0 0 i=47 true ns=1;i=206 i=40 false i=2428 true true ns=1;i=236 Method_4 0 Halt Halt Causes the Program to transition from the Ready, Running or Suspended state to the Halted state. 0 0 i=47 true ns=1;i=206 i=40 false i=2429 true true ns=1;i=237 Method_4 0 Reset Reset Causes the Program to transition from the Halted state to the Ready state. 0 0 i=47 true ns=1;i=206 i=40 false i=2430 true true ns=1;i=238 Variable_2 2 UpdateRate UpdateRate The rate at which the simulation runs. 0 0 i=46 true ns=1;i=206 i=40 false i=68 0 i=7 -1 3 3 0 false ns=1;i=239 Object_1 1 Boiler #3 Boiler #3 0 0 i=47 true ns=1;i=1 i=40 false ns=2;i=151 i=48 false ns=1;i=240 i=48 false ns=1;i=255 i=48 false ns=1;i=263 i=36 false ns=1;i=285 i=47 false ns=1;i=240 i=47 false ns=1;i=255 i=47 false ns=1;i=263 i=47 false ns=1;i=271 i=47 false ns=1;i=275 i=47 false ns=1;i=279 i=47 false ns=1;i=285 0 ns=1;i=240 Object_1 1 InputPipe Boiler #3: Pipe1001 0 0 i=47 true ns=1;i=239 i=40 false ns=2;i=120 i=48 true ns=1;i=239 i=48 false ns=1;i=241 ns=2;i=1 false ns=1;i=255 i=47 false ns=1;i=241 i=47 false ns=1;i=248 i=47 true ns=1;i=399 1 ns=1;i=241 Object_1 2 FTX001 FlowTransmitter1 0 0 i=47 true ns=1;i=240 i=40 false ns=2;i=50 i=48 true ns=1;i=240 i=47 false ns=1;i=242 1 ns=1;i=242 Variable_2 2 Output Output 0 0 i=47 true ns=1;i=241 i=40 false i=2368 ns=2;i=3 false ns=1;i=272 ns=2;i=3 false ns=1;i=281 i=46 false ns=1;i=246 0 i=11 -1 1 1 0 false ns=1;i=246 Variable_2 0 EURange EURange 0 0 i=46 true ns=1;i=242 i=40 false i=68 i=884 -1 1 1 0 false ns=1;i=248 Object_1 2 ValveX001 Valve 0 0 i=47 true ns=1;i=240 i=40 false ns=2;i=28 i=47 false ns=1;i=249 1 ns=1;i=249 Variable_2 2 Input Input 0 0 i=47 true ns=1;i=248 i=40 false i=2368 ns=2;i=3 true ns=1;i=274 i=46 false ns=1;i=253 0 i=11 -1 2 2 0 false ns=1;i=253 Variable_2 0 EURange EURange 0 0 i=46 true ns=1;i=249 i=40 false i=68 i=884 -1 1 1 0 false ns=1;i=255 Object_1 1 Drum Boiler #3: Drum1001 0 0 i=47 true ns=1;i=239 i=40 false ns=2;i=135 i=48 true ns=1;i=239 ns=2;i=1 true ns=1;i=240 i=48 false ns=1;i=256 ns=2;i=2 false ns=1;i=263 i=47 false ns=1;i=256 i=47 true ns=1;i=398 1 ns=1;i=256 Object_1 2 LIX001 LIX001 0 0 i=47 true ns=1;i=255 i=40 false ns=2;i=43 i=48 true ns=1;i=255 i=47 false ns=1;i=257 1 ns=1;i=257 Variable_2 2 Output Output 0 0 i=47 true ns=1;i=256 i=40 false i=2368 ns=2;i=3 false ns=1;i=276 i=46 false ns=1;i=261 0 i=26 -1 1 1 0 false ns=1;i=261 Variable_2 0 EURange EURange 0 0 i=46 true ns=1;i=257 i=40 false i=68 i=884 -1 1 1 0 false ns=1;i=263 Object_1 1 OutputPipe Boiler #3: Pipe1002 0 0 i=47 true ns=1;i=239 i=40 false ns=2;i=143 i=48 true ns=1;i=239 ns=2;i=2 true ns=1;i=255 i=48 false ns=1;i=264 i=47 false ns=1;i=264 i=47 true ns=1;i=399 1 ns=1;i=264 Object_1 2 FTX002 FTX002 0 0 i=47 true ns=1;i=263 i=40 false ns=2;i=50 i=48 true ns=1;i=263 i=47 false ns=1;i=265 1 ns=1;i=265 Variable_2 2 Output Output 0 0 i=47 true ns=1;i=264 i=40 false i=2368 ns=2;i=3 false ns=1;i=282 i=46 false ns=1;i=269 0 i=11 -1 1 1 0 false ns=1;i=269 Variable_2 0 EURange EURange 0 0 i=46 true ns=1;i=265 i=40 false i=68 i=884 -1 1 1 0 false ns=1;i=271 Object_1 1 FlowController Boiler #3: FC1001 0 0 i=47 true ns=1;i=239 i=40 false ns=2;i=39 i=46 false ns=1;i=272 i=46 false ns=1;i=273 i=46 false ns=1;i=274 0 ns=1;i=272 Variable_2 2 Measurement Measurement 0 0 i=46 true ns=1;i=271 i=40 false i=68 ns=2;i=3 true ns=1;i=242 0 i=11 -1 1 1 0 false ns=1;i=273 Variable_2 2 SetPoint SetPoint 0 0 i=46 true ns=1;i=271 i=40 false i=68 ns=2;i=3 true ns=1;i=283 0 i=11 -1 3 3 0 false ns=1;i=274 Variable_2 2 ControlOut ControlOut 0 0 i=46 true ns=1;i=271 i=40 false i=68 ns=2;i=3 false ns=1;i=249 0 i=11 -1 1 1 0 false ns=1;i=275 Object_1 1 LevelController Boiler #3: LC1001 0 0 i=47 true ns=1;i=239 i=40 false ns=2;i=35 i=46 false ns=1;i=276 i=46 false ns=1;i=277 i=46 false ns=1;i=278 0 ns=1;i=276 Variable_2 2 Measurement Measurement 0 0 i=46 true ns=1;i=275 i=40 false i=68 ns=2;i=3 true ns=1;i=257 0 i=11 -1 1 1 0 false ns=1;i=277 Variable_2 2 SetPoint SetPoint 0 0 i=46 true ns=1;i=275 i=40 false i=68 0 i=11 -1 3 3 0 false ns=1;i=278 Variable_2 2 ControlOut ControlOut 0 0 i=46 true ns=1;i=275 i=40 false i=68 ns=2;i=3 false ns=1;i=280 0 i=11 -1 1 1 0 false ns=1;i=279 Object_1 1 CustomController Boiler #3: CC1001 0 0 i=47 true ns=1;i=239 i=40 false ns=2;i=22 i=46 false ns=1;i=280 i=46 false ns=1;i=281 i=46 false ns=1;i=282 i=46 false ns=1;i=283 i=46 false ns=1;i=284 0 ns=1;i=280 Variable_2 2 Input1 Input1 0 0 i=46 true ns=1;i=279 i=40 false i=68 ns=2;i=3 true ns=1;i=278 0 i=11 -1 2 2 0 false ns=1;i=281 Variable_2 2 Input2 Input2 0 0 i=46 true ns=1;i=279 i=40 false i=68 ns=2;i=3 true ns=1;i=242 0 i=11 -1 2 2 0 false ns=1;i=282 Variable_2 2 Input3 Input3 0 0 i=46 true ns=1;i=279 i=40 false i=68 ns=2;i=3 true ns=1;i=265 0 i=11 -1 2 2 0 false ns=1;i=283 Variable_2 2 ControlOut ControlOut 0 0 i=46 true ns=1;i=279 i=40 false i=68 ns=2;i=3 false ns=1;i=273 0 i=11 -1 1 1 0 false ns=1;i=284 Variable_2 2 Description Description 0 0 i=46 true ns=1;i=279 i=40 false i=68 i=21 -1 1 1 0 false ns=1;i=285 Object_1 2 Simulation Simulation 0 0 i=47 true ns=1;i=239 i=40 false ns=2;i=57 i=36 true ns=1;i=239 i=47 false ns=1;i=286 i=47 false ns=1;i=291 i=46 false ns=1;i=297 i=46 false ns=1;i=299 i=47 false ns=1;i=312 i=47 false ns=1;i=313 i=47 false ns=1;i=314 i=47 false ns=1;i=315 i=47 false ns=1;i=316 i=46 false ns=1;i=317 1 ns=1;i=286 Variable_2 0 CurrentState CurrentState 0 0 i=47 true ns=1;i=285 i=40 false i=2760 i=46 false ns=1;i=287 i=46 false ns=1;i=289 i=21 -1 1 1 0 false ns=1;i=287 Variable_2 0 Id Id 0 0 i=46 true ns=1;i=286 i=40 false i=68 i=0 i=17 -1 1 1 0 false ns=1;i=289 Variable_2 0 Number Number 0 0 i=46 true ns=1;i=286 i=40 false i=68 0 i=7 -1 1 1 0 false ns=1;i=291 Variable_2 0 LastTransition LastTransition 0 0 i=47 true ns=1;i=285 i=40 false i=2767 i=46 false ns=1;i=292 i=46 false ns=1;i=294 i=46 false ns=1;i=295 i=21 -1 1 1 0 false ns=1;i=292 Variable_2 0 Id Id 0 0 i=46 true ns=1;i=291 i=40 false i=68 i=0 i=17 -1 1 1 0 false ns=1;i=294 Variable_2 0 Number Number 0 0 i=46 true ns=1;i=291 i=40 false i=68 0 i=7 -1 1 1 0 false ns=1;i=295 Variable_2 0 TransitionTime TransitionTime 0 0 i=46 true ns=1;i=291 i=40 false i=68 0001-01-01T00:00:00 i=294 -1 1 1 0 false ns=1;i=297 Variable_2 0 Deletable Deletable 0 0 i=46 true ns=1;i=285 i=40 false i=68 false i=1 -1 1 1 0 false ns=1;i=299 Variable_2 0 RecycleCount RecycleCount 0 0 i=46 true ns=1;i=285 i=40 false i=68 0 i=6 -1 1 1 0 false ns=1;i=312 Method_4 0 Start Start Causes the Program to transition from the Ready state to the Running state. 0 0 i=47 true ns=1;i=285 i=40 false i=2426 true true ns=1;i=313 Method_4 0 Suspend Suspend Causes the Program to transition from the Running state to the Suspended state. 0 0 i=47 true ns=1;i=285 i=40 false i=2427 true true ns=1;i=314 Method_4 0 Resume Resume Causes the Program to transition from the Suspended state to the Running state. 0 0 i=47 true ns=1;i=285 i=40 false i=2428 true true ns=1;i=315 Method_4 0 Halt Halt Causes the Program to transition from the Ready, Running or Suspended state to the Halted state. 0 0 i=47 true ns=1;i=285 i=40 false i=2429 true true ns=1;i=316 Method_4 0 Reset Reset Causes the Program to transition from the Halted state to the Ready state. 0 0 i=47 true ns=1;i=285 i=40 false i=2430 true true ns=1;i=317 Variable_2 2 UpdateRate UpdateRate The rate at which the simulation runs. 0 0 i=46 true ns=1;i=285 i=40 false i=68 0 i=7 -1 3 3 0 false ns=1;i=318 Object_1 1 Boiler #4 Boiler #4 0 0 i=47 true ns=1;i=1 i=40 false ns=2;i=151 i=48 false ns=1;i=319 i=48 false ns=1;i=334 i=48 false ns=1;i=342 i=36 false ns=1;i=364 i=47 false ns=1;i=319 i=47 false ns=1;i=334 i=47 false ns=1;i=342 i=47 false ns=1;i=350 i=47 false ns=1;i=354 i=47 false ns=1;i=358 i=47 false ns=1;i=364 0 ns=1;i=319 Object_1 1 InputPipe Boiler #4: Pipe1001 0 0 i=47 true ns=1;i=318 i=40 false ns=2;i=120 i=48 true ns=1;i=318 i=48 false ns=1;i=320 ns=2;i=1 false ns=1;i=334 i=47 false ns=1;i=320 i=47 false ns=1;i=327 i=47 true ns=1;i=399 1 ns=1;i=320 Object_1 2 FTX001 FlowTransmitter1 0 0 i=47 true ns=1;i=319 i=40 false ns=2;i=50 i=48 true ns=1;i=319 i=47 false ns=1;i=321 1 ns=1;i=321 Variable_2 2 Output Output 0 0 i=47 true ns=1;i=320 i=40 false i=2368 ns=2;i=3 false ns=1;i=351 ns=2;i=3 false ns=1;i=360 i=46 false ns=1;i=325 0 i=11 -1 1 1 0 false ns=1;i=325 Variable_2 0 EURange EURange 0 0 i=46 true ns=1;i=321 i=40 false i=68 i=884 -1 1 1 0 false ns=1;i=327 Object_1 2 ValveX001 Valve 0 0 i=47 true ns=1;i=319 i=40 false ns=2;i=28 i=47 false ns=1;i=328 1 ns=1;i=328 Variable_2 2 Input Input 0 0 i=47 true ns=1;i=327 i=40 false i=2368 ns=2;i=3 true ns=1;i=353 i=46 false ns=1;i=332 0 i=11 -1 2 2 0 false ns=1;i=332 Variable_2 0 EURange EURange 0 0 i=46 true ns=1;i=328 i=40 false i=68 i=884 -1 1 1 0 false ns=1;i=334 Object_1 1 Drum Boiler #4: Drum1001 0 0 i=47 true ns=1;i=318 i=40 false ns=2;i=135 i=48 true ns=1;i=318 ns=2;i=1 true ns=1;i=319 i=48 false ns=1;i=335 ns=2;i=2 false ns=1;i=342 i=47 false ns=1;i=335 i=47 true ns=1;i=398 1 ns=1;i=335 Object_1 2 LIX001 LIX001 0 0 i=47 true ns=1;i=334 i=40 false ns=2;i=43 i=48 true ns=1;i=334 i=47 false ns=1;i=336 1 ns=1;i=336 Variable_2 2 Output Output 0 0 i=47 true ns=1;i=335 i=40 false i=2368 ns=2;i=3 false ns=1;i=355 i=46 false ns=1;i=340 0 i=26 -1 1 1 0 false ns=1;i=340 Variable_2 0 EURange EURange 0 0 i=46 true ns=1;i=336 i=40 false i=68 i=884 -1 1 1 0 false ns=1;i=342 Object_1 1 OutputPipe Boiler #4: Pipe1002 0 0 i=47 true ns=1;i=318 i=40 false ns=2;i=143 i=48 true ns=1;i=318 ns=2;i=2 true ns=1;i=334 i=48 false ns=1;i=343 i=47 false ns=1;i=343 i=47 true ns=1;i=399 1 ns=1;i=343 Object_1 2 FTX002 FTX002 0 0 i=47 true ns=1;i=342 i=40 false ns=2;i=50 i=48 true ns=1;i=342 i=47 false ns=1;i=344 1 ns=1;i=344 Variable_2 2 Output Output 0 0 i=47 true ns=1;i=343 i=40 false i=2368 ns=2;i=3 false ns=1;i=361 i=46 false ns=1;i=348 0 i=11 -1 1 1 0 false ns=1;i=348 Variable_2 0 EURange EURange 0 0 i=46 true ns=1;i=344 i=40 false i=68 i=884 -1 1 1 0 false ns=1;i=350 Object_1 1 FlowController Boiler #4: FC1001 0 0 i=47 true ns=1;i=318 i=40 false ns=2;i=39 i=46 false ns=1;i=351 i=46 false ns=1;i=352 i=46 false ns=1;i=353 0 ns=1;i=351 Variable_2 2 Measurement Measurement 0 0 i=46 true ns=1;i=350 i=40 false i=68 ns=2;i=3 true ns=1;i=321 0 i=11 -1 1 1 0 false ns=1;i=352 Variable_2 2 SetPoint SetPoint 0 0 i=46 true ns=1;i=350 i=40 false i=68 ns=2;i=3 true ns=1;i=362 0 i=11 -1 3 3 0 false ns=1;i=353 Variable_2 2 ControlOut ControlOut 0 0 i=46 true ns=1;i=350 i=40 false i=68 ns=2;i=3 false ns=1;i=328 0 i=11 -1 1 1 0 false ns=1;i=354 Object_1 1 LevelController Boiler #4: LC1001 0 0 i=47 true ns=1;i=318 i=40 false ns=2;i=35 i=46 false ns=1;i=355 i=46 false ns=1;i=356 i=46 false ns=1;i=357 0 ns=1;i=355 Variable_2 2 Measurement Measurement 0 0 i=46 true ns=1;i=354 i=40 false i=68 ns=2;i=3 true ns=1;i=336 0 i=11 -1 1 1 0 false ns=1;i=356 Variable_2 2 SetPoint SetPoint 0 0 i=46 true ns=1;i=354 i=40 false i=68 0 i=11 -1 3 3 0 false ns=1;i=357 Variable_2 2 ControlOut ControlOut 0 0 i=46 true ns=1;i=354 i=40 false i=68 ns=2;i=3 false ns=1;i=359 0 i=11 -1 1 1 0 false ns=1;i=358 Object_1 1 CustomController Boiler #4: CC1001 0 0 i=47 true ns=1;i=318 i=40 false ns=2;i=22 i=46 false ns=1;i=359 i=46 false ns=1;i=360 i=46 false ns=1;i=361 i=46 false ns=1;i=362 i=46 false ns=1;i=363 0 ns=1;i=359 Variable_2 2 Input1 Input1 0 0 i=46 true ns=1;i=358 i=40 false i=68 ns=2;i=3 true ns=1;i=357 0 i=11 -1 2 2 0 false ns=1;i=360 Variable_2 2 Input2 Input2 0 0 i=46 true ns=1;i=358 i=40 false i=68 ns=2;i=3 true ns=1;i=321 0 i=11 -1 2 2 0 false ns=1;i=361 Variable_2 2 Input3 Input3 0 0 i=46 true ns=1;i=358 i=40 false i=68 ns=2;i=3 true ns=1;i=344 0 i=11 -1 2 2 0 false ns=1;i=362 Variable_2 2 ControlOut ControlOut 0 0 i=46 true ns=1;i=358 i=40 false i=68 ns=2;i=3 false ns=1;i=352 0 i=11 -1 1 1 0 false ns=1;i=363 Variable_2 2 Description Description 0 0 i=46 true ns=1;i=358 i=40 false i=68 i=21 -1 1 1 0 false ns=1;i=364 Object_1 2 Simulation Simulation 0 0 i=47 true ns=1;i=318 i=40 false ns=2;i=57 i=36 true ns=1;i=318 i=47 false ns=1;i=365 i=47 false ns=1;i=370 i=46 false ns=1;i=376 i=46 false ns=1;i=378 i=47 false ns=1;i=391 i=47 false ns=1;i=392 i=47 false ns=1;i=393 i=47 false ns=1;i=394 i=47 false ns=1;i=395 i=46 false ns=1;i=396 1 ns=1;i=365 Variable_2 0 CurrentState CurrentState 0 0 i=47 true ns=1;i=364 i=40 false i=2760 i=46 false ns=1;i=366 i=46 false ns=1;i=368 i=21 -1 1 1 0 false ns=1;i=366 Variable_2 0 Id Id 0 0 i=46 true ns=1;i=365 i=40 false i=68 i=0 i=17 -1 1 1 0 false ns=1;i=368 Variable_2 0 Number Number 0 0 i=46 true ns=1;i=365 i=40 false i=68 0 i=7 -1 1 1 0 false ns=1;i=370 Variable_2 0 LastTransition LastTransition 0 0 i=47 true ns=1;i=364 i=40 false i=2767 i=46 false ns=1;i=371 i=46 false ns=1;i=373 i=46 false ns=1;i=374 i=21 -1 1 1 0 false ns=1;i=371 Variable_2 0 Id Id 0 0 i=46 true ns=1;i=370 i=40 false i=68 i=0 i=17 -1 1 1 0 false ns=1;i=373 Variable_2 0 Number Number 0 0 i=46 true ns=1;i=370 i=40 false i=68 0 i=7 -1 1 1 0 false ns=1;i=374 Variable_2 0 TransitionTime TransitionTime 0 0 i=46 true ns=1;i=370 i=40 false i=68 0001-01-01T00:00:00 i=294 -1 1 1 0 false ns=1;i=376 Variable_2 0 Deletable Deletable 0 0 i=46 true ns=1;i=364 i=40 false i=68 false i=1 -1 1 1 0 false ns=1;i=378 Variable_2 0 RecycleCount RecycleCount 0 0 i=46 true ns=1;i=364 i=40 false i=68 0 i=6 -1 1 1 0 false ns=1;i=391 Method_4 0 Start Start Causes the Program to transition from the Ready state to the Running state. 0 0 i=47 true ns=1;i=364 i=40 false i=2426 true true ns=1;i=392 Method_4 0 Suspend Suspend Causes the Program to transition from the Running state to the Suspended state. 0 0 i=47 true ns=1;i=364 i=40 false i=2427 true true ns=1;i=393 Method_4 0 Resume Resume Causes the Program to transition from the Suspended state to the Running state. 0 0 i=47 true ns=1;i=364 i=40 false i=2428 true true ns=1;i=394 Method_4 0 Halt Halt Causes the Program to transition from the Ready, Running or Suspended state to the Halted state. 0 0 i=47 true ns=1;i=364 i=40 false i=2429 true true ns=1;i=395 Method_4 0 Reset Reset Causes the Program to transition from the Halted state to the Ready state. 0 0 i=47 true ns=1;i=364 i=40 false i=2430 true true ns=1;i=396 Variable_2 2 UpdateRate UpdateRate The rate at which the simulation runs. 0 0 i=46 true ns=1;i=364 i=40 false i=68 0 i=7 -1 3 3 0 false ns=1;i=398 Object_1 1 Drums Drums 0 0 i=40 false i=58 i=35 true i=85 i=47 false ns=1;i=97 i=47 false ns=1;i=176 i=47 false ns=1;i=255 i=47 false ns=1;i=334 0 ns=1;i=399 Object_1 1 Pipes Pipes 0 0 i=40 false i=58 i=35 true i=85 i=47 false ns=1;i=82 i=47 false ns=1;i=105 i=47 false ns=1;i=161 i=47 false ns=1;i=184 i=47 false ns=1;i=240 i=47 false ns=1;i=263 i=47 false ns=1;i=319 i=47 false ns=1;i=342 0 ================================================ FILE: Networking/Simulator.Boiler/UAInformationModel/DemoConfiguration/BoilersSet/Commsvr.UA.Examples.BoilersSet.NodeSet2.xml ================================================  http://commsvr.com/UA/Examples/BoilersSet http://tempuri.org/UA/Examples/BoilerType i=1 i=2 i=3 i=4 i=5 i=6 i=7 i=8 i=9 i=10 i=11 i=13 i=12 i=15 i=14 i=16 i=17 i=18 i=20 i=21 i=19 i=22 i=26 i=27 i=28 i=47 i=46 i=35 i=36 i=48 i=45 i=40 i=37 i=38 i=39 BoilersArea ns=1;i=81 ns=1;i=160 ns=1;i=239 ns=1;i=318 i=85 i=2253 ns=1;i=81 i=61 Boiler #1 ns=1;i=82 ns=1;i=97 ns=1;i=105 ns=1;i=113 ns=1;i=117 ns=1;i=121 ns=1;i=127 ns=1;i=1 ns=1;i=82 ns=1;i=97 ns=1;i=105 ns=1;i=127 ns=2;i=151 ns=1;i=1 Boiler #1: Pipe1001 ns=1;i=83 ns=1;i=90 ns=1;i=81 ns=1;i=83 ns=1;i=97 ns=2;i=120 ns=1;i=81 FlowTransmitter1 ns=1;i=84 ns=1;i=82 ns=2;i=50 ns=1;i=82 Output ns=1;i=88 ns=1;i=114 ns=1;i=123 i=2368 ns=1;i=83 EURange i=68 ns=1;i=84 Valve ns=1;i=91 ns=2;i=28 ns=1;i=82 Input ns=1;i=95 ns=1;i=116 i=2368 ns=1;i=90 EURange i=68 ns=1;i=91 Boiler #1: Drum1001 ns=1;i=98 ns=1;i=81 ns=1;i=82 ns=1;i=98 ns=1;i=105 ns=2;i=135 ns=1;i=81 LIX001 ns=1;i=99 ns=1;i=97 ns=2;i=43 ns=1;i=97 Output ns=1;i=103 ns=1;i=118 i=2368 ns=1;i=98 EURange i=68 ns=1;i=99 Boiler #1: Pipe1002 ns=1;i=106 ns=1;i=81 ns=1;i=97 ns=1;i=106 ns=2;i=143 ns=1;i=81 FTX002 ns=1;i=107 ns=1;i=105 ns=2;i=50 ns=1;i=105 Output ns=1;i=111 ns=1;i=124 i=2368 ns=1;i=106 EURange i=68 ns=1;i=107 Boiler #1: FC1001 ns=1;i=114 ns=1;i=115 ns=1;i=116 ns=2;i=39 ns=1;i=81 Measurement ns=1;i=84 i=68 ns=1;i=113 SetPoint ns=1;i=125 i=68 ns=1;i=113 ControlOut ns=1;i=91 i=68 ns=1;i=113 Boiler #1: LC1001 ns=1;i=118 ns=1;i=119 ns=1;i=120 ns=2;i=35 ns=1;i=81 Measurement ns=1;i=99 i=68 ns=1;i=117 SetPoint i=68 ns=1;i=117 ControlOut ns=1;i=122 i=68 ns=1;i=117 Boiler #1: CC1001 ns=1;i=122 ns=1;i=123 ns=1;i=124 ns=1;i=125 ns=1;i=126 ns=2;i=22 ns=1;i=81 Input1 ns=1;i=120 i=68 ns=1;i=121 Input2 ns=1;i=84 i=68 ns=1;i=121 Input3 ns=1;i=107 i=68 ns=1;i=121 ControlOut ns=1;i=115 i=68 ns=1;i=121 Description i=68 ns=1;i=121 Simulation ns=1;i=128 ns=1;i=133 ns=1;i=139 ns=1;i=141 ns=1;i=154 ns=1;i=155 ns=1;i=156 ns=1;i=157 ns=1;i=158 ns=1;i=159 ns=1;i=81 ns=2;i=57 ns=1;i=81 CurrentState ns=1;i=129 ns=1;i=131 i=2760 ns=1;i=127 Id i=68 ns=1;i=128 Number i=68 ns=1;i=128 LastTransition ns=1;i=134 ns=1;i=136 ns=1;i=137 i=2767 ns=1;i=127 Id i=68 ns=1;i=133 Number i=68 ns=1;i=133 TransitionTime i=68 ns=1;i=133 Deletable i=68 ns=1;i=127 RecycleCount i=68 ns=1;i=127 Start Causes the Program to transition from the Ready state to the Running state. ns=1;i=127 Suspend Causes the Program to transition from the Running state to the Suspended state. ns=1;i=127 Resume Causes the Program to transition from the Suspended state to the Running state. ns=1;i=127 Halt Causes the Program to transition from the Ready, Running or Suspended state to the Halted state. ns=1;i=127 Reset Causes the Program to transition from the Halted state to the Ready state. ns=1;i=127 UpdateRate The rate at which the simulation runs. i=68 ns=1;i=127 Boilers Second ns=1;i=161 ns=1;i=176 ns=1;i=184 ns=1;i=192 ns=1;i=196 ns=1;i=200 ns=1;i=206 ns=1;i=161 ns=1;i=176 ns=1;i=184 ns=1;i=206 ns=2;i=151 ns=1;i=1 Boiler #2: Pipe1001 ns=1;i=162 ns=1;i=169 ns=1;i=160 ns=1;i=162 ns=1;i=176 ns=2;i=120 ns=1;i=160 FlowTransmitter1 ns=1;i=163 ns=1;i=161 ns=2;i=50 ns=1;i=161 Output ns=1;i=167 ns=1;i=193 ns=1;i=202 i=2368 ns=1;i=162 EURange i=68 ns=1;i=163 Valve ns=1;i=170 ns=2;i=28 ns=1;i=161 Input ns=1;i=174 ns=1;i=195 i=2368 ns=1;i=169 EURange i=68 ns=1;i=170 Boiler #2: Drum1001 ns=1;i=177 ns=1;i=160 ns=1;i=161 ns=1;i=177 ns=1;i=184 ns=2;i=135 ns=1;i=160 LIX001 ns=1;i=178 ns=1;i=176 ns=2;i=43 ns=1;i=176 Output ns=1;i=182 ns=1;i=197 i=2368 ns=1;i=177 EURange i=68 ns=1;i=178 Boiler #2: Pipe1002 ns=1;i=185 ns=1;i=160 ns=1;i=176 ns=1;i=185 ns=2;i=143 ns=1;i=160 FTX002 ns=1;i=186 ns=1;i=184 ns=2;i=50 ns=1;i=184 Output ns=1;i=190 ns=1;i=203 i=2368 ns=1;i=185 EURange i=68 ns=1;i=186 Boiler #2: FC1001 ns=1;i=193 ns=1;i=194 ns=1;i=195 ns=2;i=39 ns=1;i=160 Measurement ns=1;i=163 i=68 ns=1;i=192 SetPoint ns=1;i=204 i=68 ns=1;i=192 ControlOut ns=1;i=170 i=68 ns=1;i=192 Boiler #2: LC1001 ns=1;i=197 ns=1;i=198 ns=1;i=199 ns=2;i=35 ns=1;i=160 Measurement ns=1;i=178 i=68 ns=1;i=196 SetPoint i=68 ns=1;i=196 ControlOut ns=1;i=201 i=68 ns=1;i=196 Boiler #2: CC1001 ns=1;i=201 ns=1;i=202 ns=1;i=203 ns=1;i=204 ns=1;i=205 ns=2;i=22 ns=1;i=160 Input1 ns=1;i=199 i=68 ns=1;i=200 Input2 ns=1;i=163 i=68 ns=1;i=200 Input3 ns=1;i=186 i=68 ns=1;i=200 ControlOut ns=1;i=194 i=68 ns=1;i=200 Description i=68 ns=1;i=200 Simulation ns=1;i=207 ns=1;i=212 ns=1;i=218 ns=1;i=220 ns=1;i=233 ns=1;i=234 ns=1;i=235 ns=1;i=236 ns=1;i=237 ns=1;i=238 ns=1;i=160 ns=2;i=57 ns=1;i=160 CurrentState ns=1;i=208 ns=1;i=210 i=2760 ns=1;i=206 Id i=68 ns=1;i=207 Number i=68 ns=1;i=207 LastTransition ns=1;i=213 ns=1;i=215 ns=1;i=216 i=2767 ns=1;i=206 Id i=68 ns=1;i=212 Number i=68 ns=1;i=212 TransitionTime i=68 ns=1;i=212 Deletable i=68 ns=1;i=206 RecycleCount i=68 ns=1;i=206 Start Causes the Program to transition from the Ready state to the Running state. ns=1;i=206 Suspend Causes the Program to transition from the Running state to the Suspended state. ns=1;i=206 Resume Causes the Program to transition from the Suspended state to the Running state. ns=1;i=206 Halt Causes the Program to transition from the Ready, Running or Suspended state to the Halted state. ns=1;i=206 Reset Causes the Program to transition from the Halted state to the Ready state. ns=1;i=206 UpdateRate The rate at which the simulation runs. i=68 ns=1;i=206 Boiler #3 ns=1;i=240 ns=1;i=255 ns=1;i=263 ns=1;i=271 ns=1;i=275 ns=1;i=279 ns=1;i=285 ns=1;i=240 ns=1;i=255 ns=1;i=263 ns=1;i=285 ns=2;i=151 ns=1;i=1 Boiler #3: Pipe1001 ns=1;i=241 ns=1;i=248 ns=1;i=239 ns=1;i=241 ns=1;i=255 ns=2;i=120 ns=1;i=239 FlowTransmitter1 ns=1;i=242 ns=1;i=240 ns=2;i=50 ns=1;i=240 Output ns=1;i=246 ns=1;i=272 ns=1;i=281 i=2368 ns=1;i=241 EURange i=68 ns=1;i=242 Valve ns=1;i=249 ns=2;i=28 ns=1;i=240 Input ns=1;i=253 ns=1;i=274 i=2368 ns=1;i=248 EURange i=68 ns=1;i=249 Boiler #3: Drum1001 ns=1;i=256 ns=1;i=239 ns=1;i=240 ns=1;i=256 ns=1;i=263 ns=2;i=135 ns=1;i=239 LIX001 ns=1;i=257 ns=1;i=255 ns=2;i=43 ns=1;i=255 Output ns=1;i=261 ns=1;i=276 i=2368 ns=1;i=256 EURange i=68 ns=1;i=257 Boiler #3: Pipe1002 ns=1;i=264 ns=1;i=239 ns=1;i=255 ns=1;i=264 ns=2;i=143 ns=1;i=239 FTX002 ns=1;i=265 ns=1;i=263 ns=2;i=50 ns=1;i=263 Output ns=1;i=269 ns=1;i=282 i=2368 ns=1;i=264 EURange i=68 ns=1;i=265 Boiler #3: FC1001 ns=1;i=272 ns=1;i=273 ns=1;i=274 ns=2;i=39 ns=1;i=239 Measurement ns=1;i=242 i=68 ns=1;i=271 SetPoint ns=1;i=283 i=68 ns=1;i=271 ControlOut ns=1;i=249 i=68 ns=1;i=271 Boiler #3: LC1001 ns=1;i=276 ns=1;i=277 ns=1;i=278 ns=2;i=35 ns=1;i=239 Measurement ns=1;i=257 i=68 ns=1;i=275 SetPoint i=68 ns=1;i=275 ControlOut ns=1;i=280 i=68 ns=1;i=275 Boiler #3: CC1001 ns=1;i=280 ns=1;i=281 ns=1;i=282 ns=1;i=283 ns=1;i=284 ns=2;i=22 ns=1;i=239 Input1 ns=1;i=278 i=68 ns=1;i=279 Input2 ns=1;i=242 i=68 ns=1;i=279 Input3 ns=1;i=265 i=68 ns=1;i=279 ControlOut ns=1;i=273 i=68 ns=1;i=279 Description i=68 ns=1;i=279 Simulation ns=1;i=286 ns=1;i=291 ns=1;i=297 ns=1;i=299 ns=1;i=312 ns=1;i=313 ns=1;i=314 ns=1;i=315 ns=1;i=316 ns=1;i=317 ns=1;i=239 ns=2;i=57 ns=1;i=239 CurrentState ns=1;i=287 ns=1;i=289 i=2760 ns=1;i=285 Id i=68 ns=1;i=286 Number i=68 ns=1;i=286 LastTransition ns=1;i=292 ns=1;i=294 ns=1;i=295 i=2767 ns=1;i=285 Id i=68 ns=1;i=291 Number i=68 ns=1;i=291 TransitionTime i=68 ns=1;i=291 Deletable i=68 ns=1;i=285 RecycleCount i=68 ns=1;i=285 Start Causes the Program to transition from the Ready state to the Running state. ns=1;i=285 Suspend Causes the Program to transition from the Running state to the Suspended state. ns=1;i=285 Resume Causes the Program to transition from the Suspended state to the Running state. ns=1;i=285 Halt Causes the Program to transition from the Ready, Running or Suspended state to the Halted state. ns=1;i=285 Reset Causes the Program to transition from the Halted state to the Ready state. ns=1;i=285 UpdateRate The rate at which the simulation runs. i=68 ns=1;i=285 Boiler #4 ns=1;i=319 ns=1;i=334 ns=1;i=342 ns=1;i=350 ns=1;i=354 ns=1;i=358 ns=1;i=364 ns=1;i=319 ns=1;i=334 ns=1;i=342 ns=1;i=364 ns=2;i=151 ns=1;i=1 Boiler #4: Pipe1001 ns=1;i=320 ns=1;i=327 ns=1;i=318 ns=1;i=320 ns=1;i=334 ns=2;i=120 ns=1;i=318 FlowTransmitter1 ns=1;i=321 ns=1;i=319 ns=2;i=50 ns=1;i=319 Output ns=1;i=325 ns=1;i=351 ns=1;i=360 i=2368 ns=1;i=320 EURange i=68 ns=1;i=321 Valve ns=1;i=328 ns=2;i=28 ns=1;i=319 Input ns=1;i=332 ns=1;i=353 i=2368 ns=1;i=327 EURange i=68 ns=1;i=328 Boiler #4: Drum1001 ns=1;i=335 ns=1;i=318 ns=1;i=319 ns=1;i=335 ns=1;i=342 ns=2;i=135 ns=1;i=318 LIX001 ns=1;i=336 ns=1;i=334 ns=2;i=43 ns=1;i=334 Output ns=1;i=340 ns=1;i=355 i=2368 ns=1;i=335 EURange i=68 ns=1;i=336 Boiler #4: Pipe1002 ns=1;i=343 ns=1;i=318 ns=1;i=334 ns=1;i=343 ns=2;i=143 ns=1;i=318 FTX002 ns=1;i=344 ns=1;i=342 ns=2;i=50 ns=1;i=342 Output ns=1;i=348 ns=1;i=361 i=2368 ns=1;i=343 EURange i=68 ns=1;i=344 Boiler #4: FC1001 ns=1;i=351 ns=1;i=352 ns=1;i=353 ns=2;i=39 ns=1;i=318 Measurement ns=1;i=321 i=68 ns=1;i=350 SetPoint ns=1;i=362 i=68 ns=1;i=350 ControlOut ns=1;i=328 i=68 ns=1;i=350 Boiler #4: LC1001 ns=1;i=355 ns=1;i=356 ns=1;i=357 ns=2;i=35 ns=1;i=318 Measurement ns=1;i=336 i=68 ns=1;i=354 SetPoint i=68 ns=1;i=354 ControlOut ns=1;i=359 i=68 ns=1;i=354 Boiler #4: CC1001 ns=1;i=359 ns=1;i=360 ns=1;i=361 ns=1;i=362 ns=1;i=363 ns=2;i=22 ns=1;i=318 Input1 ns=1;i=357 i=68 ns=1;i=358 Input2 ns=1;i=321 i=68 ns=1;i=358 Input3 ns=1;i=344 i=68 ns=1;i=358 ControlOut ns=1;i=352 i=68 ns=1;i=358 Description i=68 ns=1;i=358 Simulation ns=1;i=365 ns=1;i=370 ns=1;i=376 ns=1;i=378 ns=1;i=391 ns=1;i=392 ns=1;i=393 ns=1;i=394 ns=1;i=395 ns=1;i=396 ns=1;i=318 ns=2;i=57 ns=1;i=318 CurrentState ns=1;i=366 ns=1;i=368 i=2760 ns=1;i=364 Id i=68 ns=1;i=365 Number i=68 ns=1;i=365 LastTransition ns=1;i=371 ns=1;i=373 ns=1;i=374 i=2767 ns=1;i=364 Id i=68 ns=1;i=370 Number i=68 ns=1;i=370 TransitionTime i=68 ns=1;i=370 Deletable i=68 ns=1;i=364 RecycleCount i=68 ns=1;i=364 Start Causes the Program to transition from the Ready state to the Running state. ns=1;i=364 Suspend Causes the Program to transition from the Running state to the Suspended state. ns=1;i=364 Resume Causes the Program to transition from the Suspended state to the Running state. ns=1;i=364 Halt Causes the Program to transition from the Ready, Running or Suspended state to the Halted state. ns=1;i=364 Reset Causes the Program to transition from the Halted state to the Ready state. ns=1;i=364 UpdateRate The rate at which the simulation runs. i=68 ns=1;i=364 Drums i=85 ns=1;i=97 ns=1;i=176 ns=1;i=255 ns=1;i=334 i=58 Pipes i=85 ns=1;i=82 ns=1;i=105 ns=1;i=161 ns=1;i=184 ns=1;i=240 ns=1;i=263 ns=1;i=319 ns=1;i=342 i=58 ================================================ FILE: Networking/Simulator.Boiler/UAInformationModel/DemoConfiguration/BoilersSet/Commsvr.UA.Examples.BoilersSet.PredefinedNodes.xml ================================================  http://tempuri.org/UA/Examples/BoilerType http://commsvr.com/UA/Examples/BoilersSet Object_1 ns=2;i=1 2 BoilersArea i=47 i=61 1 i=35 true i=85 i=48 true i=2253 i=48 ns=2;i=81 Object_1 ns=2;i=81 2 Boiler #1 i=47 ns=1;i=151 81 i=48 true ns=2;i=1 i=48 ns=2;i=82 i=48 ns=2;i=97 i=48 ns=2;i=105 i=36 ns=2;i=127 Object_1 ns=2;i=82 2 InputPipe Boiler #1: Pipe1001 i=47 ns=1;i=120 82 1 i=48 true ns=2;i=81 i=48 ns=2;i=83 ns=1;i=1 ns=2;i=97 Object_1 ns=2;i=83 1 FTX001 FlowTransmitter1 i=47 ns=1;i=50 83 1 i=48 true ns=2;i=82 Variable_2 ns=2;i=84 1 Output i=47 i=2368 84 i=11 -1 1 1 ns=1;i=3 ns=2;i=114 ns=1;i=3 ns=2;i=123 Variable_2 ns=2;i=88 0 EURange i=46 i=68 88 i=884 -1 1 1 Object_1 ns=2;i=90 1 ValveX001 Valve i=47 ns=1;i=28 90 1 Variable_2 ns=2;i=91 1 Input i=47 i=2368 91 i=11 -1 2 2 ns=1;i=3 true ns=2;i=116 Variable_2 ns=2;i=95 0 EURange i=46 i=68 95 i=884 -1 1 1 Object_1 ns=2;i=97 2 Drum Boiler #1: Drum1001 i=47 ns=1;i=135 97 1 i=48 true ns=2;i=81 ns=1;i=1 true ns=2;i=82 i=48 ns=2;i=98 ns=1;i=2 ns=2;i=105 Object_1 ns=2;i=98 1 LIX001 i=47 ns=1;i=43 98 1 i=48 true ns=2;i=97 Variable_2 ns=2;i=99 1 Output i=47 i=2368 99 i=26 -1 1 1 ns=1;i=3 ns=2;i=118 Variable_2 ns=2;i=103 0 EURange i=46 i=68 103 i=884 -1 1 1 Object_1 ns=2;i=105 2 OutputPipe Boiler #1: Pipe1002 i=47 ns=1;i=143 105 1 i=48 true ns=2;i=81 ns=1;i=2 true ns=2;i=97 i=48 ns=2;i=106 Object_1 ns=2;i=106 1 FTX002 i=47 ns=1;i=50 106 1 i=48 true ns=2;i=105 Variable_2 ns=2;i=107 1 Output i=47 i=2368 107 i=11 -1 1 1 ns=1;i=3 ns=2;i=124 Variable_2 ns=2;i=111 0 EURange i=46 i=68 111 i=884 -1 1 1 Object_1 ns=2;i=113 2 FlowController Boiler #1: FC1001 i=47 ns=1;i=39 113 Variable_2 ns=2;i=114 1 Measurement i=46 i=68 114 i=11 -1 1 1 ns=1;i=3 true ns=2;i=84 Variable_2 ns=2;i=115 1 SetPoint i=46 i=68 115 i=11 -1 3 3 ns=1;i=3 true ns=2;i=125 Variable_2 ns=2;i=116 1 ControlOut i=46 i=68 116 i=11 -1 1 1 ns=1;i=3 ns=2;i=91 Object_1 ns=2;i=117 2 LevelController Boiler #1: LC1001 i=47 ns=1;i=35 117 Variable_2 ns=2;i=118 1 Measurement i=46 i=68 118 i=11 -1 1 1 ns=1;i=3 true ns=2;i=99 Variable_2 ns=2;i=119 1 SetPoint i=46 i=68 119 i=11 -1 3 3 Variable_2 ns=2;i=120 1 ControlOut i=46 i=68 120 i=11 -1 1 1 ns=1;i=3 ns=2;i=122 Object_1 ns=2;i=121 2 CustomController Boiler #1: CC1001 i=47 ns=1;i=22 121 Variable_2 ns=2;i=122 1 Input1 i=46 i=68 122 i=11 -1 2 2 ns=1;i=3 true ns=2;i=120 Variable_2 ns=2;i=123 1 Input2 i=46 i=68 123 i=11 -1 2 2 ns=1;i=3 true ns=2;i=84 Variable_2 ns=2;i=124 1 Input3 i=46 i=68 124 i=11 -1 2 2 ns=1;i=3 true ns=2;i=107 Variable_2 ns=2;i=125 1 ControlOut i=46 i=68 125 i=11 -1 1 1 ns=1;i=3 ns=2;i=115 Variable_2 ns=2;i=126 1 Description i=46 i=68 126 i=21 -1 1 1 Object_1 ns=2;i=127 1 Simulation i=47 ns=1;i=57 127 1 i=36 true ns=2;i=81 Variable_2 ns=2;i=128 0 CurrentState i=47 i=2760 128 i=21 -1 1 1 Variable_2 ns=2;i=129 0 Id i=46 i=68 129 i=17 -1 1 1 Variable_2 ns=2;i=131 0 Number i=46 i=68 131 i=7 -1 1 1 Variable_2 ns=2;i=133 0 LastTransition i=47 i=2767 133 i=21 -1 1 1 Variable_2 ns=2;i=134 0 Id i=46 i=68 134 i=17 -1 1 1 Variable_2 ns=2;i=136 0 Number i=46 i=68 136 i=7 -1 1 1 Variable_2 ns=2;i=137 0 TransitionTime i=46 i=68 137 i=294 -1 1 1 Variable_2 ns=2;i=139 0 Deletable i=46 i=68 139 i=1 -1 1 1 Variable_2 ns=2;i=141 0 RecycleCount i=46 i=68 141 i=6 -1 1 1 Method_4 ns=2;i=154 0 Start Causes the Program to transition from the Ready state to the Running state. i=47 i=2426 154 true true Method_4 ns=2;i=155 0 Suspend Causes the Program to transition from the Running state to the Suspended state. i=47 i=2427 155 true true Method_4 ns=2;i=156 0 Resume Causes the Program to transition from the Suspended state to the Running state. i=47 i=2428 156 true true Method_4 ns=2;i=157 0 Halt Causes the Program to transition from the Ready, Running or Suspended state to the Halted state. i=47 i=2429 157 true true Method_4 ns=2;i=158 0 Reset Causes the Program to transition from the Halted state to the Ready state. i=47 i=2430 158 true true Variable_2 ns=2;i=159 1 UpdateRate The rate at which the simulation runs. i=46 i=68 159 i=7 -1 3 3 Object_1 ns=2;i=160 2 Boiler #2 Boilers Second i=47 ns=1;i=151 160 i=48 ns=2;i=161 i=48 ns=2;i=176 i=48 ns=2;i=184 i=36 ns=2;i=206 Object_1 ns=2;i=161 2 InputPipe Boiler #2: Pipe1001 i=47 ns=1;i=120 161 1 i=48 true ns=2;i=160 i=48 ns=2;i=162 ns=1;i=1 ns=2;i=176 Object_1 ns=2;i=162 1 FTX001 FlowTransmitter1 i=47 ns=1;i=50 162 1 i=48 true ns=2;i=161 Variable_2 ns=2;i=163 1 Output i=47 i=2368 163 i=11 -1 1 1 ns=1;i=3 ns=2;i=193 ns=1;i=3 ns=2;i=202 Variable_2 ns=2;i=167 0 EURange i=46 i=68 167 i=884 -1 1 1 Object_1 ns=2;i=169 1 ValveX001 Valve i=47 ns=1;i=28 169 1 Variable_2 ns=2;i=170 1 Input i=47 i=2368 170 i=11 -1 2 2 ns=1;i=3 true ns=2;i=195 Variable_2 ns=2;i=174 0 EURange i=46 i=68 174 i=884 -1 1 1 Object_1 ns=2;i=176 2 Drum Boiler #2: Drum1001 i=47 ns=1;i=135 176 1 i=48 true ns=2;i=160 ns=1;i=1 true ns=2;i=161 i=48 ns=2;i=177 ns=1;i=2 ns=2;i=184 Object_1 ns=2;i=177 1 LIX001 i=47 ns=1;i=43 177 1 i=48 true ns=2;i=176 Variable_2 ns=2;i=178 1 Output i=47 i=2368 178 i=26 -1 1 1 ns=1;i=3 ns=2;i=197 Variable_2 ns=2;i=182 0 EURange i=46 i=68 182 i=884 -1 1 1 Object_1 ns=2;i=184 2 OutputPipe Boiler #2: Pipe1002 i=47 ns=1;i=143 184 1 i=48 true ns=2;i=160 ns=1;i=2 true ns=2;i=176 i=48 ns=2;i=185 Object_1 ns=2;i=185 1 FTX002 i=47 ns=1;i=50 185 1 i=48 true ns=2;i=184 Variable_2 ns=2;i=186 1 Output i=47 i=2368 186 i=11 -1 1 1 ns=1;i=3 ns=2;i=203 Variable_2 ns=2;i=190 0 EURange i=46 i=68 190 i=884 -1 1 1 Object_1 ns=2;i=192 2 FlowController Boiler #2: FC1001 i=47 ns=1;i=39 192 Variable_2 ns=2;i=193 1 Measurement i=46 i=68 193 i=11 -1 1 1 ns=1;i=3 true ns=2;i=163 Variable_2 ns=2;i=194 1 SetPoint i=46 i=68 194 i=11 -1 3 3 ns=1;i=3 true ns=2;i=204 Variable_2 ns=2;i=195 1 ControlOut i=46 i=68 195 i=11 -1 1 1 ns=1;i=3 ns=2;i=170 Object_1 ns=2;i=196 2 LevelController Boiler #2: LC1001 i=47 ns=1;i=35 196 Variable_2 ns=2;i=197 1 Measurement i=46 i=68 197 i=11 -1 1 1 ns=1;i=3 true ns=2;i=178 Variable_2 ns=2;i=198 1 SetPoint i=46 i=68 198 i=11 -1 3 3 Variable_2 ns=2;i=199 1 ControlOut i=46 i=68 199 i=11 -1 1 1 ns=1;i=3 ns=2;i=201 Object_1 ns=2;i=200 2 CustomController Boiler #2: CC1001 i=47 ns=1;i=22 200 Variable_2 ns=2;i=201 1 Input1 i=46 i=68 201 i=11 -1 2 2 ns=1;i=3 true ns=2;i=199 Variable_2 ns=2;i=202 1 Input2 i=46 i=68 202 i=11 -1 2 2 ns=1;i=3 true ns=2;i=163 Variable_2 ns=2;i=203 1 Input3 i=46 i=68 203 i=11 -1 2 2 ns=1;i=3 true ns=2;i=186 Variable_2 ns=2;i=204 1 ControlOut i=46 i=68 204 i=11 -1 1 1 ns=1;i=3 ns=2;i=194 Variable_2 ns=2;i=205 1 Description i=46 i=68 205 i=21 -1 1 1 Object_1 ns=2;i=206 1 Simulation i=47 ns=1;i=57 206 1 i=36 true ns=2;i=160 Variable_2 ns=2;i=207 0 CurrentState i=47 i=2760 207 i=21 -1 1 1 Variable_2 ns=2;i=208 0 Id i=46 i=68 208 i=17 -1 1 1 Variable_2 ns=2;i=210 0 Number i=46 i=68 210 i=7 -1 1 1 Variable_2 ns=2;i=212 0 LastTransition i=47 i=2767 212 i=21 -1 1 1 Variable_2 ns=2;i=213 0 Id i=46 i=68 213 i=17 -1 1 1 Variable_2 ns=2;i=215 0 Number i=46 i=68 215 i=7 -1 1 1 Variable_2 ns=2;i=216 0 TransitionTime i=46 i=68 216 i=294 -1 1 1 Variable_2 ns=2;i=218 0 Deletable i=46 i=68 218 i=1 -1 1 1 Variable_2 ns=2;i=220 0 RecycleCount i=46 i=68 220 i=6 -1 1 1 Method_4 ns=2;i=233 0 Start Causes the Program to transition from the Ready state to the Running state. i=47 i=2426 233 true true Method_4 ns=2;i=234 0 Suspend Causes the Program to transition from the Running state to the Suspended state. i=47 i=2427 234 true true Method_4 ns=2;i=235 0 Resume Causes the Program to transition from the Suspended state to the Running state. i=47 i=2428 235 true true Method_4 ns=2;i=236 0 Halt Causes the Program to transition from the Ready, Running or Suspended state to the Halted state. i=47 i=2429 236 true true Method_4 ns=2;i=237 0 Reset Causes the Program to transition from the Halted state to the Ready state. i=47 i=2430 237 true true Variable_2 ns=2;i=238 1 UpdateRate The rate at which the simulation runs. i=46 i=68 238 i=7 -1 3 3 Object_1 ns=2;i=239 2 Boiler #3 i=47 ns=1;i=151 239 i=48 ns=2;i=240 i=48 ns=2;i=255 i=48 ns=2;i=263 i=36 ns=2;i=285 Object_1 ns=2;i=240 2 InputPipe Boiler #3: Pipe1001 i=47 ns=1;i=120 240 1 i=48 true ns=2;i=239 i=48 ns=2;i=241 ns=1;i=1 ns=2;i=255 Object_1 ns=2;i=241 1 FTX001 FlowTransmitter1 i=47 ns=1;i=50 241 1 i=48 true ns=2;i=240 Variable_2 ns=2;i=242 1 Output i=47 i=2368 242 i=11 -1 1 1 ns=1;i=3 ns=2;i=272 ns=1;i=3 ns=2;i=281 Variable_2 ns=2;i=246 0 EURange i=46 i=68 246 i=884 -1 1 1 Object_1 ns=2;i=248 1 ValveX001 Valve i=47 ns=1;i=28 248 1 Variable_2 ns=2;i=249 1 Input i=47 i=2368 249 i=11 -1 2 2 ns=1;i=3 true ns=2;i=274 Variable_2 ns=2;i=253 0 EURange i=46 i=68 253 i=884 -1 1 1 Object_1 ns=2;i=255 2 Drum Boiler #3: Drum1001 i=47 ns=1;i=135 255 1 i=48 true ns=2;i=239 ns=1;i=1 true ns=2;i=240 i=48 ns=2;i=256 ns=1;i=2 ns=2;i=263 Object_1 ns=2;i=256 1 LIX001 i=47 ns=1;i=43 256 1 i=48 true ns=2;i=255 Variable_2 ns=2;i=257 1 Output i=47 i=2368 257 i=26 -1 1 1 ns=1;i=3 ns=2;i=276 Variable_2 ns=2;i=261 0 EURange i=46 i=68 261 i=884 -1 1 1 Object_1 ns=2;i=263 2 OutputPipe Boiler #3: Pipe1002 i=47 ns=1;i=143 263 1 i=48 true ns=2;i=239 ns=1;i=2 true ns=2;i=255 i=48 ns=2;i=264 Object_1 ns=2;i=264 1 FTX002 i=47 ns=1;i=50 264 1 i=48 true ns=2;i=263 Variable_2 ns=2;i=265 1 Output i=47 i=2368 265 i=11 -1 1 1 ns=1;i=3 ns=2;i=282 Variable_2 ns=2;i=269 0 EURange i=46 i=68 269 i=884 -1 1 1 Object_1 ns=2;i=271 2 FlowController Boiler #3: FC1001 i=47 ns=1;i=39 271 Variable_2 ns=2;i=272 1 Measurement i=46 i=68 272 i=11 -1 1 1 ns=1;i=3 true ns=2;i=242 Variable_2 ns=2;i=273 1 SetPoint i=46 i=68 273 i=11 -1 3 3 ns=1;i=3 true ns=2;i=283 Variable_2 ns=2;i=274 1 ControlOut i=46 i=68 274 i=11 -1 1 1 ns=1;i=3 ns=2;i=249 Object_1 ns=2;i=275 2 LevelController Boiler #3: LC1001 i=47 ns=1;i=35 275 Variable_2 ns=2;i=276 1 Measurement i=46 i=68 276 i=11 -1 1 1 ns=1;i=3 true ns=2;i=257 Variable_2 ns=2;i=277 1 SetPoint i=46 i=68 277 i=11 -1 3 3 Variable_2 ns=2;i=278 1 ControlOut i=46 i=68 278 i=11 -1 1 1 ns=1;i=3 ns=2;i=280 Object_1 ns=2;i=279 2 CustomController Boiler #3: CC1001 i=47 ns=1;i=22 279 Variable_2 ns=2;i=280 1 Input1 i=46 i=68 280 i=11 -1 2 2 ns=1;i=3 true ns=2;i=278 Variable_2 ns=2;i=281 1 Input2 i=46 i=68 281 i=11 -1 2 2 ns=1;i=3 true ns=2;i=242 Variable_2 ns=2;i=282 1 Input3 i=46 i=68 282 i=11 -1 2 2 ns=1;i=3 true ns=2;i=265 Variable_2 ns=2;i=283 1 ControlOut i=46 i=68 283 i=11 -1 1 1 ns=1;i=3 ns=2;i=273 Variable_2 ns=2;i=284 1 Description i=46 i=68 284 i=21 -1 1 1 Object_1 ns=2;i=285 1 Simulation i=47 ns=1;i=57 285 1 i=36 true ns=2;i=239 Variable_2 ns=2;i=286 0 CurrentState i=47 i=2760 286 i=21 -1 1 1 Variable_2 ns=2;i=287 0 Id i=46 i=68 287 i=17 -1 1 1 Variable_2 ns=2;i=289 0 Number i=46 i=68 289 i=7 -1 1 1 Variable_2 ns=2;i=291 0 LastTransition i=47 i=2767 291 i=21 -1 1 1 Variable_2 ns=2;i=292 0 Id i=46 i=68 292 i=17 -1 1 1 Variable_2 ns=2;i=294 0 Number i=46 i=68 294 i=7 -1 1 1 Variable_2 ns=2;i=295 0 TransitionTime i=46 i=68 295 i=294 -1 1 1 Variable_2 ns=2;i=297 0 Deletable i=46 i=68 297 i=1 -1 1 1 Variable_2 ns=2;i=299 0 RecycleCount i=46 i=68 299 i=6 -1 1 1 Method_4 ns=2;i=312 0 Start Causes the Program to transition from the Ready state to the Running state. i=47 i=2426 312 true true Method_4 ns=2;i=313 0 Suspend Causes the Program to transition from the Running state to the Suspended state. i=47 i=2427 313 true true Method_4 ns=2;i=314 0 Resume Causes the Program to transition from the Suspended state to the Running state. i=47 i=2428 314 true true Method_4 ns=2;i=315 0 Halt Causes the Program to transition from the Ready, Running or Suspended state to the Halted state. i=47 i=2429 315 true true Method_4 ns=2;i=316 0 Reset Causes the Program to transition from the Halted state to the Ready state. i=47 i=2430 316 true true Variable_2 ns=2;i=317 1 UpdateRate The rate at which the simulation runs. i=46 i=68 317 i=7 -1 3 3 Object_1 ns=2;i=318 2 Boiler #4 i=47 ns=1;i=151 318 i=48 ns=2;i=319 i=48 ns=2;i=334 i=48 ns=2;i=342 i=36 ns=2;i=364 Object_1 ns=2;i=319 2 InputPipe Boiler #4: Pipe1001 i=47 ns=1;i=120 319 1 i=48 true ns=2;i=318 i=48 ns=2;i=320 ns=1;i=1 ns=2;i=334 Object_1 ns=2;i=320 1 FTX001 FlowTransmitter1 i=47 ns=1;i=50 320 1 i=48 true ns=2;i=319 Variable_2 ns=2;i=321 1 Output i=47 i=2368 321 i=11 -1 1 1 ns=1;i=3 ns=2;i=351 ns=1;i=3 ns=2;i=360 Variable_2 ns=2;i=325 0 EURange i=46 i=68 325 i=884 -1 1 1 Object_1 ns=2;i=327 1 ValveX001 Valve i=47 ns=1;i=28 327 1 Variable_2 ns=2;i=328 1 Input i=47 i=2368 328 i=11 -1 2 2 ns=1;i=3 true ns=2;i=353 Variable_2 ns=2;i=332 0 EURange i=46 i=68 332 i=884 -1 1 1 Object_1 ns=2;i=334 2 Drum Boiler #4: Drum1001 i=47 ns=1;i=135 334 1 i=48 true ns=2;i=318 ns=1;i=1 true ns=2;i=319 i=48 ns=2;i=335 ns=1;i=2 ns=2;i=342 Object_1 ns=2;i=335 1 LIX001 i=47 ns=1;i=43 335 1 i=48 true ns=2;i=334 Variable_2 ns=2;i=336 1 Output i=47 i=2368 336 i=26 -1 1 1 ns=1;i=3 ns=2;i=355 Variable_2 ns=2;i=340 0 EURange i=46 i=68 340 i=884 -1 1 1 Object_1 ns=2;i=342 2 OutputPipe Boiler #4: Pipe1002 i=47 ns=1;i=143 342 1 i=48 true ns=2;i=318 ns=1;i=2 true ns=2;i=334 i=48 ns=2;i=343 Object_1 ns=2;i=343 1 FTX002 i=47 ns=1;i=50 343 1 i=48 true ns=2;i=342 Variable_2 ns=2;i=344 1 Output i=47 i=2368 344 i=11 -1 1 1 ns=1;i=3 ns=2;i=361 Variable_2 ns=2;i=348 0 EURange i=46 i=68 348 i=884 -1 1 1 Object_1 ns=2;i=350 2 FlowController Boiler #4: FC1001 i=47 ns=1;i=39 350 Variable_2 ns=2;i=351 1 Measurement i=46 i=68 351 i=11 -1 1 1 ns=1;i=3 true ns=2;i=321 Variable_2 ns=2;i=352 1 SetPoint i=46 i=68 352 i=11 -1 3 3 ns=1;i=3 true ns=2;i=362 Variable_2 ns=2;i=353 1 ControlOut i=46 i=68 353 i=11 -1 1 1 ns=1;i=3 ns=2;i=328 Object_1 ns=2;i=354 2 LevelController Boiler #4: LC1001 i=47 ns=1;i=35 354 Variable_2 ns=2;i=355 1 Measurement i=46 i=68 355 i=11 -1 1 1 ns=1;i=3 true ns=2;i=336 Variable_2 ns=2;i=356 1 SetPoint i=46 i=68 356 i=11 -1 3 3 Variable_2 ns=2;i=357 1 ControlOut i=46 i=68 357 i=11 -1 1 1 ns=1;i=3 ns=2;i=359 Object_1 ns=2;i=358 2 CustomController Boiler #4: CC1001 i=47 ns=1;i=22 358 Variable_2 ns=2;i=359 1 Input1 i=46 i=68 359 i=11 -1 2 2 ns=1;i=3 true ns=2;i=357 Variable_2 ns=2;i=360 1 Input2 i=46 i=68 360 i=11 -1 2 2 ns=1;i=3 true ns=2;i=321 Variable_2 ns=2;i=361 1 Input3 i=46 i=68 361 i=11 -1 2 2 ns=1;i=3 true ns=2;i=344 Variable_2 ns=2;i=362 1 ControlOut i=46 i=68 362 i=11 -1 1 1 ns=1;i=3 ns=2;i=352 Variable_2 ns=2;i=363 1 Description i=46 i=68 363 i=21 -1 1 1 Object_1 ns=2;i=364 1 Simulation i=47 ns=1;i=57 364 1 i=36 true ns=2;i=318 Variable_2 ns=2;i=365 0 CurrentState i=47 i=2760 365 i=21 -1 1 1 Variable_2 ns=2;i=366 0 Id i=46 i=68 366 i=17 -1 1 1 Variable_2 ns=2;i=368 0 Number i=46 i=68 368 i=7 -1 1 1 Variable_2 ns=2;i=370 0 LastTransition i=47 i=2767 370 i=21 -1 1 1 Variable_2 ns=2;i=371 0 Id i=46 i=68 371 i=17 -1 1 1 Variable_2 ns=2;i=373 0 Number i=46 i=68 373 i=7 -1 1 1 Variable_2 ns=2;i=374 0 TransitionTime i=46 i=68 374 i=294 -1 1 1 Variable_2 ns=2;i=376 0 Deletable i=46 i=68 376 i=1 -1 1 1 Variable_2 ns=2;i=378 0 RecycleCount i=46 i=68 378 i=6 -1 1 1 Method_4 ns=2;i=391 0 Start Causes the Program to transition from the Ready state to the Running state. i=47 i=2426 391 true true Method_4 ns=2;i=392 0 Suspend Causes the Program to transition from the Running state to the Suspended state. i=47 i=2427 392 true true Method_4 ns=2;i=393 0 Resume Causes the Program to transition from the Suspended state to the Running state. i=47 i=2428 393 true true Method_4 ns=2;i=394 0 Halt Causes the Program to transition from the Ready, Running or Suspended state to the Halted state. i=47 i=2429 394 true true Method_4 ns=2;i=395 0 Reset Causes the Program to transition from the Halted state to the Ready state. i=47 i=2430 395 true true Variable_2 ns=2;i=396 1 UpdateRate The rate at which the simulation runs. i=46 i=68 396 i=7 -1 3 3 Object_1 ns=2;i=398 2 Drums i=47 i=58 398 i=35 true i=85 i=47 ns=2;i=97 i=47 ns=2;i=176 i=47 ns=2;i=255 i=47 ns=2;i=334 Object_1 ns=2;i=399 2 Pipes i=47 i=58 399 i=35 true i=85 i=47 ns=2;i=82 i=47 ns=2;i=105 i=47 ns=2;i=161 i=47 ns=2;i=184 i=47 ns=2;i=240 i=47 ns=2;i=263 i=47 ns=2;i=319 i=47 ns=2;i=342 ================================================ FILE: Networking/Simulator.Boiler/UAInformationModel/DemoConfiguration/BoilersSet/Commsvr.UA.Examples.BoilersSet.Types.bsd ================================================ ================================================ FILE: Networking/Simulator.Boiler/UAInformationModel/DemoConfiguration/BoilersSet/Commsvr.UA.Examples.BoilersSet.Types.xsd ================================================ ================================================ FILE: Networking/Simulator.Boiler/UAInformationModel/DemoConfiguration/BoilersSet.csv ================================================ BoilersArea,1,Object BoilersArea_BoilerAlpha,81,Object BoilersArea_BoilerAlpha_InputPipe,82,Object BoilersArea_BoilerAlpha_InputPipe_FlowTransmitter1,83,Object BoilersArea_BoilerAlpha_InputPipe_FlowTransmitter1_Output,84,Variable BoilersArea_BoilerAlpha_InputPipe_FlowTransmitter1_Output_Definition,85,Variable BoilersArea_BoilerAlpha_InputPipe_FlowTransmitter1_Output_ValuePrecision,86,Variable BoilersArea_BoilerAlpha_InputPipe_FlowTransmitter1_Output_InstrumentRange,87,Variable BoilersArea_BoilerAlpha_InputPipe_FlowTransmitter1_Output_EURange,88,Variable BoilersArea_BoilerAlpha_InputPipe_FlowTransmitter1_Output_EngineeringUnits,89,Variable BoilersArea_BoilerAlpha_InputPipe_Valve,90,Object BoilersArea_BoilerAlpha_InputPipe_Valve_Input,91,Variable BoilersArea_BoilerAlpha_InputPipe_Valve_Input_Definition,92,Variable BoilersArea_BoilerAlpha_InputPipe_Valve_Input_ValuePrecision,93,Variable BoilersArea_BoilerAlpha_InputPipe_Valve_Input_InstrumentRange,94,Variable BoilersArea_BoilerAlpha_InputPipe_Valve_Input_EURange,95,Variable BoilersArea_BoilerAlpha_InputPipe_Valve_Input_EngineeringUnits,96,Variable BoilersArea_BoilerAlpha_Drum,97,Object BoilersArea_BoilerAlpha_Drum_LevelIndicator,98,Object BoilersArea_BoilerAlpha_Drum_LevelIndicator_Output,99,Variable BoilersArea_BoilerAlpha_Drum_LevelIndicator_Output_Definition,100,Variable BoilersArea_BoilerAlpha_Drum_LevelIndicator_Output_ValuePrecision,101,Variable BoilersArea_BoilerAlpha_Drum_LevelIndicator_Output_InstrumentRange,102,Variable BoilersArea_BoilerAlpha_Drum_LevelIndicator_Output_EURange,103,Variable BoilersArea_BoilerAlpha_Drum_LevelIndicator_Output_EngineeringUnits,104,Variable BoilersArea_BoilerAlpha_OutputPipe,105,Object BoilersArea_BoilerAlpha_OutputPipe_FlowTransmitter2,106,Object BoilersArea_BoilerAlpha_OutputPipe_FlowTransmitter2_Output,107,Variable BoilersArea_BoilerAlpha_OutputPipe_FlowTransmitter2_Output_Definition,108,Variable BoilersArea_BoilerAlpha_OutputPipe_FlowTransmitter2_Output_ValuePrecision,109,Variable BoilersArea_BoilerAlpha_OutputPipe_FlowTransmitter2_Output_InstrumentRange,110,Variable BoilersArea_BoilerAlpha_OutputPipe_FlowTransmitter2_Output_EURange,111,Variable BoilersArea_BoilerAlpha_OutputPipe_FlowTransmitter2_Output_EngineeringUnits,112,Variable BoilersArea_BoilerAlpha_FlowController,113,Object BoilersArea_BoilerAlpha_FlowController_Measurement,114,Variable BoilersArea_BoilerAlpha_FlowController_SetPoint,115,Variable BoilersArea_BoilerAlpha_FlowController_ControlOut,116,Variable BoilersArea_BoilerAlpha_LevelController,117,Object BoilersArea_BoilerAlpha_LevelController_Measurement,118,Variable BoilersArea_BoilerAlpha_LevelController_SetPoint,119,Variable BoilersArea_BoilerAlpha_LevelController_ControlOut,120,Variable BoilersArea_BoilerAlpha_CustomController,121,Object BoilersArea_BoilerAlpha_CustomController_Input1,122,Variable BoilersArea_BoilerAlpha_CustomController_Input2,123,Variable BoilersArea_BoilerAlpha_CustomController_Input3,124,Variable BoilersArea_BoilerAlpha_CustomController_ControlOut,125,Variable BoilersArea_BoilerAlpha_CustomController_DescriptionX,126,Variable BoilersArea_BoilerAlpha_Simulation,127,Object BoilersArea_BoilerAlpha_Simulation_CurrentState,128,Variable BoilersArea_BoilerAlpha_Simulation_CurrentState_Id,129,Variable BoilersArea_BoilerAlpha_Simulation_CurrentState_Name,130,Variable BoilersArea_BoilerAlpha_Simulation_CurrentState_Number,131,Variable BoilersArea_BoilerAlpha_Simulation_CurrentState_EffectiveDisplayName,132,Variable BoilersArea_BoilerAlpha_Simulation_LastTransition,133,Variable BoilersArea_BoilerAlpha_Simulation_LastTransition_Id,134,Variable BoilersArea_BoilerAlpha_Simulation_LastTransition_Name,135,Variable BoilersArea_BoilerAlpha_Simulation_LastTransition_Number,136,Variable BoilersArea_BoilerAlpha_Simulation_LastTransition_TransitionTime,137,Variable BoilersArea_BoilerAlpha_Simulation_LastTransition_EffectiveTransitionTime,138,Variable BoilersArea_BoilerAlpha_Simulation_Deletable,139,Variable BoilersArea_BoilerAlpha_Simulation_AutoDelete,140,Variable BoilersArea_BoilerAlpha_Simulation_RecycleCount,141,Variable BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics,142,Variable BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_CreateSessionId,143,Variable BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_CreateClientName,144,Variable BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_InvocationCreationTime,145,Variable BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_LastTransitionTime,146,Variable BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_LastMethodCall,147,Variable BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_LastMethodSessionId,148,Variable BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_LastMethodInputArguments,149,Variable BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_LastMethodOutputArguments,150,Variable BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_LastMethodCallTime,151,Variable BoilersArea_BoilerAlpha_Simulation_ProgramDiagnostics_LastMethodReturnStatus,152,Variable BoilersArea_BoilerAlpha_Simulation_FinalResultData,153,Object BoilersArea_BoilerAlpha_Simulation_Start,154,Method BoilersArea_BoilerAlpha_Simulation_Suspend,155,Method BoilersArea_BoilerAlpha_Simulation_Resume,156,Method BoilersArea_BoilerAlpha_Simulation_Halt,157,Method BoilersArea_BoilerAlpha_Simulation_Reset,158,Method BoilersArea_BoilerAlpha_Simulation_UpdateRate,159,Variable BoilersArea_BoilerBravo,160,Object BoilersArea_BoilerBravo_InputPipe,161,Object BoilersArea_BoilerBravo_InputPipe_FlowTransmitter1,162,Object BoilersArea_BoilerBravo_InputPipe_FlowTransmitter1_Output,163,Variable BoilersArea_BoilerBravo_InputPipe_FlowTransmitter1_Output_Definition,164,Variable BoilersArea_BoilerBravo_InputPipe_FlowTransmitter1_Output_ValuePrecision,165,Variable BoilersArea_BoilerBravo_InputPipe_FlowTransmitter1_Output_InstrumentRange,166,Variable BoilersArea_BoilerBravo_InputPipe_FlowTransmitter1_Output_EURange,167,Variable BoilersArea_BoilerBravo_InputPipe_FlowTransmitter1_Output_EngineeringUnits,168,Variable BoilersArea_BoilerBravo_InputPipe_Valve,169,Object BoilersArea_BoilerBravo_InputPipe_Valve_Input,170,Variable BoilersArea_BoilerBravo_InputPipe_Valve_Input_Definition,171,Variable BoilersArea_BoilerBravo_InputPipe_Valve_Input_ValuePrecision,172,Variable BoilersArea_BoilerBravo_InputPipe_Valve_Input_InstrumentRange,173,Variable BoilersArea_BoilerBravo_InputPipe_Valve_Input_EURange,174,Variable BoilersArea_BoilerBravo_InputPipe_Valve_Input_EngineeringUnits,175,Variable BoilersArea_BoilerBravo_Drum,176,Object BoilersArea_BoilerBravo_Drum_LevelIndicator,177,Object BoilersArea_BoilerBravo_Drum_LevelIndicator_Output,178,Variable BoilersArea_BoilerBravo_Drum_LevelIndicator_Output_Definition,179,Variable BoilersArea_BoilerBravo_Drum_LevelIndicator_Output_ValuePrecision,180,Variable BoilersArea_BoilerBravo_Drum_LevelIndicator_Output_InstrumentRange,181,Variable BoilersArea_BoilerBravo_Drum_LevelIndicator_Output_EURange,182,Variable BoilersArea_BoilerBravo_Drum_LevelIndicator_Output_EngineeringUnits,183,Variable BoilersArea_BoilerBravo_OutputPipe,184,Object BoilersArea_BoilerBravo_OutputPipe_FlowTransmitter2,185,Object BoilersArea_BoilerBravo_OutputPipe_FlowTransmitter2_Output,186,Variable BoilersArea_BoilerBravo_OutputPipe_FlowTransmitter2_Output_Definition,187,Variable BoilersArea_BoilerBravo_OutputPipe_FlowTransmitter2_Output_ValuePrecision,188,Variable BoilersArea_BoilerBravo_OutputPipe_FlowTransmitter2_Output_InstrumentRange,189,Variable BoilersArea_BoilerBravo_OutputPipe_FlowTransmitter2_Output_EURange,190,Variable BoilersArea_BoilerBravo_OutputPipe_FlowTransmitter2_Output_EngineeringUnits,191,Variable BoilersArea_BoilerBravo_FlowController,192,Object BoilersArea_BoilerBravo_FlowController_Measurement,193,Variable BoilersArea_BoilerBravo_FlowController_SetPoint,194,Variable BoilersArea_BoilerBravo_FlowController_ControlOut,195,Variable BoilersArea_BoilerBravo_LevelController,196,Object BoilersArea_BoilerBravo_LevelController_Measurement,197,Variable BoilersArea_BoilerBravo_LevelController_SetPoint,198,Variable BoilersArea_BoilerBravo_LevelController_ControlOut,199,Variable BoilersArea_BoilerBravo_CustomController,200,Object BoilersArea_BoilerBravo_CustomController_Input1,201,Variable BoilersArea_BoilerBravo_CustomController_Input2,202,Variable BoilersArea_BoilerBravo_CustomController_Input3,203,Variable BoilersArea_BoilerBravo_CustomController_ControlOut,204,Variable BoilersArea_BoilerBravo_CustomController_DescriptionX,205,Variable BoilersArea_BoilerBravo_Simulation,206,Object BoilersArea_BoilerBravo_Simulation_CurrentState,207,Variable BoilersArea_BoilerBravo_Simulation_CurrentState_Id,208,Variable BoilersArea_BoilerBravo_Simulation_CurrentState_Name,209,Variable BoilersArea_BoilerBravo_Simulation_CurrentState_Number,210,Variable BoilersArea_BoilerBravo_Simulation_CurrentState_EffectiveDisplayName,211,Variable BoilersArea_BoilerBravo_Simulation_LastTransition,212,Variable BoilersArea_BoilerBravo_Simulation_LastTransition_Id,213,Variable BoilersArea_BoilerBravo_Simulation_LastTransition_Name,214,Variable BoilersArea_BoilerBravo_Simulation_LastTransition_Number,215,Variable BoilersArea_BoilerBravo_Simulation_LastTransition_TransitionTime,216,Variable BoilersArea_BoilerBravo_Simulation_LastTransition_EffectiveTransitionTime,217,Variable BoilersArea_BoilerBravo_Simulation_Deletable,218,Variable BoilersArea_BoilerBravo_Simulation_AutoDelete,219,Variable BoilersArea_BoilerBravo_Simulation_RecycleCount,220,Variable BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics,221,Variable BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_CreateSessionId,222,Variable BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_CreateClientName,223,Variable BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_InvocationCreationTime,224,Variable BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_LastTransitionTime,225,Variable BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_LastMethodCall,226,Variable BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_LastMethodSessionId,227,Variable BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_LastMethodInputArguments,228,Variable BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_LastMethodOutputArguments,229,Variable BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_LastMethodCallTime,230,Variable BoilersArea_BoilerBravo_Simulation_ProgramDiagnostics_LastMethodReturnStatus,231,Variable BoilersArea_BoilerBravo_Simulation_FinalResultData,232,Object BoilersArea_BoilerBravo_Simulation_Start,233,Method BoilersArea_BoilerBravo_Simulation_Suspend,234,Method BoilersArea_BoilerBravo_Simulation_Resume,235,Method BoilersArea_BoilerBravo_Simulation_Halt,236,Method BoilersArea_BoilerBravo_Simulation_Reset,237,Method BoilersArea_BoilerBravo_Simulation_UpdateRate,238,Variable BoilersArea_BoilerCharlie,239,Object BoilersArea_BoilerCharlie_InputPipe,240,Object BoilersArea_BoilerCharlie_InputPipe_FlowTransmitter1,241,Object BoilersArea_BoilerCharlie_InputPipe_FlowTransmitter1_Output,242,Variable BoilersArea_BoilerCharlie_InputPipe_FlowTransmitter1_Output_Definition,243,Variable BoilersArea_BoilerCharlie_InputPipe_FlowTransmitter1_Output_ValuePrecision,244,Variable BoilersArea_BoilerCharlie_InputPipe_FlowTransmitter1_Output_InstrumentRange,245,Variable BoilersArea_BoilerCharlie_InputPipe_FlowTransmitter1_Output_EURange,246,Variable BoilersArea_BoilerCharlie_InputPipe_FlowTransmitter1_Output_EngineeringUnits,247,Variable BoilersArea_BoilerCharlie_InputPipe_Valve,248,Object BoilersArea_BoilerCharlie_InputPipe_Valve_Input,249,Variable BoilersArea_BoilerCharlie_InputPipe_Valve_Input_Definition,250,Variable BoilersArea_BoilerCharlie_InputPipe_Valve_Input_ValuePrecision,251,Variable BoilersArea_BoilerCharlie_InputPipe_Valve_Input_InstrumentRange,252,Variable BoilersArea_BoilerCharlie_InputPipe_Valve_Input_EURange,253,Variable BoilersArea_BoilerCharlie_InputPipe_Valve_Input_EngineeringUnits,254,Variable BoilersArea_BoilerCharlie_Drum,255,Object BoilersArea_BoilerCharlie_Drum_LevelIndicator,256,Object BoilersArea_BoilerCharlie_Drum_LevelIndicator_Output,257,Variable BoilersArea_BoilerCharlie_Drum_LevelIndicator_Output_Definition,258,Variable BoilersArea_BoilerCharlie_Drum_LevelIndicator_Output_ValuePrecision,259,Variable BoilersArea_BoilerCharlie_Drum_LevelIndicator_Output_InstrumentRange,260,Variable BoilersArea_BoilerCharlie_Drum_LevelIndicator_Output_EURange,261,Variable BoilersArea_BoilerCharlie_Drum_LevelIndicator_Output_EngineeringUnits,262,Variable BoilersArea_BoilerCharlie_OutputPipe,263,Object BoilersArea_BoilerCharlie_OutputPipe_FlowTransmitter2,264,Object BoilersArea_BoilerCharlie_OutputPipe_FlowTransmitter2_Output,265,Variable BoilersArea_BoilerCharlie_OutputPipe_FlowTransmitter2_Output_Definition,266,Variable BoilersArea_BoilerCharlie_OutputPipe_FlowTransmitter2_Output_ValuePrecision,267,Variable BoilersArea_BoilerCharlie_OutputPipe_FlowTransmitter2_Output_InstrumentRange,268,Variable BoilersArea_BoilerCharlie_OutputPipe_FlowTransmitter2_Output_EURange,269,Variable BoilersArea_BoilerCharlie_OutputPipe_FlowTransmitter2_Output_EngineeringUnits,270,Variable BoilersArea_BoilerCharlie_FlowController,271,Object BoilersArea_BoilerCharlie_FlowController_Measurement,272,Variable BoilersArea_BoilerCharlie_FlowController_SetPoint,273,Variable BoilersArea_BoilerCharlie_FlowController_ControlOut,274,Variable BoilersArea_BoilerCharlie_LevelController,275,Object BoilersArea_BoilerCharlie_LevelController_Measurement,276,Variable BoilersArea_BoilerCharlie_LevelController_SetPoint,277,Variable BoilersArea_BoilerCharlie_LevelController_ControlOut,278,Variable BoilersArea_BoilerCharlie_CustomController,279,Object BoilersArea_BoilerCharlie_CustomController_Input1,280,Variable BoilersArea_BoilerCharlie_CustomController_Input2,281,Variable BoilersArea_BoilerCharlie_CustomController_Input3,282,Variable BoilersArea_BoilerCharlie_CustomController_ControlOut,283,Variable BoilersArea_BoilerCharlie_CustomController_DescriptionX,284,Variable BoilersArea_BoilerCharlie_Simulation,285,Object BoilersArea_BoilerCharlie_Simulation_CurrentState,286,Variable BoilersArea_BoilerCharlie_Simulation_CurrentState_Id,287,Variable BoilersArea_BoilerCharlie_Simulation_CurrentState_Name,288,Variable BoilersArea_BoilerCharlie_Simulation_CurrentState_Number,289,Variable BoilersArea_BoilerCharlie_Simulation_CurrentState_EffectiveDisplayName,290,Variable BoilersArea_BoilerCharlie_Simulation_LastTransition,291,Variable BoilersArea_BoilerCharlie_Simulation_LastTransition_Id,292,Variable BoilersArea_BoilerCharlie_Simulation_LastTransition_Name,293,Variable BoilersArea_BoilerCharlie_Simulation_LastTransition_Number,294,Variable BoilersArea_BoilerCharlie_Simulation_LastTransition_TransitionTime,295,Variable BoilersArea_BoilerCharlie_Simulation_LastTransition_EffectiveTransitionTime,296,Variable BoilersArea_BoilerCharlie_Simulation_Deletable,297,Variable BoilersArea_BoilerCharlie_Simulation_AutoDelete,298,Variable BoilersArea_BoilerCharlie_Simulation_RecycleCount,299,Variable BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics,300,Variable BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_CreateSessionId,301,Variable BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_CreateClientName,302,Variable BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_InvocationCreationTime,303,Variable BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_LastTransitionTime,304,Variable BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_LastMethodCall,305,Variable BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_LastMethodSessionId,306,Variable BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_LastMethodInputArguments,307,Variable BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_LastMethodOutputArguments,308,Variable BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_LastMethodCallTime,309,Variable BoilersArea_BoilerCharlie_Simulation_ProgramDiagnostics_LastMethodReturnStatus,310,Variable BoilersArea_BoilerCharlie_Simulation_FinalResultData,311,Object BoilersArea_BoilerCharlie_Simulation_Start,312,Method BoilersArea_BoilerCharlie_Simulation_Suspend,313,Method BoilersArea_BoilerCharlie_Simulation_Resume,314,Method BoilersArea_BoilerCharlie_Simulation_Halt,315,Method BoilersArea_BoilerCharlie_Simulation_Reset,316,Method BoilersArea_BoilerCharlie_Simulation_UpdateRate,317,Variable BoilersArea_BoilerDelta,318,Object BoilersArea_BoilerDelta_InputPipe,319,Object BoilersArea_BoilerDelta_InputPipe_FlowTransmitter1,320,Object BoilersArea_BoilerDelta_InputPipe_FlowTransmitter1_Output,321,Variable BoilersArea_BoilerDelta_InputPipe_FlowTransmitter1_Output_Definition,322,Variable BoilersArea_BoilerDelta_InputPipe_FlowTransmitter1_Output_ValuePrecision,323,Variable BoilersArea_BoilerDelta_InputPipe_FlowTransmitter1_Output_InstrumentRange,324,Variable BoilersArea_BoilerDelta_InputPipe_FlowTransmitter1_Output_EURange,325,Variable BoilersArea_BoilerDelta_InputPipe_FlowTransmitter1_Output_EngineeringUnits,326,Variable BoilersArea_BoilerDelta_InputPipe_Valve,327,Object BoilersArea_BoilerDelta_InputPipe_Valve_Input,328,Variable BoilersArea_BoilerDelta_InputPipe_Valve_Input_Definition,329,Variable BoilersArea_BoilerDelta_InputPipe_Valve_Input_ValuePrecision,330,Variable BoilersArea_BoilerDelta_InputPipe_Valve_Input_InstrumentRange,331,Variable BoilersArea_BoilerDelta_InputPipe_Valve_Input_EURange,332,Variable BoilersArea_BoilerDelta_InputPipe_Valve_Input_EngineeringUnits,333,Variable BoilersArea_BoilerDelta_Drum,334,Object BoilersArea_BoilerDelta_Drum_LevelIndicator,335,Object BoilersArea_BoilerDelta_Drum_LevelIndicator_Output,336,Variable BoilersArea_BoilerDelta_Drum_LevelIndicator_Output_Definition,337,Variable BoilersArea_BoilerDelta_Drum_LevelIndicator_Output_ValuePrecision,338,Variable BoilersArea_BoilerDelta_Drum_LevelIndicator_Output_InstrumentRange,339,Variable BoilersArea_BoilerDelta_Drum_LevelIndicator_Output_EURange,340,Variable BoilersArea_BoilerDelta_Drum_LevelIndicator_Output_EngineeringUnits,341,Variable BoilersArea_BoilerDelta_OutputPipe,342,Object BoilersArea_BoilerDelta_OutputPipe_FlowTransmitter2,343,Object BoilersArea_BoilerDelta_OutputPipe_FlowTransmitter2_Output,344,Variable BoilersArea_BoilerDelta_OutputPipe_FlowTransmitter2_Output_Definition,345,Variable BoilersArea_BoilerDelta_OutputPipe_FlowTransmitter2_Output_ValuePrecision,346,Variable BoilersArea_BoilerDelta_OutputPipe_FlowTransmitter2_Output_InstrumentRange,347,Variable BoilersArea_BoilerDelta_OutputPipe_FlowTransmitter2_Output_EURange,348,Variable BoilersArea_BoilerDelta_OutputPipe_FlowTransmitter2_Output_EngineeringUnits,349,Variable BoilersArea_BoilerDelta_FlowController,350,Object BoilersArea_BoilerDelta_FlowController_Measurement,351,Variable BoilersArea_BoilerDelta_FlowController_SetPoint,352,Variable BoilersArea_BoilerDelta_FlowController_ControlOut,353,Variable BoilersArea_BoilerDelta_LevelController,354,Object BoilersArea_BoilerDelta_LevelController_Measurement,355,Variable BoilersArea_BoilerDelta_LevelController_SetPoint,356,Variable BoilersArea_BoilerDelta_LevelController_ControlOut,357,Variable BoilersArea_BoilerDelta_CustomController,358,Object BoilersArea_BoilerDelta_CustomController_Input1,359,Variable BoilersArea_BoilerDelta_CustomController_Input2,360,Variable BoilersArea_BoilerDelta_CustomController_Input3,361,Variable BoilersArea_BoilerDelta_CustomController_ControlOut,362,Variable BoilersArea_BoilerDelta_CustomController_DescriptionX,363,Variable BoilersArea_BoilerDelta_Simulation,364,Object BoilersArea_BoilerDelta_Simulation_CurrentState,365,Variable BoilersArea_BoilerDelta_Simulation_CurrentState_Id,366,Variable BoilersArea_BoilerDelta_Simulation_CurrentState_Name,367,Variable BoilersArea_BoilerDelta_Simulation_CurrentState_Number,368,Variable BoilersArea_BoilerDelta_Simulation_CurrentState_EffectiveDisplayName,369,Variable BoilersArea_BoilerDelta_Simulation_LastTransition,370,Variable BoilersArea_BoilerDelta_Simulation_LastTransition_Id,371,Variable BoilersArea_BoilerDelta_Simulation_LastTransition_Name,372,Variable BoilersArea_BoilerDelta_Simulation_LastTransition_Number,373,Variable BoilersArea_BoilerDelta_Simulation_LastTransition_TransitionTime,374,Variable BoilersArea_BoilerDelta_Simulation_LastTransition_EffectiveTransitionTime,375,Variable BoilersArea_BoilerDelta_Simulation_Deletable,376,Variable BoilersArea_BoilerDelta_Simulation_AutoDelete,377,Variable BoilersArea_BoilerDelta_Simulation_RecycleCount,378,Variable BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics,379,Variable BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_CreateSessionId,380,Variable BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_CreateClientName,381,Variable BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_InvocationCreationTime,382,Variable BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_LastTransitionTime,383,Variable BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_LastMethodCall,384,Variable BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_LastMethodSessionId,385,Variable BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_LastMethodInputArguments,386,Variable BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_LastMethodOutputArguments,387,Variable BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_LastMethodCallTime,388,Variable BoilersArea_BoilerDelta_Simulation_ProgramDiagnostics_LastMethodReturnStatus,389,Variable BoilersArea_BoilerDelta_Simulation_FinalResultData,390,Object BoilersArea_BoilerDelta_Simulation_Start,391,Method BoilersArea_BoilerDelta_Simulation_Suspend,392,Method BoilersArea_BoilerDelta_Simulation_Resume,393,Method BoilersArea_BoilerDelta_Simulation_Halt,394,Method BoilersArea_BoilerDelta_Simulation_Reset,395,Method BoilersArea_BoilerDelta_Simulation_UpdateRate,396,Variable Drums,398,Object Pipes,399,Object ================================================ FILE: Networking/Simulator.Boiler/UAInformationModel/DemoConfiguration/BoilersSet.xml ================================================ http://opcfoundation.org/UA/ http://tempuri.org/UA/Examples/BoilerType http://commsvr.com/UA/Examples/BoilersSet Boiler #1 Boiler #1: Pipe1001 Boiler #1: Drum1001 Boiler #1: Pipe1002 Boiler #1: FC1001 Boiler #1: LC1001 Boiler #1: CC1001 Boiler #2 Boilers Second Boiler #2: Pipe1001 Boiler #2: Drum1001 Boiler #2: Pipe1002 Boiler #2: FC1001 Boiler #2: LC1001 Boiler #2: CC1001 Boiler #3 Boiler #3: Pipe1001 Boiler #3: Drum1001 Boiler #3: Pipe1002 Boiler #3: FC1001 Boiler #3: LC1001 Boiler #3: CC1001 Boiler #4 Boiler #4: Pipe1001 Boiler #4: Drum1001 Boiler #4: Pipe1002 Boiler #4: FC1001 Boiler #4: LC1001 Boiler #4: CC1001 OpcUa:Organizes OpcUa:ObjectsFolder OpcUa:HasNotifier OpcUa:Server OpcUa:HasNotifier bs:BoilersArea_BoilerAlpha OpcUa:Organizes OpcUa:ObjectsFolder OpcUa:HasComponent bs:BoilersArea_BoilerAlpha_Drum OpcUa:HasComponent bs:BoilersArea_BoilerBravo_Drum OpcUa:HasComponent bs:BoilersArea_BoilerCharlie_Drum OpcUa:HasComponent bs:BoilersArea_BoilerDelta_Drum OpcUa:Organizes OpcUa:ObjectsFolder OpcUa:HasComponent bs:BoilersArea_BoilerAlpha_InputPipe OpcUa:HasComponent bs:BoilersArea_BoilerAlpha_OutputPipe OpcUa:HasComponent bs:BoilersArea_BoilerBravo_InputPipe OpcUa:HasComponent bs:BoilersArea_BoilerBravo_OutputPipe OpcUa:HasComponent bs:BoilersArea_BoilerCharlie_InputPipe OpcUa:HasComponent bs:BoilersArea_BoilerCharlie_OutputPipe OpcUa:HasComponent bs:BoilersArea_BoilerDelta_InputPipe OpcUa:HasComponent bs:BoilersArea_BoilerDelta_OutputPipe ================================================ FILE: Networking/SimulatorInteroperabilityTest/AssemblyInfo.cs ================================================  using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] [assembly: Guid("89e195e5-208f-4a6a-8dd9-9416801ae038")] [assembly: InternalsVisibleTo( "UAOOI.Networking.ReferenceApplication.UnitTest, PublicKey=" + "00240000048000009400000006020000002400005253413100040000010001005b97a0972ff6b13a" + "8a9ff9c09503aea0e5e2fe29cb2275a0c0942182f4c3431814b6bc9a556d9fe0d7e7823439c1ba28" + "521f6318e4c936c4461604ef668e9686c2021571b093e1bfba071b373bc56a07a3afdc120c5313d3" + "9a935cda64b759f857ebb3db483641444a5347e1564f8ba6d4fad2f968d3caf9991a4fa6aa019ebe" )] [assembly: InternalsVisibleTo( "UAOOI.Networking.SimulatorInteroperabilityTest.UnitTest, PublicKey=" + "00240000048000009400000006020000002400005253413100040000010001005b97a0972ff6b13a" + "8a9ff9c09503aea0e5e2fe29cb2275a0c0942182f4c3431814b6bc9a556d9fe0d7e7823439c1ba28" + "521f6318e4c936c4461604ef668e9686c2021571b093e1bfba071b373bc56a07a3afdc120c5313d3" + "9a935cda64b759f857ebb3db483641444a5347e1564f8ba6d4fad2f968d3caf9991a4fa6aa019ebe" )] ================================================ FILE: Networking/SimulatorInteroperabilityTest/ConfigurationDataProducer.xml ================================================  Producer Simple repositoryGroup https://github.com/mpostol/OPC-UA-OOI DataSymbolicName BoolToggle BoolToggle Boolean -1 Int32Normal Int32Normal Int32 -1 Int32Fast Int32Fast Int32 -1 SimpleValueDateTime SimpleValueDateTime DateTime -1 c1f53ffb-6552-4ccc-84c9-f847147cdc85 d5p1:NodeDescriptor 1000 100 1893991b-517c-4a5f-b8a4-1633d2a101c8 1 0 Producer AllTypes repositoryGroup https://github.com/mpostol/OPC-UA-OOI DataSymbolicName ValueBoolean ValueBoolean Boolean -1 ValueByte ValueByte Byte -1 ValueInt16 ValueInt16 Int16 -1 ValueInt32 ValueInt32 Int32 -1 ValueInt64 ValueInt64 Int64 -1 ValueSByte ValueSByte SByte -1 ValueUInt16 ValueUInt16 UInt16 -1 ValueUInt32 ValueUInt32 UInt32 -1 ValueUInt64 ValueUInt64 UInt64 -1 ValueFloat ValueFloat Float -1 ValueDouble ValueDouble Double -1 ValueString ValueString String -1 ValueByteString ValueByteString ByteString -1 ValueGuid ValueGuid Guid -1 ValueDateTime ValueDateTime DateTime -1 UInt32Array UInt32Array UInt32 1 c1f53ffb-6552-4ccc-84c9-f847147cdc85 d5p1:NodeDescriptor 1000 100 D79E3F84-48AB-48A2-9055-DF589D19E824 1 0 Producer MassTest repositoryGroup https://github.com/mpostol/OPC-UA-OOI DataSymbolicName MassTest_00 MassTest_00 UInt32 -1 MassTest_01 MassTest_01 UInt32 -1 MassTest_02 MassTest_02 UInt32 -1 MassTest_03 MassTest_03 UInt32 -1 MassTest_04 MassTest_04 UInt32 -1 MassTest_05 MassTest_05 UInt32 -1 MassTest_06 MassTest_06 UInt32 -1 MassTest_07 MassTest_07 UInt32 -1 MassTest_08 MassTest_08 UInt32 -1 MassTest_09 MassTest_09 UInt32 -1 MassTest_10 MassTest_10 UInt32 -1 MassTest_11 MassTest_11 UInt32 -1 MassTest_12 MassTest_12 UInt32 -1 MassTest_13 MassTest_13 UInt32 -1 MassTest_14 MassTest_14 UInt32 -1 MassTest_15 MassTest_15 UInt32 -1 MassTest_16 MassTest_16 UInt32 -1 MassTest_17 MassTest_17 UInt32 -1 MassTest_18 MassTest_18 UInt32 -1 MassTest_19 MassTest_19 UInt32 -1 MassTest_20 MassTest_20 UInt32 -1 MassTest_21 MassTest_21 UInt32 -1 MassTest_22 MassTest_22 UInt32 -1 MassTest_23 MassTest_23 UInt32 -1 MassTest_24 MassTest_24 UInt32 -1 MassTest_25 MassTest_25 UInt32 -1 MassTest_26 MassTest_26 UInt32 -1 MassTest_27 MassTest_27 UInt32 -1 MassTest_28 MassTest_28 UInt32 -1 MassTest_29 MassTest_29 UInt32 -1 MassTest_30 MassTest_30 UInt32 -1 MassTest_31 MassTest_31 UInt32 -1 MassTest_32 MassTest_32 UInt32 -1 MassTest_33 MassTest_33 UInt32 -1 MassTest_34 MassTest_34 UInt32 -1 MassTest_35 MassTest_35 UInt32 -1 MassTest_36 MassTest_36 UInt32 -1 MassTest_37 MassTest_37 UInt32 -1 MassTest_38 MassTest_38 UInt32 -1 MassTest_39 MassTest_39 UInt32 -1 MassTest_40 MassTest_40 UInt32 -1 MassTest_41 MassTest_41 UInt32 -1 MassTest_42 MassTest_42 UInt32 -1 MassTest_43 MassTest_43 UInt32 -1 MassTest_44 MassTest_44 UInt32 -1 MassTest_45 MassTest_45 UInt32 -1 MassTest_46 MassTest_46 UInt32 -1 MassTest_47 MassTest_47 UInt32 -1 MassTest_48 MassTest_48 UInt32 -1 MassTest_49 MassTest_49 UInt32 -1 MassTest_50 MassTest_50 UInt32 -1 MassTest_51 MassTest_51 UInt32 -1 MassTest_52 MassTest_52 UInt32 -1 MassTest_53 MassTest_53 UInt32 -1 MassTest_54 MassTest_54 UInt32 -1 MassTest_55 MassTest_55 UInt32 -1 MassTest_56 MassTest_56 UInt32 -1 MassTest_57 MassTest_57 UInt32 -1 MassTest_58 MassTest_58 UInt32 -1 MassTest_59 MassTest_59 UInt32 -1 MassTest_60 MassTest_60 UInt32 -1 MassTest_61 MassTest_61 UInt32 -1 MassTest_62 MassTest_62 UInt32 -1 MassTest_63 MassTest_63 UInt32 -1 MassTest_64 MassTest_64 UInt32 -1 MassTest_65 MassTest_65 UInt32 -1 MassTest_66 MassTest_66 UInt32 -1 MassTest_67 MassTest_67 UInt32 -1 MassTest_68 MassTest_68 UInt32 -1 MassTest_69 MassTest_69 UInt32 -1 MassTest_70 MassTest_70 UInt32 -1 MassTest_71 MassTest_71 UInt32 -1 MassTest_72 MassTest_72 UInt32 -1 MassTest_73 MassTest_73 UInt32 -1 MassTest_74 MassTest_74 UInt32 -1 MassTest_75 MassTest_75 UInt32 -1 MassTest_76 MassTest_76 UInt32 -1 MassTest_77 MassTest_77 UInt32 -1 MassTest_78 MassTest_78 UInt32 -1 MassTest_79 MassTest_79 UInt32 -1 MassTest_80 MassTest_80 UInt32 -1 MassTest_81 MassTest_81 UInt32 -1 MassTest_82 MassTest_82 UInt32 -1 MassTest_83 MassTest_83 UInt32 -1 MassTest_84 MassTest_84 UInt32 -1 MassTest_85 MassTest_85 UInt32 -1 MassTest_86 MassTest_86 UInt32 -1 MassTest_87 MassTest_87 UInt32 -1 MassTest_88 MassTest_88 UInt32 -1 MassTest_89 MassTest_89 UInt32 -1 MassTest_90 MassTest_90 UInt32 -1 MassTest_91 MassTest_91 UInt32 -1 MassTest_92 MassTest_92 UInt32 -1 MassTest_93 MassTest_93 UInt32 -1 MassTest_94 MassTest_94 UInt32 -1 MassTest_95 MassTest_95 UInt32 -1 MassTest_96 MassTest_96 UInt32 -1 MassTest_97 MassTest_97 UInt32 -1 MassTest_98 MassTest_98 UInt32 -1 MassTest_99 MassTest_99 UInt32 -1 c1f53ffb-6552-4ccc-84c9-f847147cdc85 d5p1:NodeDescriptor 1000 100 C67E4D73-F46E-499C-991F-F86D0E1BEB00 1 0 UDP 4840,localhost Producer Simple 1 d80d81dd-96e6-4560-850e-154f9181307c VariantFieldEncoding AllTypes 2 d80d81dd-96e6-4560-850e-154f9181307c VariantFieldEncoding MassTest 3 d80d81dd-96e6-4560-850e-154f9181307c VariantFieldEncoding ================================================ FILE: Networking/SimulatorInteroperabilityTest/DataGenerator.cs ================================================  using System; using System.Collections.Generic; using System.Threading; using UAOOI.Configuration.Networking.Serialization; using UAOOI.Networking.SemanticData; using UAOOI.Networking.SemanticData.DataRepository; namespace UAOOI.Networking.SimulatorInteroperabilityTest { /// /// Class DataGenerator - it is simulator producing data to be sent over the wire using message centric communication provided /// by the UAOOI.Networking.SemanticData framework. /// /// The data is generated according to the principles defined by the OPCF to proceed interoperability testing. /// internal class DataGenerator : IBindingFactory, IDisposable { #region Constructor /// /// Initializes a new instance of the class that generates the data to be used for interoperability testing. /// public DataGenerator() { m_Timer = new Timer(TimerCallback, null, 1000, 1000); } #endregion #region IDisposable /// /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. /// /// It is called by the . public void Dispose() { if (m_Timer == null) return; m_Timer.Change(Timeout.Infinite, Timeout.Infinite); m_Timer.Dispose(); } #endregion #region IBindingFactory /// /// Gets the binding captured by an instance of the type used by the consumer to save the data in the data repository. /// /// It is the name of a repository group profiling the configuration behavior, e.g. encoders selection. /// The configuration of the repositories belong to the same group are handled according to the same profile. /// The name of a variable that is the ultimate destination of the values recovered from messages. /// Must be unique in the context of the group named by . /// The field metadata definition represented as an object of . /// Returns an object implementing the interface that can be used to update selected variable on the factory side. /// IConsumerBinding IBindingFactory.GetConsumerBinding(string repositoryGroup, string processValueName, UATypeInfo fieldTypeInfo) { throw new NotImplementedException(); } /// /// Gets the producer binding. /// /// The repository group. /// The name of a variable that is the source of the values forwarded by a message over the network. /// Must be unique in the context of the group named by /// The of the message field encoding. /// IProducerBinding. /// repositoryGroup /// encoding IProducerBinding IBindingFactory.GetProducerBinding(string repositoryGroup, string processValueName, UATypeInfo fieldTypeInfo) { string _name = $"{repositoryGroup}.{ processValueName}"; IProducerBinding _return = null; if (m_NodesDictionary.ContainsKey(processValueName)) _return = m_NodesDictionary[processValueName]; else switch (fieldTypeInfo.BuiltInType) { case BuiltInType.Boolean: _return = fieldTypeInfo.ValueRank < 0 ? AddBinding(_name, Inc, false, fieldTypeInfo) : AddBinding(_name, x => Inc(y => (y & 1) == 0, x.Length), new bool[] { false }, fieldTypeInfo); break; case BuiltInType.SByte: _return = fieldTypeInfo.ValueRank < 0 ? AddBinding(_name, Inc, sbyte.MinValue, fieldTypeInfo) : AddBinding(_name, x => Inc(y => (sbyte)y, x.Length), new sbyte[] { sbyte.MinValue }, fieldTypeInfo); break; case BuiltInType.Byte: _return = fieldTypeInfo.ValueRank < 0 ? AddBinding(_name, Inc, Byte.MinValue, fieldTypeInfo) : AddBinding(_name, x => Inc(y => (Byte)y, x.Length), new Byte[] { Byte.MinValue }, fieldTypeInfo); break; case BuiltInType.Int16: _return = fieldTypeInfo.ValueRank < 0 ? AddBinding(_name, Inc, Int16.MinValue, fieldTypeInfo) : AddBinding(_name, x => Inc(y => (Int16)y, x.Length), new Int16[] { Int16.MinValue }, fieldTypeInfo); break; case BuiltInType.UInt16: _return = fieldTypeInfo.ValueRank < 0 ? AddBinding(_name, Inc, UInt16.MinValue, fieldTypeInfo) : AddBinding(_name, x => Inc(y => (UInt16)y, x.Length), new UInt16[] { UInt16.MinValue }, fieldTypeInfo); break; case BuiltInType.Int32: _return = fieldTypeInfo.ValueRank < 0 ? AddBinding(_name, Inc, Int32.MinValue, fieldTypeInfo) : AddBinding(_name, x => Inc(y => (Int32)y, x.Length), new Int32[] { Int32.MinValue }, fieldTypeInfo); break; case BuiltInType.UInt32: _return = fieldTypeInfo.ValueRank < 0 ? AddBinding(_name, Inc, UInt32.MinValue, fieldTypeInfo) : AddBinding(_name, x => Inc(y => (UInt32)y, x.Length), new UInt32[] { UInt32.MinValue }, fieldTypeInfo); break; case BuiltInType.Int64: _return = fieldTypeInfo.ValueRank < 0 ? AddBinding(_name, Inc, Int64.MinValue, fieldTypeInfo) : AddBinding(_name, x => Inc(y => (Int64)y, x.Length), new Int64[] { 0 }, fieldTypeInfo); break; case BuiltInType.UInt64: _return = fieldTypeInfo.ValueRank < 0 ? AddBinding(_name, Inc, UInt64.MinValue, fieldTypeInfo) : AddBinding(_name, x => Inc(y => (UInt64)y, x.Length), new UInt64[] { 0 }, fieldTypeInfo); break; case BuiltInType.Float: _return = fieldTypeInfo.ValueRank < 0 ? AddBinding(_name, Inc, -10.12345678f, fieldTypeInfo) : AddBinding(_name, x => Inc(y => (float)y, x.Length), new float[] { -10.12345678f }, fieldTypeInfo); break; case BuiltInType.Double: _return = fieldTypeInfo.ValueRank < 0 ? AddBinding(_name, Inc, -10.12345678, fieldTypeInfo) : AddBinding(_name, x => Inc(y => (Double)y, x.Length), new Double[] { 0 }, fieldTypeInfo); break; case BuiltInType.String: _return = fieldTypeInfo.ValueRank < 0 ? AddBinding(_name, Inc, String.Empty, fieldTypeInfo) : AddBinding(_name, x => Inc(y => $"#{y}", x.Length), new String[] { }, fieldTypeInfo); break; case BuiltInType.DateTime: _return = fieldTypeInfo.ValueRank < 0 ? AddBinding(_name, Inc, DateTime.Now, fieldTypeInfo) : AddBinding(_name, x => Inc(y => DateTime.Now, x.Length), new DateTime[] { }, fieldTypeInfo); break; case BuiltInType.Guid: _return = fieldTypeInfo.ValueRank < 0 ? AddBinding(_name, Inc, Guid.NewGuid(), fieldTypeInfo) : AddBinding(_name, x => Inc(y => Guid.NewGuid(), x.Length), new Guid[] { }, fieldTypeInfo); break; case BuiltInType.ByteString: _return = fieldTypeInfo.ValueRank < 0 ? AddBinding(_name, Inc, new byte[] { 0 }, fieldTypeInfo) : AddBinding(_name, x => Inc(y => new byte[] { 0, 1, 2, 3, 4 }, x.Length), new byte[][] { new byte[] { } }, fieldTypeInfo); break; case BuiltInType.Null: case BuiltInType.XmlElement: case BuiltInType.NodeId: case BuiltInType.ExpandedNodeId: case BuiltInType.StatusCode: case BuiltInType.QualifiedName: case BuiltInType.LocalizedText: case BuiltInType.ExtensionObject: case BuiltInType.DataValue: case BuiltInType.Variant: case BuiltInType.DiagnosticInfo: case BuiltInType.Enumeration: default: throw new ArgumentOutOfRangeException("encoding"); } return _return; } #endregion #region private //vars private Timer m_Timer; private event EventHandler m_TimeEvent; private Dictionary m_NodesDictionary = new Dictionary(); //methods #region Inc methods private static string Inc(string monitoredValue) { return $"Hello World; Now is: {DateTime.Now.ToLongTimeString()}"; } private static Guid Inc(Guid monitoredValue) { return Guid.NewGuid(); } private static SByte Inc(SByte monitoredValue) { return monitoredValue == SByte.MaxValue ? SByte.MinValue : (SByte)(monitoredValue + 1); } private static UInt16 Inc(UInt16 monitoredValue) { return monitoredValue == UInt16.MaxValue ? UInt16.MinValue : (UInt16)(monitoredValue + 1); } private static UInt32 Inc(UInt32 monitoredValue) { return monitoredValue == UInt32.MaxValue ? UInt32.MinValue : (UInt32)(monitoredValue + 1); } private static UInt64 Inc(UInt64 monitoredValue) { return monitoredValue == UInt64.MaxValue ? UInt64.MinValue : (UInt64)(monitoredValue + 1); } private static Int64 Inc(Int64 monitoredValue) { return monitoredValue == Int64.MaxValue ? Int64.MinValue : (Int64)(monitoredValue + 1); } private static Int32 Inc(Int32 monitoredValue) { return monitoredValue == Int32.MaxValue ? Int32.MinValue : (Int32)(monitoredValue + 1); } private static Int16 Inc(Int16 monitoredValue) { return monitoredValue == Int16.MaxValue ? Int16.MinValue : (Int16)(monitoredValue + 1); } private static float Inc(float monitoredValue) { return monitoredValue + 1; } private static double Inc(double monitoredValue) { return monitoredValue + 1; } private static DateTime Inc(DateTime monitoredValue) { return DateTime.UtcNow; } private static byte Inc(byte monitoredValue) { return monitoredValue == byte.MaxValue ? byte.MinValue : (byte)(monitoredValue + 1); } private static byte[] Inc(byte[] monitoredValue) { byte[] _ret = new byte[Math.Min(monitoredValue.Length + 1, 254)]; for (byte i = 0; i < _ret.Length; i++) _ret[i] = i; return _ret; } private static bool Inc(bool monitoredValue) { return !monitoredValue; } private static type[] Inc(Func incrementItem, int previousLength) { type[] _ret = new type[Math.Min(previousLength + 1, 254)]; for (byte i = 0; i < _ret.Length; i++) _ret[i] = incrementItem(i); return _ret; } #endregion private IProducerBinding AddBinding(string key, Func increment, type defaultValue, UATypeInfo typeInfo) { ProducerBindingMonitoredValue binding = new ProducerBindingMonitoredValue(key, typeInfo) { MonitoredValue = defaultValue }; m_NodesDictionary.Add(key, binding); m_TimeEvent += (x, y) => binding.MonitoredValue = increment(binding.MonitoredValue); return binding; } private void TimerCallback(object state) { try { m_TimeEvent?.Invoke(this, EventArgs.Empty); } catch (Exception) { } } #endregion } } ================================================ FILE: Networking/SimulatorInteroperabilityTest/Networking.SimulatorInteroperabilityTest.csproj ================================================ netstandard2.0 UAOOI.Networking.SimulatorInteroperabilityTest UAOOI.Networking.SimulatorInteroperabilityTest true OPCUAOOIKey.snk 4.0.1 commsvr.com MPostol UAOOI Semantic Data Reactive Networking based on OPC UA Part 14 Pub/Sub library. Copyright MPostol (c) 2018 https://github.com/mpostol/OPC-UA-OOI/blob/master/license.md https://commsvr.gitbook.io/ooi https://github.com/mpostol/OPC-UA-OOI GitHub Object Oriented Internet, OPC UA, CommServer, Reactive Networking. 4.0.1.1 bin\Debug\netstandard2.0\UAOOI.Networking.SimulatorInteroperabilityTest.xml PreserveNewest ================================================ FILE: Networking/SimulatorInteroperabilityTest/ProducerConfigurationFactory.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2018, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System; using System.IO; using UAOOI.Configuration.Networking; using UAOOI.Configuration.Networking.Serialization; using UAOOI.Configuration.Networking.Serializers; namespace UAOOI.Networking.SimulatorInteroperabilityTest { /// /// Class ProducerConfigurationFactory - provides implementation of the for the producer. /// Implements the /// /// internal class ProducerConfigurationFactory : ConfigurationFactoryBase { #region constructor /// /// Initializes a new instance of the class. /// /// Name of the producer configuration file. public ProducerConfigurationFactory(string configurationFileName) { //Simulator.Boiler.ProducerConfigurationFactory - review the configuration loading sequence #461 //here a default loader instead of a local one shall be used - don't use the parameterless constructor of the base class m_ProducerConfigurationFileName = configurationFileName; Loader = LoadConfig; //TODO Create and Register the EventSource #455 } #endregion constructor #region ConfigurationFactoryBase /// /// Occurs after the association configuration has been changed. /// public override event EventHandler OnAssociationConfigurationChange; /// /// Occurs after the communication configuration has been changed. /// public override event EventHandler OnMessageHandlerConfigurationChange; protected override void RaiseEvents() { OnAssociationConfigurationChange?.Invoke(this, EventArgs.Empty); OnMessageHandlerConfigurationChange?.Invoke(this, EventArgs.Empty); } #endregion ConfigurationFactoryBase #region private private readonly string m_ProducerConfigurationFileName; private ConfigurationData LoadConfig() { FileInfo _configurationFile = new FileInfo(m_ProducerConfigurationFileName); return ConfigurationDataFactoryIO.Load(() => XmlDataContractSerializers.Load(_configurationFile, (x, y, z) => { }), () => RaiseEvents()); } #endregion private } } ================================================ FILE: Networking/SimulatorInteroperabilityTest/README.md ================================================ # `ReferenceApplication` Producer - Interoperability Test Data Generator ## Common Tasks Working through this tutorial gives you an introductory understanding of the steps required to implement `Producer` role of `OOI Reactive Application`. `SimulatorInteroperabilityTest` is a sample of the `Producer` part of the `ReferenceApplication`, which is an example of `Semantic-Data` reactive networking based on [OPC UA Part 14 Pub/Sub](../../Networking/SemanticData/README.PubSubMTF.md) specification. The `Producer` role serves as a data generator to be used for testing purpose aimed at supporting the interoperability tests planned by the OPC Foundation. In the production environment, you may replace this library by a custom one supporting more realistic process data acquisition scenario. Here are steps undertook to implement the `Producer` role in the application: 1. `DataManagementSetup`: this class has been inherited by the `SimulatorDataManagementSetup` class. It initializes the communication and binds the fields used to populate the messages and local resources. 1. `IEncodingFactory` and `IMessageHandlerFactory`: both has been implemented in the external common libraries and `Producer` doesn't depend on the implementation - the instance of this interfaces are localized as services using the `IServiceLocator` interface implementation. 1. `IBindingFactory`: has been implemented in the class `DataGenerator` responsible to synchronize the values of the local data repository properties and messages sent over the wire. 1. `IConfigurationFactory`: the class `ProducerConfigurationFactory` implements this interface to be used for configuration opening. ## How to: Implement `DataManagementSetup` The `SimulatorDataManagementSetup` constructor initializes all properties, which are injection points of all parts composing this role. ```C# public sealed class SimulatorDataManagementSetup : DataManagementSetup { public SimulatorDataManagementSetup() { IServiceLocator _serviceLocator = ServiceLocator.Current; string _configurationFileName = _serviceLocator.GetInstance(SimulatorCompositionSettings.ConfigurationFileNameContract); m_ViewModel = _serviceLocator.GetInstance(); ConfigurationFactory = new ProducerConfigurationFactory(_configurationFileName); EncodingFactory = _serviceLocator.GetInstance(); BindingFactory = m_DataGenerator = new DataGenerator(); MessageHandlerFactory = _serviceLocator.GetInstance(); } `....` } ``` In this example, it is assumed that [`ServiceLocator`](https://www.nuget.org/packages/CommonServiceLocator) is implemented to resolve references to any external services. Finally the `DataManagementSetup.Start()` method is called to initialize the infrastructure, enable all associations and start pumping the data. ## How to: Implement IBindingFactory Implementation of this interface is a basic step to implement `Producer` functionality. An instance of the `IBindingFactory` is responsible to create objects implementing `IBinding` that can be used to read or generate (simulator case) from the local data repository. This section provides hints on how to implement the `Producer` role responsible for: - generating stream of process data - packing the data into the messages - and sending the data over the network to all interested parties The class `DataGenerator` captures implementation of a generator of testing data aimed at accomplishing interoperability tests defined by the OPC Foundation for PubSub applications. The example contains properties implemented as an instance of class `ProducerBindingMonitoredValue`. Modification of the `ProducerBindingMonitoredValue.MonitoredValue` provides notification to the message handling state machine that a new value is available. ## How to Guide ### How to: Implement `IConfigurationFactory` #### Implementation Implementation of this interface is straightforward and based entirely on the library [`UAOOI.Configuration.Networking`](../../Configuration/Networking/README.MD). In a typical scenario, this implementation should not be considered for further modification. The only open question is how to provide a path to the file containing the configuration of this role. In proposed solution the file path is provided by a service defined by the application entry point and localized using `IServiceLocator` in the class `SimulatorDataManagementSetup`: ```C# string _configurationFileName = _serviceLocator.GetInstance(SimulatorCompositionSettings.ConfigurationFileNameContract); ``` This role uses independent configuration file `ConfigurationDataProducer.xml` attached to the project. #### Generated Data This `Producer` sends out the following `Datasets`: ##### DataSet 1 (Simple) Parameter Name |Type|Behavior -|-|- BoolToggle | Boolean| Toggles every 3 seconds Int32 | Int32 | Counts (1 per second) from 0 to 10.000 and then resets Int32Fast | Int32 | Counts (100 per second) from 0 to 10.000 and then resets DateTime | DateTime | Current time refreshed with every packet sent ##### DataSet 2 (AllTypes) ParameterName |Type |Behavior -|-|- BoolToggle |Boolean |toggle every second and send one per second Byte |Byte |Counts (1 per second) from 0 to type-max and then resets Int16 |Int16| Counts (1 per second) from 0 to type-max and then resets Int32 |Int32| Counts (1 per second) from 0 to type-max and then resets Int64 |Int64| Counts (1 per second) from 0 to type-max and then resets SByte |SByte| Counts (1 per second) from 0 to type-max and then resets UInt16|UInt16| Counts (1 per second) from 0 to type-max and then resets UInt32|UInt32| Counts (1 per second) from 0 to type-max and then resets UInt64|UInt64| Counts (1 per second) from 0 to type-max and then resets Float |Float| Counts (1 per second) from 0 to type-max and then resets Double|Double| Counts (1 per second) from 0 to type-max and then resets String|String| Spells the aviation alphabet (Alpha, Bravo �) (1 per second) ByteString |ByteString| 1 new random ByteString per second Guid|Guid |1 new random Guid per second DateTime |DateTime | Current time refreshed with every packet sent UInt32Array |UInt32[10] | Length=10 Counts (1 per second on every element) from 0 to type-max and then resets. The count starting point for each value should differ ##### DataSet 3 (MassTest) Parameter |Type |Behavior -|-|- Mass_[n0] | UInt32 | 100 single parameters, each counting from 0 to type-max and then resets back (each with an offset of 100). Mass_1 | UInt32 `...` | UInt32 Mass_99 | UInt32 ##### UPD Settings DataSet |DataSetWriterId |Message Length |Message Encoding -|-|-|- DataSet 1 |1 |2 byte |Variant DataSet 1 |11 |1 byte |Compressed DataSet 1 |12 |2 byte |DataValue DataSet 2 |2 |2 byte |Variant DataSet 2 |21 |2 byte |Compressed DataSet 2 |22 |2 byte |DataValue DataSet 3 |3 |2 byte |Variant DataSet 3 |31 |2 byte |Compressed DataSet 3 |32 |2 byte |DataValue ## Current release > Notes: > > - This library is not considered to be published as the NuGet package. > - Current configuration may not support all test cases described above. ## See also - [API Browser is available for sponsors- consider joining](https://github.commsvr.com/AboutPartnershipProgram.md.html) - [OPC UA Makes Complex Data Processing Possible][wordpress.OPCUACD] [wordpress.OPCUACD]:https://mpostol.wordpress.com/2014/05/08/opc-ua-makes-complex-data-access-possible ================================================ FILE: Networking/SimulatorInteroperabilityTest/SimulatorDataManagementSetup.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2020, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using CommonServiceLocator; using System; using System.ComponentModel.Composition; using System.Diagnostics; using UAOOI.Networking.Core; using UAOOI.Networking.ReferenceApplication.Core; using UAOOI.Networking.ReferenceApplication.Core.Diagnostic; using UAOOI.Networking.SemanticData; namespace UAOOI.Networking.SimulatorInteroperabilityTest { /// /// Class SimulatorDataManagementSetup represents a data producer in the Reference Application. It is responsible to compose all parts making up a producer. /// This class cannot be inherited. /// Implements the /// Implements the /// /// /// [Export(typeof(IDataRepositoryStartup))] [PartCreationPolicy(CreationPolicy.Shared)] public sealed class SimulatorDataManagementSetup : DataManagementSetup, IDataRepositoryStartup { #region Composition /// /// Initializes a new instance of the class. /// public SimulatorDataManagementSetup() { IServiceLocator _serviceLocator = ServiceLocator.Current; string _configurationFileName = _serviceLocator.GetInstance(CompositionSettings.ConfigurationFileNameContract); m_ViewModel = _serviceLocator.GetInstance(); ConfigurationFactory = new ProducerConfigurationFactory(_configurationFileName); EncodingFactory = _serviceLocator.GetInstance(); BindingFactory = m_DataGenerator = new DataGenerator(); MessageHandlerFactory = _serviceLocator.GetInstance(); } #endregion Composition #region IProducerDataManagementSetup /// /// Setups this instance. /// public void Setup() { try { ReferenceApplicationEventSource.Log.Initialization($"{nameof(SimulatorDataManagementSetup)}.{nameof(Setup)} starting"); m_ViewModel.ChangeProducerCommand(() => { m_ViewModel.ProducerErrorMessage = "Restarted"; }); Start(); m_ViewModel.ProducerErrorMessage = "Running"; ReferenceApplicationEventSource.Log.Initialization($" Setup of the producer engine has been accomplished and it starts sending data."); } catch (Exception _ex) { ReferenceApplicationEventSource.Log.LogException(_ex); m_ViewModel.ProducerErrorMessage = "ERROR"; throw; } } #endregion IProducerDataManagementSetup #region IDisposable /// /// Releases unmanaged and - optionally - managed resources. /// /// true to release both managed and unmanaged resources; false to release only unmanaged resources. protected override void Dispose(bool disposing) { m_onDispose(disposing); base.Dispose(disposing); if (!disposing || m_disposed) return; m_disposed = true; m_DataGenerator.Dispose(); } #endregion IDisposable #region private /// /// Gets or sets the view model to be used for diagnostic purpose.. /// /// The view model. private ProducerViewModel m_ViewModel; /// /// Gets a value indicating whether this is disposed. /// /// true if disposed; otherwise, false. private bool m_disposed = false; private DataGenerator m_DataGenerator = null; private Action m_onDispose = disposing => { }; #endregion private #region Unit tests instrumentation [Conditional("DEBUG")] internal void DisposeCheck(Action onDispose) { m_onDispose = onDispose; } #endregion Unit tests instrumentation } } ================================================ FILE: Networking/Tests/Networking.Simulator.Boiler.Unit/AddressSpace/BaseInstanceStateUnitTest.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2018, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using Microsoft.VisualStudio.TestTools.UnitTesting; using System.Collections.Generic; using UAOOI.Networking.Simulator.Boiler.AddressSpace; using UAOOI.SemanticData.UANodeSetValidation.DataSerialization; namespace UAOOI.Networking.Simulator.Boiler.UnitTest.AddressSpace { [TestClass] public class BaseInstanceStateUnitTest { [TestMethod] public void AddChildTest() { using (BaseInstanceState _parentState = new TestBaseInstanceState(null, nameof(_parentState))) using (BaseInstanceState _childState = new TestBaseInstanceState(_parentState, nameof(_childState))) { _parentState.AddChild(_childState); Assert.IsNotNull(_parentState.FindChild(null, new List() { _childState.BrowseName }, 0)); } } [TestMethod] public void GetChildrenTest() { using (BaseInstanceState _parentState = new TestBaseInstanceState(null, nameof(_parentState))) using (BaseInstanceState _childState = new TestBaseInstanceState(null, nameof(_childState))) { _parentState.AddChild(_childState); List _children = new List(); _parentState.GetChildren(_children); Assert.AreEqual(1, _children.Count); } } [TestMethod] public void FindChildTest() { using (TestBaseInstanceState _nodeState = new TestBaseInstanceState(null, nameof(_nodeState))) { BaseInstanceState _child = _nodeState.FindChildTest(new TestSystemContext(), null, true, null); Assert.IsNull(_child); } } #region test instrumentation private class TestSystemContext : ISystemContext { } private class TestBaseInstanceState : BaseInstanceState { public TestBaseInstanceState(NodeState parent, string browseName) : base(parent, NodeClass.Unspecified_0, browseName) { } public BaseInstanceState FindChildTest(ISystemContext context, QualifiedName browseName, bool createOrReplace, BaseInstanceState replacement) { return base.FindChild(context, browseName, createOrReplace, replacement); } } #endregion } } ================================================ FILE: Networking/Tests/Networking.Simulator.Boiler.Unit/AddressSpace/NodeStateUnitTest.cs ================================================  using Microsoft.VisualStudio.TestTools.UnitTesting; using UAOOI.Networking.Simulator.Boiler.AddressSpace; using UAOOI.SemanticData.UANodeSetValidation.DataSerialization; namespace UAOOI.Networking.Simulator.Boiler.UnitTest.AddressSpace { [TestClass] public class NodeStateUnitTest { [TestMethod] public void ConstructorTest() { NodeState _nodeState = new TestNodeState(); Assert.IsNotNull(_nodeState.BrowseName); Assert.AreEqual("browseName", _nodeState.BrowseName.Name); Assert.IsFalse(_nodeState.BrowseName.NamespaceIndexSpecified); Assert.AreEqual(NodeStateChangeMasks.None, _nodeState.ChangeMasks); } #region test instrumentation private class TestNodeState : NodeState { public TestNodeState() : base(NodeClass.Unspecified_0, "browseName") { } } #endregion } } ================================================ FILE: Networking/Tests/Networking.Simulator.Boiler.Unit/AddressSpace/PropertyStateUnitTest.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2018, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using Microsoft.VisualStudio.TestTools.UnitTesting; using UAOOI.Networking.Simulator.Boiler.AddressSpace; using UAOOI.SemanticData.UANodeSetValidation.DataSerialization; namespace UAOOI.Networking.Simulator.Boiler.UnitTest.AddressSpace { [TestClass] public class PropertyStateUnitTest { [TestMethod] public void ConstructorTest() { PropertyState _property = new PropertyState(null, "PropertyState"); Assert.IsNotNull(_property.BrowseName); Assert.AreEqual(NodeStateChangeMasks.Value, _property.ChangeMasks); Assert.AreEqual(NodeClass.Variable_2, _property.NodeClass); Assert.IsNull(_property.Parent); Assert.AreEqual(default(double), _property.Value); _property.ClearChangeMasks(new SystemContextFixture(), true); Assert.AreEqual(NodeStateChangeMasks.None, _property.ChangeMasks); } [TestMethod] public void ValueTest() { PropertyState _property = new PropertyState(null, "PropertyState"); Assert.AreEqual(NodeStateChangeMasks.Value, _property.ChangeMasks); Assert.AreEqual(default(double), _property.Value); _property.ClearChangeMasks(new SystemContextFixture(), true); Assert.AreEqual(NodeStateChangeMasks.None, _property.ChangeMasks); ISystemContext _returnedContext = null; NodeStateChangeMasks _returnedMask = NodeStateChangeMasks.None; NodeState _returnedNodeState = null; int _handlerCalled = 0; _property.OnStateChanged += (x, y, z) => { _returnedContext = x; _returnedNodeState = y; _returnedMask = z; _handlerCalled++; }; _property.Value = 999.99; Assert.AreEqual(NodeStateChangeMasks.Value, _property.ChangeMasks); Assert.AreEqual(999.99, _property.Value); _property.ClearChangeMasks(new SystemContextFixture(), true); Assert.AreEqual(1, _handlerCalled); Assert.IsNotNull(_returnedContext); Assert.AreSame(_property, _returnedNodeState); Assert.AreEqual(NodeStateChangeMasks.Value, _returnedMask); Assert.AreEqual(NodeStateChangeMasks.None, _property.ChangeMasks); } private class SystemContextFixture : ISystemContext { } } } ================================================ FILE: Networking/Tests/Networking.Simulator.Boiler.Unit/AddressSpace/SemanticDataSetSourceUnitTest.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2018, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using Microsoft.VisualStudio.TestTools.UnitTesting; using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Xml; using UAOOI.Common.Infrastructure.Diagnostic; using UAOOI.Configuration.Networking.Serialization; using UAOOI.Configuration.Networking.Upgrade; using UAOOI.Networking.Simulator.Boiler.AddressSpace; using UAOOI.SemanticData.UANodeSetValidation.DataSerialization; using BoilersSet = Commsvr.UA.Examples.BoilersSet; using BoilerType = tempuri.org.UA.Examples.BoilerType; namespace UAOOI.Networking.Simulator.Boiler.UnitTest.AddressSpace { [TestClass] public class SemanticDataSetSourceUnitTest { [TestMethod] public void ConstructorTest() { using (StateFixture _object = new StateFixture()) { SemanticDataSetSource _register1 = new SemanticDataSetSource(_object); Assert.AreEqual(3, _register1.Count); Assert.IsTrue(_register1.ContainsKey("Property0")); Assert.IsTrue(_register1.ContainsKey("Property1")); Assert.IsTrue(_register1.ContainsKey("Property2")); Assert.AreEqual(_object.BrowseName.ToString(), _register1.SemanticDataSetRootBrowseName); } } [TestMethod] [DeploymentItem(@"CommonServiceLocatorInstrumentation\ConfigurationDataProducer.xml", "CommonServiceLocatorInstrumentation")] public void ReplaceDataSetFieldsTest() { TraceSourceFixture _log = new TraceSourceFixture(); using (BoilerType.BoilerState _boilerState = new BoilerType.BoilerState(null, "browseName")) { const string _inFileName = @"CommonServiceLocatorInstrumentation\ConfigurationDataProducer.xml"; FileInfo _inFile = new FileInfo(_inFileName); Assert.IsTrue(_inFile.Exists, $"File not exist {_inFile.FullName}"); string _outFileName = @"CommonServiceLocatorInstrumentation\new.ConfigurationDataProducer.xml"; _boilerState.Logger = _log; ISemanticDataSetSource _dataSource = new SemanticDataSetSource(_boilerState); ReplaceDataSetFields(_dataSource, "Simple", _inFileName, _outFileName); } } //TODO Compilation error in the `SemanticDataSetSourceUnitTest.cs` #504 //[TestMethod] //[DeploymentItem(@"Deploy\", @"Deploy")] //public void CreateConfigurationTest() //{ // TraceSourceFixture _log = new TraceSourceFixture(); // string _inFileName = $@"Deploy\Producer.tml.xml"; // FileInfo _inFile = new FileInfo(_inFileName); // Assert.IsTrue(_inFile.Exists, $"File not exist {_inFile.FullName}"); // CreateConfiguration(_log, 1, "BoilersArea_Boiler #1", "BoilersArea_BoilerAlpha", _inFileName); // CreateConfiguration(_log, 2, "BoilersArea_Boiler #2", "BoilersArea_BoilerBravo", _inFileName); // CreateConfiguration(_log, 3, "BoilersArea_Boiler #3", "BoilersArea_BoilerBravo", _inFileName); // CreateConfiguration(_log, 4, "BoilersArea_Boiler #4", "BoilersArea_BoilerBravo", _inFileName); // //Assert.Fail($"{Environment.CurrentDirectory}"); //} //private void CreateConfiguration(TraceSourceFixture _log, ushort writerId, string _associationName, string symbolicName, string _inFileName) //{ // using (BoilerType.BoilerState _boilerState = new BoilerType.BoilerState(null, _associationName)) // { // _boilerState.Logger = _log; // SemanticDataSetSource _dataSource = new SemanticDataSetSource(_boilerState); // XmlQualifiedName _type = new XmlQualifiedName(BoilerType.BrowseNames.BoilerType, BoilerType.Namespaces.BoilerType); // XmlQualifiedName _instanceSymbolicName = new XmlQualifiedName(symbolicName, BoilersSet.Namespaces.BoilersSet); // _dataSource.CreateConfiguration(_type, _associationName, _instanceSymbolicName, _inFileName, Tuple.Create("UDP", writerId, ProducerId), _log); // } //} #region instrumentation private readonly System.Guid ProducerId = new System.Guid("d80d81dd-96e6-4560-850e-154f9181307c"); private class StateFixture : BaseInstanceState { public StateFixture() : base(null, NodeClass.Object_1, "BaseObjectStateFixture") { new PropertyState(this, "Property0"); new PropertyState(this, "Property1"); new PropertyState(this, "Property2"); } } private class TraceSourceFixture : ITraceSource { public void TraceData(TraceEventType eventType, int id, object data) { string _message = $"{eventType} at {id}: {data}"; switch (eventType) { case TraceEventType.Critical: case TraceEventType.Error: case TraceEventType.Warning: ErrorTraceLog.Add(_message); break; case TraceEventType.Information: case TraceEventType.Verbose: case TraceEventType.Start: case TraceEventType.Stop: case TraceEventType.Suspend: case TraceEventType.Resume: case TraceEventType.Transfer: TraceLog.Add(_message); break; } Debug.WriteLine(_message); } internal List TraceLog { get; private set; } = new List(); internal List ErrorTraceLog { get; private set; } = new List(); } private void ReplaceDataSetFields(ISemanticDataSetSource dataSource, string associationName, string inFileName, string outFileName) { ITraceSource _traceSource = new TraceSourceFixture(); List _lf = new List(); foreach (KeyValuePair _item in dataSource) { if (_item.Value.ValueType.BuiltInType == BuiltInType.Null) continue; FieldMetaData _field = new FieldMetaData() { ProcessValueName = _item.Key, SymbolicName = _item.Key, TypeInformation = _item.Value.ValueType }; _lf.Add(_field); } ConfigurationManagement.ReplaceDataSetFields(_lf.ToArray(), associationName, inFileName, outFileName, _traceSource); } #endregion } } ================================================ FILE: Networking/Tests/Networking.Simulator.Boiler.Unit/AssemblyCleanupFixture.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2018, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using Microsoft.VisualStudio.TestTools.UnitTesting; using UAOOI.Networking.Simulator.Boiler.UnitTest.CommonServiceLocatorInstrumentation; namespace UAOOI.Networking.Simulator.Boiler.UnitTest { [TestClass] public static class AssemblyCleanupFixture { [TestMethod] [AssemblyCleanup] public static void AssemblyCleanupTest() { Assert.IsFalse(Logger.Singleton.CheckForErrors()); } } } ================================================ FILE: Networking/Tests/Networking.Simulator.Boiler.Unit/AssemblyInitializeFixture.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2018 Copyright, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using CommonServiceLocator; using Microsoft.VisualStudio.TestTools.UnitTesting; using System; using UAOOI.Networking.Simulator.Boiler.UnitTest.CommonServiceLocatorInstrumentation; namespace UAOOI.Networking.Simulator.Boiler.UnitTest { [TestClass] public static class AssemblyInitializeFixture { [TestMethod] [AssemblyInitialize] public static void AssemblyInitializeTest(TestContext context) { Container _container = new Container(new Object[] { Logger.Singleton }); ServiceLocator.SetLocatorProvider(() => _container); Assert.IsTrue(ServiceLocator.IsLocationProviderSet); } } } ================================================ FILE: Networking/Tests/Networking.Simulator.Boiler.Unit/CommonServiceLocatorInstrumentation/ConfigurationDataProducer.xml ================================================  Producer Simple repositoryGroup https://github.com/mpostol/OPC-UA-OOI DataSymbolicName BoolToggle BoolToggle Boolean -1 Int32Normal Int32Normal Int32 -1 Int32Fast Int32Fast Int32 -1 SimpleValueDateTime SimpleValueDateTime DateTime -1 c1f53ffb-6552-4ccc-84c9-f847147cdc85 d5p1:NodeDescriptor 1000 100 1893991b-517c-4a5f-b8a4-1633d2a101c8 1 0 Producer AllTypes repositoryGroup https://github.com/mpostol/OPC-UA-OOI DataSymbolicName ValueBoolean ValueBoolean Boolean -1 ValueByte ValueByte Byte -1 ValueInt16 ValueInt16 Int16 -1 ValueInt32 ValueInt32 Int32 -1 ValueInt64 ValueInt64 Int64 -1 ValueSByte ValueSByte SByte -1 ValueUInt16 ValueUInt16 UInt16 -1 ValueUInt32 ValueUInt32 UInt32 -1 ValueUInt64 ValueUInt64 UInt64 -1 ValueFloat ValueFloat Float -1 ValueDouble ValueDouble Double -1 ValueString ValueString String -1 ValueByteString ValueByteString ByteString -1 ValueGuid ValueGuid Guid -1 ValueDateTime ValueDateTime DateTime -1 UInt32Array UInt32Array UInt32 1 c1f53ffb-6552-4ccc-84c9-f847147cdc85 d5p1:NodeDescriptor 1000 100 D79E3F84-48AB-48A2-9055-DF589D19E824 1 0 Producer MassTest repositoryGroup https://github.com/mpostol/OPC-UA-OOI DataSymbolicName MassTest_00 MassTest_00 UInt32 -1 MassTest_01 MassTest_01 UInt32 -1 MassTest_02 MassTest_02 UInt32 -1 MassTest_03 MassTest_03 UInt32 -1 MassTest_04 MassTest_04 UInt32 -1 MassTest_05 MassTest_05 UInt32 -1 MassTest_06 MassTest_06 UInt32 -1 MassTest_07 MassTest_07 UInt32 -1 MassTest_08 MassTest_08 UInt32 -1 MassTest_09 MassTest_09 UInt32 -1 MassTest_10 MassTest_10 UInt32 -1 MassTest_11 MassTest_11 UInt32 -1 MassTest_12 MassTest_12 UInt32 -1 MassTest_13 MassTest_13 UInt32 -1 MassTest_14 MassTest_14 UInt32 -1 MassTest_15 MassTest_15 UInt32 -1 MassTest_16 MassTest_16 UInt32 -1 MassTest_17 MassTest_17 UInt32 -1 MassTest_18 MassTest_18 UInt32 -1 MassTest_19 MassTest_19 UInt32 -1 MassTest_20 MassTest_20 UInt32 -1 MassTest_21 MassTest_21 UInt32 -1 MassTest_22 MassTest_22 UInt32 -1 MassTest_23 MassTest_23 UInt32 -1 MassTest_24 MassTest_24 UInt32 -1 MassTest_25 MassTest_25 UInt32 -1 MassTest_26 MassTest_26 UInt32 -1 MassTest_27 MassTest_27 UInt32 -1 MassTest_28 MassTest_28 UInt32 -1 MassTest_29 MassTest_29 UInt32 -1 MassTest_30 MassTest_30 UInt32 -1 MassTest_31 MassTest_31 UInt32 -1 MassTest_32 MassTest_32 UInt32 -1 MassTest_33 MassTest_33 UInt32 -1 MassTest_34 MassTest_34 UInt32 -1 MassTest_35 MassTest_35 UInt32 -1 MassTest_36 MassTest_36 UInt32 -1 MassTest_37 MassTest_37 UInt32 -1 MassTest_38 MassTest_38 UInt32 -1 MassTest_39 MassTest_39 UInt32 -1 MassTest_40 MassTest_40 UInt32 -1 MassTest_41 MassTest_41 UInt32 -1 MassTest_42 MassTest_42 UInt32 -1 MassTest_43 MassTest_43 UInt32 -1 MassTest_44 MassTest_44 UInt32 -1 MassTest_45 MassTest_45 UInt32 -1 MassTest_46 MassTest_46 UInt32 -1 MassTest_47 MassTest_47 UInt32 -1 MassTest_48 MassTest_48 UInt32 -1 MassTest_49 MassTest_49 UInt32 -1 MassTest_50 MassTest_50 UInt32 -1 MassTest_51 MassTest_51 UInt32 -1 MassTest_52 MassTest_52 UInt32 -1 MassTest_53 MassTest_53 UInt32 -1 MassTest_54 MassTest_54 UInt32 -1 MassTest_55 MassTest_55 UInt32 -1 MassTest_56 MassTest_56 UInt32 -1 MassTest_57 MassTest_57 UInt32 -1 MassTest_58 MassTest_58 UInt32 -1 MassTest_59 MassTest_59 UInt32 -1 MassTest_60 MassTest_60 UInt32 -1 MassTest_61 MassTest_61 UInt32 -1 MassTest_62 MassTest_62 UInt32 -1 MassTest_63 MassTest_63 UInt32 -1 MassTest_64 MassTest_64 UInt32 -1 MassTest_65 MassTest_65 UInt32 -1 MassTest_66 MassTest_66 UInt32 -1 MassTest_67 MassTest_67 UInt32 -1 MassTest_68 MassTest_68 UInt32 -1 MassTest_69 MassTest_69 UInt32 -1 MassTest_70 MassTest_70 UInt32 -1 MassTest_71 MassTest_71 UInt32 -1 MassTest_72 MassTest_72 UInt32 -1 MassTest_73 MassTest_73 UInt32 -1 MassTest_74 MassTest_74 UInt32 -1 MassTest_75 MassTest_75 UInt32 -1 MassTest_76 MassTest_76 UInt32 -1 MassTest_77 MassTest_77 UInt32 -1 MassTest_78 MassTest_78 UInt32 -1 MassTest_79 MassTest_79 UInt32 -1 MassTest_80 MassTest_80 UInt32 -1 MassTest_81 MassTest_81 UInt32 -1 MassTest_82 MassTest_82 UInt32 -1 MassTest_83 MassTest_83 UInt32 -1 MassTest_84 MassTest_84 UInt32 -1 MassTest_85 MassTest_85 UInt32 -1 MassTest_86 MassTest_86 UInt32 -1 MassTest_87 MassTest_87 UInt32 -1 MassTest_88 MassTest_88 UInt32 -1 MassTest_89 MassTest_89 UInt32 -1 MassTest_90 MassTest_90 UInt32 -1 MassTest_91 MassTest_91 UInt32 -1 MassTest_92 MassTest_92 UInt32 -1 MassTest_93 MassTest_93 UInt32 -1 MassTest_94 MassTest_94 UInt32 -1 MassTest_95 MassTest_95 UInt32 -1 MassTest_96 MassTest_96 UInt32 -1 MassTest_97 MassTest_97 UInt32 -1 MassTest_98 MassTest_98 UInt32 -1 MassTest_99 MassTest_99 UInt32 -1 c1f53ffb-6552-4ccc-84c9-f847147cdc85 d5p1:NodeDescriptor 1000 100 C67E4D73-F46E-499C-991F-F86D0E1BEB00 1 0 UDP 4840,localhost Producer Simple 1 d80d81dd-96e6-4560-850e-154f9181307c VariantFieldEncoding AllTypes 2 d80d81dd-96e6-4560-850e-154f9181307c VariantFieldEncoding MassTest 3 d80d81dd-96e6-4560-850e-154f9181307c VariantFieldEncoding ================================================ FILE: Networking/Tests/Networking.Simulator.Boiler.Unit/CommonServiceLocatorInstrumentation/Container.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2018, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using CommonServiceLocator; using System; using System.Collections.Generic; using System.Linq; namespace UAOOI.Networking.Simulator.Boiler.UnitTest.CommonServiceLocatorInstrumentation { internal class Container : ServiceLocatorImplBase { public Container(IEnumerable list) { m_ObjectsContainer = list; } private readonly IEnumerable m_ObjectsContainer; protected override object DoGetInstance(Type requestedType, string key) { return String.IsNullOrEmpty(key) ? m_ObjectsContainer.First(o => requestedType.IsAssignableFrom(o.GetType())) : m_ObjectsContainer.First(o => requestedType.IsAssignableFrom(o.GetType()) && Equals(key, o.GetType().FullName)); } protected override IEnumerable DoGetAllInstances(Type requestedType) { return m_ObjectsContainer.Where(o => requestedType.IsAssignableFrom(o.GetType())); } } } ================================================ FILE: Networking/Tests/Networking.Simulator.Boiler.Unit/CommonServiceLocatorInstrumentation/Logger.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2018, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System; using System.Collections.Generic; using System.Diagnostics; using UAOOI.Common.Infrastructure.Diagnostic; namespace UAOOI.Networking.Simulator.Boiler.UnitTest.CommonServiceLocatorInstrumentation { public class Logger : ITraceSource { internal static Logger Singleton { get { return m_Singleton.Value; } } public class TraceLogEntity { public TraceEventType EventType { get; private set; } public int Id { get; private set; } public object Data { get; private set; } public TraceLogEntity(TraceEventType eventType, int id, object data) { this.EventType = eventType; this.Id = id; this.Data = data; } } public List TraceLogList { get; } = new List(); internal bool CheckForErrors() { foreach (TraceLogEntity _item in TraceLogList) if (_item.EventType > TraceEventType.Information) return true; return false; } #region ITraceSource void ITraceSource.TraceData(TraceEventType eventType, int id, object data) { TraceLogList.Add(new TraceLogEntity(eventType, id, data)); } #endregion private Logger() { } private static Lazy m_Singleton = new Lazy(() => new Logger()); } } ================================================ FILE: Networking/Tests/Networking.Simulator.Boiler.Unit/DataGeneratorUnitTest.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2018, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using Microsoft.VisualStudio.TestTools.UnitTesting; using System; using System.Diagnostics; using UAOOI.Configuration.Networking.Serialization; using UAOOI.Networking.SemanticData; using UAOOI.Networking.SemanticData.DataRepository; using UAOOI.Networking.Simulator.Boiler.AddressSpace; using UAOOI.Networking.Simulator.Boiler.UnitTest.CommonServiceLocatorInstrumentation; namespace UAOOI.Networking.Simulator.Boiler.UnitTest { [TestClass] public class DataGeneratorUnitTest { [TestMethod] public void GetProducerBindingTest() { BoilersSetFixture _boiler = new BoilersSetFixture(); using (DataGenerator _generator = new DataGenerator(_boiler)) { IBindingFactory _bindingFactory = _generator; IProducerBinding _binding = _bindingFactory.GetProducerBinding("repositoryGroup", "processValueName", new UATypeInfo(BuiltInType.Boolean)); Assert.IsNotNull(_binding); _binding.Encoding.IsEqual(new UATypeInfo(BuiltInType.Boolean)); Assert.IsFalse(_binding.NewValue); Assert.IsNull(_binding.Parameter); int _newValueInvocationCount = 0; _binding.PropertyChanged += (x, evetArgs) => _newValueInvocationCount++; _boiler.Variable.Change(); Assert.AreEqual(1, _newValueInvocationCount); Assert.IsTrue(_binding.NewValue); Assert.IsTrue((bool)_binding.GetFromRepository()); Assert.IsFalse(_binding.NewValue); Assert.AreEqual(1, _newValueInvocationCount); } Assert.AreEqual(1, _boiler.DisposeCount); } [TestMethod] [ExpectedException(typeof(ArgumentOutOfRangeException))] public void GetProducerBindingTypesMismatchTest() { BoilersSetFixture _boiler = new BoilersSetFixture(); using (DataGenerator _generator = new DataGenerator(_boiler)) { IBindingFactory _bindingFactory = _generator; IProducerBinding _binding = _bindingFactory.GetProducerBinding("repositoryGroup", "processValueName", new UATypeInfo(BuiltInType.Int16)); } } [TestMethod] public void DefaultConstructorTest() { int _startLoggerPosition = Logger.Singleton.TraceLogList.Count; using (DataGenerator _generator = new DataGenerator()) { } int _endLoggerPosition = Logger.Singleton.TraceLogList.Count; int _length = _endLoggerPosition - _startLoggerPosition; Assert.AreEqual(81, _length); for (int i = _startLoggerPosition; i < _length; i++) { Assert.AreNotEqual(TraceEventType.Error, Logger.Singleton.TraceLogList[i].EventType, $"Error in registartion procedure {Logger.Singleton.TraceLogList[i].Data}"); Debug.WriteLine($"Trace type {Logger.Singleton.TraceLogList[i].EventType}, message {Logger.Singleton.TraceLogList[i].Data}"); } } #region tests instrumentation private class BoilersSetFixture : ISemanticDataSource { internal int DisposeCount = 0; internal VariableFixture Variable = new VariableFixture(); #region ISemanticDataSource public void Dispose() { DisposeCount++; } public void GetSemanticDataSources(RegisterSemanticData registerSemanticData) { registerSemanticData("repositoryGroup", "processValueName", Variable); } #endregion } private class VariableFixture : IVariable { #region IVariable public object Value { get; private set; } = false; public UATypeInfo ValueType => new UATypeInfo(BuiltInType.Boolean); public event NodeStateChangedHandler OnStateChanged; #endregion internal void Change() { Value = !(bool)Value; OnStateChanged?.Invoke(null, null, NodeStateChangeMasks.Value); } } #endregion } } ================================================ FILE: Networking/Tests/Networking.Simulator.Boiler.Unit/Deploy/Producer.tml.xml ================================================  UDP 4840,localhost Producer ================================================ FILE: Networking/Tests/Networking.Simulator.Boiler.Unit/Model/AnalogItemStateUnitTest.cs ================================================  using Microsoft.VisualStudio.TestTools.UnitTesting; using UAOOI.Networking.Simulator.Boiler.AddressSpace; using UAOOI.Networking.Simulator.Boiler.Model; using UAOOI.SemanticData.UANodeSetValidation.DataSerialization; namespace UAOOI.Networking.Simulator.Boiler.UnitTest.Model { [TestClass] public class AnalogItemStateUnitTest { [TestMethod] public void ConstructorTest() { AnalogItemState _item = new AnalogItemState(null, "browseName", ModelExtensions.CreateRange(0, 1), 0.5); Assert.AreEqual("browseName", _item.BrowseName.Name); Assert.IsFalse(_item.BrowseName.NamespaceIndexSpecified); //EURange Assert.IsNotNull(_item.EURange); Assert.AreEqual(nameof(_item.EURange), _item.EURange.BrowseName.Name); Assert.AreEqual(1, _item.EURange.Value.High); Assert.AreEqual(0, _item.EURange.Value.Low); //Value Assert.IsNotNull(_item.Value); Assert.AreEqual(0.5, _item.Value); Assert.AreEqual(NodeClass.Variable_2, _item.NodeClass); Assert.IsNull(_item.Parent); Assert.AreEqual(0.5, _item.Value); } } } ================================================ FILE: Networking/Tests/Networking.Simulator.Boiler.Unit/Model/BoilerDrumStateUnitTest.cs ================================================  using Microsoft.VisualStudio.TestTools.UnitTesting; using System; using tempuri.org.UA.Examples.BoilerType; using UAOOI.Networking.Simulator.Boiler.AddressSpace; using UAOOI.Networking.Simulator.Boiler.Model; using UAOOI.SemanticData.UANodeSetValidation.DataSerialization; namespace UAOOI.Networking.Simulator.Boiler.UnitTest.Model { [TestClass] public class BoilerDrumStateUnitTest { [TestMethod] [ExpectedException(typeof(NotImplementedException))] public void ConstructorTestMethod() { BoilerDrumState _drum = new BoilerDrumState(null); } [TestMethod] public void Constructor2TestMethod() { BoilerDrumState _drum = new BoilerDrumState(null, BrowseNames.Drum, ModelExtensions.CreateRange(1000, 0)); Assert.IsNotNull(_drum.BrowseName); Assert.IsNotNull(_drum.LevelIndicator); Assert.IsNotNull(_drum.LevelIndicator.Output); Assert.AreEqual(NodeClass.Variable_2, _drum.LevelIndicator.Output.NodeClass); Assert.IsNotNull(_drum.LevelIndicator.Output.Parent); Assert.IsNotNull(_drum.LevelIndicator.Output.Value); Assert.IsNotNull(_drum.LevelIndicator.Output.EURange); Assert.IsNotNull(_drum.LevelIndicator.Parent); Assert.IsNull(_drum.Parent); Assert.AreEqual(NodeClass.Object_1, _drum.NodeClass); Assert.AreEqual(NodeStateChangeMasks.Children, _drum.ChangeMasks); Assert.AreEqual(0, _drum.LevelIndicator.Output.Value); Assert.AreEqual(0, _drum.LevelIndicator.Output.EURange.Value.Low); Assert.AreEqual(1000, _drum.LevelIndicator.Output.EURange.Value.High); } } } ================================================ FILE: Networking/Tests/Networking.Simulator.Boiler.Unit/Model/BoilerStateUnitTest.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) Year of Copyright, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using Microsoft.VisualStudio.TestTools.UnitTesting; using System; using System.Collections.Generic; using System.Diagnostics; using tempuri.org.UA.Examples.BoilerType; using UAOOI.Common.Infrastructure.Diagnostic; using UAOOI.Configuration.Networking.Serialization; using UAOOI.Configuration.Networking.Upgrade; using UAOOI.Networking.Simulator.Boiler.AddressSpace; using UAOOI.SemanticData.UANodeSetValidation.DataSerialization; namespace UAOOI.Networking.Simulator.Boiler.UnitTest.Model { [TestClass] public class BoilerStateUnitTest { [TestMethod] [ExpectedException(typeof(System.NotImplementedException))] public void ConstructorTest() { using (BoilerState _boilerState = new BoilerState(null)) { } } [TestMethod] public void Constructor2Test() { using (BoilerState _boilerState = new BoilerState(null, "browseName")) { Assert.IsNotNull(_boilerState.BrowseName); Assert.AreEqual("browseName", _boilerState.BrowseName.Name); Assert.IsFalse(_boilerState.BrowseName.NamespaceIndexSpecified); Assert.IsNotNull(_boilerState.CustomController); Assert.IsNotNull(_boilerState.Drum); Assert.IsNotNull(_boilerState.FlowController); Assert.IsNotNull(_boilerState.InputPipe); Assert.IsNotNull(_boilerState.LevelController); Assert.IsNotNull(_boilerState.OutputPipe); Assert.IsNull(_boilerState.Parent); Assert.IsNotNull(_boilerState.Simulation); Assert.AreEqual(NodeClass.Object_1, _boilerState.NodeClass); Assert.AreEqual(NodeStateChangeMasks.Children, _boilerState.ChangeMasks); Assert.IsNotNull(_boilerState.FindChild(null, new List() { _boilerState.CustomController.BrowseName }, 0)); } } [TestMethod] public void FindChildTest() { using (BoilerState _boilerState = new BoilerState(null, "browseName")) { Assert.IsNotNull(_boilerState.FindChild(null, new List() { _boilerState.CustomController.BrowseName }, 0)); Assert.IsNotNull(_boilerState.FindChild(null, new List() { _boilerState.FlowController.BrowseName }, 0)); Assert.IsNotNull(_boilerState.FindChild(null, new List() { _boilerState.Drum.BrowseName }, 0)); Assert.IsNotNull(_boilerState.FindChild(null, new List() { _boilerState.InputPipe.BrowseName }, 0)); Assert.IsNotNull(_boilerState.FindChild(null, new List() { _boilerState.LevelController.BrowseName }, 0)); Assert.IsNotNull(_boilerState.FindChild(null, new List() { _boilerState.OutputPipe.BrowseName }, 0)); Assert.IsNotNull(_boilerState.FindChild(null, new List() { _boilerState.Simulation.BrowseName }, 0)); } } [TestMethod] public void GetChildrenTest() { using (BoilerState _boilerState = new BoilerState(null, "browseName")) { List _children = new List(); _boilerState.GetChildren(_children); Assert.AreEqual(7, _children.Count); } } [TestMethod] public void RegisterVariableTest() { TraceSourceFixture _log = new TraceSourceFixture(); using (BoilerState _boilerState = new BoilerState(null, "browseName")) { _boilerState.Logger = _log; Dictionary _vars = new Dictionary(); _boilerState.RegisterVariable(new List(), (x, y) => _vars.Add(String.Join("_", y), x)); foreach (KeyValuePair _item in _vars) { BaseVariableState _var = _item.Value as BaseVariableState; Assert.IsNotNull(_var); string _type = _var.Value == null ? "not set" : _var.Value.GetType().Name; Debug.WriteLine($"{_item} {_type}"); } Assert.AreEqual(20, _vars.Count); } Assert.IsTrue(_log.TraceLog.Count == 0); Assert.IsTrue(_log.ErrorTraceLog.Count == 0); } [TestMethod] public void StartSimulationTest() { ISystemContext _context = new SystemContextFixture(); TraceSourceFixture _log = new TraceSourceFixture(); List> _callBackCount = new List>(); Range _startRange = null; int _valueChangeCount = 0; using (BoilerState _boilerState = new BoilerState(null, "browseName")) { _boilerState.RegisterVariable(new List(), (x, y) => { _callBackCount.Add(Tuple.Create(String.Join("_", y), ((BaseVariableState)x).Value)); x.OnStateChanged += (q, w, e) => _valueChangeCount++; }); Range _level = _boilerState.Drum.LevelIndicator.Output.EURange.Value; _startRange = ModelExtensions.CreateRange(_level.High, _level.Low); double _startSetPoint = _boilerState.LevelController.SetPoint.Value; _boilerState.Logger = _log; _boilerState.ClearChangeMasks(_context, true); _boilerState.StartSimulation(); _boilerState.OnStateChanged += (x, y, z) => Assert.Fail(); System.Threading.Thread.Sleep(10000); Assert.AreEqual(20, _callBackCount.Count); _boilerState.ClearChangeMasks(_context, true); Assert.AreEqual(_level, _boilerState.Drum.LevelIndicator.Output.EURange.Value); Assert.AreEqual(_startSetPoint, _boilerState.LevelController.SetPoint.Value); } Assert.IsTrue(_log.TraceLog.Count > 10); Assert.IsTrue(_log.ErrorTraceLog.Count == 0); Assert.AreEqual(20, _callBackCount.Count); Assert.IsTrue(600 < _valueChangeCount, $"_valueChangeCount = {_valueChangeCount}"); } #region test instrumentation private class SystemContextFixture : ISystemContext { } private class TraceSourceFixture : ITraceSource { public void TraceData(TraceEventType eventType, int id, object data) { string _message = $"{eventType} at {id}: {data}"; switch (eventType) { case TraceEventType.Critical: case TraceEventType.Error: case TraceEventType.Warning: ErrorTraceLog.Add(_message); break; case TraceEventType.Information: case TraceEventType.Verbose: case TraceEventType.Start: case TraceEventType.Stop: case TraceEventType.Suspend: case TraceEventType.Resume: case TraceEventType.Transfer: TraceLog.Add(_message); break; } Debug.WriteLine(_message); } internal List TraceLog { get; private set; } = new List(); internal List ErrorTraceLog { get; private set; } = new List(); } #endregion } } ================================================ FILE: Networking/Tests/Networking.Simulator.Boiler.Unit/Model/BoilersSetUnitTest.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2018, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using Microsoft.VisualStudio.TestTools.UnitTesting; using System.Collections.Generic; using System.Diagnostics; using UAOOI.Networking.Simulator.Boiler.AddressSpace; using UAOOI.Networking.Simulator.Boiler.Model; using UAOOI.SemanticData.UANodeSetValidation.DataSerialization; using Boilers = Commsvr.UA.Examples.BoilersSet; namespace UAOOI.Networking.Simulator.Boiler.UnitTest.Model { [TestClass] public class BoilersSetUnitTest { [TestMethod] public void ConstructorTest() { using (BoilersSet _set = BoilersSet.Factory) { Assert.IsNotNull(_set); Assert.AreEqual(Boilers.BrowseNames.BoilersArea, _set.BrowseName.Name); Assert.AreEqual(NodeClass.Object_1, _set.NodeClass); Assert.IsNull(_set.Parent); } } [TestMethod] public void GetSemanticDataSourcesTest() { using (ISemanticDataSource _set = BoilersSet.Factory) { Assert.IsNotNull(_set); _set.GetSemanticDataSources((semanticDataSetRootBrowsePath, variableRelativeBrowsePath, variable) => AddressSpace.Add($"{semanticDataSetRootBrowsePath}:{variableRelativeBrowsePath}", variable)); Assert.AreEqual(80, AddressSpace.Count); foreach (KeyValuePair _var in AddressSpace) Debug.WriteLine($"{_var.Key}:{_var.Value.ValueType}"); } Assert.IsTrue(AddressSpace.ContainsKey("BoilersArea_Boiler #1:CCX001_ControlOut")); Assert.IsTrue(AddressSpace.ContainsKey("BoilersArea_Boiler #2:CCX001_ControlOut")); Assert.IsTrue(AddressSpace.ContainsKey("BoilersArea_Boiler #3:CCX001_ControlOut")); Assert.IsTrue(AddressSpace.ContainsKey("BoilersArea_Boiler #4:CCX001_ControlOut")); } private Dictionary AddressSpace = new Dictionary(); } } ================================================ FILE: Networking/Tests/Networking.Simulator.Boiler.Unit/Model/CustomControllerStateUnitTest.cs ================================================  using Microsoft.VisualStudio.TestTools.UnitTesting; using tempuri.org.UA.Examples.BoilerType; namespace UAOOI.Networking.Simulator.Boiler.UnitTest.Model { [TestClass] public class CustomControllerStateUnitTest { [TestMethod] public void ConstructorTest() { CustomControllerState _controller = new CustomControllerState(null, BrowseNames.CustomController); Assert.IsNotNull(_controller.BrowseName); Assert.IsNotNull(_controller.ControlOut); Assert.IsNotNull(_controller.DescriptionX); Assert.IsNotNull(_controller.Input1); Assert.IsNotNull(_controller.Input2); Assert.IsNotNull(_controller.Input3); Assert.IsNull(_controller.Parent); } } } ================================================ FILE: Networking/Tests/Networking.Simulator.Boiler.Unit/Model/GenericControllerStateUnitTest.cs ================================================  using Microsoft.VisualStudio.TestTools.UnitTesting; using tempuri.org.UA.Examples.BoilerType; using UAOOI.Networking.Simulator.Boiler.AddressSpace; namespace UAOOI.Networking.Simulator.Boiler.UnitTest.Model { [TestClass] public class GenericControllerStateUnitTest { [TestMethod] [ExpectedExceptionAttribute(typeof(System.NotImplementedException))] public void ConstructorTest() { GenericControllerState _controller = new GenericControllerState(null); Assert.IsNull(_controller.BrowseName); Assert.AreEqual(NodeStateChangeMasks.None, _controller.ChangeMasks); Assert.IsNull(_controller.ControlOut); Assert.IsNull(_controller.Measurement); Assert.IsNull(_controller.Parent); Assert.IsNull(_controller.SetPoint); } [TestMethod] public void Constructor2Test() { GenericControllerState _controller = new GenericControllerState(null, nameof(GenericControllerState)); Assert.IsNotNull(_controller.BrowseName); Assert.AreEqual(NodeStateChangeMasks.Children, _controller.ChangeMasks); Assert.IsNotNull(_controller.ControlOut); Assert.IsNotNull(_controller.Measurement); Assert.IsNull(_controller.Parent); Assert.IsNotNull(_controller.SetPoint); } [TestMethod] public void ParentsTest() { GenericControllerState _controller = new GenericControllerState(null, "browse name"); Assert.IsNotNull(_controller.BrowseName); Assert.AreEqual(NodeStateChangeMasks.Children, _controller.ChangeMasks); Assert.IsNull(_controller.Parent); _controller.ControlOut = new PropertyState(_controller, "ControlOut") { Value = 0.0 }; Assert.AreSame(_controller, _controller.ControlOut.Parent); _controller.Measurement = new PropertyState(_controller, "Measurement") { Value = 0.0 }; Assert.AreSame(_controller, _controller.Measurement.Parent); _controller.SetPoint = new PropertyState(_controller, "SetPoint") { Value = 0.0 }; Assert.AreSame(_controller, _controller.SetPoint.Parent); } } } ================================================ FILE: Networking/Tests/Networking.Simulator.Boiler.Unit/Networking.Simulator.Boiler.UnitTest.csproj ================================================  Debug AnyCPU {F0B59A0A-90DA-41D3-8BAD-96B1F266DB6F} Library Properties UAOOI.Networking.Simulator.Boiler.UnitTest UAOOI.Networking.Simulator.Boiler.UnitTest v4.7.2 512 {3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} 15.0 $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) $(ProgramFiles)\Common Files\microsoft shared\VSTT\$(VisualStudioVersion)\UITestExtensionPackages False UnitTest true full false bin\Debug\ DEBUG;TRACE prompt 4 IDE0001,IDE0002,IDE0003 pdbonly true bin\Release\ TRACE prompt 4 true OPCUAOOIKey.snk ..\..\..\packages\CommonServiceLocator.2.0.6\lib\net47\CommonServiceLocator.dll ..\..\..\packages\MSTest.TestFramework.2.2.10\lib\net45\Microsoft.VisualStudio.TestPlatform.TestFramework.dll ..\..\..\packages\MSTest.TestFramework.2.2.10\lib\net45\Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions.dll ..\..\..\packages\System.CodeDom.6.0.0\lib\net461\System.CodeDom.dll ..\..\..\packages\System.Diagnostics.TraceSource.4.3.0\lib\net46\System.Diagnostics.TraceSource.dll True True ..\..\..\packages\UAOOI.Common.Infrastructure.6.4.7\lib\netstandard2.0\UAOOI.Common.Infrastructure.dll {BEBE131A-C931-4C2C-9F9E-ED0D0B75DF26} Configuration.Networking.Upgrade {E28E0880-03AA-4D1B-A820-41B04E766019} Configuration.Networking {352378A0-8B2E-4679-BB44-FD0BCC8467D9} SemanticData.UANodeSetValidation {7F4DED4E-5933-4229-B9CC-51DA49678904} Networking.SemanticData {3ce5cca6-0ead-49ef-ab69-d1f17a9c6d43} Networking.Simulator.Boiler Always Always This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. ================================================ FILE: Networking/Tests/Networking.Simulator.Boiler.Unit/ProducerConfigurationFactoryUnitTest.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2018, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using Microsoft.VisualStudio.TestTools.UnitTesting; using System; using System.IO; using UAOOI.Configuration.Networking.Serialization; using UAOOI.Networking.Simulator.Boiler.UnitTest.CommonServiceLocatorInstrumentation; namespace UAOOI.Networking.Simulator.Boiler.UnitTest { [DeploymentItem(@"ConfigurationDataProducer.BoilersSet.xml")] [TestClass] public class ProducerConfigurationFactoryUnitTest { [TestMethod] public void ConstructorTestMethod1() { int LogStartPosition = Logger.Singleton.TraceLogList.Count; FileInfo _configurationFile = new FileInfo(m_configurationFileName); Assert.IsTrue(_configurationFile.Exists, $"There is no file in path {_configurationFile.FullName}"); TestProducerConfigurationFactory _configurationFactory = new TestProducerConfigurationFactory(_configurationFile.FullName); Assert.IsNotNull(_configurationFactory.Loader); ConfigurationData _configuration = _configurationFactory.Loader(); Assert.AreEqual(4, _configuration.DataSets.Length); Assert.AreEqual(1, _configuration.MessageHandlers.Length); Assert.AreEqual(AssociationRole.Producer, _configuration.MessageHandlers[0].TransportRole); Assert.IsTrue(_configuration.MessageHandlers[0] is MessageWriterConfiguration); Assert.IsNull(_configuration.TypeDictionaries); int LogEndPosition = Logger.Singleton.TraceLogList.Count; Assert.AreEqual(2, LogEndPosition - LogStartPosition, $"Current number of log entries is {LogEndPosition - LogStartPosition}"); } #region instrumentation private const string m_configurationFileName = "ConfigurationDataProducer.BoilersSet.xml"; private class TestProducerConfigurationFactory : ProducerConfigurationFactory { public TestProducerConfigurationFactory(string configurationFileName) : base(configurationFileName) { } internal new Func Loader { get => base.Loader; set => base.Loader = value; } } #endregion instrumentation } } ================================================ FILE: Networking/Tests/Networking.Simulator.Boiler.Unit/Properties/AssemblyInfo.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System.Reflection; using System.Runtime.InteropServices; [assembly: AssemblyTitle("UAOOI.Networking.Simulator.Boiler.UnitTest")] [assembly: AssemblyDescription("Simulator of a set of boilers used to produce steam for a turbine - unit tests.")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("commsvr.com")] [assembly: AssemblyProduct("Object Oriented Internet")] [assembly: AssemblyCopyright("Copyright MPostol (c) 2018")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] [assembly: ComVisible(false)] [assembly: Guid("f0b59a0a-90da-41d3-8bad-96b1f266db6f")] [assembly: AssemblyVersion("4.0.1.*")] [assembly: AssemblyFileVersion("4.0.1.0")] ================================================ FILE: Networking/Tests/Networking.Simulator.Boiler.Unit/app.config ================================================  ================================================ FILE: Networking/Tests/Networking.Simulator.Boiler.Unit/packages.config ================================================  ================================================ FILE: Networking/Tests/Networking.SimulatorInteroperabilityTest.UnitTest/DataGeneratorUnitTest.cs ================================================  using Microsoft.VisualStudio.TestTools.UnitTesting; namespace UAOOI.Networking.SimulatorInteroperabilityTest.UnitTest { [TestClass] public class DataGeneratorUnitTest { [TestMethod] public void TestMethod1() { DataGenerator _dataGenerator = new DataGenerator(); _dataGenerator.Dispose(); } } } ================================================ FILE: Networking/Tests/Networking.SimulatorInteroperabilityTest.UnitTest/Networking.SimulatorInteroperabilityTest.UnitTest.csproj ================================================  Debug AnyCPU {3BF22621-2E78-4F60-B7C9-7C61D1F440BA} Library Properties UAOOI.Networking.SimulatorInteroperabilityTest.UnitTest UAOOI.Networking.SimulatorInteroperabilityTest.UnitTest v4.7.2 512 {3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} 15.0 $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) $(ProgramFiles)\Common Files\microsoft shared\VSTT\$(VisualStudioVersion)\UITestExtensionPackages False UnitTest true full false bin\Debug\ DEBUG;TRACE prompt 4 pdbonly true bin\Release\ TRACE prompt 4 true OPCUAOOIKey.snk ..\..\..\packages\CommonServiceLocator.2.0.6\lib\net47\CommonServiceLocator.dll ..\..\..\packages\MSTest.TestFramework.2.2.10\lib\net45\Microsoft.VisualStudio.TestPlatform.TestFramework.dll ..\..\..\packages\MSTest.TestFramework.2.2.10\lib\net45\Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions.dll ..\..\..\packages\System.Diagnostics.TraceSource.4.3.0\lib\net46\System.Diagnostics.TraceSource.dll True True {E28E0880-03AA-4D1B-A820-41B04E766019} Configuration.Networking {7f4ded4e-5933-4229-b9cc-51da49678904} Networking.SemanticData {5d2a0688-95e3-400a-b789-49052389d2b1} Networking.SimulatorInteroperabilityTest This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. ================================================ FILE: Networking/Tests/Networking.SimulatorInteroperabilityTest.UnitTest/ProducerConfigurationFactoryUnitTest.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2018, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System; using System.IO; using Microsoft.VisualStudio.TestTools.UnitTesting; using UAOOI.Configuration.Networking.Serialization; namespace UAOOI.Networking.SimulatorInteroperabilityTest.UnitTest { [DeploymentItem(@".\ConfigurationDataProducer.xml", @".\")] [TestClass] public class ProducerConfigurationFactoryUnitTest { [TestMethod] public void ConstructorTestMethod1() { FileInfo _configurationFile = new FileInfo(m_configurationFileName); Assert.IsTrue(_configurationFile.Exists, $"There is no file in path {_configurationFile.FullName}"); TestProducerConfigurationFactory _configuration = new TestProducerConfigurationFactory("Configuration file path"); Assert.IsNotNull(_configuration.Loader); } private const string m_configurationFileName = "ConfigurationDataProducer.xml"; private class TestProducerConfigurationFactory : ProducerConfigurationFactory { public TestProducerConfigurationFactory(string configurationFileName) : base(configurationFileName) { } internal new Func Loader { get { return base.Loader; } set { base.Loader = value; } } } } } ================================================ FILE: Networking/Tests/Networking.SimulatorInteroperabilityTest.UnitTest/Properties/AssemblyInfo.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System.Reflection; using System.Runtime.InteropServices; [assembly: AssemblyTitle("Networking.SimulatorInteroperabilityTest.UnitTest")] [assembly: AssemblyDescription("OPC UA Networking SimulatorInteroperabilityTest UnitTest")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("commsvr.com")] [assembly: AssemblyProduct("Object Oriented Internet")] [assembly: AssemblyCopyright("Copyright © MPostol 2018")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] [assembly: Guid("3bf22621-2e78-4f60-b7c9-7c61d1f440ba")] [assembly: AssemblyVersion("4.0.1.*")] [assembly: AssemblyFileVersion("4.0.1.0")] ================================================ FILE: Networking/Tests/Networking.SimulatorInteroperabilityTest.UnitTest/packages.config ================================================  ================================================ FILE: Networking/Tests/ReferenceApplicationUnitTest/ApplicationSettingsUnitTest1.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2018, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using CommonServiceLocator; using Microsoft.VisualStudio.TestTools.UnitTesting; using System.ComponentModel.Composition.Hosting; using UAOOI.Networking.DataRepository.DataLogger; using UAOOI.Networking.ReferenceApplication.Core; using UAOOI.Networking.ReferenceApplication.MEF; namespace UAOOI.Networking.ReferenceApplication.UnitTest { [TestClass] public class ApplicationSettingsUnitTest1 { [TestMethod] public void ApplicationSettingsMEFCompositionMethod() { using (AggregateCatalog newCatalog = DefaultServiceRegistrar.RegisterServices(null)) { using (CompositionContainer _container = new CompositionContainer(newCatalog)) { string _ProducerConfigurationFileName = _container.GetExportedValue(CompositionSettings.ConfigurationFileNameContract); Assert.AreEqual("ConfigurationDataProducer.xml", _ProducerConfigurationFileName, $"_ProducerConfigurationFileName = {_ProducerConfigurationFileName}"); string _ConsumerConfigurationFileName = _container.GetExportedValue(ConsumerCompositionSettings.ConfigurationFileNameContract); Assert.AreEqual("ConfigurationDataConsumer.xml", _ConsumerConfigurationFileName, $"_ConsumerConfigurationFileName = {_ConsumerConfigurationFileName}"); ApplicationSettings _ApplicationSettings = _container.GetExportedValue(); Assert.IsNotNull(_ApplicationSettings); ApplicationSettings _ApplicationSettings2 = _container.GetExportedValue(); Assert.AreSame(_ApplicationSettings, _ApplicationSettings2); } } } [TestMethod] public void ApplicationSettingsISLCompositionMethod() { using (AggregateCatalog newCatalog = DefaultServiceRegistrar.RegisterServices(null)) { using (CompositionContainer _container = new CompositionContainer(newCatalog)) { IServiceLocator _serviceLocator = new ServiceLocatorAdapter(_container); ServiceLocator.SetLocatorProvider(() => _serviceLocator); string _ProducerConfigurationFileName = _serviceLocator.GetInstance(CompositionSettings.ConfigurationFileNameContract); Assert.AreEqual("ConfigurationDataProducer.xml", _ProducerConfigurationFileName, $"_ProducerConfigurationFileName = {_ProducerConfigurationFileName}"); string _ConsumerConfigurationFileName = _serviceLocator.GetInstance(ConsumerCompositionSettings.ConfigurationFileNameContract); Assert.AreEqual("ConfigurationDataConsumer.xml", _ConsumerConfigurationFileName, $"_ConsumerConfigurationFileName = {_ConsumerConfigurationFileName}"); ApplicationSettings _ApplicationSettings = _serviceLocator.GetInstance(); Assert.IsNotNull(_ApplicationSettings); ApplicationSettings _ApplicationSettings2 = _serviceLocator.GetInstance(); Assert.AreSame(_ApplicationSettings, _ApplicationSettings2); } } } } } ================================================ FILE: Networking/Tests/ReferenceApplicationUnitTest/Diagnostic/ReferenceApplicationEventSourceUnitTest.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2020, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System; using System.Collections.Generic; using System.Diagnostics.Tracing; using Microsoft.Practices.EnterpriseLibrary.SemanticLogging; using Microsoft.Practices.EnterpriseLibrary.SemanticLogging.Schema; using Microsoft.VisualStudio.TestTools.UnitTesting; using UAOOI.Networking.ReferenceApplication.Core.Diagnostic; using static UAOOI.Networking.ReferenceApplication.Core.Diagnostic.ReferenceApplicationEventSource; namespace UAOOI.Networking.ReferenceApplication.UnitTest.Diagnostic { [TestClass] public class ReferenceApplicationEventSourceUnitTest { [TestMethod] public void StartingApplicationTest() { EventEntry _lastEvent = null; int _calls = 0; ObservableEventListener _listener = new ObservableEventListener(); IDisposable subscription = _listener.Subscribe(x => { _calls++; _lastEvent = x; }); using (SinkSubscription _sinkSubscription = new SinkSubscription(subscription, _listener)) { Assert.IsNotNull(_sinkSubscription.Sink); ReferenceApplicationEventSource _log = ReferenceApplicationEventSource.Log; _sinkSubscription.Sink.EnableEvents(_log, EventLevel.LogAlways, EventKeywords.All); Assert.IsNull(_lastEvent); _log.StartingApplication("Message handler name"); Assert.IsNotNull(_lastEvent); Assert.AreEqual(1, _calls); //_lastEvent content Assert.AreEqual(2, _lastEvent.EventId); Assert.AreEqual(Guid.Empty, _lastEvent.ActivityId); string _message = "The application has been started using the message handling provider Message handler name."; Assert.AreEqual(_message, _lastEvent.FormattedMessage, _lastEvent.FormattedMessage); //schema EventSchema _Schema = _lastEvent.Schema; Assert.AreEqual("InfrastructureStart", _Schema.EventName); Assert.AreEqual(2, _Schema.Id); //Assert.IsTrue((_Schema.Keywords & SemanticEventSource.Keywords.Diagnostic2) > 0); //Assert.AreEqual("PackageContent", _Schema.KeywordsDescription); Assert.AreEqual(EventLevel.Informational, _Schema.Level); Assert.AreEqual("Start", _Schema.OpcodeName); Assert.AreEqual(EventOpcode.Start, _Schema.Opcode); Assert.AreEqual(new Guid("D8637D00-5EAD-4538-9286-8C6DE346D8C8"), _Schema.ProviderId); Assert.AreEqual("UAOOI-Networking-ReferenceApplication-Diagnostic", _Schema.ProviderName); Assert.AreEqual("Infrastructure", _Schema.TaskName); Assert.AreEqual(Tasks.Infrastructure, _Schema.Task); Assert.AreEqual(0, _Schema.Version); //Payload Assert.AreEqual("System.Collections.ObjectModel.ReadOnlyCollection`1[System.Object]", _lastEvent.Payload.ToString(), _lastEvent.Payload.ToString()); Assert.AreEqual(1, _lastEvent.Payload.Count); } } [TestMethod] public void ReferenceApplicationEventSourceExtensionsTest() { List _lastEvents = new List(); ObservableEventListener _listener = new ObservableEventListener(); IDisposable subscription = _listener.Subscribe(x => {_lastEvents.Add(x); }); using (SinkSubscription _sinkSubscription = new SinkSubscription(subscription, _listener)) { Assert.IsNotNull(_sinkSubscription.Sink); ReferenceApplicationEventSource _log = ReferenceApplicationEventSource.Log; _sinkSubscription.Sink.EnableEvents(_log, EventLevel.LogAlways, EventKeywords.All); Assert.AreEqual(0, _lastEvents.Count); NotImplementedException _ex = new NotImplementedException("testing exception", new NotImplementedException()); _log.LogException(_ex); Assert.AreEqual(2, _lastEvents.Count); //_lastEvent content Assert.AreEqual(1, _lastEvents[0].EventId); Assert.AreEqual(Guid.Empty, _lastEvents[0].ActivityId); string _message = "Application Failure: An exception has benn caught: of type NotImplementedException capturing the message: testing exception"; Assert.AreEqual(_message, _lastEvents[0].FormattedMessage); //schema EventSchema _Schema = _lastEvents[0].Schema; Assert.AreEqual("InfrastructureInfo", _Schema.EventName); Assert.AreEqual(1, _Schema.Id); //Assert.IsTrue((_Schema.Keywords & SemanticEventSource.Keywords.Diagnostic2) > 0); //Assert.AreEqual("PackageContent", _Schema.KeywordsDescription); Assert.AreEqual(EventLevel.Error, _Schema.Level); Assert.AreEqual("Info", _Schema.OpcodeName); Assert.AreEqual(EventOpcode.Info, _Schema.Opcode); Assert.AreEqual(new Guid("D8637D00-5EAD-4538-9286-8C6DE346D8C8"), _Schema.ProviderId); Assert.AreEqual("UAOOI-Networking-ReferenceApplication-Diagnostic", _Schema.ProviderName); Assert.AreEqual("Infrastructure", _Schema.TaskName); Assert.AreEqual(Tasks.Infrastructure, _Schema.Task); Assert.AreEqual(0, _Schema.Version); //Payload Assert.AreEqual("System.Collections.ObjectModel.ReadOnlyCollection`1[System.Object]", _lastEvents[0].Payload.ToString(), _lastEvents[0].Payload.ToString()); Assert.AreEqual(1, _lastEvents[0].Payload.Count); } } } } ================================================ FILE: Networking/Tests/ReferenceApplicationUnitTest/MEF/BootstrapperBaseUnitTest.cs ================================================  using System; using System.Windows; using CommonServiceLocator; using Microsoft.VisualStudio.TestTools.UnitTesting; using UAOOI.Common.Infrastructure.Diagnostic; using UAOOI.Networking.ReferenceApplication.MEF; namespace UAOOI.Networking.ReferenceApplication.UnitTest.MEF { [TestClass] public class BootstrapperBaseUnitTest { [TestMethod] public void LoggerDefaultsToNull() { TestBootstrapperBase _bootstrapper = new TestBootstrapperBase(); Assert.IsNull(_bootstrapper.BaseLogger); Assert.IsNull(_bootstrapper.BaseShell); Assert.IsNull(_bootstrapper.CallCreateShell()); } [TestMethod] public void CreateLoggerInitializesLogger() { TestBootstrapperBase _bootstrapper = new TestBootstrapperBase(); _bootstrapper.CallCreateLogger(); Assert.IsNotNull(_bootstrapper.BaseLogger); Assert.IsInstanceOfType(_bootstrapper.BaseLogger, typeof(TraceSourceBase)); } [TestMethod] public void RegisterFrameworkExceptionTypesShouldRegisterActivationException() { TestBootstrapperBase _bootstrapper = new TestBootstrapperBase(); _bootstrapper.CallRegisterFrameworkExceptionTypes(); Assert.IsTrue(ExceptionExtensions.IsFrameworkExceptionRegistered(typeof(ActivationException))); } [TestMethod] public void OnInitializedShouldRunLast() { TestBootstrapperBase _bootstrapper = new TestBootstrapperBase(); _bootstrapper.Run(); Assert.IsTrue(_bootstrapper.ExtraInitialization); } private class TestBootstrapperBase : BootstrapperBase { #region BootstrapperBase protected override DependencyObject CreateShell() { throw new NotImplementedException(); } protected override void InitializeShell() { throw new NotImplementedException(); } protected override void OnInitialized() { ExtraInitialization = true; } public override void Run(bool runWithDefaultConfiguration) { Assert.IsTrue(runWithDefaultConfiguration); Assert.IsFalse(this.ExtraInitialization); } #endregion internal void CallCreateLogger() { this.Logger = base.CreateLogger(); } internal void CallRegisterFrameworkExceptionTypes() { base.RegisterFrameworkExceptionTypes(); } internal bool ExtraInitialization = false; internal DependencyObject CallCreateShell() { return base.CreateShell(); } internal ITraceSource BaseLogger { get { return base.Logger; } } internal DependencyObject BaseShell { get { return base.Shell; } } } } } ================================================ FILE: Networking/Tests/ReferenceApplicationUnitTest/MEF/DefaultServiceRegistrarUnitTest.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using CommonServiceLocator; using Microsoft.VisualStudio.TestTools.UnitTesting; using System.Collections.Generic; using System.ComponentModel.Composition.Hosting; using System.ComponentModel.Composition.Primitives; using System.Diagnostics; using System.Linq; using UAOOI.Networking.Core; using UAOOI.Networking.DataRepository.DataLogger; using UAOOI.Networking.ReferenceApplication.Core; using UAOOI.Networking.ReferenceApplication.MEF; using UAOOI.Networking.SimulatorInteroperabilityTest; namespace UAOOI.Networking.ReferenceApplication.UnitTest.MEF { [TestClass] public class DefaultServiceRegistrarUnitTest { [TestMethod] public void RegisterRequiredServicesIfMissingNullArgumentTestM() { using (AggregateCatalog newCatalog = DefaultServiceRegistrar.RegisterServices(null)) { } } [TestMethod] public void RegisterRequiredServicesIfMissingTest() { using (AggregateCatalog newCatalog = DefaultServiceRegistrar.RegisterServices(null)) { using (CompositionContainer _container = new CompositionContainer(newCatalog)) { foreach (ComposablePartDefinition _part in _container.Catalog.Parts) foreach (ExportDefinition export in _part.ExportDefinitions) Debug.WriteLine(string.Format("Part contract name => '{0}'", export.ContractName)); Assert.AreEqual(11, _container.Catalog.Parts.Count()); MainWindow _MainWindowExportedValue = _container.GetExportedValue(); Assert.IsNotNull(_MainWindowExportedValue); Assert.IsNotNull(_MainWindowExportedValue.MainWindowViewModel); IEnumerable _diagnosticProviders = _container.GetExportedValues(); Assert.AreEqual(3, _diagnosticProviders.Count()); } } } [TestMethod] [DeploymentItem(@".\ConfigurationDataConsumer.xml", @".\")] public void RegisterRequiredServicesIfMissingAndUDPMessageHandler() { AggregateCatalog _catalog = new AggregateCatalog(new AssemblyCatalog("UAOOI.Networking.UDPMessageHandler.dll"), new AssemblyCatalog("UAOOI.Networking.SimulatorInteroperabilityTest.dll")); AggregateCatalog _newCatalog = DefaultServiceRegistrar.RegisterServices(_catalog); int _disposingCount = 0; using (CompositionContainer _container = new CompositionContainer(_newCatalog)) { IServiceLocator _serviceLocator = new ServiceLocatorAdapter(_container); ServiceLocator.SetLocatorProvider(() => _serviceLocator); Assert.AreEqual(14, _container.Catalog.Parts.Count()); foreach (ComposablePartDefinition _part in _container.Catalog.Parts) { Debug.WriteLine($"New Part: {string.Join(", ", _part.Metadata.Keys.ToArray())}"); foreach (ImportDefinition _import in _part.ImportDefinitions) Debug.WriteLine(string.Format("Imported contracts name => '{0}'", _import.ContractName)); foreach (ExportDefinition _export in _part.ExportDefinitions) Debug.WriteLine(string.Format("Exported contracts name => '{0}'", _export.ContractName)); } //UDPMessageHandler IMessageHandlerFactory _messageHandlerFactory = _container.GetExportedValue(); Assert.IsNotNull(_messageHandlerFactory); INetworkingEventSourceProvider _baseEventSource = _messageHandlerFactory as INetworkingEventSourceProvider; Assert.IsNull(_baseEventSource); IEnumerable _diagnosticProviders = _container.GetExportedValues(); Assert.AreEqual(4, _diagnosticProviders.Count()); // DataLogger EventSourceBootstrapper _eventSourceBootstrapper = _container.GetExportedValue(); LoggerManagementSetup _logger = _container.GetExportedValue(); _logger.DisposeCheck(x => _disposingCount++); Assert.IsNotNull(_logger.BindingFactory); Assert.IsNotNull(_logger.ConfigurationFactory); Assert.IsNotNull(_logger.EncodingFactory); Assert.IsNotNull(_logger.MessageHandlerFactory); SimulatorDataManagementSetup _simulator = _container.GetExportedValue() as SimulatorDataManagementSetup; Assert.IsNotNull(_simulator); Assert.IsNotNull(_simulator.BindingFactory); Assert.IsNotNull(_simulator.ConfigurationFactory); Assert.IsNotNull(_simulator.EncodingFactory); Assert.IsNotNull(_simulator.MessageHandlerFactory); _simulator.DisposeCheck(x => _disposingCount++); Assert.AreEqual(0, _disposingCount); } Assert.AreEqual(2, _disposingCount); } } } ================================================ FILE: Networking/Tests/ReferenceApplicationUnitTest/MEF/MefBootstrapperUnitTest.cs ================================================ using System.Collections.Generic; using System.ComponentModel.Composition.Hosting; using System.Windows; using CommonServiceLocator; using Microsoft.VisualStudio.TestTools.UnitTesting; using UAOOI.Common.Infrastructure.Diagnostic; using UAOOI.Networking.ReferenceApplication.MEF; namespace UAOOI.Networking.ReferenceApplication.UnitTest.MEF { [TestClass] [DeploymentItem("UAOOI.Networking.UDPMessageHandler.dll")] public class MefBootstrapperUnitTest { [TestMethod] public void TestMefBootstrapperConstructor() { TestMefBootstrapper _newMefBootstrapper = new TestMefBootstrapper(); _newMefBootstrapper.TestStartupState(); _newMefBootstrapper.Run(); _newMefBootstrapper.TestAfterRunState(); } private class TestMefBootstrapper : MefBootstrapper { protected override void ConfigureAggregateCatalog() { m_CallSequence.Add(nameof(ConfigureAggregateCatalog)); base.ConfigureAggregateCatalog(); } protected override void ConfigureContainer() { m_CallSequence.Add(nameof(ConfigureContainer)); base.ConfigureContainer(); } protected override AggregateCatalog CreateAggregateCatalog() { m_CallSequence.Add(nameof(CreateAggregateCatalog)); return base.CreateAggregateCatalog(); } protected override CompositionContainer CreateContainer() { m_CallSequence.Add(nameof(CreateContainer)); return base.CreateContainer(); } protected override ITraceSource CreateLogger() { m_CallSequence.Add(nameof(CreateLogger)); return base.CreateLogger(); } protected override DependencyObject CreateShell() { m_CallSequence.Add(nameof(CreateShell)); return base.CreateShell(); } protected override void InitializeShell() { m_CallSequence.Add(nameof(InitializeShell)); base.InitializeShell(); } protected override void OnInitialized() { m_CallSequence.Add(nameof(OnInitialized)); m_ExternalInitialization = true; } protected override void RegisterBootstrapperProvidedTypes() { m_CallSequence.Add(nameof(RegisterBootstrapperProvidedTypes)); base.RegisterBootstrapperProvidedTypes(); } public override void RegisterDefaultTypesIfMissing() { m_CallSequence.Add(nameof(RegisterDefaultTypesIfMissing)); base.RegisterDefaultTypesIfMissing(); } protected override void RegisterFrameworkExceptionTypes() { m_CallSequence.Add(nameof(RegisterFrameworkExceptionTypes)); base.RegisterFrameworkExceptionTypes(); } public override void Run(bool runWithDefaultConfiguration) { m_CallSequence.Add(nameof(Run)); base.Run(runWithDefaultConfiguration); } #region UT instrumentation internal void TestStartupState() { Assert.IsNull(this.AggregateCatalog); Assert.IsNull(this.Container); Assert.IsNull(this.Logger); Assert.IsNull(this.Shell); Assert.IsFalse(m_ExternalInitialization); Assert.AreEqual(0, m_CallSequence.Count); } internal void TestAfterRunState() { Assert.IsTrue(m_ExternalInitialization); Assert.IsNotNull(this.AggregateCatalog); Assert.IsNotNull(this.Container); Assert.IsNotNull(this.Logger); Assert.IsNull(this.Shell); Assert.AreEqual(12, m_CallSequence.Count); int i = 0; Assert.AreEqual(nameof(Run), m_CallSequence[i++]); Assert.AreEqual(nameof(CreateLogger), m_CallSequence[i++]); Assert.AreEqual(nameof(CreateAggregateCatalog), m_CallSequence[i++]); Assert.AreEqual(nameof(ConfigureAggregateCatalog), m_CallSequence[i++]); Assert.AreEqual(nameof(RegisterDefaultTypesIfMissing), m_CallSequence[i++]); Assert.AreEqual(nameof(CreateContainer), m_CallSequence[i++]); Assert.AreEqual(nameof(ConfigureContainer), m_CallSequence[i++]); Assert.AreEqual(nameof(RegisterBootstrapperProvidedTypes), m_CallSequence[i++]); Assert.AreEqual(nameof(RegisterFrameworkExceptionTypes), m_CallSequence[i++]); Assert.AreEqual(nameof(CreateShell), m_CallSequence[i++]); Assert.AreEqual(nameof(InitializeShell), m_CallSequence[i++]); Assert.AreEqual(nameof(OnInitialized), m_CallSequence[i++]); Assert.IsTrue(ServiceLocator.IsLocationProviderSet); MainWindow _MainWindow = ServiceLocator.Current.GetInstance(); Assert.IsNotNull(_MainWindow); MainWindowViewModel _MainWindowViewModel = ServiceLocator.Current.GetInstance(); Assert.IsNotNull(_MainWindowViewModel); } private bool m_ExternalInitialization = false; private List m_CallSequence = new List(); #endregion } } } ================================================ FILE: Networking/Tests/ReferenceApplicationUnitTest/MainWindowViewModelUnitTest.cs ================================================  using Microsoft.VisualStudio.TestTools.UnitTesting; namespace UAOOI.Networking.ReferenceApplication.UnitTest { [TestClass] public class MainWindowViewModelUnitTest { [Microsoft.VisualStudio.TestTools.UnitTesting.TestInitialize] public void Initialize() { //GalaSoft.MvvmLight.Threading.DispatcherHelper.Initialize(); } } } ================================================ FILE: Networking/Tests/ReferenceApplicationUnitTest/Networking.ReferenceApplication.UnitTest.csproj ================================================  Debug AnyCPU {ED278519-D497-47AE-8EB1-5826904AF6B1} Library Properties UAOOI.Networking.ReferenceApplication.UnitTest UAOOI.Networking.ReferenceApplication.UnitTest v4.7.2 512 {3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} 10.0 $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) $(ProgramFiles)\Common Files\microsoft shared\VSTT\$(VisualStudioVersion)\UITestExtensionPackages False UnitTest true full false bin\Debug\ DEBUG;TRACE prompt 4 IDE0001,IDE0003 false pdbonly true bin\Release\ TRACE prompt 4 true OPCUAOOIKey.snk ..\..\..\packages\CommonServiceLocator.2.0.6\lib\net47\CommonServiceLocator.dll ..\..\..\packages\EnterpriseLibrary.SemanticLogging.2.0.1406.1\lib\net45\Microsoft.Practices.EnterpriseLibrary.SemanticLogging.dll ..\..\..\packages\Newtonsoft.Json.13.0.1\lib\net45\Newtonsoft.Json.dll ..\..\..\packages\System.Diagnostics.TraceSource.4.3.0\lib\net46\System.Diagnostics.TraceSource.dll True True ..\..\..\packages\System.Reactive.5.0.0\lib\net472\System.Reactive.dll ..\..\..\packages\System.Reactive.Core.5.0.0\lib\net472\System.Reactive.Core.dll ..\..\..\packages\System.Reactive.Interfaces.5.0.0\lib\net472\System.Reactive.Interfaces.dll ..\..\..\packages\System.Runtime.CompilerServices.Unsafe.6.0.0\lib\net461\System.Runtime.CompilerServices.Unsafe.dll ..\..\..\packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll ..\..\..\packages\System.ValueTuple.4.5.0\lib\net47\System.ValueTuple.dll ..\..\..\packages\UAOOI.Common.Infrastructure.6.4.7\lib\netstandard2.0\UAOOI.Common.Infrastructure.dll ..\..\..\packages\UAOOI.Networking.Core.4.0.2\lib\netstandard2.0\UAOOI.Networking.Core.dll False {e28e0880-03aa-4d1b-a820-41b04e766019} Configuration.Networking {afcca7c9-47fe-4fb6-935e-12d686eec58f} Networking.Core {3781B8CA-3128-45DC-89C9-981740357630} Networking.DataLogger {2238851E-4DB8-46B0-B38D-0E2315FE153E} Networking.ReferenceApplication.Core {f0accb28-ae0d-4e19-94fa-7be3044f1eeb} Networking.ReferenceApplication {7f4ded4e-5933-4229-b9cc-51da49678904} Networking.SemanticData {5D2A0688-95E3-400A-B789-49052389D2B1} Networking.SimulatorInteroperabilityTest {D2EB89F9-321E-46E4-BA79-679138B82B23} Networking.UDPMessageHandler Designer False False False False ================================================ FILE: Networking/Tests/ReferenceApplicationUnitTest/Properties/AssemblyInfo.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System.Reflection; using System.Runtime.InteropServices; [assembly: AssemblyTitle("UANetworkingReferenceApplicationUnitTest")] [assembly: AssemblyDescription("OPC UA Networking Reference Application Unit Test")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("commsvr.com")] [assembly: AssemblyProduct("Object Oriented Internet")] [assembly: AssemblyCopyright("Copyright © MPostol 2018")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] [assembly: Guid("ed278519-d497-47ae-8eb1-5826904af6b1")] [assembly: AssemblyVersion("4.0.1.*")] [assembly: AssemblyFileVersion("4.0.1.0")] ================================================ FILE: Networking/Tests/ReferenceApplicationUnitTest/app.config ================================================  ================================================ FILE: Networking/Tests/ReferenceApplicationUnitTest/packages.config ================================================  ================================================ FILE: Networking/Tests/SemanticDatalUnitTest/AssociationUnitTest.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using Microsoft.VisualStudio.TestTools.UnitTesting; using System; using System.Collections.Generic; using UAOOI.Configuration.Networking.Serialization; using UAOOI.Networking.Core; using UAOOI.Networking.SemanticData.Common; using UAOOI.Networking.SemanticData.DataRepository; using UAOOI.Networking.SemanticData.Encoding; using UAOOI.Networking.SemanticData.MessageHandling; using UAOOI.Networking.SemanticData.UnitTest.Simulator; namespace UAOOI.Networking.SemanticData.UnitTest { [TestClass] public class AssociationUnitTest { #region test #region Association [TestMethod] [ExpectedException(typeof(NullReferenceException))] [TestCategory("DataManagement_Association")] public void AssociationCreatorTestMethod1() { TestAssociation _nt = new TestAssociation(null, null); } [TestMethod] [ExpectedException(typeof(NullReferenceException))] [TestCategory("DataManagement_Association")] public void AssociationCreatorTestMethod2() { ISemanticData _testISemanticData = new TestISemanticData(); Assert.IsNotNull(_testISemanticData); TestAssociation _nt = new TestAssociation(_testISemanticData, null); } [TestMethod] [TestCategory("DataManagement_Association")] public void AssociationCreatorTestMethod4() { string _alias = "AssociationCreatorTestMethod4"; ISemanticData _testISemanticData = new TestISemanticData(); Assert.IsNotNull(_testISemanticData); TestAssociation _nt = new TestAssociation(_testISemanticData, _alias); Assert.IsNotNull(_nt); Assert.IsNotNull(_nt.DataDescriptor); Assert.IsNotNull(_nt.DataDescriptor.Identifier); Assert.IsNotNull(_nt.State); Assert.AreNotEqual(Guid.Empty, _nt.Id); Assert.AreEqual(HandlerState.NoConfiguration, _nt.State.State); Assert.AreEqual(_alias, _nt.ToString()); } [TestMethod] [TestCategory("DataManagement_Association")] public void AssociationCompareToTestMethod() { ISemanticData _testISemanticData0 = new TestISemanticData("TestISemanticData1", 0, Guid.Parse(@"{9912B722-304D-438F-8538-3C6F98068E66}")); Assert.IsNotNull(_testISemanticData0); TestAssociation _nt0 = new TestAssociation(_testISemanticData0, "AssociationCompareToTestMethod0"); Assert.IsNotNull(_nt0); Assert.AreEqual(0, _nt0.CompareTo(_nt0)); ISemanticData _testISemanticData1 = new TestISemanticData("TestISemanticData0", 0, Guid.Parse(@"{9912B722-304D-438F-8538-3C6F98068E65}")); Assert.IsNotNull(_testISemanticData1); TestAssociation _nt1 = new TestAssociation(_testISemanticData1, "AssociationCompareToTestMethod1"); Assert.IsNotNull(_nt1); Assert.AreEqual(-1, _nt1.CompareTo(_nt0)); Assert.AreEqual(1, _nt0.CompareTo(_nt1)); } [TestMethod] [TestCategory("DataManagement_Association")] [ExpectedException(typeof(InvalidOperationException))] public void AssociationStateDisableTestMethod() { ISemanticData _testISemanticData = new TestISemanticData(); Assert.IsNotNull(_testISemanticData); TestAssociation _nt = new TestAssociation(_testISemanticData, "AssociationStateDisableTestMethod"); Assert.IsNotNull(_nt); _nt.State.Disable(); } [TestMethod] [TestCategory("DataManagement_Association")] [ExpectedException(typeof(InvalidOperationException))] public void AssociationStateEnableTestMethod() { ISemanticData _testISemanticData = new TestISemanticData(); Assert.IsNotNull(_testISemanticData); TestAssociation _nt = new TestAssociation(_testISemanticData, "AssociationStateEnableTestMethod"); Assert.IsNotNull(_nt); _nt.State.Enable(); } [TestMethod] [TestCategory("DataManagement_Association")] public void AssociationInitializeMethod() { ISemanticData _testISemanticData = new TestISemanticData(); Assert.IsNotNull(_testISemanticData); TestAssociation _nt = new TestAssociation(_testISemanticData, "AssociationInitializeMethod"); Assert.IsNotNull(_nt); int _eventsCount = 0; HandlerState _lastState = default(HandlerState); _nt.StateChangedEventHandler += (x, y) => { _eventsCount++; _lastState = y.State; }; Assert.AreEqual(HandlerState.NoConfiguration, _nt.State.State); Assert.AreEqual(0, _eventsCount); _nt.Initialize(); Assert.AreEqual(1, _eventsCount); Assert.IsNotNull(_lastState); Assert.AreEqual(HandlerState.Disabled, _lastState); Assert.AreEqual(HandlerState.Disabled, _nt.State.State); _nt.State.Enable(); Assert.AreEqual(2, _eventsCount); Assert.IsNotNull(_lastState); Assert.AreEqual(HandlerState.Operational, _lastState); Assert.AreEqual(HandlerState.Operational, _nt.State.State); _nt.State.Disable(); Assert.AreEqual(3, _eventsCount); Assert.IsNotNull(_lastState); Assert.AreEqual(HandlerState.Disabled, _lastState); Assert.AreEqual(HandlerState.Disabled, _nt.State.State); } [TestMethod] [TestCategory("DataManagement_Association")] [ExpectedException(typeof(InvalidOperationException))] public void AssociationInitializeMethod2() { ISemanticData _testISemanticData = new TestISemanticData(); Assert.IsNotNull(_testISemanticData); TestAssociation _nt = new TestAssociation(_testISemanticData, "AssociationInitializeMethod2", false); Assert.IsNotNull(_nt); int _eventsCount = 0; HandlerState _lastState = default(HandlerState); _nt.StateChangedEventHandler += (x, y) => { _eventsCount++; _lastState = y.State; }; Assert.AreEqual(HandlerState.NoConfiguration, _nt.State.State); _nt.Initialize(); Assert.AreEqual(1, _eventsCount); Assert.IsNotNull(_lastState); Assert.AreEqual(HandlerState.Error, _lastState); Assert.AreEqual(HandlerState.Error, _nt.State.State); _nt.State.Enable(); } #endregion #region ConsumerAssociation [TestMethod] [TestCategory("DataManagement_Association")] public void ConsumerAssociationCreatorTestMethod() { ConsumerAssociation _ca = new ConsumerAssociation(new SemanticData(), PersistentConfiguration.GetAssociationConfiguration(), new BindingFactory(Repository), new IEF()); Assert.IsNotNull(_ca); } #endregion #endregion #region private private class TestAssociation : Association { public TestAssociation(ISemanticData data, string aliasName, bool success) : base(data, aliasName) { m_Success = success; } public TestAssociation(ISemanticData data, string aliasName) : this(data, aliasName, true) { } protected override void InitializeCommunication() { if (!m_Success) throw new InvalidOperationException("Wrong configuration"); } public Guid Id { get { return DataDescriptor.Guid; } } protected override void OnEnabling() { } protected override void OnDisabling() { } private bool m_Success = false; protected internal override void AddMessageHandler(IMessageHandler messageHandler, AssociationConfiguration configuration) { throw new NotImplementedException(); } } private class DataBrokerFactory : IBindingFactory { public IConsumerBinding GetConsumerBinding(string repositoryGroup, string processValueName, UATypeInfo field) { return new ConsumerBinding(x => { }, new UATypeInfo(field.BuiltInType)); } public IProducerBinding GetProducerBinding(string repositoryGroup, string variableName, UATypeInfo encoding) { throw new NotImplementedException(); } public IProducerBinding GetProducerBinding(string repositoryGroup, string variableName, BuiltInType encoding) { throw new NotImplementedException(); } } private class TestISemanticData : ISemanticData { public TestISemanticData() : this("SymbolicName".AddId(_count), _count) { _count++; } public TestISemanticData(string symbolicName, IComparable nodeId) : this(symbolicName, nodeId, Guid.NewGuid()) { Identifier = new Uri(@"Http://commsvr.com"); SymbolicName = symbolicName; NodeId = nodeId; } public TestISemanticData(string symbolicName, IComparable nodeId, Guid newGuid) { Guid = newGuid; } public Uri Identifier { get; private set; } public string SymbolicName { get; private set; } public IComparable NodeId { get; private set; } private static int _count = 0; public Guid Guid { get; private set; } } /// /// Class SemanticData. /// private class SemanticData : ISemanticData { public Uri Identifier { get { throw new NotImplementedException(); } } public string SymbolicName { get { throw new NotImplementedException(); } } public IComparable NodeId { get { throw new NotImplementedException(); } } public Guid Guid { get { return Guid.NewGuid(); } } } private class BindingFactory : IBindingFactory { public BindingFactory(Dictionary repository) { m_Repository = repository; } public IConsumerBinding GetConsumerBinding(string repositoryGroup, string processValueName, UATypeInfo field) { IConsumerBinding _ncb = new ConsumerBindingMonitoredValue(new UATypeInfo(field.BuiltInType)); string _key = String.Format("{0}.{1}", repositoryGroup, processValueName); m_Repository.Add(_key, _ncb); return _ncb; } public IProducerBinding GetProducerBinding(string repositoryGroup, string variableName, BuiltInType encoding) { string _key = String.Format("{0}.{1}", repositoryGroup, variableName); IProducerBinding _npb = new ProducerBindingMonitoredValue(_key, new UATypeInfo(encoding)); m_Repository.Add(_key, _npb); return _npb; } public IProducerBinding GetProducerBinding(string repositoryGroup, string variableName, UATypeInfo encoding) { throw new NotImplementedException(); } private Dictionary m_Repository = new Dictionary(); } private Dictionary Repository = new Dictionary(); private class IEF : IEncodingFactory { public IUADecoder UADecoder { get { return m_UADecoder; } } public IUAEncoder UAEncoder { get { throw new NotImplementedException(); } } public void UpdateValueConverter(IBinding binding, string repositoryGroup, UATypeInfo sourceEncoding) { Assert.IsNotNull(binding); binding.Culture = null; binding.Converter = null; binding.Parameter = null; } private readonly IUADecoder m_UADecoder = new Helpers.UABinaryDecoderImplementation(); } #endregion } } ================================================ FILE: Networking/Tests/SemanticDatalUnitTest/BinaryDecoderUnitTest.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2018, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using Microsoft.VisualStudio.TestTools.UnitTesting; using System; using System.Globalization; using UAOOI.Configuration.Networking.Serialization; using UAOOI.Networking.Core; using UAOOI.Networking.SemanticData.DataRepository; using UAOOI.Networking.SemanticData.MessageHandling; using UAOOI.Networking.SemanticData.UnitTest.MessageHandlerFactory; namespace UAOOI.Networking.SemanticData.UnitTest { [TestClass] public class BinaryDecoderUnitTest { [TestMethod] public void DisposeTest() { BinaryDataTransferGraphReceiverFixture _BinaryDataTransferGraphReceiverFixture = new DTGFixture(); using (BinaryDecoder _reader = new BinaryDecoder(_BinaryDataTransferGraphReceiverFixture, new Helpers.UABinaryDecoderImplementation())) { } Assert.AreEqual(1, _BinaryDataTransferGraphReceiverFixture.DisposeCount); } [TestMethod] [TestCategory("UAOOI.Networking.SemanticData")] public void DataTransferTest() { uint _dataId = CommonDefinitions.DataSetId; BinaryDataTransferGraphReceiverFixture _BinaryDataTransferGraphReceiverFixture = new DTGFixture(); using (BinaryDecoder _reader = new BinaryDecoder(_BinaryDataTransferGraphReceiverFixture, new Helpers.UABinaryDecoderImplementation())) { Assert.IsNotNull(_reader); Assert.AreEqual(0, _BinaryDataTransferGraphReceiverFixture.m_NumberOfSentBytes); Assert.AreEqual(0, _BinaryDataTransferGraphReceiverFixture.NumberOfAttachToNetwork); Assert.AreEqual(0, _BinaryDataTransferGraphReceiverFixture.m_NumberOfSentMessages); Assert.AreEqual(HandlerState.Disabled, _BinaryDataTransferGraphReceiverFixture.State.State); _reader.AttachToNetwork(); _reader.State.Enable(); Assert.AreEqual(HandlerState.Operational, _BinaryDataTransferGraphReceiverFixture.State.State); Assert.AreEqual(1, _BinaryDataTransferGraphReceiverFixture.NumberOfAttachToNetwork); Assert.AreEqual(0, _BinaryDataTransferGraphReceiverFixture.m_NumberOfSentBytes); Assert.AreEqual(0, _BinaryDataTransferGraphReceiverFixture.m_NumberOfSentMessages); object[] _buffer = new object[CommonDefinitions.TestValues.Length]; IConsumerBinding[] _bindings = new IConsumerBinding[_buffer.Length]; Action _assign = (x, y) => _buffer[y] = x; for (int i = 0; i < _buffer.Length; i++) _bindings[i] = new ConsumerBinding(i, _assign, Type.GetTypeCode(CommonDefinitions.TestValues[i].GetType())); int _redItems = 0; _reader.ReadMessageCompleted += (x, y) => _reader_ReadMessageCompleted(x, y, _dataId, (z) => { _redItems++; return _bindings[z]; }, _buffer.Length); _BinaryDataTransferGraphReceiverFixture.SendUDPMessage(CommonDefinitions.GetTestBinaryArrayVariant(), _dataId); Assert.AreEqual(1, _BinaryDataTransferGraphReceiverFixture.NumberOfAttachToNetwork); Assert.AreEqual(116, _BinaryDataTransferGraphReceiverFixture.m_NumberOfSentBytes); Assert.AreEqual(1, _BinaryDataTransferGraphReceiverFixture.m_NumberOfSentMessages); //test packet content PacketHeader _readerHeader = _reader.Header; Assert.AreEqual(CommonDefinitions.TestGuid, _readerHeader.PublisherId); Assert.AreEqual(MessageHandling.CommonDefinitions.ProtocolVersion, _readerHeader.ProtocolVersion); Assert.AreEqual(0, _readerHeader.NetworkMessageFlags); Assert.AreEqual(0, _readerHeader.SecurityTokenId); Assert.AreEqual(1, _readerHeader.NonceLength); Assert.AreEqual(1, _readerHeader.Nonce.Length); Assert.AreEqual(0xcc, _readerHeader.Nonce[0]); Assert.AreEqual(1, _readerHeader.MessageCount); Assert.AreEqual(1, _readerHeader.DataSetWriterIds.Count); Assert.AreEqual(CommonDefinitions.DataSetId, _readerHeader.DataSetWriterIds[0]); Assert.AreEqual(_buffer.Length, _redItems); object[] _shouldBeInBuffer = CommonDefinitions.TestValues; Assert.AreEqual(_shouldBeInBuffer.Length, _buffer.Length); Assert.AreEqual(string.Join(",", _shouldBeInBuffer), string.Join(",", _buffer)); Assert.AreEqual(1, _readerHeader.MessageCount); } } #region private test instrumentation private class ConsumerBinding : IConsumerBinding { public ConsumerBinding(int index, Action assignAction, TypeCode targetType) { m_AssignAction = assignAction; m_Index = index; Encoding = new UATypeInfo(GetTargetType(targetType)); } private BuiltInType GetTargetType(TypeCode targetType) { BuiltInType _ret = default(BuiltInType); switch (targetType) { case TypeCode.Boolean: _ret = BuiltInType.Boolean; break; case TypeCode.SByte: _ret = BuiltInType.SByte; break; case TypeCode.Byte: _ret = BuiltInType.Byte; break; case TypeCode.Int16: _ret = BuiltInType.Int16; break; case TypeCode.UInt16: _ret = BuiltInType.UInt16; break; case TypeCode.Int32: _ret = BuiltInType.Int32; break; case TypeCode.UInt32: _ret = BuiltInType.UInt32; break; case TypeCode.Int64: _ret = BuiltInType.Int64; break; case TypeCode.UInt64: _ret = BuiltInType.UInt64; break; case TypeCode.Single: _ret = BuiltInType.Float; break; case TypeCode.Double: _ret = BuiltInType.Double; break; case TypeCode.DateTime: _ret = BuiltInType.DateTime; break; case TypeCode.String: _ret = BuiltInType.String; break; default: throw new ArgumentOutOfRangeException(nameof(targetType)); } return _ret; } public void Assign2Repository(object value) { m_AssignAction(value, m_Index); } public IValueConverter Converter { set => throw new NotImplementedException(); } public UATypeInfo Encoding { get; private set; } public object Parameter { get => throw new NotImplementedException(); set => throw new NotImplementedException(); } public CultureInfo Culture { set => throw new NotImplementedException(); } DataRepository.IValueConverter IBinding.Converter { set => throw new NotImplementedException(); } public object FallbackValue { set => throw new NotImplementedException(); } public void OnEnabling() { throw new NotImplementedException(); } public void OnDisabling() { throw new NotImplementedException(); } private readonly Action m_AssignAction; private readonly int m_Index; } private void _reader_ReadMessageCompleted(object sender, MessageEventArg e, uint dataId, Func update, int length) { Assert.AreEqual(dataId, e.DataSetId); e.MessageContent.UpdateMyValues(update, length); } private class DTGFixture : BinaryDataTransferGraphReceiverFixture { } #endregion } } ================================================ FILE: Networking/Tests/SemanticDatalUnitTest/BinaryEncoderTest.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2018, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using Microsoft.VisualStudio.TestTools.UnitTesting; using System; using UAOOI.Configuration.Networking.Serialization; using UAOOI.Networking.Core; using UAOOI.Networking.SemanticData.DataRepository; using UAOOI.Networking.SemanticData.MessageHandling; using UAOOI.Networking.SemanticData.UnitTest.MessageHandlerFactory; namespace UAOOI.Networking.SemanticData.UnitTest { [TestClass] public class BinaryEncoderTest { #region TestMethods [TestMethod] [TestCategory("DataManagement_MessageWriter")] public void BinaryUDPPackageWriterTestMethod() { BinaryDataTransferGraphSenderFixture _binaryStreamObservable = new BinaryDataTransferGraphSenderTest(); using (BinaryEncoder _writer = new BinaryEncoder(_binaryStreamObservable, new Helpers.UABinaryEncoderImplementation(), MessageLengthFieldTypeEnum.TwoBytes)) { Assert.AreEqual(0, _binaryStreamObservable.m_NumberOfSentBytes); Assert.AreEqual(0, _binaryStreamObservable.NumberOfAttachToNetwork); Assert.AreEqual(0, _binaryStreamObservable.m_NumberOfSentMessages); Assert.AreEqual(HandlerState.Disabled, _binaryStreamObservable.State.State); _writer.AttachToNetwork(); _writer.State.Enable(); Assert.AreEqual(HandlerState.Operational, _binaryStreamObservable.State.State); Assert.AreEqual(1, _binaryStreamObservable.NumberOfAttachToNetwork); Assert.AreEqual(0, _binaryStreamObservable.m_NumberOfSentBytes); Assert.AreEqual(0, _binaryStreamObservable.m_NumberOfSentMessages); ProducerBindingFixture _binding = new ProducerBindingFixture() { Value = string.Empty }; int _sentItems = 0; Guid m_Guid = CommonDefinitions.TestGuid; DataSelector _testDataSelector = new DataSelector() { DataSetWriterId = CommonDefinitions.DataSetId, PublisherId = CommonDefinitions.TestGuid }; ((IMessageWriter)_writer).Send((x) => { _binding.Value = CommonDefinitions.TestValues[x]; _sentItems++; return _binding; }, Convert.ToUInt16(CommonDefinitions.TestValues.Length), ulong.MaxValue, FieldEncodingEnum.VariantFieldEncoding, _testDataSelector, 0, CommonDefinitions.TestMinimalDateTime, new ConfigurationVersionDataType() { MajorVersion = 0, MinorVersion = 0 } ); Assert.AreEqual(CommonDefinitions.TestValues.Length, _sentItems); Assert.AreEqual(1, _binaryStreamObservable.NumberOfAttachToNetwork); Assert.AreEqual(115, _binaryStreamObservable.m_NumberOfSentBytes); Assert.AreEqual(1, _binaryStreamObservable.m_NumberOfSentMessages); byte[] _shouldBeInBuffer = CommonDefinitions.GetTestBinaryArrayVariant4Consumer(); CollectionAssert.AreEqual(_binaryStreamObservable.Buffer, _shouldBeInBuffer); } } #endregion #region private private class ProducerBindingFixture : IProducerBinding { internal object Value; private readonly BuiltInType _builtInType; public ProducerBindingFixture(BuiltInType builtInType) { _builtInType = builtInType; } public ProducerBindingFixture() { } #region IProducerBinding public bool NewValue => true; public object GetFromRepository() { return Value; } public IValueConverter Converter { set => throw new NotImplementedException(); } public UATypeInfo Encoding { get { if (Value == null) return new UATypeInfo(_builtInType); switch (Type.GetTypeCode(Value.GetType())) { case TypeCode.Boolean: return new UATypeInfo(BuiltInType.Boolean); case TypeCode.SByte: return new UATypeInfo(BuiltInType.SByte); case TypeCode.Byte: return new UATypeInfo(BuiltInType.Byte); case TypeCode.Int16: return new UATypeInfo(BuiltInType.Int16); case TypeCode.UInt16: return new UATypeInfo(BuiltInType.UInt16); case TypeCode.Int32: return new UATypeInfo(BuiltInType.Int32); case TypeCode.UInt32: return new UATypeInfo(BuiltInType.UInt32); case TypeCode.Int64: return new UATypeInfo(BuiltInType.Int64); case TypeCode.UInt64: return new UATypeInfo(BuiltInType.UInt64); case TypeCode.Single: return new UATypeInfo(BuiltInType.Float); case TypeCode.Double: return new UATypeInfo(BuiltInType.Double); case TypeCode.DateTime: return new UATypeInfo(BuiltInType.DateTime); case TypeCode.String: return new UATypeInfo(BuiltInType.String); default: throw new ArgumentOutOfRangeException(nameof(Value)); } throw new ArgumentOutOfRangeException(nameof(Value)); } } public object Parameter { get => null; set { } } public System.Globalization.CultureInfo Culture { set => throw new NotImplementedException(); } public object FallbackValue { set => throw new NotImplementedException(); } public void OnEnabling() { throw new NotImplementedException(); } public void OnDisabling() { throw new NotImplementedException(); } public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; #endregion } private class BinaryDataTransferGraphSenderTest : BinaryDataTransferGraphSenderFixture { } #endregion } } ================================================ FILE: Networking/Tests/SemanticDatalUnitTest/CommonDefinitions.cs ================================================  using System; using UAOOI.Configuration.Networking.Serialization; namespace UAOOI.Networking.SemanticData.UnitTest { internal static class CommonDefinitions { internal static byte[] GetTestBinaryArrayVariant() { return new byte[] { //Package header 0-25 110, //byte ProtocolVersion 0x00, //byte MessageFlags 0xf3, 0x5d, 0x19, 0xa6, 0x30, 0x0b, 0x25, 0x4c, 0x8b, 0xf8, 0x45, 0xb0, 0x76, 0x40, 0x21, 0x16, //guid - PublisherId 0x00, //byte SecurityTokenId #0 0x00, //byte SecurityTokenId #1 0x00, //byte SecurityTokenId #2 0x00, //byte SecurityTokenId #3 1, //byte NonceLength 0xCC, //Byte[NonceLength] Nonce 0x01, //UInt16 MessageCount 0x7F, 0x4B, //UInt32[MessageCount] DataSetWriterIds //Message header 26-43 0x1, //MessageType 0x1, //EncodingFlags 71, 00, // MessageLength 0, 0, //MessageSequenceNumber 0, 0, //ConfigurationVersion 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //TimeStamp 13, 0, // FieldCount //Message content 60 - 126 (byte)BuiltInType.UInt64, 0x7b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //UInt64 (byte)BuiltInType.UInt32, 0x7b, 0x00, 0x00, 0x00, //UInt32 (byte)BuiltInType.UInt16, 0x7b, 0x00, //UInt16 (byte)BuiltInType.String, 0x03, 0x00, 0x00, 0x00, 0x31, 0x32, 0x33, //string (byte)BuiltInType.Float, 0x00, 0x00, 0xf6, 0x42, //Float (byte)BuiltInType.SByte, 0x7b, //sbyte (byte)BuiltInType.Int64, 0x7b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //Int64 (byte)BuiltInType.Int32, 0x7b, 0x00, 0x00, 0x00, //Int32 (byte)BuiltInType.Int16, 0x7b, 0x00, //Int16 (byte)BuiltInType.Double, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x5e, 0x40, //Double (byte)BuiltInType.DateTime, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //DateTime (byte)BuiltInType.Byte, 0x7b, //Byte (byte)BuiltInType.Boolean, 0x01, //boolean }; } internal static byte[] GetTestBinaryArrayVariant4Consumer() { return new byte[] { //Package header 0-22 110, //byte ProtocolVersion 0x00, //byte MessageFlags 0xf3, 0x5d, 0x19, 0xa6, 0x30, 0x0b, 0x25, 0x4c, 0x8b, 0xf8, 0x45, 0xb0, 0x76, 0x40, 0x21, 0x16, //guid - PublisherId 0x00, //byte SecurityTokenId #0 0x00, //byte SecurityTokenId #1 0x00, //byte SecurityTokenId #2 0x00, //byte SecurityTokenId #3 0, //byte NonceLength //0xCC, //Byte[NonceLength] Nonce 0x01, //byte MessageCount 0x7F, 0x4B, //UInt16[MessageCount] DataSetWriterIds //Message header 0x1, //MessageType 0x1, //EncodingFlags 0x59, 00, //MessageLength 0, 0, //MessageSequenceNumber 0, 0, //ConfigurationVersion 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //TimeStamp 13, 0, // FieldCount //Message content 43 - 110 (byte)BuiltInType.UInt64, 0x7b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //UInt64 (byte)BuiltInType.UInt32, 0x7b, 0x00, 0x00, 0x00, //UInt32 (byte)BuiltInType.UInt16, 0x7b, 0x00, //UInt16 (byte)BuiltInType.String, 0x03, 0x00, 0x00, 0x00, 0x31, 0x32, 0x33, //string (byte)BuiltInType.Float, 0x00, 0x00, 0xf6, 0x42, //Float (byte)BuiltInType.SByte, 0x7b, //sbyte (byte)BuiltInType.Int64, 0x7b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //Int64 (byte)BuiltInType.Int32, 0x7b, 0x00, 0x00, 0x00, //Int32 (byte)BuiltInType.Int16, 0x7b, 0x00, //Int16 (byte)BuiltInType.Double, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x5e, 0x40, //Double (byte)BuiltInType.DateTime, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //DateTime (byte)BuiltInType.Byte, 0x7b, //Byte (byte)BuiltInType.Boolean, 0x01, //boolean }; } internal const UInt16 DataSetId = 19327; internal struct DateTimeVariantEncoding { internal DateTime dateTime; internal byte[] encoding; } internal static readonly DateTime TestMinimalDateTime = new DateTime(1601, 1, 1); internal static readonly DateTime TestMaximumDateTime = new DateTime(9999, 12, 31, 23, 59, 59); internal static readonly Guid TestGuid = new Guid("A6195DF3-0B30-4C25-8BF8-45B076402116"); internal static readonly byte[] TestGuidVariant = new byte[] { (byte)BuiltInType.Guid, 0xf3, 0x5d, 0x19, 0xa6, 0x30, 0x0b, 0x25, 0x4c, 0x8b, 0xf8, 0x45, 0xb0, 0x76, 0x40, 0x21, 0x16 }; internal static DateTimeVariantEncoding[] DateTimeTestingValues = new DateTimeVariantEncoding[] { new DateTimeVariantEncoding() { dateTime = TestMinimalDateTime, encoding = new byte[] { (byte)BuiltInType.DateTime, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, new DateTimeVariantEncoding() { dateTime = TestMaximumDateTime, encoding = new byte[] { (byte)BuiltInType.DateTime, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f } }, new DateTimeVariantEncoding() { dateTime = new DateTime(9999, 12, 31, 23, 59, 58), encoding = new byte[] { (byte)BuiltInType.DateTime, 0x00, 0x13, 0x8f,0xd0, 0x5e, 0x5a, 0xc8, 0x24 } } }; /// /// The producer identifier - should be moved to the configuration - see spec for current definition. /// internal static object[] TestValues = new object[] { (ulong)123, (uint)123, (ushort)123, "123", (float)123, (sbyte)123, (long)123, (int)123, (short)123, (double)123, /*(decimal)123,*/ TestMinimalDateTime, (byte)123, true/*, 'A'*/}; //, new byte[] { 1, 2, 3 } }; } } ================================================ FILE: Networking/Tests/SemanticDatalUnitTest/ConfigurationUnitTest.cs ================================================  using System; using Microsoft.VisualStudio.TestTools.UnitTesting; using UAOOI.Networking.SemanticData.UnitTest.Simulator; using UAOOI.Configuration.Networking.Serialization; using UAOOI.Configuration.Networking; namespace UAOOI.Networking.SemanticData.UnitTest { [TestClass] public class ConfigurationUnitTest { [TestMethod] [TestCategory("DataManagement_Configuration")] public void ConfigurationDataCreateTestMethod() { ConfigurationData _cnf = ConfigurationDataFactoryIO.Load(Create, () => { }); Assert.IsNotNull(_cnf); Assert.IsNotNull(_cnf.DataSets); TestAssociations(_cnf.DataSets); } private void TestAssociations(DataSetConfiguration[] associationConfiguration) { foreach (DataSetConfiguration _ac in associationConfiguration) { Assert.IsNotNull(_ac.DataSet); Assert.IsFalse(String.IsNullOrEmpty(_ac.AssociationName)); Assert.IsFalse(String.IsNullOrEmpty(_ac.DataSymbolicName)); Assert.IsFalse(String.IsNullOrEmpty(_ac.InformationModelURI)); TestDataSets(_ac); } } private void TestDataSets(DataSetConfiguration dataSetConfiguration) { Assert.IsNotNull(dataSetConfiguration.DataSet); TestMembers(dataSetConfiguration.DataSet); } private void TestMembers(FieldMetaData[] dataMemberConfiguration) { foreach (FieldMetaData _dmc in dataMemberConfiguration) { Assert.IsFalse(String.IsNullOrEmpty(_dmc.ProcessValueName)); Assert.IsFalse(String.IsNullOrEmpty(_dmc.SymbolicName)); } } private static ConfigurationData Create() { return PersistentConfiguration.GetLocalConfiguration(); } } } ================================================ FILE: Networking/Tests/SemanticDatalUnitTest/ConsumerBindingMonitoredValueUnitTest.cs ================================================  using Microsoft.VisualStudio.TestTools.UnitTesting; using UAOOI.Networking.SemanticData.DataRepository; using System; using UAOOI.Configuration.Networking.Serialization; namespace UAOOI.Networking.SemanticData.UnitTest { [TestClass] public class ConsumerBindingMonitoredValueUnitTest { [TestMethod] [TestCategory("ConsumerBindingMonitoredValueUnitTest_ConstructorTest")] public void ConstructorTest() { ConsumerBindingMonitoredValue _binding = new ConsumerBindingMonitoredValue(new UATypeInfo(BuiltInType.Int32)); Assert.IsNotNull(_binding); } [TestMethod] [TestCategory("ConsumerBindingMonitoredValueUnitTest_ConstructorTest")] public void ToStringScalarTestMethod() { ConsumerBindingMonitoredValue _binding = new ConsumerBindingMonitoredValue(new UATypeInfo(BuiltInType.Int32)); string _name = String.Empty; _binding.PropertyChanged += (sender, e) => _name = e.PropertyName; Assert.IsNotNull(_binding); IConsumerBinding _bindingInterface = _binding; const int _newValue = 1234567; _bindingInterface.Assign2Repository(_newValue); Assert.AreEqual(_newValue, _binding.Value); Assert.AreEqual(_newValue.ToString(), _binding.ToString()); Assert.AreEqual("Value", _name); } [TestMethod] [TestCategory("ConsumerBindingMonitoredValueUnitTest_ConstructorTest")] public void ToStringArrayTestMethod() { ConsumerBindingMonitoredValue _binding = new ConsumerBindingMonitoredValue(new UATypeInfo(BuiltInType.Int32, 1)); string _name = String.Empty; _binding.PropertyChanged += (sender, e) => _name = e.PropertyName; Assert.IsNotNull(_binding); IConsumerBinding _bindingInterface = _binding; int[] _newValue = new int[] { 1234567, 7654321 }; _bindingInterface.Assign2Repository(_newValue); Assert.AreEqual(_newValue, _binding.Value); Assert.AreEqual(@"Array Rank=1 Values [1234567, 7654321]", _binding.ToString()); Assert.AreEqual("Value", _name); } [TestMethod] [TestCategory("ConsumerBindingMonitoredValueUnitTest_ConstructorTest")] public void ToStringCLRArrayTestMethod() { ConsumerBindingMonitoredValue _binding = new ConsumerBindingMonitoredValue(new UATypeInfo(BuiltInType.Int32, 1)); string _name = String.Empty; _binding.PropertyChanged += (sender, e) => _name = e.PropertyName; Assert.IsNotNull(_binding); IConsumerBinding _bindingInterface = _binding; Array _newValue = new int[] { 1234567, 7654321 }; _bindingInterface.Assign2Repository(_newValue); CollectionAssert.AreEqual(_newValue, _binding.Value); Assert.AreEqual(@"Array Rank=1 Values [1234567, 7654321]", _binding.ToString()); Assert.AreEqual("Value", _name); } [TestMethod] [TestCategory("ConsumerBindingMonitoredValueUnitTest_ConstructorTest")] public void ToStringArrayRank3TestMethod() { ConsumerBindingMonitoredValue _binding = new ConsumerBindingMonitoredValue(new UATypeInfo(BuiltInType.Int32, 0, new int[] { int.MaxValue, int.MaxValue, int.MaxValue })); string _name = String.Empty; _binding.PropertyChanged += (sender, e) => _name = e.PropertyName; Assert.IsNotNull(_binding); IConsumerBinding _bindingInterface = _binding; int[,,] _newValue = new int[,,] { { { 1, 2 }, { 3, 4 } }, { { 5, 6 }, { 7, 8 } } }; _bindingInterface.Assign2Repository(_newValue); Assert.AreEqual(_newValue, _binding.Value); Assert.AreEqual(@"Array Rank=3 Values [1, 2, 3, 4, 5, 6, 7, 8]", _binding.ToString()); Assert.AreEqual("Value", _name); } [TestMethod] [TestCategory("ConsumerBindingMonitoredValueUnitTest_ConstructorTest")] public void ToStringCLRArrayRank3TestMethod() { ConsumerBindingMonitoredValue _binding = new ConsumerBindingMonitoredValue(new UATypeInfo(BuiltInType.Int32, 0, new int[] { int.MaxValue, int.MaxValue, int.MaxValue })); string _name = String.Empty; _binding.PropertyChanged += (sender, e) => _name = e.PropertyName; Assert.IsNotNull(_binding); IConsumerBinding _bindingInterface = _binding; Array _newValue = new int[,,] { { { 1, 2 }, { 3, 4 } }, { { 5, 6 }, { 7, 8 } } }; _bindingInterface.Assign2Repository(_newValue); CollectionAssert.AreEqual(_newValue, _binding.Value); Assert.AreEqual(@"Array Rank=3 Values [1, 2, 3, 4, 5, 6, 7, 8]", _binding.ToString()); Assert.AreEqual("Value", _name); } [TestMethod] [TestCategory("ConsumerBindingMonitoredValueUnitTest_ConstructorTest")] [ExpectedException(typeof(InvalidCastException))] public void ToStringCLRArrayRankErrorTestMethod() { ConsumerBindingMonitoredValue _binding = new ConsumerBindingMonitoredValue(new UATypeInfo(BuiltInType.Int32, 0, new int[] { int.MaxValue, int.MaxValue, int.MaxValue })); string _name = String.Empty; _binding.PropertyChanged += (sender, e) => _name = e.PropertyName; Assert.IsNotNull(_binding); IConsumerBinding _bindingInterface = _binding; Array _newValue = new int[,] { { 1, 2 }, { 3, 4 } }; _bindingInterface.Assign2Repository(_newValue); } } } ================================================ FILE: Networking/Tests/SemanticDatalUnitTest/ConsumerBindingUnitTest.cs ================================================  using Microsoft.VisualStudio.TestTools.UnitTesting; using System; using System.Globalization; using System.Windows.Data; using UAOOI.Networking.SemanticData.DataRepository; using UAOOI.Configuration.Networking.Serialization; namespace UAOOI.Networking.SemanticData.UnitTest { [TestClass] public class ConsumerBindingUnitTest { #region TestMethods [TestMethod] [TestCategory("DataManagement_Binding")] public void TestMethod1() { ConsumerBinding _nb = new ConsumerBinding(x => { }, new UATypeInfo(BuiltInType.Null)); Assert.IsNotNull(_nb); } [TestMethod] [TestCategory("DataManagement_Binding")] public void DataRepositoryTestMethod() { DataRepository _rpo = new DataRepository(); IConsumerBinding _nb = _rpo.GetConsumerBinding(String.Empty, DataRepository.name, new UATypeInfo(BuiltInType.String)); Assert.IsNotNull(_nb); Assert.IsNotNull(_nb.Encoding); _nb.Converter = null; Assert.AreEqual(BuiltInType.String, _nb.Encoding.BuiltInType); string _testValue = "123wjkqjwkqjwjqjwqwjwqkwqjw"; _nb.Assign2Repository(_testValue); Assert.AreEqual(_testValue, _rpo.Buffer); } [TestMethod] [TestCategory("DataManagement_Binding")] public void RecordingRepositoryTestMethod() { RecordingRepository _rpo = new RecordingRepository(); IConsumerBinding _nb = _rpo.GetConsumerBinding(String.Empty, DataRepository.name, new UATypeInfo(BuiltInType.String)); Assert.IsNotNull(_nb); Assert.IsNotNull(_nb.Encoding); _nb.Converter = new DateFormatter(); Assert.AreEqual(BuiltInType.String, _nb.Encoding.BuiltInType); DateTime _dt = new DateTime(2008, 2, 5); Recording _testValue = new Recording("Chris Sells", "Chris Sells Live", _dt); _nb.Assign2Repository(_testValue); Assert.AreEqual(_dt.ToString(CultureInfo.InvariantCulture), _rpo.Buffer); } #endregion #region private //private part private class DataRepository : IBindingFactory { public const string name = "variableName"; public string Buffer = null; public IConsumerBinding GetConsumerBinding(string repositoryGroup, string processValueName, UATypeInfo fieldTypeInfo) { if (processValueName != name) throw new ArgumentOutOfRangeException(); return new ConsumerBinding(x => Buffer = x, fieldTypeInfo); } public IProducerBinding GetProducerBinding(string repositoryGroup, string processValueName, UATypeInfo fieldTypeInfo) { throw new NotImplementedException(); } } private class RecordingRepository : IBindingFactory { public const string name = "variableName"; public string Buffer = null; public IConsumerBinding GetConsumerBinding(string repositoryGroup, string processValueName, UATypeInfo field) { if (processValueName != name) throw new ArgumentOutOfRangeException(); return new ConsumerBinding(x => Buffer = x, new UATypeInfo(field.BuiltInType)); } public IProducerBinding GetProducerBinding(string repositoryGroup, string processValueName, UATypeInfo encoding) { throw new NotImplementedException(); } public IProducerBinding GetProducerBinding(string repositoryGroup, string variableName, BuiltInType encoding) { throw new NotImplementedException(); } } // Simple business object. private class Recording { public Recording() { } public Recording(string artistName, string cdName, DateTime release) { Artist = artistName; Name = cdName; ReleaseDate = release; } public string Artist { get; set; } public string Name { get; set; } public DateTime ReleaseDate { get; set; } } private class DateFormatter : IValueConverter { public object Convert(object value, Type targetType, object fallBack, object parameter, CultureInfo culture) { Assert.IsInstanceOfType(value, typeof(Recording)); Assert.IsNull(parameter); DateTime date = ((Recording)value).ReleaseDate; Assert.IsNull(fallBack); return date.ToString(CultureInfo.InvariantCulture); } } #endregion } //BindingUnitTest } ================================================ FILE: Networking/Tests/SemanticDatalUnitTest/ConsumerDeviceSimulatorUnitTest.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using Microsoft.VisualStudio.TestTools.UnitTesting; using System; using UAOOI.Networking.SemanticData.UnitTest.MessageHandlerFactory; using UAOOI.Networking.SemanticData.UnitTest.Simulator; namespace UAOOI.Networking.SemanticData.UnitTest { [TestClass] public class ConsumerDeviceSimulatorUnitTest { [TestMethod] [TestCategory("DataManagement_ConsumerDeviceSimulator")] public void ConsumerDeviceSimulatorTestMethod() { uint DataSetGuid = uint.MaxValue; MessageHandlerFactoryTest _mhf = new MessageHandlerFactoryTest(); using (ConsumerDeviceSimulator _consumer = ConsumerDeviceSimulator.CreateDevice(_mhf, DataSetGuid)) { Assert.IsNull(_consumer.AssociationsCollection); Assert.IsNotNull(_consumer.BindingFactory); Assert.IsNotNull(_consumer.ConfigurationFactory); Assert.IsNotNull(_consumer.EncodingFactory); Assert.IsNotNull(_consumer.MessageHandlerFactory); Assert.IsNull(_consumer.MessageHandlersCollection); _consumer.InitializeAndRun(); Assert.AreEqual(1, _consumer.AssociationsCollection.Count); Assert.AreEqual(1, _consumer.MessageHandlersCollection.Count); _consumer.CheckConsistency(); } _mhf.AssertConsistency(); } private class MessageHandlerFactoryTest : MessageHandlerFactoryFixture { #region testing environment protected override BinaryDataTransferGraphReceiverFixture NewBinaryDataTransferGraphReceiverFixture() { return new BinaryDataTransferGraphReceiverTest(); } protected override BinaryDataTransferGraphSenderFixture NewBinaryDataTransferGraphSenderFixture() { throw new NotImplementedException(); } #endregion private class BinaryDataTransferGraphReceiverTest : BinaryDataTransferGraphReceiverFixture { } } } } ================================================ FILE: Networking/Tests/SemanticDatalUnitTest/DataManagementSetupUnitTest.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using Microsoft.VisualStudio.TestTools.UnitTesting; using System; using System.Linq; using UAOOI.Configuration.Networking; using UAOOI.Configuration.Networking.Serialization; using UAOOI.Networking.Core; using UAOOI.Networking.SemanticData.DataRepository; using UAOOI.Networking.SemanticData.Encoding; using UAOOI.Networking.SemanticData.UnitTest.MessageHandlerFactory; using UAOOI.Networking.SemanticData.UnitTest.Simulator; namespace UAOOI.Networking.SemanticData.UnitTest { [TestClass] public class DataManagementSetupUnitTest { [TestMethod] [TestCategory("DataManagement_DataManagementSetup")] public void DataManagementSetupCreatorTestMethod() { using (DataManagementSetupTest _ndm = new DataManagementSetupTest()) { Assert.IsNull(_ndm.BindingFactory); Assert.IsNull(_ndm.ConfigurationFactory); Assert.IsNull(_ndm.EncodingFactory); Assert.IsNull(_ndm.MessageHandlerFactory); } } [TestMethod] [TestCategory("DataManagement_DataManagementSetup")] public void InitializeTestMethod() { using (DataManagementSetupTest _ndm = new DataManagementSetupTest { BindingFactory = new BindingFactory(), ConfigurationFactory = new ConfigurationFactory(), EncodingFactory = new EncodingFactory(), MessageHandlerFactory = new MessageHandlerFactoryTest() } ) { Assert.IsNull(_ndm.MessageHandlersCollection); _ndm.TestStart(); Assert.AreEqual(3, _ndm.MessageHandlersCollection.Count()); _ndm.Dispose(); ((MessageHandlerFactoryTest)_ndm.MessageHandlerFactory).AssertConsistency(); } } [TestMethod] [TestCategory("DataManagement_DataManagementSetup")] [ExpectedException(typeof(ArgumentNullException))] public void RunTestMethod() { using (DataManagementSetupTest _ndm = new DataManagementSetupTest()) _ndm.TestStart(); } #region instrumentation private class DataManagementSetupTest : DataManagementSetup { internal void TestStart() { base.Start(); } } private class MessageHandlerFactoryTest : MessageHandlerFactoryFixture { protected override BinaryDataTransferGraphReceiverFixture NewBinaryDataTransferGraphReceiverFixture() { return new DTGReceiverTest(); ; } protected override BinaryDataTransferGraphSenderFixture NewBinaryDataTransferGraphSenderFixture() { throw new NotImplementedException(); } internal override void AssertConsistency() { Assert.AreEqual(3, MessageHandlerFactoryFixture.BinaryDataTransferGraphReceiverFixtureList.Count); Assert.AreEqual(3, MessageHandlerFactoryFixture.BinaryDataTransferGraphReceiverFixtureList. Cast(). Where((x) => { x.AssertConsistency(); return true; }).Count()); } } private class DTGReceiverTest : BinaryDataTransferGraphReceiverFixture { internal override void AssertConsistency() { Assert.AreEqual(1, base.NumberOfAttachToNetwork); Assert.AreEqual(1, base.DisposeCount); Assert.AreEqual(HandlerState.Operational, base.State.State); } } private class EncodingFactory : IEncodingFactory { public IUADecoder UADecoder { get; } = new Helpers.UABinaryDecoderImplementation(); public IUAEncoder UAEncoder => throw new NotImplementedException(); public void UpdateValueConverter(IBinding binding, string repositoryGroup, UATypeInfo sourceEncoding) { binding.Converter = null; binding.Culture = null; binding.Parameter = null; Assert.IsNotNull(binding); } } private class ConfigurationFactory : IConfigurationFactory { public ConfigurationData GetConfiguration() { return PersistentConfiguration.GetLocalConfiguration(); } public event EventHandler OnAssociationConfigurationChange; public event EventHandler OnMessageHandlerConfigurationChange; } private class BindingFactory : IBindingFactory { #region IBindingFactory public IConsumerBinding GetConsumerBinding(string repositoryGroup, string processValueName, UATypeInfo field) { return new Binding(); } public IProducerBinding GetProducerBinding(string repositoryGroup, string processValueName, UATypeInfo encoding) { throw new NotImplementedException(); } public IProducerBinding GetProducerBinding(string repositoryGroup, string variableName, BuiltInType encoding) { throw new NotImplementedException(); } #endregion private class Binding : IConsumerBinding { public IValueConverter Converter { set { } } public UATypeInfo Encoding => null; public object Parameter { set { } get => null; } public System.Globalization.CultureInfo Culture { set { } } public object FallbackValue { set => throw new NotImplementedException(); } public void Assign2Repository(object value) { throw new NotImplementedException(); } public void OnEnabling() { } public void OnDisabling() { throw new NotImplementedException(); } } } #endregion } } ================================================ FILE: Networking/Tests/SemanticDatalUnitTest/Diagnostics/ReactiveNetworkingEventSourceUnitTest.cs ================================================  using System; using System.Diagnostics.Tracing; using Microsoft.Practices.EnterpriseLibrary.SemanticLogging; using Microsoft.Practices.EnterpriseLibrary.SemanticLogging.Schema; using Microsoft.VisualStudio.TestTools.UnitTesting; using UAOOI.Networking.SemanticData.Diagnostics; using static UAOOI.Networking.SemanticData.Diagnostics.ReactiveNetworkingEventSource; namespace UAOOI.Networking.SemanticData.UnitTest.Diagnostics { [TestClass] public class ReactiveNetworkingEventSourceUnitTest { [TestMethod] public void MessageInconsistencyTest() { EventEntry _lastEvent = null; int _calls = 0; ObservableEventListener _listener = new ObservableEventListener(); IDisposable subscription = _listener.Subscribe(x => { _calls++; _lastEvent = x; }); using (SinkSubscription _sinkSubscription = new SinkSubscription(subscription, _listener)) { Assert.IsNotNull(_sinkSubscription.Sink); ReactiveNetworkingEventSource _log = Log; _sinkSubscription.Sink.EnableEvents(_log, EventLevel.LogAlways, EventKeywords.All); Assert.IsNull(_lastEvent); const int _position = 12345; _log.MessageInconsistency(_position); Assert.IsNotNull(_lastEvent); Assert.AreEqual(1, _calls); //_lastEvent content Assert.AreEqual(4, _lastEvent.EventId); Assert.AreEqual(Guid.Empty, _lastEvent.ActivityId); string _message = "Unexpected end of message while reading 12345 element."; Assert.AreEqual(_message, _lastEvent.FormattedMessage, _lastEvent.FormattedMessage); //schema EventSchema _Schema = _lastEvent.Schema; Assert.AreEqual("ConsumerInfo", _Schema.EventName); Assert.AreEqual(4, _Schema.Id); //Assert.IsTrue((_Schema.Keywords & SemanticEventSource.Keywords.Diagnostic2) > 0); //Assert.AreEqual("PackageContent", _Schema.KeywordsDescription); Assert.AreEqual(EventLevel.Warning, _Schema.Level); Assert.AreEqual("Info", _Schema.OpcodeName); Assert.AreEqual(EventOpcode.Info, _Schema.Opcode); Assert.AreEqual(new Guid("C8666C20-6FEF-4DD0-BB66-5807BA629DA8"), _Schema.ProviderId); Assert.AreEqual("UAOOI-Networking-SemanticData-Diagnostics", _Schema.ProviderName); Assert.AreEqual("Consumer", _Schema.TaskName); Assert.AreEqual(Tasks.Consumer, _Schema.Task); Assert.AreEqual(0, _Schema.Version); //Payload Assert.AreEqual("System.Collections.ObjectModel.ReadOnlyCollection`1[System.Object]", _lastEvent.Payload.ToString(), _lastEvent.Payload.ToString()); Assert.AreEqual(1, _lastEvent.Payload.Count); Assert.IsInstanceOfType(_lastEvent.Payload[0], typeof(Int32)); Assert.AreEqual(_position, (Int32)_lastEvent.Payload[0]); Assert.AreEqual("position", _lastEvent.Schema.Payload[0]); } } } } ================================================ FILE: Networking/Tests/SemanticDatalUnitTest/EncodingFactoryUnitTest.cs ================================================  using Microsoft.VisualStudio.TestTools.UnitTesting; using System; using System.Globalization; using System.Windows.Data; using UAOOI.Networking.SemanticData.DataRepository; using UAOOI.Networking.SemanticData.Encoding; using UAOOI.Configuration.Networking.Serialization; namespace UAOOI.Networking.SemanticData.UnitTest { [TestClass] public class EncodingFactoryUnitTest { [TestMethod] [TestCategory("DataManagement_IEncodingFactory")] public void UpdateValueConverterTestMethod2() { EncodingFactory _ief = new EncodingFactory(); Assert.IsNotNull(_ief); MyBinding _ibf = new MyBinding(); _ief.UpdateValueConverter(_ibf, String.Empty, new UATypeInfo(BuiltInType.Null)); _ibf.Assign2Repository(null); } //private private class EncodingFactory : IEncodingFactory { public void UpdateValueConverter(IBinding binding, string repositoryGroup, UATypeInfo sourceEncoding) { Assert.IsNotNull(binding); binding.Parameter = "Conversion parameter"; binding.Converter = new IVC(); binding.Culture = CultureInfo.InvariantCulture; binding.FallbackValue = null; } public IUADecoder UADecoder { get { return m_UADecoder; } } public IUAEncoder UAEncoder { get { throw new NotImplementedException(); } } private readonly IUADecoder m_UADecoder = new Helpers.UABinaryDecoderImplementation(); } private class IVC : IValueConverter { /// /// Converts the specified value. /// /// The value. /// Type of the target. /// The parameter. /// The culture. /// System.Object. /// public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { throw new NotImplementedException(); } public object Convert(object value, Type targetType, object fallBack, object parameter, CultureInfo culture) { throw new NotImplementedException(); } public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { throw new NotImplementedException(); } } private class MyBinding : IBinding { public IValueConverter Converter { set; private get; } public UATypeInfo Encoding { get { throw new NotImplementedException(); } } public object Parameter { set; get; } public System.Globalization.CultureInfo Culture { set; private get; } public object FallbackValue { get; set; } public void Assign2Repository(object value) { Assert.IsNotNull(Converter); Assert.IsNotNull(Parameter); Assert.IsNotNull(Culture); Assert.IsNull(FallbackValue); } public void OnEnabling() { throw new NotImplementedException(); } public void OnDisabling() { throw new NotImplementedException(); } } } } ================================================ FILE: Networking/Tests/SemanticDatalUnitTest/ExtensionsUnitTest.cs ================================================  using Microsoft.VisualStudio.TestTools.UnitTesting; using UAOOI.Networking.SemanticData.DataRepository; namespace UAOOI.Networking.SemanticData.UnitTest { [TestClass] public class ExtensionsUnitTest { [TestMethod] [TestCategory("DataManagement_ExtensionsUnitTest")] public void IncRollOverTestMethod() { Assert.AreEqual(0, ushort.MaxValue.IncRollOver()); Assert.AreEqual(1, ((ushort)0).IncRollOver()); Assert.AreEqual(ushort.MaxValue / 2 + 1, ((ushort)(ushort.MaxValue / 2)).IncRollOver()); } } } ================================================ FILE: Networking/Tests/SemanticDatalUnitTest/HeaderTestHelpers.cs ================================================  using System; using System.IO; using UAOOI.Networking.SemanticData.Encoding; using UAOOI.Networking.SemanticData.MessageHandling; namespace UAOOI.Networking.SemanticData.UnitTest { internal class HeaderWriterTest : IBinaryHeaderEncoder { #region constructor public HeaderWriterTest(Action callback, long startPosition) { b_Position = startPosition; m_callBack = callback; } public HeaderWriterTest(Action callback) : this(callback, 0) { } #endregion #region IBinaryHeaderWriter public long Seek(int offset, SeekOrigin origin) { switch (origin) { case SeekOrigin.Begin: Position = offset; break; case SeekOrigin.Current: Position += offset; if (Position < 0) throw new ArgumentOutOfRangeException("Position"); break; case SeekOrigin.End: Position = End + offset; if (Position < 0) throw new ArgumentOutOfRangeException("Position"); break; }; return Position; } public void Write(Guid value) { m_callBack(Position); Position += 16; } public void Write(byte value) { m_callBack(Position); Position++; } public void Write(int value) { m_callBack(Position); Position += 4; } public void Write(bool value) { m_callBack(Position); throw new NotImplementedException(); } public void Write(sbyte value) { m_callBack(Position); throw new NotImplementedException(); } public void Write(short value) { throw new NotImplementedException(); } public void Write(ushort value) { m_callBack(Position); Position += 2; } public void Write(uint value) { m_callBack(Position); Position += 4; } public void Write(long value) { throw new NotImplementedException(); } public void Write(ulong value) { throw new NotImplementedException(); } public void Write(float value) { throw new NotImplementedException(); } public void Write(double value) { throw new NotImplementedException(); } public void Write(string value) { throw new NotImplementedException(); } public void Write(byte[] value) { throw new NotImplementedException(); } public void Write(DateTime value) { m_callBack(Position); Position += 8; } #endregion internal long End = 0; internal long Position { get { return b_Position; } set { b_Position = value; if (b_Position > End) End = Position; } } private long b_Position = 0; private Action m_callBack = null; } internal class HeaderReaderTest : IBinaryDecoder { public HeaderReaderTest(long startPosition) { m_Position = startPosition; } public HeaderReaderTest() : this(0) { } public byte ReadByte() { byte _pos = Convert.ToByte(m_Position); m_Position++; return _pos; } public Guid ReadGuid() { m_Position += 16; return CommonDefinitions.TestGuid; } int IBinaryDecoder.ReadInt32() { int _pos = Convert.ToInt32(m_Position); m_Position += 4; return _pos; } bool IBinaryDecoder.ReadBoolean() { throw new NotImplementedException(); } sbyte IBinaryDecoder.ReadSByte() { throw new NotImplementedException(); } short IBinaryDecoder.ReadInt16() { throw new NotImplementedException(); } ushort IBinaryDecoder.ReadUInt16() { ushort _pos = Convert.ToUInt16(m_Position); m_Position += 2; return _pos; } uint IBinaryDecoder.ReadUInt32() { uint _pos = Convert.ToUInt32(m_Position); m_Position += 4; return _pos; } long IBinaryDecoder.ReadInt64() { throw new NotImplementedException(); } ulong IBinaryDecoder.ReadUInt64() { throw new NotImplementedException(); } float IBinaryDecoder.ReadSingle() { throw new NotImplementedException(); } double IBinaryDecoder.ReadDouble() { throw new NotImplementedException(); } public byte[] ReadBytes(int count) { throw new NotImplementedException(); } public DateTime ReadDateTime() { m_Position += 8; return CommonDefinitions.TestMinimalDateTime; } internal long m_Position = 0; } } ================================================ FILE: Networking/Tests/SemanticDatalUnitTest/HeaderWriterUnitTest.cs ================================================  using Microsoft.VisualStudio.TestTools.UnitTesting; using UAOOI.Networking.SemanticData.MessageHandling; namespace UAOOI.Networking.SemanticData.UnitTest { [TestClass] public class HeaderWriterUnitTest { [TestMethod] [TestCategory("DataManagement_HeaderWriterUnitTest")] public void CreatorTestMethod() { HeaderWriterTest _htw = new HeaderWriterTest(x => { }); HeaderWriter _hw = new HeaderWriter(_htw, 16); Assert.AreEqual(16, _htw.Position); } [TestMethod] [TestCategory("DataManagement_HeaderWriterUnitTest")] public void EndPositionTestMethod() { ushort _length = 16; HeaderWriterTest _htw = new HeaderWriterTest(x => { }); HeaderWriter _hw = new HeaderWriter(_htw, _length); _htw.Write((byte)0x1); _htw.Write((byte)0x1); _htw.Write((byte)0x1); _htw.Write((byte)0x1); Assert.AreEqual(_length + 4, _htw.Position); } [TestMethod] [TestCategory("DataManagement_HeaderWriterUnitTest")] public void WriteTestMethod() { ushort _length = 16; HeaderWriterTest _htw = new HeaderWriterTest(x => { }); HeaderWriter _hw = new HeaderWriter(_htw, _length); _htw.Write((byte)0x1); _htw.Write((byte)0x1); _htw.Write((byte)0x1); _htw.Write((byte)0x1); _hw.WriteHeader((x, y) => { }); Assert.AreEqual(_length + 4, _htw.Position); _htw.Write((byte)0x1); _htw.Write((byte)0x1); _htw.Write((byte)0x1); _htw.Write((byte)0x1); Assert.AreEqual(_length + 8, _htw.Position); _hw.WriteHeader((x, y) => { }); Assert.AreEqual(_length + 8, _htw.Position); } } } ================================================ FILE: Networking/Tests/SemanticDatalUnitTest/Helpers/MyState.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System; using UAOOI.Networking.Core; namespace UAOOI.Networking.SemanticData.UnitTest.Helpers { internal class MyState : IAssociationState { /// /// Initializes a new instance of the class. /// public MyState() { State = HandlerState.Disabled; } /// /// Gets the current state of the instance. /// /// The state of type. public HandlerState State { get; private set; } /// /// This method is used to enable a configured object. If a normal operation is possible, the state changes into state. /// In the case of an error situation, the state changes into . The operation is rejected if the current is not . /// /// Wrong state public void Enable() { if (State != HandlerState.Disabled) throw new ArgumentException("Wrong state"); State = HandlerState.Operational; } /// /// This method is used to disable an already enabled object. /// This method call shall be rejected if the current State is or . /// /// Wrong state public void Disable() { if (State != HandlerState.Operational) throw new ArgumentException("Wrong state"); State = HandlerState.Disabled; } } } ================================================ FILE: Networking/Tests/SemanticDatalUnitTest/Helpers/UABinaryDecoderImplementation.cs ================================================  using System; using System.Xml; using UAOOI.Networking.SemanticData.Encoding; namespace UAOOI.Networking.SemanticData.UnitTest.Helpers { /// /// Class UABinaryDecoderImplementation - limited implementation of the for the testing purpose only. /// internal class UABinaryDecoderImplementation : UABinaryDecoder { #region Encoding.UABinaryDecoder public override IDataValue ReadDataValue(IBinaryDecoder decoder) { throw new NotImplementedException(); } public override IDiagnosticInfo ReadDiagnosticInfo(IBinaryDecoder decoder) { throw new NotImplementedException(); } public override IExpandedNodeId ReadExpandedNodeId(IBinaryDecoder decoder) { throw new NotImplementedException(); } public override IExtensionObject ReadExtensionObject(IBinaryDecoder decoder) { throw new NotImplementedException(); } public override ILocalizedText ReadLocalizedText(IBinaryDecoder decoder) { throw new NotImplementedException(); } public override INodeId ReadNodeId(IBinaryDecoder decoder) { throw new NotImplementedException(); } public override IQualifiedName ReadQualifiedName(IBinaryDecoder decoder) { throw new NotImplementedException(); } public override IStatusCode ReadStatusCode(IBinaryDecoder decoder) { throw new NotImplementedException(); } public override XmlElement ReadXmlElement(IBinaryDecoder decoder) { throw new NotImplementedException(); } #endregion } } ================================================ FILE: Networking/Tests/SemanticDatalUnitTest/Helpers/UABinaryEncoderImplementation.cs ================================================  using System; using System.Xml; using UAOOI.Networking.SemanticData.Encoding; namespace UAOOI.Networking.SemanticData.UnitTest.Helpers { /// /// Class UABinaryEncoderImplementation - limited implementation of the for the testing purpose only. /// internal class UABinaryEncoderImplementation : UABinaryEncoder { public override void Write(IBinaryEncoder encoder, IDataValue value) { throw new NotImplementedException(); } public override void Write(IBinaryEncoder encoder, IDiagnosticInfo value) { throw new NotImplementedException(); } public override void Write(IBinaryEncoder encoder, IExpandedNodeId value) { throw new NotImplementedException(); } public override void Write(IBinaryEncoder encoder, IExtensionObject value) { throw new NotImplementedException(); } public override void Write(IBinaryEncoder encoder, ILocalizedText value) { throw new NotImplementedException(); } public override void Write(IBinaryEncoder encoder, INodeId value) { throw new NotImplementedException(); } public override void Write(IBinaryEncoder encoder, IQualifiedName value) { throw new NotImplementedException(); } public override void Write(IBinaryEncoder encoder, IStatusCode value) { throw new NotImplementedException(); } public override void Write(IBinaryEncoder encoder, IVariant value) { base.Write(encoder, value); } public override void Write(IBinaryEncoder encoder, XmlElement value) { throw new NotImplementedException(); } } } ================================================ FILE: Networking/Tests/SemanticDatalUnitTest/MessageHandlerFactory/BinaryDataTransferGraphBaseFixture.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using Microsoft.VisualStudio.TestTools.UnitTesting; using UAOOI.Networking.Core; using UAOOI.Networking.SemanticData.UnitTest.Helpers; namespace UAOOI.Networking.SemanticData.UnitTest.MessageHandlerFactory { internal abstract class BinaryDataTransferGraphBaseFixture { #region IBinaryStreamObservable public IAssociationState State { get; set; } = new MyState(); public void AttachToNetwork() { NumberOfAttachToNetwork++; } #endregion #region IDisposable public void Dispose() { DisposeCount++; } #endregion internal virtual void AssertConsistency() { Assert.AreEqual(1, DisposeCount); } #region private internal int NumberOfAttachToNetwork = 0; internal int DisposeCount = 0; #endregion } } ================================================ FILE: Networking/Tests/SemanticDatalUnitTest/MessageHandlerFactory/BinaryDataTransferGraphReceiverFixture.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System; using UAOOI.Networking.Core; namespace UAOOI.Networking.SemanticData.UnitTest.MessageHandlerFactory { internal abstract class BinaryDataTransferGraphReceiverFixture : BinaryDataTransferGraphBaseFixture, IBinaryDataTransferGraphReceiver { #region IBinaryDataTransferGraphReceiver public event EventHandler OnNewFrameArrived; #endregion internal void SendUDPMessage(byte[] buffer, uint semanticData) { OnNewFrameArrived.Invoke(this, buffer); m_NumberOfSentMessages++; m_NumberOfSentBytes += buffer.Length; m_SemanticData = semanticData; } #region tetst instrumentation internal uint m_SemanticData; internal int m_NumberOfSentBytes = 0; internal int m_NumberOfSentMessages = 0; #endregion } } ================================================ FILE: Networking/Tests/SemanticDatalUnitTest/MessageHandlerFactory/BinaryDataTransferGraphSenderFixture.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using UAOOI.Networking.Core; namespace UAOOI.Networking.SemanticData.UnitTest.MessageHandlerFactory { internal abstract class BinaryDataTransferGraphSenderFixture : BinaryDataTransferGraphBaseFixture, IBinaryDataTransferGraphSender { #region IBinaryStreamObservable public void SendFrame(byte[] buffer) { m_NumberOfSentBytes += buffer.Length; m_NumberOfSentMessages++; Buffer = buffer; } #endregion #region instrumentation internal byte[] Buffer { get; private set; } internal int m_NumberOfSentMessages = 0; internal int m_NumberOfSentBytes = 0; #endregion } } ================================================ FILE: Networking/Tests/SemanticDatalUnitTest/MessageHandlerFactory/MessageHandlerFactoryFixture.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System.Collections.Generic; using UAOOI.Networking.Core; namespace UAOOI.Networking.SemanticData.UnitTest.MessageHandlerFactory { internal abstract class MessageHandlerFactoryFixture : IMessageHandlerFactory { public MessageHandlerFactoryFixture() { BinaryDataTransferGraphReceiverFixtureList = new List(); BinaryDataTransferGraphSenderFixtureList = new List(); } #region IMessageHandlerFactory public IBinaryDataTransferGraphReceiver GetBinaryDTGReceiver(string name, string configuration) { BinaryDataTransferGraphReceiverFixture _newFixture = NewBinaryDataTransferGraphReceiverFixture(); BinaryDataTransferGraphReceiverFixtureList.Add(_newFixture); return _newFixture; } public IBinaryDataTransferGraphSender GetBinaryDTGSender(string name, string configuration) { BinaryDataTransferGraphSenderFixture _newFixture = NewBinaryDataTransferGraphSenderFixture(); BinaryDataTransferGraphSenderFixtureList.Add(_newFixture); return _newFixture; } #endregion internal virtual void AssertConsistency() { foreach (BinaryDataTransferGraphReceiverFixture item in BinaryDataTransferGraphReceiverFixtureList) item.AssertConsistency(); foreach (BinaryDataTransferGraphSenderFixture item in BinaryDataTransferGraphSenderFixtureList) item.AssertConsistency(); } protected abstract BinaryDataTransferGraphReceiverFixture NewBinaryDataTransferGraphReceiverFixture(); protected abstract BinaryDataTransferGraphSenderFixture NewBinaryDataTransferGraphSenderFixture(); protected static List BinaryDataTransferGraphReceiverFixtureList = new List(); protected static List BinaryDataTransferGraphSenderFixtureList = new List(); } } ================================================ FILE: Networking/Tests/SemanticDatalUnitTest/MessageHeaderUnitTest.cs ================================================  using System; using Microsoft.VisualStudio.TestTools.UnitTesting; using UAOOI.Networking.SemanticData.MessageHandling; using System.IO; using System.Linq; using UAOOI.Configuration.Networking.Serialization; namespace UAOOI.Networking.SemanticData.UnitTest { [TestClass] public class MessageHeaderUnitTest { [TestMethod] [TestCategory("DataManagement_MessageHeaderUnitTest")] public void ProducerMessageHeaderTestMethod1() { byte[] _output = null; using (MemoryStream _outputStream = new MemoryStream()) using (HeaderBinaryWriter _writer = new HeaderBinaryWriter(_outputStream)) { MessageHeader _header = MessageHeader.GetProducerMessageHeader (_writer, FieldEncodingEnum.VariantFieldEncoding, MessageLengthFieldTypeEnum.TwoBytes, MessageTypeEnum.DataDeltaFrame, new ConfigurationVersionDataType() { MajorVersion = 7, MinorVersion = 8 }); Assert.IsNotNull(_header); //Default values Assert.AreEqual(1, _header.EncodingFlags); Assert.AreEqual(MessageTypeEnum.DataDeltaFrame, _header.MessageType); Assert.AreEqual(0, _header.MessageSequenceNumber); Assert.AreEqual(7, _header.ConfigurationVersion.MajorVersion); Assert.AreEqual(8, _header.ConfigurationVersion.MinorVersion); SetupProducerHeaderFields(_header); _header.Synchronize(); _writer.Flush(); _output = _outputStream.ToArray(); } Assert.AreEqual(18, _output.Length); byte[] _expected = new byte[] { 0x02, //MessageType 0x01, //EncodingFlags 0x12, 0x00, // MessageLength 0x08, 0x00, //MessageSequenceNumber 0x06, 0x07, //ConfigurationVersion 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //TimeStamp 0x10, 0x00 // FieldCount }; CollectionAssert.AreEqual(_expected, _output); } [TestMethod] [TestCategory("DataManagement_MessageHeaderUnitTest")] public void ProducerMessageLengthTestMethod1() { string m_Date = System.DateTime.Today.ToShortDateString(); byte[] _output = null; using (MemoryStream _outputStream = new MemoryStream()) using (HeaderBinaryWriter _writer = new HeaderBinaryWriter(_outputStream)) { MessageHeader _header = MessageHeader.GetProducerMessageHeader (_writer, FieldEncodingEnum.VariantFieldEncoding, MessageLengthFieldTypeEnum.TwoBytes, MessageTypeEnum.DataDeltaFrame, new ConfigurationVersionDataType() { MajorVersion = 7, MinorVersion = 8 }); Assert.IsNotNull(_header); SetupProducerHeaderFields(_header); _writer.Write(UInt32.MaxValue); _writer.Write(UInt32.MaxValue); _writer.Write(UInt32.MaxValue); _writer.Write(UInt32.MaxValue); _writer.Write(UInt32.MaxValue); _writer.Write(UInt32.MaxValue); _writer.Write(UInt32.MaxValue); _writer.Write(UInt32.MaxValue); _writer.Write(UInt32.MaxValue); _writer.Write(UInt32.MaxValue); _header.Synchronize(); _writer.Flush(); _output = _outputStream.ToArray(); } Assert.AreEqual(58, _output.Length); byte[] _expected = new byte[] { 0x02, //MessageType 0x01, //EncodingFlags 0x3A, 0x00, // MessageLength 0x08, 0x00, // MessageSequenceNumber 0x06, 0x07, // ConfigurationVersion 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //TimeStamp 0x10, 0x00, // FieldCount 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }; CollectionAssert.AreEqual(_expected, _output); } [TestMethod] [TestCategory("DataManagement_MessageHeaderUnitTest")] public void ConsumerMessageHeaderTestMethod() { HeaderReaderTest _reader = new HeaderReaderTest(); MessageHeader _header = MessageHeader.GetConsumerMessageHeader(_reader); Assert.IsNotNull(_header); _header.Synchronize(); Assert.AreEqual(0, (byte)_header.MessageType); Assert.AreEqual(1, _header.EncodingFlags); Assert.AreEqual(2, _header.MessageLength); Assert.AreEqual(4, _header.MessageSequenceNumber); Assert.AreEqual(6, _header.ConfigurationVersion.MajorVersion); Assert.AreEqual(7, _header.ConfigurationVersion.MinorVersion); //Assert.AreEqual(16, _header.FieldCount); //Assert.AreEqual(CommonDefinitions.TestMinimalDateTime, _header.TimeStamp); Assert.AreEqual(8, _reader.m_Position); Assert.AreEqual(FieldEncodingEnum.VariantFieldEncoding, _header.FieldsEncoding); } #region instrumentation private class HeaderBinaryWriter : BinaryWriter, IBinaryHeaderEncoder { public HeaderBinaryWriter(Stream output) : base(output) { } public void Write(DateTime value) { Write(Encoding.CommonDefinitions.GetUADataTimeTicks(value)); } public void Write(Guid value) { Write(value.ToByteArray()); } } private static void SetupProducerHeaderFields(MessageHeader _header) { _header.MessageSequenceNumber = 8; _header.ConfigurationVersion = new ConfigurationVersionDataType() { MajorVersion = 6, MinorVersion = 7 }; _header.TimeStamp = CommonDefinitions.TestMinimalDateTime; _header.FieldCount = 16; } #endregion } } ================================================ FILE: Networking/Tests/SemanticDatalUnitTest/MessageWriterBaseTest.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System; using Microsoft.VisualStudio.TestTools.UnitTesting; using UAOOI.Configuration.Networking.Serialization; using UAOOI.Networking.Core; using UAOOI.Networking.SemanticData.DataRepository; using UAOOI.Networking.SemanticData.MessageHandling; using UAOOI.Networking.SemanticData.UnitTest.Helpers; namespace UAOOI.Networking.SemanticData.UnitTest { [TestClass] public class MessageWriterBaseTest { [TestMethod] [TestCategory("DataManagement_MessageWriter")] public void CreatorTestMethod1() { TypesMessageWriter _bmw = new TypesMessageWriter(); Assert.IsNotNull(_bmw); _bmw.AttachToNetwork(); Assert.IsTrue(_bmw.State.State == HandlerState.Operational); } [TestMethod] [TestCategory("DataManagement_MessageWriter")] [ExpectedException(typeof(ArgumentOutOfRangeException))] public void ObjectTestMethod() { TypesMessageWriter _bmw = new TypesMessageWriter(); _bmw.AttachToNetwork(); ProducerBinding _binding = new ProducerBinding { Value = new TestClass() }; ((IMessageWriter)_bmw).Send(x => _binding, 1, ulong.MaxValue, FieldEncodingEnum.VariantFieldEncoding, TestDataSelector, 0, DateTime.UtcNow, new ConfigurationVersionDataType() { MajorVersion = 0, MinorVersion = 0 }); } [TestMethod] [TestCategory("DataManagement_MessageWriter")] [ExpectedException(typeof(NullReferenceException))] public void NullableTestMethod() { TypesMessageWriter _bmw = new TypesMessageWriter(); _bmw.AttachToNetwork(); Assert.IsTrue(_bmw.State.State == HandlerState.Operational); ProducerBinding _binding = new ProducerBinding(BuiltInType.Float) { Value = new Nullable() }; ((IMessageWriter)_bmw).Send(x => _binding, 1, ulong.MaxValue, FieldEncodingEnum.VariantFieldEncoding, TestDataSelector, 0, DateTime.UtcNow, new ConfigurationVersionDataType() { MajorVersion = 0, MinorVersion = 0 }); } [TestMethod] [TestCategory("DataManagement_MessageWriter")] public void SendTestMethod() { TypesMessageWriter _bmw = new TypesMessageWriter(); _bmw.AttachToNetwork(); Assert.IsTrue(_bmw.State.State == HandlerState.Operational); ProducerBinding _binding = new ProducerBinding { Value = string.Empty }; int _sentItems = 0; ((IMessageWriter)_bmw).Send((x) => { _binding.Value = CommonDefinitions.TestValues[x]; _sentItems++; return _binding; }, Convert.ToUInt16(CommonDefinitions.TestValues.Length), ulong.MaxValue, FieldEncodingEnum.VariantFieldEncoding, TestDataSelector, 0, DateTime.UtcNow, new ConfigurationVersionDataType() { MajorVersion = 0, MinorVersion = 0 } ); Assert.AreEqual(CommonDefinitions.TestValues.Length, _sentItems); } private class TestClass { } private readonly DataSelector TestDataSelector = new DataSelector() { PublisherId = Guid.NewGuid(), DataSetWriterId = ushort.MaxValue }; private class ProducerBinding : IProducerBinding { internal object Value; private readonly BuiltInType _builtInType; public ProducerBinding(BuiltInType builtInType) { _builtInType = builtInType; } public ProducerBinding() { } #region IProducerBinding public bool NewValue => true; public object GetFromRepository() { return Value; } public IValueConverter Converter { set => throw new NotImplementedException(); } public UATypeInfo Encoding { get { if (Value == null) return new UATypeInfo(_builtInType); switch (Type.GetTypeCode(Value.GetType())) { case TypeCode.Boolean: return new UATypeInfo(BuiltInType.Boolean); case TypeCode.SByte: return new UATypeInfo(BuiltInType.SByte); case TypeCode.Byte: return new UATypeInfo(BuiltInType.Byte); case TypeCode.Int16: return new UATypeInfo(BuiltInType.Int16); case TypeCode.UInt16: return new UATypeInfo(BuiltInType.UInt16); case TypeCode.Int32: return new UATypeInfo(BuiltInType.Int32); case TypeCode.UInt32: return new UATypeInfo(BuiltInType.UInt32); case TypeCode.Int64: return new UATypeInfo(BuiltInType.Int64); case TypeCode.UInt64: return new UATypeInfo(BuiltInType.UInt64); case TypeCode.Single: return new UATypeInfo(BuiltInType.Float); case TypeCode.Double: return new UATypeInfo(BuiltInType.Double); case TypeCode.DateTime: return new UATypeInfo(BuiltInType.DateTime); case TypeCode.String: return new UATypeInfo(BuiltInType.String); default: throw new ArgumentOutOfRangeException(nameof(Value)); } throw new ArgumentOutOfRangeException(nameof(Value)); } } public object Parameter { get => null; set { } } public System.Globalization.CultureInfo Culture { set => throw new NotImplementedException(); } public object FallbackValue { set => throw new NotImplementedException(); } public void OnEnabling() { throw new NotImplementedException(); } public void OnDisabling() { throw new NotImplementedException(); } public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; #endregion } private class TypesMessageWriter : MessageWriterBase { #region creator public TypesMessageWriter() : base(new Helpers.UABinaryEncoderImplementation()) { State = new MyState(); } #endregion #region BinaryMessageWriter public override IAssociationState State { get; set; } public override void AttachToNetwork() { Assert.AreNotEqual(HandlerState.Operational, State.State); State.Enable(); } public override void Write(ulong value) { Assert.IsInstanceOfType(value, typeof(ulong)); } public override void Write(uint value) { Assert.IsInstanceOfType(value, typeof(uint)); } public override void Write(ushort value) { Assert.IsInstanceOfType(value, typeof(ushort)); } public override void Write(float value) { Assert.IsInstanceOfType(value, typeof(float)); } public override void Write(sbyte value) { Assert.IsInstanceOfType(value, typeof(sbyte)); } public override void Write(long value) { Assert.IsInstanceOfType(value, typeof(long)); } public override void Write(int value) { Assert.IsInstanceOfType(value, typeof(int)); } public override void Write(short value) { Assert.IsInstanceOfType(value, typeof(short)); } public override void Write(double value) { Assert.IsInstanceOfType(value, typeof(double)); } public override void Write(byte value) { Assert.IsInstanceOfType(value, typeof(byte)); } public override void Write(bool value) { Assert.IsInstanceOfType(value, typeof(bool)); } public override void Write(byte[] value) { Assert.IsInstanceOfType(value, typeof(byte[])); } protected internal override void CreateMessage (FieldEncodingEnum encoding, Guid producerId, ushort dataSetWriterId, ushort fieldCount, ushort sequenceNumber, DateTime timeStamp, ConfigurationVersionDataType configurationVersion) { MassageCreated = true; } protected override void SendMessage() { } #endregion #region test infrastructure internal bool MassageCreated = false; #endregion } } } ================================================ FILE: Networking/Tests/SemanticDatalUnitTest/Networking.SemanticData.UnitTest.csproj ================================================  Debug AnyCPU {F7C29437-0923-449C-B4E9-36653A55C3E5} Library Properties UAOOI.Networking.SemanticData.UnitTest UAOOI.Networking.SemanticData.UnitTest v4.7.2 512 {3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} 10.0 $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) $(ProgramFiles)\Common Files\microsoft shared\VSTT\$(VisualStudioVersion)\UITestExtensionPackages True UnitTest true full false bin\Debug\ DEBUG;TRACE prompt 4 IDE0001,IDE0002,IDE0003,,CS0067. IDE0049 false pdbonly true bin\Release\ TRACE prompt 4 IDE0001,IDE0003 true OPCUAOOIKey.snk ..\..\..\packages\CommonServiceLocator.2.0.6\lib\net47\CommonServiceLocator.dll ..\..\..\packages\EnterpriseLibrary.SemanticLogging.2.0.1406.1\lib\net45\Microsoft.Practices.EnterpriseLibrary.SemanticLogging.dll False ..\..\..\packages\Newtonsoft.Json.13.0.1\lib\net45\Newtonsoft.Json.dll ..\..\..\packages\System.Diagnostics.TraceSource.4.3.0\lib\net46\System.Diagnostics.TraceSource.dll True True ..\..\..\packages\System.Reactive.5.0.0\lib\net472\System.Reactive.dll ..\..\..\packages\System.Reactive.Core.5.0.0\lib\net472\System.Reactive.Core.dll ..\..\..\packages\System.Reactive.Interfaces.5.0.0\lib\net472\System.Reactive.Interfaces.dll ..\..\..\packages\System.Runtime.CompilerServices.Unsafe.6.0.0\lib\net461\System.Runtime.CompilerServices.Unsafe.dll ..\..\..\packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll ..\..\..\packages\System.ValueTuple.4.5.0\lib\net47\System.ValueTuple.dll {e28e0880-03aa-4d1b-a820-41b04e766019} Configuration.Networking {afcca7c9-47fe-4fb6-935e-12d686eec58f} Networking.Core {7f4ded4e-5933-4229-b9cc-51da49678904} Networking.SemanticData ================================================ FILE: Networking/Tests/SemanticDatalUnitTest/OPCUAServerProducerSimulatorUnitTest.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using Microsoft.VisualStudio.TestTools.UnitTesting; using System; using UAOOI.Networking.SemanticData.UnitTest.MessageHandlerFactory; using UAOOI.Networking.SemanticData.UnitTest.Simulator; namespace UAOOI.Networking.SemanticData.UnitTest { [TestClass] public class OPCUAServerProducerSimulatorUnitTest { #region test part [TestMethod] [TestCategory("DataManagement_OPCUAServerProducerSimulator")] public void CreatorTestMethod() { Guid _dataSetGuid = Guid.NewGuid(); MessageHandlerFactoryTest _mhf = new MessageHandlerFactoryTest(); using (OPCUAServerProducerSimulator _producer = OPCUAServerProducerSimulator.CreateDevice(_mhf, _dataSetGuid)) { Assert.IsNull(_producer.AssociationsCollection); Assert.IsNotNull(_producer.BindingFactory); Assert.IsNotNull(_producer.ConfigurationFactory); Assert.IsNotNull(_producer.EncodingFactory); Assert.IsNotNull(_producer.MessageHandlerFactory); Assert.IsNull(_producer.MessageHandlersCollection); _producer.TestStart(); Assert.AreEqual(1, _producer.AssociationsCollection.Count); Assert.AreEqual(1, _producer.MessageHandlersCollection.Count); _producer.CheckConsistency(); _mhf.AssertConsistency(); _producer.Update("Value1", "Value1"); } } #endregion #region private private class MessageHandlerFactoryTest : MessageHandlerFactoryFixture { #region MessageHandlerFactoryFixture protected override BinaryDataTransferGraphReceiverFixture NewBinaryDataTransferGraphReceiverFixture() { throw new NotImplementedException(); } protected override BinaryDataTransferGraphSenderFixture NewBinaryDataTransferGraphSenderFixture() { return new BinaryDataTransferGraphSenderTest(); } internal override void AssertConsistency() { Assert.AreEqual(0, BinaryDataTransferGraphReceiverFixtureList.Count); Assert.AreEqual(1, BinaryDataTransferGraphSenderFixtureList.Count); } #endregion private class BinaryDataTransferGraphSenderTest : BinaryDataTransferGraphSenderFixture { } } #endregion } } ================================================ FILE: Networking/Tests/SemanticDatalUnitTest/PacketHeaderUnitTest.cs ================================================  using Microsoft.VisualStudio.TestTools.UnitTesting; using System; using System.IO; using System.Linq; using UAOOI.Networking.SemanticData.Encoding; using UAOOI.Networking.SemanticData.MessageHandling; namespace UAOOI.Networking.SemanticData.UnitTest { [TestClass] public class PacketHeaderUnitTest { [TestMethod] [TestCategory("DataManagement_PacketHeaderUnitTest")] public void ProtocolVersionTestMethod() { byte[] _result = null; using (MemoryStream _stream = new MemoryStream()) using (PacketWriter _writer = new PacketWriter(_stream)) { PacketHeader _header = PacketHeader.GetProducerPacketHeader(_writer, CommonDefinitions.TestGuid, new UInt16[] { CommonDefinitions.DataSetId }); Assert.IsNotNull(_header); Assert.AreEqual(110, _header.ProtocolVersion); Assert.AreEqual(CommonDefinitions.TestGuid, _header.PublisherId); _header.NetworkMessageFlags = 0; _header.SecurityTokenId = 0; _header.NonceLength = 1; _header.Nonce = new byte[] { 0xcc }; _header.WritePacketHeader(); _writer.Flush(); _result = _stream.ToArray(); } byte[] _expected = new ArraySegment(CommonDefinitions.GetTestBinaryArrayVariant(), 0, 27).ToArray(); CollectionAssert.AreEqual(_expected, _result); } [TestMethod] [TestCategory("DataManagement_PacketHeaderUnitTest")] public void GetConsumerPacketHeaderTestMethod() { using (MemoryStream _stream = new MemoryStream(new ArraySegment(CommonDefinitions.GetTestBinaryArrayVariant(), 0, 27).ToArray())) using (PacketReader _reader = new PacketReader(_stream)) { PacketHeader _header = PacketHeader.GetConsumerPacketHeader(_reader); Assert.IsNotNull(_header); Assert.AreEqual(CommonDefinitions.TestGuid, _header.PublisherId); Assert.AreEqual(110, _header.ProtocolVersion); Assert.AreEqual(0, _header.NetworkMessageFlags); Assert.AreEqual(0, _header.SecurityTokenId); Assert.AreEqual(1, _header.NonceLength); CollectionAssert.AreEqual(new byte[] { 0xcc }, _header.Nonce); Assert.AreEqual(1, _header.MessageCount); CollectionAssert.AreEqual(new UInt16[] { CommonDefinitions.DataSetId }, _header.DataSetWriterIds); } } [TestCategory("DataManagement_PacketHeaderUnitTest")] public void ProducerPacketHeaderTestMethod() { HeaderWriterTest _writer = new HeaderWriterTest(x => { }, m_StartPosition); PacketHeader _header = PacketHeader.GetProducerPacketHeader(_writer, CommonDefinitions.TestGuid, new UInt16[] { 0xFFFF }); Assert.IsNotNull(_header); Assert.AreEqual(0xFFFF, _header.DataSetWriterIds[0]); Assert.AreEqual(1, _header.MessageCount); Assert.AreEqual(m_StartPosition + 24, _writer.Position); _writer.Write(0xCCCC); _writer.Write(0xCCCC); _writer.Write(0xCCCC); _writer.Write(0xCCCC); _header.WritePacketHeader(); Assert.AreEqual(1, _header.MessageCount); Assert.AreEqual(m_StartPosition + 24 + 16, _writer.Position); _header.WritePacketHeader(); Assert.AreEqual(m_StartPosition + 24 + 16, _writer.Position); _writer.Write(0xCCCC); Assert.AreEqual(m_StartPosition + 24 + 20, _writer.Position); } [TestMethod] [TestCategory("DataManagement_PacketHeaderUnitTest")] [ExpectedException(typeof(ApplicationException))] public void ConsumerWritePacketHeaderTestMethod() { HeaderReaderTest _reader = new HeaderReaderTest(m_StartPosition); PacketHeader _header = PacketHeader.GetConsumerPacketHeader(_reader); Assert.IsNotNull(_header); _header.WritePacketHeader(); } /// /// Consumers the packet header test method. /// [TestMethod] [TestCategory("DataManagement_PacketHeaderUnitTest")] public void ConsumerPacketHeaderTestMethod() { HeaderReaderTest _reader = new HeaderReaderTest(m_StartPosition); PacketHeader _header = PacketHeader.GetConsumerPacketHeader(_reader); Assert.IsNotNull(_header); Assert.AreEqual((byte)((byte)m_StartPosition + 0), _header.ProtocolVersion); Assert.AreEqual((byte)((byte)m_StartPosition + 1), _header.NetworkMessageFlags); Assert.AreEqual((UInt32)m_StartPosition + 18, _header.SecurityTokenId); Assert.AreEqual((byte)((byte)m_StartPosition + 22), _header.NonceLength); Assert.AreEqual(CommonDefinitions.TestGuid, _header.PublisherId); } private class PacketReader : BinaryReader, IBinaryDecoder { public PacketReader(Stream input) : base(input) { } public DateTime ReadDateTime() { return Encoding.CommonDefinitions.GetUADateTime(ReadInt64()); } public Guid ReadGuid() { return Encoding.CommonDefinitions.ReadGuid(this); } } private class PacketWriter : BinaryWriter, IBinaryHeaderEncoder { public PacketWriter(Stream output) : base(output) { } public void Write(DateTime value) { throw new NotImplementedException(); } public void Write(Guid value) { Write(value.ToByteArray()); } } private long m_StartPosition = 10; } } ================================================ FILE: Networking/Tests/SemanticDatalUnitTest/PersistentConfigurationUnitTest.cs ================================================  using System; using Microsoft.VisualStudio.TestTools.UnitTesting; using System.Collections.Generic; using UAOOI.Networking.SemanticData.UnitTest.Simulator; using UAOOI.Configuration.Networking.Serialization; namespace UAOOI.Networking.SemanticData.UnitTest { [TestClass] public class PersistentConfigurationUnitTest { #region TestMethod [TestMethod] [TestCategory("DataManagement_PersistentConfiguration")] public void GetLocalConfigurationTestMethod() { ConfigurationData _cnf = PersistentConfiguration.GetLocalConfiguration(); TestConfiguration(_cnf.DataSets); TestConfiguration(_cnf.MessageHandlers); } #endregion #region private private void TestConfiguration(MessageHandlerConfiguration[] messageTransportConfiguration) { foreach (MessageHandlerConfiguration _item in messageTransportConfiguration) TestConfiguration((MessageReaderConfiguration)_item); } private void TestConfiguration(MessageReaderConfiguration _item) { foreach (ConsumerAssociationConfiguration _ax in _item.ConsumerAssociationConfigurations) AssociationsDictionary.Add(_ax.AssociationName, _ax); MessageTransportConfigurationDictionary.Add(_item.Name, _item); Assert.IsNotNull(_item.Configuration); } private void TestConfiguration(DataSetConfiguration[] associationConfiguration) { foreach (DataSetConfiguration _acx in associationConfiguration) { AssociationConfigurationDictionary.Add(_acx.AssociationName, _acx); Uri _nu = new Uri(_acx.InformationModelURI); Assert.IsFalse(String.IsNullOrEmpty(_acx.DataSymbolicName)); TestDataSet(_acx); AssociationConfigurationGuidDictionary.Add(_acx.Id, _acx); } } private void TestDataSet(DataSetConfiguration dataSetConfiguration) { RepositoryGroupDictionary.Add(dataSetConfiguration.RepositoryGroup, dataSetConfiguration); TestConfiguration(dataSetConfiguration.DataSet); } private void TestConfiguration(FieldMetaData[] dataMemberConfiguration) { foreach (FieldMetaData _dmx in dataMemberConfiguration) { Assert.IsFalse(String.IsNullOrEmpty(_dmx.ProcessValueName)); Assert.AreNotEqual(BuiltInType.Null, _dmx.TypeInformation.BuiltInType); Assert.IsFalse(String.IsNullOrEmpty(_dmx.SymbolicName)); } } private static Dictionary MessageTransportConfigurationDictionary = new Dictionary(); private static Dictionary AssociationsDictionary = new Dictionary(); private static Dictionary AssociationConfigurationDictionary = new Dictionary(); private static Dictionary AssociationConfigurationGuidDictionary = new Dictionary(); private static Dictionary RepositoryGroupDictionary = new Dictionary(); #endregion } } ================================================ FILE: Networking/Tests/SemanticDatalUnitTest/ProducerAssociationUnitTest.cs ================================================  using Microsoft.VisualStudio.TestTools.UnitTesting; using System; using System.Collections.Generic; using System.Linq; using UAOOI.Configuration.Networking.Serialization; using UAOOI.Networking.Core; using UAOOI.Networking.SemanticData.Common; using UAOOI.Networking.SemanticData.DataRepository; using UAOOI.Networking.SemanticData.Encoding; using UAOOI.Networking.SemanticData.MessageHandling; using UAOOI.Networking.SemanticData.UnitTest.Simulator; namespace UAOOI.Networking.SemanticData.UnitTest { [TestClass] public class ProducerAssociationUnitTest { #region ProducerAssociation [TestMethod] [TestCategory("DataManagement_ProducerAssociationUnitTest")] [ExpectedException(typeof(ArgumentNullException))] public void AddMessageWriterTestMethod() { ProducerAssociation _npa = new ProducerAssociation (new SemanticData(), "DataManagement_ProducerAssociation", PersistentConfiguration.GetAssociationConfiguration(), new BindingFactory(Repository), new EncodingFactory()); Assert.IsNotNull(_npa); Assert.IsTrue(Repository.Count > 0); _npa.AddMessageWriter(null); } [TestMethod] [TestCategory("DataManagement_ProducerAssociationUnitTest")] public void ProducerAssociationCreatorTestMethod() { using (ProducerAssociation _npa = new ProducerAssociation( new SemanticData(), "DataManagement_ProducerAssociation", PersistentConfiguration.GetAssociationConfiguration(), new BindingFactory(Repository), new EncodingFactory()) ) { Assert.IsNotNull(_npa); Assert.IsTrue(Repository.Count > 0); ProducerBindingMonitoredValue[] _values = Repository.Values.Cast>().ToArray>(); Assert.IsTrue(_values.Length > 0); _values[0].MonitoredValue = "1234567"; MessageWriter _mw = new MessageWriter(); _npa.AddMessageWriter(_mw); System.Threading.Thread.Sleep(1200); Assert.AreEqual(1, _mw.IsOk); System.Threading.Thread.Sleep(1200); Assert.AreEqual(1, _mw.IsOk); } } #endregion private class BindingFactory : IBindingFactory { public BindingFactory(Dictionary repository) { m_Repository = repository; } public IConsumerBinding GetConsumerBinding(string repositoryGroup, string processValueName, UATypeInfo field) { IConsumerBinding _ncb = new ConsumerBindingMonitoredValue(field); string _key = String.Format("{0}.{1}", repositoryGroup, processValueName); m_Repository.Add(_key, _ncb); return _ncb; } public IProducerBinding GetProducerBinding(string repositoryGroup, string processValueName, UATypeInfo encoding) { string _key = String.Format("{0}.{1}", repositoryGroup, processValueName); ProducerBindingMonitoredValue _npb = new ProducerBindingMonitoredValue(_key, new UATypeInfo(encoding.BuiltInType)); _npb.MonitoredValue = Guid.NewGuid(); m_Repository.Add(_key, _npb); return _npb; } private Dictionary m_Repository = new Dictionary(); } private class EncodingFactory : IEncodingFactory { public IUADecoder UADecoder { get { return m_UADecoder; } } public IUAEncoder UAEncoder { get { throw new NotImplementedException(); } } public void UpdateValueConverter(IBinding binding, string repositoryGroup, UATypeInfo sourceEncoding) { binding.Culture = null; binding.Converter = null; binding.Parameter = null; } private readonly IUADecoder m_UADecoder = new Helpers.UABinaryDecoderImplementation(); } private class SemanticData : ISemanticData { public Uri Identifier { get { throw new NotImplementedException(); } } public string SymbolicName { get { throw new NotImplementedException(); } } public IComparable NodeId { get { throw new NotImplementedException(); } } public Guid Guid { get { return Guid.NewGuid(); } } } private class MessageWriter : IMessageWriter { internal int IsOk = 0; public void Send (Func producerBinding, ushort length, ulong contentMask, FieldEncodingEnum encoding, DataSelector dataSelector, ushort messageSequenceNumber, DateTime timeStamp, ConfigurationVersionDataType configurationVersion) { IsOk++; Assert.AreEqual(3, length); } public IAssociationState State { get { throw new NotImplementedException(); } } public void AttachToNetwork() { throw new NotImplementedException(); } public void Dispose() { throw new NotImplementedException(); } public ulong ContentMask { get { throw new NotImplementedException(); } } } private Dictionary Repository = new Dictionary(); } } ================================================ FILE: Networking/Tests/SemanticDatalUnitTest/ProducerBindingMonitoredValueUnitTest.cs ================================================ using System; using Microsoft.VisualStudio.TestTools.UnitTesting; using UAOOI.Networking.SemanticData.DataRepository; using UAOOI.Configuration.Networking.Serialization; using System.ComponentModel; namespace UAOOI.Networking.SemanticData.UnitTest { [TestClass] public class ProducerBindingMonitoredValueUnitTest { [TestMethod] [TestCategory("DataManagement_ProducerBindingMonitoredValueUnitTest")] public void CreatorTestMethod2() { ProducerBindingFactory _pr = new ProducerBindingFactory(); Assert.IsNotNull(_pr); IProducerBinding _bn = _pr.GetProducerBinding("ProducerBindingMonitoredValue", "variableName", new UATypeInfo(BuiltInType.String)); Assert.IsNotNull(_bn); } [TestMethod] [TestCategory("DataManagement_ProducerBindingMonitoredValueUnitTest")] public void GetNewValueTestMethod2() { ProducerBindingFactory _pr = new ProducerBindingFactory(); Assert.IsNotNull(_pr); IProducerBinding _bn = _pr.GetProducerBinding("ProducerBindingMonitoredValue", "variableName", new UATypeInfo(BuiltInType.String)); Assert.IsNotNull(_bn); string _testValue = "1231221431423421"; _pr.Modify(_testValue); Assert.IsTrue(_bn.NewValue); Assert.AreEqual(_testValue, (string)_bn.GetFromRepository()); Assert.IsFalse(_bn.NewValue); } [TestMethod] [TestCategory("DataManagement_ProducerBindingMonitoredValueUnitTest")] public void NewValueTestMethod() { ProducerBindingFactory _pr = new ProducerBindingFactory(); Assert.IsNotNull(_pr); IProducerBinding _bn = _pr.GetProducerBinding("ProducerBindingMonitoredValue", "variableName", new UATypeInfo(BuiltInType.String)); Assert.IsNotNull(_bn); int _changeCounter = 0; _bn.PropertyChanged += (x, y) => _changeCounter++; Assert.IsFalse(_bn.NewValue); Assert.AreEqual(0, _changeCounter); _pr.Modify("654321"); Assert.IsTrue(_bn.NewValue); Assert.AreEqual(1, _changeCounter); string _testValue = "1231221431423421"; _pr.Modify(_testValue); Assert.IsTrue(_bn.NewValue); Assert.AreEqual(1, _changeCounter); Assert.AreEqual(_testValue, (string)_bn.GetFromRepository()); Assert.IsFalse(_bn.NewValue); Assert.AreEqual(1, _changeCounter); Assert.AreEqual(_testValue, (string)_bn.GetFromRepository()); Assert.IsFalse(_bn.NewValue); _pr.Modify(_testValue); Assert.IsFalse(_bn.NewValue); Assert.AreEqual(1, _changeCounter); _testValue = "987654321"; _pr.Modify(_testValue); Assert.IsTrue(_bn.NewValue); Assert.AreEqual(2, _changeCounter); Assert.AreEqual(_testValue, (string)_bn.GetFromRepository()); } [TestMethod] [TestCategory("DataManagement_ProducerBindingMonitoredValueUnitTest")] public void WrongInitializationTestMethod() { ProducerBindingFactory _pr = new ProducerBindingFactory(); Assert.IsNotNull(_pr); IProducerBinding _bn = _pr.GetProducerBinding("ProducerBindingMonitoredValue", "variableName", new UATypeInfo(BuiltInType.String)); Assert.IsNotNull(_bn); Assert.IsFalse(_bn.NewValue); _pr.Modify("654321"); Assert.IsTrue(_bn.NewValue); int _changeCounter = 0; _bn.PropertyChanged += (x, y) => _changeCounter++; Assert.AreEqual(0, _changeCounter); _pr.Modify("1234567"); Assert.IsTrue(_bn.NewValue); Assert.AreEqual(0, _changeCounter); _pr.Modify("654321"); _pr.Modify("1234567"); Assert.AreEqual(0, _changeCounter); } [TestMethod] [TestCategory("DataManagement_ProducerBindingMonitoredValueUnitTest")] public void CorrectInitializationTestMethod() { ProducerBindingFactory _pr = new ProducerBindingFactory(); Assert.IsNotNull(_pr); IProducerBinding _bn = _pr.GetProducerBinding("ProducerBindingMonitoredValue", "variableName", new UATypeInfo(BuiltInType.String)); Assert.IsNotNull(_bn); Assert.IsFalse(_bn.NewValue); _pr.Modify("654321"); Assert.IsTrue(_bn.NewValue); _bn.GetFromRepository(); Assert.IsFalse(_bn.NewValue); int _changeCounter = 0; _bn.PropertyChanged += (x, y) => _changeCounter++; Assert.AreEqual(0, _changeCounter); _pr.Modify("1234567"); Assert.IsTrue(_bn.NewValue); Assert.AreEqual(1, _changeCounter); _bn.GetFromRepository(); _pr.Modify("654321"); _pr.Modify("1234567"); Assert.AreEqual(2, _changeCounter); } private class ProducerBindingFactory : IBindingFactory { public IConsumerBinding GetConsumerBinding(string repositoryGroup, string processValueName, UATypeInfo fieldTypeInfo) { throw new NotImplementedException(); } public IProducerBinding GetProducerBinding(string repositoryGroup, string processValueName, UATypeInfo fieldTypeInfo) { if (repositoryGroup == "ProducerBindingMonitoredValue") return _monitoredValue; throw new ArgumentOutOfRangeException("repositoryGroup"); } private ProducerBindingMonitoredValue _monitoredValue = new ProducerBindingMonitoredValue("ProducerBindingMonitoredValue._monitoredValue", new UATypeInfo(BuiltInType.String)); internal void Modify(string value) { _monitoredValue.MonitoredValue = value; } } } } ================================================ FILE: Networking/Tests/SemanticDatalUnitTest/ProducerBindingUnitTest.cs ================================================  using Microsoft.VisualStudio.TestTools.UnitTesting; using System; using System.ComponentModel; using UAOOI.Networking.SemanticData.DataRepository; using UAOOI.Configuration.Networking.Serialization; namespace UAOOI.Networking.SemanticData.UnitTest { [TestClass] public class ProducerBindingUnitTest { #region tests [TestMethod] [TestCategory("DataManagement_ProducerBindingUnitTest")] public void CreatorTestMethod1() { ProducerBindingFactory _pr = new ProducerBindingFactory(); Assert.IsNotNull(_pr); IProducerBinding _bn = _pr.GetProducerBinding("ProducerBinding", "variableName", new UATypeInfo(BuiltInType.String)); Assert.IsNotNull(_bn); } [TestMethod] [TestCategory("DataManagement_ProducerBindingUnitTest")] public void GetNewValueTestMethod() { ProducerBindingFactory _pr = new ProducerBindingFactory(); Assert.IsNotNull(_pr); IProducerBinding _bn = _pr.GetProducerBinding("ProducerBinding", "variableName", new UATypeInfo(BuiltInType.String)); Assert.IsNotNull(_bn); string _testValue = "1231221431423421"; _pr.Modify(_testValue); Assert.IsTrue(_bn.NewValue); Assert.AreEqual(_testValue, (string)_bn.GetFromRepository()); Assert.IsFalse(_bn.NewValue); } [TestMethod] [TestCategory("DataManagement_ProducerBindingUnitTest")] public void NewValueTestMethod() { ProducerBindingFactory _pr = new ProducerBindingFactory(); Assert.IsNotNull(_pr); IProducerBinding _bn = _pr.GetProducerBinding("ProducerBinding", "variableName", new UATypeInfo(BuiltInType.String)); Assert.IsNotNull(_bn); int _changeCounter = 0; _bn.PropertyChanged += (x, y) => _changeCounter++; Assert.IsFalse(_bn.NewValue); Assert.AreEqual(0, _changeCounter); _pr.Modify("654321"); Assert.IsTrue(_bn.NewValue); Assert.AreEqual(1, _changeCounter); string _testValue = "1231221431423421"; _pr.Modify(_testValue); Assert.IsTrue(_bn.NewValue); Assert.AreEqual(1, _changeCounter); Assert.AreEqual(_testValue, (string)_bn.GetFromRepository()); Assert.IsFalse(_bn.NewValue); Assert.AreEqual(1, _changeCounter); Assert.AreEqual(_testValue, (string)_bn.GetFromRepository()); Assert.IsFalse(_bn.NewValue); _pr.Modify(_testValue); Assert.IsFalse(_bn.NewValue); Assert.AreEqual(1, _changeCounter); _testValue = "987654321"; _pr.Modify(_testValue); Assert.IsTrue(_bn.NewValue); Assert.AreEqual(2, _changeCounter); Assert.AreEqual(_testValue, (string)_bn.GetFromRepository()); } #endregion #region private private class ProducerBindingFactory : IBindingFactory { #region IBindingFactory public IConsumerBinding GetConsumerBinding(string repositoryGroup, string processValueName, UATypeInfo fieldTypeInfo) { throw new NotImplementedException(); } public IProducerBinding GetProducerBinding(string repositoryGroup, string processValueName, UATypeInfo fieldTypeInfo) { if (repositoryGroup == "ProducerBinding") { Assert.AreEqual(BuiltInType.String, fieldTypeInfo.BuiltInType); ProducerBinding _ret = new ProducerBinding("ProducerBinding._value", () => _value.Value, new UATypeInfo(fieldTypeInfo.BuiltInType)); _value.PropertyChanged += (x, y) => _ret.OnNewValue(); return _ret; } throw new ArgumentOutOfRangeException("repositoryGroup"); } private ValueClass _value = new ValueClass(); #endregion #region test instrumentation internal class ValueClass : INotifyPropertyChanged { public type Value { get { return b_Value; } set { PropertyChanged.RaiseHandler(value, ref b_Value, "Value", this); } } private type b_Value; public event PropertyChangedEventHandler PropertyChanged; } internal void Modify(string value) { _value.Value = value; } #endregion } #endregion } } ================================================ FILE: Networking/Tests/SemanticDatalUnitTest/Properties/AssemblyInfo.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System.Reflection; using System.Runtime.InteropServices; [assembly: AssemblyTitle("DataManagementUnitTest")] [assembly: AssemblyDescription("Unit tests for the DataManagement")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("DataManagementUnitTest")] [assembly: AssemblyCopyright("Copyright © 2015")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] [assembly: ComVisible(false)] [assembly: Guid("a1f0fb5c-7c17-4e1f-8ed0-cbbfb94f71ee")] [assembly: AssemblyVersion("4.0.1.*")] [assembly: AssemblyFileVersion("4.0.1.0")] ================================================ FILE: Networking/Tests/SemanticDatalUnitTest/Simulator/ConsumerDeviceSimulator.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2018, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using Microsoft.VisualStudio.TestTools.UnitTesting; using System; using UAOOI.Configuration.Networking; using UAOOI.Configuration.Networking.Serialization; using UAOOI.Networking.Core; using UAOOI.Networking.SemanticData.DataRepository; using UAOOI.Networking.SemanticData.Encoding; namespace UAOOI.Networking.SemanticData.UnitTest.Simulator { /// /// Class ConsumerDeviceSimulator - simulates a device that consumes data provided using the integration services. /// It could be for example HMI or PLC. /// internal class ConsumerDeviceSimulator : DataManagementSetup { #region creator of the ConsumerDeviceSimulator internal static ConsumerDeviceSimulator CreateDevice(IMessageHandlerFactory messageHandlerFactory, UInt32 dataSetGuid) { AssociationConfigurationId = dataSetGuid; ConsumerDeviceSimulator _ret = new ConsumerDeviceSimulator(); _ret.ConfigurationFactory = new ConsumerConfigurationFactory(); _ret.BindingFactory = new MVVMSimulatorFactory(); _ret.EncodingFactory = new MyEncodingFactory(); _ret.MessageHandlerFactory = messageHandlerFactory; return _ret; } #endregion #region tests instrumentation /// /// Checks the consistency of the all items in the collection. /// internal void CheckConsistency() { foreach (ConsumerAssociation _item in AssociationsCollection.Values) CheckConsistency(_item); } private void CheckConsistency(ConsumerAssociation item) { Assert.AreEqual(HandlerState.Operational, item.State.State); //Assert.AreEqual(AssociationConfigurationId, _item.DataDescriptor.Guid); Assert.AreEqual(AssociationConfigurationInformationModelURI, item.DataDescriptor.Identifier.ToString()); Assert.AreEqual(AssociationConfigurationDataSymbolicName, item.DataDescriptor.SymbolicName); } internal void InitializeAndRun() { Start(); } #endregion #region Factories set /// /// Class ConfigurationFactory. /// private class ConsumerConfigurationFactory : ConfigurationFactoryBase { public ConsumerConfigurationFactory() { this.Loader = m_GetConfiguration; } #region ConfigurationFactoryBase ///// ///// Occurs after the association configuration has been changed. ///// public override event EventHandler OnAssociationConfigurationChange; ///// ///// Occurs after the communication configuration has been changed. ///// public override event EventHandler OnMessageHandlerConfigurationChange; #endregion #region configuration /// /// Gets the configuration. /// /// Am object of type capturing the communication configuration. /// private ConfigurationData m_GetConfiguration() { return new ConfigurationData() { DataSets = GetAssociations(), MessageHandlers = GetMessageTransport() }; } private MessageHandlerConfiguration[] GetMessageTransport() { return new MessageHandlerConfiguration[] { new MessageReaderConfiguration() { ConsumerAssociationConfigurations = GetTransportAssociations(), Configuration = new MessageChannelConfiguration(), Name = "UDP", TransportRole = AssociationRole.Consumer } }; } private ConsumerAssociationConfiguration[] GetTransportAssociations() { return new ConsumerAssociationConfiguration[] { new ConsumerAssociationConfiguration() { AssociationName = AssociationConfigurationAlias, DataSetWriterId = UInt16.MaxValue, PublisherId = Guid.NewGuid() } }; } private DataSetConfiguration[] GetAssociations() { return new DataSetConfiguration[] { new DataSetConfiguration() { AssociationName = AssociationConfigurationAlias, AssociationRole = AssociationRole.Consumer, DataSet = GetMembers(), DataSymbolicName = "DataSymbolicName", Id = Guid.NewGuid(), InformationModelURI= AssociationConfigurationInformationModelURI, RepositoryGroup = m_RepositoryGroup } }; } private FieldMetaData[] GetMembers() { return new FieldMetaData[] { new FieldMetaData() { ProcessValueName = "Value1", TypeInformation = new UATypeInfo(BuiltInType.String), SymbolicName = "Value1" }, new FieldMetaData() { ProcessValueName = "Value2", TypeInformation = new UATypeInfo(BuiltInType.Double), SymbolicName = "Value2" }, }; } protected override void RaiseEvents() { OnAssociationConfigurationChange?.Invoke(this, EventArgs.Empty); OnMessageHandlerConfigurationChange?.Invoke(this, EventArgs.Empty); } #endregion } /// /// Class MVVMSimulator it is simulator of a component providing user interface constructed according to the Model View ViewModel pattern /// private class MVVMSimulatorFactory : IBindingFactory { #region IBindingFactory public IConsumerBinding GetConsumerBinding(string repositoryGroup, string processValueName, UATypeInfo fieldTypeInfo) { if (repositoryGroup != m_RepositoryGroup) throw new ArgumentNullException("repositoryGroup"); return m_ViewModel.GetConsumerBinding(processValueName, fieldTypeInfo.BuiltInType); } public IProducerBinding GetProducerBinding(string repositoryGroup, string processValueName, UATypeInfo fieldTypeInfo) { throw new NotImplementedException(); } #endregion private ScreeViewModel m_ViewModel = new ScreeViewModel(); } private class MyEncodingFactory : IEncodingFactory { public void UpdateValueConverter(IBinding binding, string repositoryGroup, UATypeInfo sourceEncoding) { if (repositoryGroup != m_RepositoryGroup) throw new ArgumentOutOfRangeException("repositoryGroup"); Assert.AreEqual(sourceEncoding.BuiltInType, binding.Encoding.BuiltInType); } public IUADecoder UADecoder { get; } = new Helpers.UABinaryDecoderImplementation(); public IUAEncoder UAEncoder { get { throw new NotImplementedException(); } } } #endregion #region preconfigured settings private static UInt32 AssociationConfigurationId = UInt32.MaxValue; private const string AssociationConfigurationAlias = "Association1"; private const string m_RepositoryGroup = "repositoryGroup"; private const string AssociationConfigurationDataSymbolicName = "DataSymbolicName"; private const string AssociationConfigurationInformationModelURI = "https://github.com/mpostol/OPC-UA-OOI"; #endregion } } ================================================ FILE: Networking/Tests/SemanticDatalUnitTest/Simulator/CustomNodeManager.cs ================================================  using System; using UAOOI.Networking.SemanticData.DataRepository; using UAOOI.Configuration.Networking.Serialization; namespace UAOOI.Networking.SemanticData.UnitTest.Simulator { internal class CustomNodeManager { internal IProducerBinding GetProducerBinding(string variableName, BuiltInType encoding) { UATypeInfo _uaTypeInfo = new UATypeInfo(encoding); if (variableName == "Value1") { Value1 = new ProducerBindingMonitoredValue(variableName, _uaTypeInfo); return Value1; } else if (variableName == "Value2") { Value2 = new ProducerBindingMonitoredValue(variableName, _uaTypeInfo); return Value2; } else throw new ArgumentOutOfRangeException("variableName"); } private ProducerBindingMonitoredValue Value1 { get; set; } private ProducerBindingMonitoredValue Value2 { get; set; } #region test environment internal void Update(object value, string name) { if (name == "Value1") { if (Value1.Encoding.BuiltInType != BuiltInType.String) throw new ArgumentOutOfRangeException("Wrong type"); if ("Value1" != name) throw new ArgumentOutOfRangeException("Wrong name"); Value1.MonitoredValue = (string)value; } else if (name == "Value2") { if (Value2.Encoding.BuiltInType != BuiltInType.Double) throw new ArgumentOutOfRangeException("Wrong type"); if ("Value2" != name) throw new ArgumentOutOfRangeException("Wrong name"); Value2.MonitoredValue = (double)value; } } #endregion } } ================================================ FILE: Networking/Tests/SemanticDatalUnitTest/Simulator/OPCUAServerSimulator.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using Microsoft.VisualStudio.TestTools.UnitTesting; using System; using UAOOI.Configuration.Networking; using UAOOI.Configuration.Networking.Serialization; using UAOOI.Networking.Core; using UAOOI.Networking.SemanticData.DataRepository; using UAOOI.Networking.SemanticData.Encoding; using UAOOI.Networking.SemanticData.MessageHandling; using UAOOI.Networking.SemanticData.UnitTest.MessageHandlerFactory; namespace UAOOI.Networking.SemanticData.UnitTest.Simulator { /// /// Class OPCUAServerSimulator - the class is to be used as a simulator of Address Space component. /// It is used to simulate producer role on the server side. /// internal class OPCUAServerProducerSimulator : DataManagementSetup { #region creator internal static OPCUAServerProducerSimulator CreateDevice(MessageHandlerFactoryFixture messageHandlerFactory, Guid dataSetGuid) { AssociationConfigurationId = dataSetGuid; OPCUAServerProducerSimulator _ret = new OPCUAServerProducerSimulator { ConfigurationFactory = new MyConfigurationFactory(), BindingFactory = new MyBindingFFactory(), EncodingFactory = new MyEncodingFactory(), MessageHandlerFactory = messageHandlerFactory }; return _ret; } #endregion #region testing environment internal void TestStart() { base.Start(); } /// /// Checks the consistency of the all items in the collection. /// internal void CheckConsistency() { foreach (ProducerAssociation _item in AssociationsCollection.Values) CheckConsistency(_item); ((MessageHandlerFactoryFixture)MessageHandlerFactory).AssertConsistency(); } private void CheckConsistency(ProducerAssociation _item) { Assert.AreEqual(HandlerState.Operational, _item.State.State); Assert.AreEqual(AssociationConfigurationId, _item.DataDescriptor.Guid); Assert.AreEqual(AssociationConfigurationInformationModelURI, _item.DataDescriptor.Identifier.ToString()); Assert.AreEqual(AssociationConfigurationDataSymbolicName, _item.DataDescriptor.SymbolicName); } internal void Update(object value, string name) { ((MyBindingFFactory)this.BindingFactory).Update(value, name); } #endregion #region Factories set /// /// Class MyConfigurationFactory. /// private class MyConfigurationFactory : IConfigurationFactory { #region IConfigurationFactory /// /// Gets the configuration. /// /// Am object of type capturing the communication configuration. /// public ConfigurationData GetConfiguration() { return new ConfigurationData() { DataSets = GetAssociations(), MessageHandlers = GetMessageTransport() }; } /// /// Occurs after the association configuration has been changed. /// public event EventHandler OnAssociationConfigurationChange; /// /// Occurs after the communication configuration has been changed. /// public event EventHandler OnMessageHandlerConfigurationChange; #endregion #region configuration private MessageHandlerConfiguration[] GetMessageTransport() { return new MessageWriterConfiguration[] { new MessageWriterConfiguration() { ProducerAssociationConfigurations = GetTransportAssociations(), Configuration = new MessageChannelConfiguration() { ChannelConfiguration = "4840,localhost" }, Name = "UDP", TransportRole = AssociationRole.Producer } }; } private ProducerAssociationConfiguration[] GetTransportAssociations() { return new ProducerAssociationConfiguration[] { new ProducerAssociationConfiguration() { AssociationName = AssociationConfigurationAlias, DataSetWriterId = ushort.MaxValue } }; } private DataSetConfiguration[] GetAssociations() { return new DataSetConfiguration[] { new DataSetConfiguration() { AssociationName = AssociationConfigurationAlias, AssociationRole = AssociationRole.Producer, DataSet = GetMembers(), DataSymbolicName = "DataSymbolicName", Id = AssociationConfigurationId, RepositoryGroup = m_RepositoryGroup, InformationModelURI= AssociationConfigurationInformationModelURI } }; } private FieldMetaData[] GetMembers() { return new FieldMetaData[] { new FieldMetaData() { ProcessValueName = "Value1", TypeInformation = new UATypeInfo( BuiltInType.String), SymbolicName = "Value1" }, new FieldMetaData() { ProcessValueName = "Value2", TypeInformation = new UATypeInfo( BuiltInType.Double), SymbolicName = "Value2" }, }; } #endregion } private class MyBindingFFactory : IBindingFactory { #region IBindingFactory public IConsumerBinding GetConsumerBinding(string repositoryGroup, string processValueName, UATypeInfo fieldTypeInfo) { throw new NotImplementedException(); } public IProducerBinding GetProducerBinding(string repositoryGroup, string processValueName, UATypeInfo fieldTypeInfo) { if (repositoryGroup != m_RepositoryGroup) throw new ArgumentNullException("repositoryGroup"); return m_CustomNodesManager.GetProducerBinding(processValueName, fieldTypeInfo.BuiltInType); } #endregion #region private private CustomNodeManager m_CustomNodesManager = new CustomNodeManager(); #endregion #region testing environment internal void Update(object value, string name) { m_CustomNodesManager.Update(value, name); } #endregion } private class MyEncodingFactory : IEncodingFactory { public void UpdateValueConverter(IBinding binding, string repositoryGroup, UATypeInfo sourceEncoding) { if (repositoryGroup != m_RepositoryGroup) throw new ArgumentOutOfRangeException("repositoryGroup"); Assert.AreEqual(sourceEncoding.BuiltInType, binding.Encoding.BuiltInType); } public IUADecoder UADecoder { get; } = new Helpers.UABinaryDecoderImplementation(); public IUAEncoder UAEncoder { get; } = new Helpers.UABinaryEncoderImplementation(); } #endregion #region preconfigured settings private static Guid AssociationConfigurationId; private const string AssociationConfigurationAlias = "Association1"; private const string m_RepositoryGroup = "repositoryGroup"; private const string AssociationConfigurationDataSymbolicName = "DataSymbolicName"; private const string AssociationConfigurationInformationModelURI = "https://github.com/mpostol/OPC-UA-OOI"; #endregion } internal class MyMessageWriter : IMessageWriter { public MyMessageWriter(Guid dataSetGuid) { this.dataSetGuid = dataSetGuid; State = new MyState(); } #region IMessageWriter /// /// Gets the content mask. The content mast read from the message or provided by the writer. /// The order of the bits starting from the least significant bit matches the order of the data items /// within the data set. /// /// The content mask represented as unsigned number . The order of the bits starting from the least significant /// bit matches the order of the data items within the data set. /// public ulong ContentMask => throw new NotImplementedException(); /// /// Sends the data described by a data set collection to remote destination. /// /// Encapsulates functionality used by the to collect all the data (data set items) required to prepare new message and send it over the network. /// Number of items to be send used to calculate the length of the message. /// The content mask represented as unsigned number . The order of the bits starting from the least significant /// bit matches the order of the data items within the data set. /// The encoding. /// The data selector. /// The message sequence number. A monotonically increasing sequence number assigned by the publisher to each message sent. /// The time stamp - the time the Data was collected. /// The configuration version. /// length public void Send (Func producerBinding, ushort length, ulong contentMask, FieldEncodingEnum encoding, DataSelector dataSelector, ushort messageSequenceNumber, DateTime timeStamp, ConfigurationVersionDataType configurationVersion) { if (length > 2) throw new ArgumentOutOfRangeException("length"); m_Buffer = new object[length]; for (int i = 0; i < 2; i++) m_Buffer[i] = producerBinding(i); m_HaveSendData = true; } public IAssociationState State { get; private set; } public void AttachToNetwork() { m_HaveBeenActivated = true; } #endregion public void Dispose() { throw new NotImplementedException(); } #region testing environment internal void ReadData() { throw new NotFiniteNumberException(); } internal void CheckConsistency() { Assert.IsNotNull(State); Assert.AreEqual(HandlerState.Operational, State.State); Assert.IsNotNull(m_HaveSendData); Assert.IsTrue(m_HaveBeenActivated); } private bool m_HaveBeenActivated = false; private bool m_HaveSendData; private object[] m_Buffer = null; #endregion #region private /// /// Class MyState. /// private class MyState : IAssociationState { /// /// Initializes a new instance of the class. /// public MyState() { State = HandlerState.Disabled; } /// /// Gets the current state of the instance. /// /// The state of type. public HandlerState State { get; private set; } /// /// This method is used to enable a configured object. If a normal operation is possible, the state changes into state. /// In the case of an error situation, the state changes into . The operation is rejected if the current is not . /// /// Wrong state public void Enable() { if (State != HandlerState.Disabled) throw new ArgumentException("Wrong state"); State = HandlerState.Operational; } /// /// This method is used to disable an already enabled object. /// This method call shall be rejected if the current State is or . /// /// Wrong state public void Disable() { if (State != HandlerState.Operational) throw new ArgumentException("Wrong state"); State = HandlerState.Disabled; } } private Guid dataSetGuid; #endregion } } ================================================ FILE: Networking/Tests/SemanticDatalUnitTest/Simulator/PersistenConfiguration.cs ================================================  using System; using UAOOI.Configuration.Networking.Serialization; namespace UAOOI.Networking.SemanticData.UnitTest.Simulator { /// /// Class PersistentConfiguration - simulates a persistent configuration, like EEPROM, file, etc. /// internal static class PersistentConfiguration { internal static ConfigurationData GetLocalConfiguration() { return new ConfigurationData() { DataSets = new DataSetConfiguration[] { GetAssociationConfiguration(), GetAssociationConfiguration(), GetAssociationConfiguration() }, MessageHandlers = new MessageHandlerConfiguration[] { GetMessageReaderConfiguration(), GetMessageReaderConfiguration(), GetMessageReaderConfiguration() } }; } private static MessageHandlerConfiguration GetMessageReaderConfiguration() { return new MessageReaderConfiguration() { ConsumerAssociationConfigurations = new ConsumerAssociationConfiguration[] { new ConsumerAssociationConfiguration() { AssociationName = "Associations".AddId(AssociationId), DataSetWriterId = UInt16.MaxValue, PublisherId = Guid.NewGuid() } }, Configuration = new MessageChannelConfiguration() { ChannelConfiguration = "4840,True,239.255.255.1,True" }, Name = "Name".AddId(MessageTransportId), TransportRole = AssociationRole.Consumer }; } internal static DataSetConfiguration GetAssociationConfiguration() { return new DataSetConfiguration() { AssociationName = "Alias".AddId(AssociationId), AssociationRole = AssociationRole.Consumer, DataSet = GetMembers(), DataSymbolicName = "DataSymbolicName".AddId(AssociationId), Id = Guid.NewGuid(), RepositoryGroup = "RepositoryGroup".AddId(DataMemberId), InformationModelURI = "http://www.commsvr.com".AddId(AssociationId) }; } internal static FieldMetaData[] GetMembers() { return new FieldMetaData[] { GetDataMember(), GetDataMember(), GetDataMember() }; } private static FieldMetaData GetDataMember() { return new FieldMetaData() { ProcessValueName = "ProcessValueName".AddId(DataMemberId), SymbolicName = "SymbolicName".AddId(DataMemberId), TypeInformation = new UATypeInfo(BuiltInType.String) }; } private static int MessageTransportId { get { return p_MessageTransportId++; } } private static int p_MessageTransportId; internal static int AssociationId { get { return p_AssociationId++; } } private static int DataSetId { get { return p_DataSet++; } } public static int DataMemberId { get { return p_DataMemberId++; } } private static int p_AssociationId = 0; private static int p_DataSet = 0; private static int p_DataMemberId = 0; } internal static class StringExtensions { public static string AddId(this string name, int id) { return String.Format("{0}{1}", name, id); } } } ================================================ FILE: Networking/Tests/SemanticDatalUnitTest/Simulator/ScreeViewModel.cs ================================================  using System; using System.ComponentModel; using UAOOI.Networking.SemanticData.DataRepository; using UAOOI.Configuration.Networking.Serialization; namespace UAOOI.Networking.SemanticData.UnitTest.Simulator { /// /// Class ScreeViewModel - this class demonstrates how to create bindings to the properties that are holders of values in the Model View ViewModel pattern. /// internal class ScreeViewModel : INotifyPropertyChanged { #region API /// /// Helper method that creates the consumer binding. /// /// Name of the variable. /// IConsumerBinding. /// variableName public IConsumerBinding GetConsumerBinding(string variableName, BuiltInType encoding) { UATypeInfo _uaTypeInfo = new UATypeInfo(encoding); if (variableName == "Value1") { Value1 = new ConsumerBindingMonitoredValue(_uaTypeInfo); return Value1; } else if (variableName == "Value2") { Value2 = new ConsumerBindingMonitoredValue(_uaTypeInfo); return Value2; } throw new ArgumentOutOfRangeException("variableName"); } #endregion #region INotifyPropertyChanged public event PropertyChangedEventHandler PropertyChanged; #endregion #region ModelView implementation public ConsumerBindingMonitoredValue Value1 { get { return b_Value1; } set { PropertyChanged.RaiseHandler>(value, ref b_Value1, "Value1", this); } } public ConsumerBindingMonitoredValue Value2 { get { return b_Value2; } set { PropertyChanged.RaiseHandler>(value, ref b_Value2, "Value2", this); } } private ConsumerBindingMonitoredValue b_Value1; private ConsumerBindingMonitoredValue b_Value2; #endregion } } ================================================ FILE: Networking/Tests/SemanticDatalUnitTest/UABinaryDecoderImplementationUnitTest.cs ================================================  using System; using Microsoft.VisualStudio.TestTools.UnitTesting; using System.IO; using UAOOI.Networking.SemanticData.Encoding; using System.Xml; using UAOOI.Configuration.Networking.Serialization; namespace UAOOI.Networking.SemanticData.UnitTest { [TestClass] public class UABinaryDecoderImplementationUnitTest { #region TestMethod [TestMethod] [TestCategory("DataManagement_UABinaryDecoderImplementationUnitTest")] [ExpectedException(typeof(NotImplementedException))] public void WriteDataValueTestMethod() { IDataValue _ReadDataValue; using (MemoryStream _stream = new MemoryStream()) using (TestBinaryReader _buffer = new TestBinaryReader(_stream)) _ReadDataValue = _buffer.ReadDataValue(_buffer); } [TestMethod] [TestCategory("DataManagement_UABinaryDecoderImplementationUnitTest")] public void GuidTestMethod() { Guid _Guid = Guid.NewGuid(); MemoryStream _stream = new MemoryStream(_Guid.ToByteArray()); TestBinaryReader _buffer = new TestBinaryReader(_stream); Assert.IsNotNull(_buffer); Guid _EncodedGuid = _buffer.ReadGuid(); _buffer.Close(); Assert.AreEqual(_Guid, _EncodedGuid); } [TestMethod] [TestCategory("DataManagement_UABinaryDecoderImplementationUnitTest")] public void VariantGuidTestMethod() { using (MemoryStream _stream = new MemoryStream(CommonDefinitions.TestGuidVariant)) using (TestBinaryReader _buffer = new TestBinaryReader(_stream)) { Assert.IsNotNull(_buffer); IVariant _EncodedVGuid = _buffer.ReadVariant(_buffer); _buffer.Close(); Assert.IsNotNull(_EncodedVGuid); Assert.AreEqual(BuiltInType.Guid, _EncodedVGuid.UATypeInfo.BuiltInType); Assert.AreEqual(-1, _EncodedVGuid.UATypeInfo.ValueRank); Assert.AreEqual(CommonDefinitions.TestGuid, (Guid)_EncodedVGuid.Value); } } [TestMethod] [TestCategory("DataManagement_UABinaryDecoderImplementationUnitTest")] public void ArrayOneDimensionCompressedTest() { byte[] _testArray = new byte[] { 5, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0 }; Array _EncodedArray = null; using (MemoryStream _stream = new MemoryStream(_testArray)) using (TestBinaryReader _buffer = new TestBinaryReader(_stream)) { Assert.IsNotNull(_buffer); _EncodedArray = _buffer.ReadArray(_buffer, _buffer.ReadInt32, false); _buffer.Close(); } Assert.IsNotNull(_EncodedArray); Assert.AreEqual(1, _EncodedArray.Rank); Assert.IsInstanceOfType(_EncodedArray, typeof(Array)); Assert.AreEqual(5, _EncodedArray.GetLength(0)); CollectionAssert.AreEqual(new Int32[] { 0, 1, 2, 3, 4 }, _EncodedArray); } [TestMethod] [TestCategory("DataManagement_UABinaryDecoderImplementationUnitTest")] [ExpectedException(typeof(NotImplementedException))] public void ArrayMultiDimensionTest() { byte[] _testArray = new byte[] { 198, 4, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0 }; Array _EncodedArray = null; using (MemoryStream _stream = new MemoryStream(_testArray)) using (TestBinaryReader _buffer = new TestBinaryReader(_stream)) { Assert.IsNotNull(_buffer); _EncodedArray = _buffer.ReadArray(_buffer, _buffer.ReadInt32, true); Assert.Fail(); _buffer.Close(); } Assert.IsNotNull(_EncodedArray); Assert.AreEqual(2, _EncodedArray.Rank); Assert.IsInstanceOfType(_EncodedArray, typeof(Array)); Assert.AreEqual(4, _EncodedArray.Length); CollectionAssert.AreEqual(new Int32[] { 0, 1, 2, 3 }, _EncodedArray); } [TestMethod] [TestCategory("DataManagement_UABinaryDecoderImplementationUnitTest")] public void ArrayOneDimensionVariantTest() { byte[] _testArray = new byte[] { 134, 5, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0 }; IVariant _EncodedArray = null; using (MemoryStream _stream = new MemoryStream(_testArray)) using (TestBinaryReader _buffer = new TestBinaryReader(_stream)) { Assert.IsNotNull(_buffer); _EncodedArray = _buffer.ReadVariant(_buffer); _buffer.Close(); } Assert.IsNotNull(_EncodedArray); Assert.AreEqual(BuiltInType.Int32, _EncodedArray.UATypeInfo.BuiltInType); Assert.AreEqual(1, _EncodedArray.UATypeInfo.ValueRank); Assert.IsInstanceOfType(_EncodedArray.Value, typeof(Array)); Array _value = _EncodedArray.Value as Array; Assert.IsNotNull(_value); Assert.AreEqual(1, _value.Rank); Assert.AreEqual(5, _value.GetLength(0)); CollectionAssert.AreEqual(new Int32[] { 0, 1, 2, 3, 4 }, _value); } [TestMethod] [TestCategory("DataManagement_UABinaryDecoderImplementationUnitTest")] public void ArrayOneDimensionByteStringVariantTest() { byte[] _testArray = new byte[] { 143, 2, 0, 0, 0, 5, 0, 0, 0, 0, 1, 2, 3, 4, 5, 0, 0, 0, 5, 6, 7, 8, 9 }; IVariant _EncodedArray = null; using (MemoryStream _stream = new MemoryStream(_testArray)) using (TestBinaryReader _buffer = new TestBinaryReader(_stream)) { Assert.IsNotNull(_buffer); _EncodedArray = _buffer.ReadVariant(_buffer); _buffer.Close(); } Assert.IsNotNull(_EncodedArray); Assert.AreEqual(BuiltInType.ByteString, _EncodedArray.UATypeInfo.BuiltInType); Assert.AreEqual(1, _EncodedArray.UATypeInfo.ValueRank); Assert.IsInstanceOfType(_EncodedArray.Value, typeof(Array)); Array _value = _EncodedArray.Value as Array; Assert.IsNotNull(_value); Assert.AreEqual(1, _value.Rank); Assert.AreEqual(2, _value.GetLength(0)); byte[][] _recovered = (byte[][])_value; byte[][] _expected = new byte[][] { new byte[] { 0, 1, 2, 3, 4 }, new byte[] { 5, 6, 7, 8, 9 } }; for (int i = 0; i < _value.Rank; i++) CollectionAssert.AreEqual(_expected[i], _recovered[i]); } [TestMethod] [TestCategory("DataManagement_UABinaryDecoderImplementationUnitTest")] public void VariantDateTimeTestMethod() { foreach (CommonDefinitions.DateTimeVariantEncoding _dtx in CommonDefinitions.DateTimeTestingValues) { using (MemoryStream _stream = new MemoryStream(_dtx.encoding)) using (TestBinaryReader _buffer = new TestBinaryReader(_stream)) { Assert.IsNotNull(_buffer); IVariant _variant = _buffer.ReadVariant(_buffer); _buffer.Close(); Assert.AreEqual(BuiltInType.DateTime, _variant.UATypeInfo.BuiltInType); Assert.AreEqual(_dtx.dateTime, (DateTime)_variant.Value); } } } #endregion #region private private class TestBinaryReader : BinaryReader, IBinaryDecoder, IUADecoder { public TestBinaryReader(Stream input) : base(input) { } #region IUADecoder - not supported public byte[] ReadByteString(IBinaryDecoder decoder) { Assert.AreSame(this, decoder); return m_UABinaryDecoder.ReadByteString(decoder); } public IDataValue ReadDataValue(IBinaryDecoder decoder) { Assert.AreSame(this, decoder); return m_UABinaryDecoder.ReadDataValue(decoder); } public DateTime ReadDateTime(IBinaryDecoder decoder) { Assert.AreSame(this, decoder); return m_UABinaryDecoder.ReadDateTime(decoder); } public IDiagnosticInfo ReadDiagnosticInfo(IBinaryDecoder decoder) { Assert.AreSame(this, decoder); return m_UABinaryDecoder.ReadDiagnosticInfo(decoder); } public IExpandedNodeId ReadExpandedNodeId(IBinaryDecoder decoder) { Assert.AreSame(this, decoder); return m_UABinaryDecoder.ReadExpandedNodeId(decoder); } public IExtensionObject ReadExtensionObject(IBinaryDecoder decoder) { Assert.AreSame(this, decoder); return m_UABinaryDecoder.ReadExtensionObject(decoder); } public Guid ReadGuid(IBinaryDecoder decoder) { Assert.AreSame(this, decoder); return m_UABinaryDecoder.ReadGuid(decoder); } public ILocalizedText ReadLocalizedText(IBinaryDecoder decoder) { Assert.AreSame(this, decoder); return m_UABinaryDecoder.ReadLocalizedText(decoder); } public INodeId ReadNodeId(IBinaryDecoder decoder) { Assert.AreSame(this, decoder); return m_UABinaryDecoder.ReadNodeId(decoder); } public IQualifiedName ReadQualifiedName(IBinaryDecoder decoder) { Assert.AreSame(this, decoder); return m_UABinaryDecoder.ReadQualifiedName(decoder); } public IStatusCode ReadStatusCode(IBinaryDecoder decoder) { Assert.AreSame(this, decoder); return m_UABinaryDecoder.ReadStatusCode(decoder); } public IVariant ReadVariant(IBinaryDecoder decoder) { Assert.AreSame(this, decoder); return m_UABinaryDecoder.ReadVariant(decoder); } public XmlElement ReadXmlElement(IBinaryDecoder decoder) { Assert.AreSame(this, decoder); return m_UABinaryDecoder.ReadXmlElement(decoder); } public string ReadString(IBinaryDecoder decoder) { Assert.AreSame(this, decoder); return m_UABinaryDecoder.ReadString(decoder); } public Array ReadArray(IBinaryDecoder decoder, Func readValue, bool arrayDimensionsPresents) { return m_UABinaryDecoder.ReadArray(decoder, readValue, arrayDimensionsPresents); } #endregion #region IBinaryDecoder public Guid ReadGuid() { return ReadGuid(this); } public DateTime ReadDateTime() { return ReadDateTime(this); } #endregion #region private private Helpers.UABinaryDecoderImplementation m_UABinaryDecoder = new Helpers.UABinaryDecoderImplementation(); #endregion } #endregion } } ================================================ FILE: Networking/Tests/SemanticDatalUnitTest/UABinaryEncoderImplementationUnitTest.cs ================================================ using System; using Microsoft.VisualStudio.TestTools.UnitTesting; using System.IO; using UAOOI.Networking.SemanticData.Encoding; using System.Xml; using UAOOI.Configuration.Networking.Serialization; using System.Linq; namespace UAOOI.Networking.SemanticData.UnitTest { [TestClass] public class UABinaryEncoderImplementationUnitTest { #region TestMethod [TestMethod] [TestCategory("DataManagement_UABinaryEncoderImplementationUnitTest")] public void WriteByteStringTest() { using (var _stream = new MemoryStream()) using (TestBinaryWriter _buffer = new TestBinaryWriter(_stream)) { _buffer.Write(_buffer, new byte[10]); _buffer.Close(); byte[] _Encoded = _stream.ToArray(); Assert.AreEqual(14, _Encoded.Length); } } [TestMethod] [TestCategory("DataManagement_UABinaryEncoderImplementationUnitTest")] [ExpectedException(typeof(ArgumentOutOfRangeException))] public void ArrayLengthOutOfRangeTest() { using (MemoryStream _stream = new MemoryStream()) using (TestBinaryWriter _buffer = new TestBinaryWriter(_stream)) { Assert.IsNotNull(_buffer); Int32[] _value = new Int32[byte.MaxValue + 1]; Variant _variant = new Variant { UATypeInfo = new UATypeInfo(BuiltInType.Int32, 1), Value = _value }; _buffer.Write(_buffer, _variant); } } [TestMethod] [TestCategory("DataManagement_UABinaryEncoderImplementationUnitTest")] public void ArrayOneDimensionTest() { WriteArrayOneDimension(0); WriteArrayOneDimension(1); } [TestMethod] [TestCategory("DataManagement_UABinaryEncoderImplementationUnitTest")] public void ArrayMultiDimensionTest() { byte[] _EncodedValue = null; using (MemoryStream _stream = new MemoryStream()) using (TestBinaryWriter _buffer = new TestBinaryWriter(_stream)) { Assert.IsNotNull(_buffer); Int32[] _dimensions = new Int32[] { 2, 2 }; Int32[,] _array = new Int32[,] { { 0, 1 }, { 2, 3 } }; Assert.AreEqual(2, _array.Rank); Assert.AreEqual(4, _array.Length); Assert.AreEqual(_dimensions.Length, _array.Rank); UATypeInfo _uaTypeInfo = new UATypeInfo(BuiltInType.Int32, _dimensions.Length, _dimensions); Variant _variant = new Variant { UATypeInfo = _uaTypeInfo, Value = _array }; _buffer.Write(_buffer, _variant); _buffer.Close(); _EncodedValue = _stream.ToArray(); } Assert.IsNotNull(_EncodedValue); Assert.AreEqual(33, _EncodedValue.Length); string _content = String.Join(", ", _EncodedValue); Assert.AreEqual("198, 4, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0", _content); } [TestMethod] [TestCategory("DataManagement_UABinaryEncoderImplementationUnitTest")] [ExpectedException(typeof(NotImplementedException))] public void WriteDataValueTestMethod() { using (MemoryStream _stream = new MemoryStream()) using (TestBinaryWriter _buffer = new TestBinaryWriter(_stream)) _buffer.Write(_buffer, (IDataValue)null); } [TestMethod] [TestCategory("DataManagement_UABinaryEncoderImplementationUnitTest")] public void GuidTestMethod() { byte[] _EncodedGuid = null; Guid _Guid = Guid.NewGuid(); using (MemoryStream _stream = new MemoryStream()) using (TestBinaryWriter _buffer = new TestBinaryWriter(_stream)) { Assert.IsNotNull(_buffer); _buffer.Write(_Guid); _buffer.Close(); _EncodedGuid = _stream.ToArray(); } Assert.IsNotNull(_EncodedGuid); Assert.AreEqual(16, _EncodedGuid.Length); Guid _recoveredGuid = new Guid(_EncodedGuid); Assert.AreEqual(_Guid, _recoveredGuid); } [TestMethod] [TestCategory("DataManagement_UABinaryEncoderImplementationUnitTest")] public void VariantGuidTestMethod() { byte[] _EncodedVGuid = null; using (MemoryStream _stream = new MemoryStream()) using (TestBinaryWriter _buffer = new TestBinaryWriter(_stream)) { Assert.IsNotNull(_buffer); Variant _variant = new Variant { UATypeInfo = new UATypeInfo(BuiltInType.Guid), Value = CommonDefinitions.TestGuid }; _buffer.Write(_buffer, _variant); _buffer.Close(); _EncodedVGuid = _stream.ToArray(); } Assert.IsNotNull(_EncodedVGuid); Assert.AreEqual(17, _EncodedVGuid.Length); ArraySegment _segment = new ArraySegment(_EncodedVGuid, 1, 16); Assert.AreEqual((byte)BuiltInType.Guid, _EncodedVGuid[0]); CollectionAssert.AreEqual(CommonDefinitions.TestGuid.ToByteArray(), _segment.ToList()); } [TestMethod] [TestCategory("DataManagement_UABinaryEncoderImplementationUnitTest")] public void VariantByteStringTestMethod() { byte[] _EncodedValue = null; using (MemoryStream _stream = new MemoryStream()) using (TestBinaryWriter _buffer = new TestBinaryWriter(_stream)) { Assert.IsNotNull(_buffer); Variant _variant = new Variant { UATypeInfo = new UATypeInfo(BuiltInType.ByteString), Value = new byte[] { 0, 1, 2, 3, 4 } }; _buffer.Write(_buffer, _variant); _buffer.Close(); _EncodedValue = _stream.ToArray(); } Assert.IsNotNull(_EncodedValue); Assert.AreEqual(10, _EncodedValue.Length); Assert.AreEqual((byte)BuiltInType.ByteString, _EncodedValue[0]); string _content = String.Join(", ", _EncodedValue); Assert.AreEqual("15, 5, 0, 0, 0, 0, 1, 2, 3, 4", _content); } [TestMethod] [TestCategory("DataManagement_UABinaryEncoderImplementationUnitTest")] public void VariantArrayOfByteStringsTestMethod() { byte[] _EncodedValue = null; using (MemoryStream _stream = new MemoryStream()) using (TestBinaryWriter _buffer = new TestBinaryWriter(_stream)) { Assert.IsNotNull(_buffer); Variant _variant = new Variant { UATypeInfo = new UATypeInfo(BuiltInType.ByteString, 1), Value = new byte[][] { new byte[] { 0, 1, 2, 3, 4 }, new byte[] { 5, 6, 7, 8, 9 } } }; _buffer.Write(_buffer, _variant); _buffer.Close(); _EncodedValue = _stream.ToArray(); } Assert.IsNotNull(_EncodedValue); Assert.AreEqual(23, _EncodedValue.Length); Assert.AreEqual((byte)((byte)BuiltInType.ByteString | (byte)VariantEncodingMask.IsArray), _EncodedValue[0]); string _content = String.Join(", ", _EncodedValue); Assert.AreEqual("143, 2, 0, 0, 0, 5, 0, 0, 0, 0, 1, 2, 3, 4, 5, 0, 0, 0, 5, 6, 7, 8, 9", _content); } [TestMethod] [TestCategory("DataManagement_UABinaryEncoderImplementationUnitTest")] public void VariantDateTimeTestMethod() { foreach (CommonDefinitions.DateTimeVariantEncoding _dtx in CommonDefinitions.DateTimeTestingValues) { MemoryStream _stream = new MemoryStream(); TestBinaryWriter _buffer = new TestBinaryWriter(_stream); Assert.IsNotNull(_buffer); Variant _variant = new Variant { UATypeInfo = new UATypeInfo(BuiltInType.DateTime), Value = _dtx.dateTime }; _buffer.Write(_buffer, _variant); _buffer.Close(); byte[] _EncodedVariant = _stream.ToArray(); Assert.IsNotNull(_EncodedVariant); Assert.AreEqual(9, _EncodedVariant.Length); Assert.AreEqual((byte)BuiltInType.DateTime, _EncodedVariant[0]); CollectionAssert.AreEqual(_dtx.encoding, _EncodedVariant.ToList()); } } #endregion #region testing instrumentation private class TestBinaryWriter : BinaryWriter, IBinaryEncoder, IUAEncoder { #region creator public TestBinaryWriter(Stream output) : base(output) { } #endregion #region IBinaryEncoder public void Write(Guid value) { _encoder.Write(this, value); } public void Write(DateTime value) { throw new NotImplementedException(); } #endregion #region IUAEncoder public void Write(IBinaryEncoder encoder, DateTime value) { _encoder.Write(this, value); } public void Write(IBinaryEncoder encoder, byte[] value) { _encoder.Write(this, value); } public void Write(IBinaryEncoder encoder, IDataValue value) { _encoder.Write(this, value); } public void Write(IBinaryEncoder encoder, IDiagnosticInfo value) { _encoder.Write(this, value); } public void Write(IBinaryEncoder encoder, IExpandedNodeId value) { _encoder.Write(this, value); } public void Write(IBinaryEncoder encoder, IExtensionObject value) { _encoder.Write(this, value); } public void Write(IBinaryEncoder encoder, ILocalizedText value) { Assert.AreSame(this, encoder); _encoder.Write(this, value); } public void Write(IBinaryEncoder encoder, INodeId value) { Assert.AreSame(this, encoder); _encoder.Write(this, value); } public void Write(IBinaryEncoder encoder, IQualifiedName value) { Assert.AreSame(this, encoder); _encoder.Write(this, value); } public void Write(IBinaryEncoder encoder, XmlElement value) { Assert.AreSame(this, encoder); _encoder.Write(this, value); } public void Write(IBinaryEncoder encoder, IStatusCode value) { Assert.AreSame(this, encoder); _encoder.Write(this, value); } public void Write(IBinaryEncoder encoder, IVariant value) { Assert.AreSame(this, encoder); _encoder.Write(this, value); } public void Write(IBinaryEncoder encoder, Guid value) { Assert.AreSame(this, encoder); _encoder.Write(this, value); } public void Write(IBinaryEncoder encoder, string value) { Assert.AreSame(this, encoder); _encoder.Write(this, value); } public void WriteArray(IBinaryEncoder encoder, Array value, Action writeValue, BuiltInType builtInType) { throw new NotImplementedException(); } #endregion #region private IUAEncoder _encoder = new Helpers.UABinaryEncoderImplementation(); #endregion } private class Variant : IVariant { public UATypeInfo UATypeInfo { get; set; } public object Value { get; set; } } private static void WriteArrayOneDimension(int rank) { byte[] _EncodedValue = null; using (MemoryStream _stream = new MemoryStream()) using (TestBinaryWriter _buffer = new TestBinaryWriter(_stream)) { Assert.IsNotNull(_buffer); Int32[] _value = new Int32[] { 0, 1, 2, 3, 4 }; Variant _variant = new Variant { UATypeInfo = new UATypeInfo(BuiltInType.Int32, rank, new int[] { _value.Length }), Value = _value }; _buffer.Write(_buffer, _variant); _buffer.Close(); _EncodedValue = _stream.ToArray(); } Assert.IsNotNull(_EncodedValue); string _EncodedValueString = String.Join(", ", _EncodedValue); string _expectedString = "134, 5, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0"; Assert.AreEqual(_expectedString, _EncodedValueString); Assert.AreEqual(25, _EncodedValue.Length); Assert.AreEqual(0, _EncodedValue[5]); Assert.AreEqual(1, _EncodedValue[9]); Assert.AreEqual(2, _EncodedValue[13]); Assert.AreEqual(3, _EncodedValue[17]); Assert.AreEqual(4, _EncodedValue[21]); } #endregion } } ================================================ FILE: Networking/Tests/SemanticDatalUnitTest/Writers.cd ================================================  AIAAgAAAACAIAAARAAAgAgAAQAAAAgAAAAAABAQAAEA= MessageWriterTestClass.cs ================================================ FILE: Networking/Tests/SemanticDatalUnitTest/app.config ================================================  ================================================ FILE: Networking/Tests/SemanticDatalUnitTest/packages.config ================================================  ================================================ FILE: Networking/Tests/UDPMessageHandler.UnitTest/BinaryUDPPackageReaderTestClass.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using Microsoft.VisualStudio.TestTools.UnitTesting; using System; using System.Net; using System.Net.Sockets; using System.Threading; using UAOOI.Networking.UDPMessageHandler.Configuration; namespace UAOOI.Networking.UDPMessageHandler.UnitTest { [TestClass] public class BinaryUDPPackageReaderTestClass { #region TestMethod [TestMethod] [TestCategory("ReferenceApplication_BinaryUDPPackageReaderTestClass")] public void CreatorTestMethod() { using (BinaryUDPPackageReader _reader1 = new BinaryUDPPackageReader(LocalUDPConfiguration.GetReaderConfiguration())) { Assert.IsNotNull(_reader1); _reader1.State.Enable(); Assert.IsNotNull(_reader1.MulticastGroup); } using (BinaryUDPPackageReader _reader1 = new BinaryUDPPackageReader(LocalUDPConfiguration.GetReaderConfiguration())) { Assert.IsNotNull(_reader1); _reader1.State.Enable(); } } [TestMethod] [TestCategory("ReferenceApplication_BinaryUDPPackageReaderTestClass")] public void ExclusiveAddressUseTrueTestMethod() { bool _ExclusiveAddressUse = true; using (BinaryUDPPackageReader _reader1 = new BinaryUDPPackageReader(LocalUDPConfiguration.GetReaderConfiguration())) { Assert.IsNotNull(_reader1); _reader1.ReuseAddress = _ExclusiveAddressUse; _reader1.State.Enable(); using (BinaryUDPPackageReader _reader2 = new BinaryUDPPackageReader(LocalUDPConfiguration.GetReaderConfiguration())) { Assert.IsNotNull(_reader2); _reader2.ReuseAddress = _ExclusiveAddressUse; _reader2.State.Enable(); } } } [TestMethod] [TestCategory("ReferenceApplication_BinaryUDPPackageReaderTestClass")] [ExpectedException(typeof(SocketException))] public void ExclusiveAddressUseFalseTestMethod() { bool _ExclusiveAddressUse = false; using (BinaryUDPPackageReader _reader1 = new BinaryUDPPackageReader(LocalUDPConfiguration.GetReaderConfiguration())) { _reader1.ReuseAddress = _ExclusiveAddressUse; _reader1.State.Enable(); using (BinaryUDPPackageReader _reader2 = new BinaryUDPPackageReader(LocalUDPConfiguration.GetReaderConfiguration())) { _reader2.ReuseAddress = _ExclusiveAddressUse; _reader2.State.Enable(); } } } [TestMethod] [TestCategory("ReferenceApplication_BinaryUDPPackageReaderTestClass")] [ExpectedException(typeof(InvalidOperationException))] public void ExclusiveAddressOperationalTestMethod() { bool _ExclusiveAddressUse = true; using (BinaryUDPPackageReader _reader1 = new BinaryUDPPackageReader(LocalUDPConfiguration.GetReaderConfiguration())) { _reader1.ReuseAddress = _ExclusiveAddressUse; _reader1.State.Enable(); _reader1.ReuseAddress = _ExclusiveAddressUse; } } [TestMethod] [TestCategory("ReferenceApplication_BinaryUDPPackageReaderTestClass")] [ExpectedException(typeof(InvalidOperationException))] public void ExclusiveMulticastGroupTestMethod() { using (BinaryUDPPackageReader _reader1 = new BinaryUDPPackageReader(LocalUDPConfiguration.GetReaderConfiguration())) { try { _reader1.State.Enable(); Thread.Sleep(200); } catch (Exception _ex) { Assert.IsNotNull(_ex); Assert.Fail(); } _reader1.MulticastGroup = IPAddress.Parse("239.0.0.1"); } } #endregion #region test instrumentation private static class LocalUDPConfiguration { internal static UDPReaderConfiguration GetReaderConfiguration() { bool _ExclusiveAddressUse = true; int UDPPortNumber = 4840; bool JoinMulticastGroup = true; string DefaultMulticastGroup = "239.255.255.1"; return UDPReaderConfiguration.Parse($"{UDPPortNumber},{JoinMulticastGroup},{DefaultMulticastGroup},{_ExclusiveAddressUse}"); } } #endregion } } ================================================ FILE: Networking/Tests/UDPMessageHandler.UnitTest/Configuration/IPAddressValidationRuleUnitTest.cs ================================================  using System; using System.Net; using System.Net.Sockets; using Microsoft.VisualStudio.TestTools.UnitTesting; using UAOOI.Networking.UDPMessageHandler.Configuration; namespace UAOOI.Networking.UDPMessageHandler.UnitTest.Configuration { [TestClass] public class IPAddressValidationRuleUnitTest { [TestMethod] [TestCategory("ReferenceApplication_IPAddressValidationRuleUnitTest")] [ExpectedException(typeof(ArgumentNullException))] public void NullStringTestMethod() { IPAddress _res = IPAddressValidationRule.ValidateIP(null); } [TestMethod] [TestCategory("ReferenceApplication_IPAddressValidationRuleUnitTest")] public void WrongStringTestMethod() { IPAddress _res = IPAddressValidationRule.ValidateIP("123"); Assert.IsNotNull(_res); Assert.AreEqual(AddressFamily.InterNetwork, _res.AddressFamily); Assert.AreEqual("0.0.0.123", _res.ToString()); } [TestMethod] [TestCategory("ReferenceApplication_IPAddressValidationRuleUnitTest")] [ExpectedException(typeof(ArgumentOutOfRangeException))] public void WrongAddressTestMethod() { IPAddress _res = IPAddressValidationRule.ValidateIP("139.255.255.999"); } [TestMethod] [TestCategory("ReferenceApplication_IPAddressValidationRuleUnitTest")] public void ValidateMulticastTest() { IPAddress _res = IPAddressValidationRule.ValidateIP("239.255.255.1"); Assert.IsNotNull(_res); Assert.AreEqual(AddressFamily.InterNetwork, _res.AddressFamily); IPAddressValidationRule.ValidateMulticast(_res); _res = IPAddressValidationRule.ValidateIP("239.255.255.255"); Assert.IsNotNull(_res); Assert.AreEqual(AddressFamily.InterNetwork, _res.AddressFamily); IPAddressValidationRule.ValidateMulticast(_res); _res = IPAddressValidationRule.ValidateIP("224.0.0.0"); Assert.IsNotNull(_res); Assert.AreEqual(AddressFamily.InterNetwork, _res.AddressFamily); IPAddressValidationRule.ValidateMulticast(_res); } [TestMethod] [ExpectedException(typeof(ArgumentOutOfRangeException))] public void WrongMulticast240_0_0_0_TestMethod() { IPAddress _res = IPAddressValidationRule.ValidateIP("240.0.0.0"); Assert.IsNotNull(_res); Assert.AreEqual(AddressFamily.InterNetwork, _res.AddressFamily); IPAddressValidationRule.ValidateMulticast(_res); } [TestMethod] [ExpectedException(typeof(ArgumentOutOfRangeException))] public void WrongMulticast240_255_255_255_TestMethod() { IPAddress _res = IPAddressValidationRule.ValidateIP("240.255.255.255"); Assert.IsNotNull(_res); Assert.AreEqual(AddressFamily.InterNetwork, _res.AddressFamily); IPAddressValidationRule.ValidateMulticast(_res); } [TestMethod] [ExpectedException(typeof(ArgumentOutOfRangeException))] public void WrongMulticast223_0_0_0_TestMethod() { IPAddress _res = IPAddressValidationRule.ValidateIP("223.0.0.0"); Assert.IsNotNull(_res); Assert.AreEqual(AddressFamily.InterNetwork, _res.AddressFamily); IPAddressValidationRule.ValidateMulticast(_res); } } } ================================================ FILE: Networking/Tests/UDPMessageHandler.UnitTest/Configuration/UDPReaderConfigurationUnitTest.cs ================================================  using Microsoft.VisualStudio.TestTools.UnitTesting; using UAOOI.Networking.UDPMessageHandler.Configuration; namespace UAOOI.Networking.UDPMessageHandler.UnitTest.Configuration { [TestClass] public class UDPReaderConfigurationUnitTest { [TestMethod] public void UDPMulticastReaderConfigurationTest() { int UDPPortNumber = 4840; bool JoinMulticastGroup = true; string DefaultMulticastGroup = "239.255.255.1"; bool ReuseAddress = true; UDPReaderConfiguration _configuration = UDPReaderConfiguration.Parse($"{UDPPortNumber},{JoinMulticastGroup},{DefaultMulticastGroup},{ReuseAddress}"); Assert.IsNotNull(_configuration); Assert.AreEqual("4840,True,239.255.255.1,True", _configuration.ToString()); Assert.AreEqual(UDPPortNumber, _configuration.UDPPortNumber); Assert.AreEqual(DefaultMulticastGroup, _configuration.DefaultMulticastGroup.ToString()); Assert.AreEqual(ReuseAddress, _configuration.ReuseAddress); } [TestMethod] public void UDPReaderConfigurationTest() { int UDPPortNumber = 4840; bool JoinMulticastGroup = false; string DefaultMulticastGroup = "239.255.255.1"; bool ReuseAddress = true; UDPReaderConfiguration _configuration = UDPReaderConfiguration.Parse($"{UDPPortNumber},{JoinMulticastGroup},{DefaultMulticastGroup},{ReuseAddress}"); Assert.IsNotNull(_configuration); Assert.AreEqual("4840,False,,True", _configuration.ToString()); Assert.AreEqual(UDPPortNumber, _configuration.UDPPortNumber); Assert.IsNull(_configuration.DefaultMulticastGroup); Assert.AreEqual(ReuseAddress, _configuration.ReuseAddress); } } } ================================================ FILE: Networking/Tests/UDPMessageHandler.UnitTest/Configuration/UDPWriterConfigurationUnitTest.cs ================================================  using Microsoft.VisualStudio.TestTools.UnitTesting; using UAOOI.Networking.UDPMessageHandler.Configuration; namespace UAOOI.Networking.UDPMessageHandler.UnitTest.Configuration { [TestClass] public class UDPWriterConfigurationUnitTest { [TestMethod] public void UDPWriterConfigurationTest() { int UDPPortNumber = 4840; string RemoteHostName = "localhost"; UDPWriterConfiguration _configuration = UDPWriterConfiguration.Parse($"{UDPPortNumber},{RemoteHostName}"); Assert.IsNotNull(_configuration); Assert.AreEqual("4840,localhost", _configuration.ToString()); Assert.AreEqual(UDPPortNumber, _configuration.UDPPortNumber); Assert.AreEqual(RemoteHostName, _configuration.RemoteHostName); } } } ================================================ FILE: Networking/Tests/UDPMessageHandler.UnitTest/Diagnostic/UDPMessageHandlerSemanticEventSourceUnitTest.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using Microsoft.Practices.EnterpriseLibrary.SemanticLogging; using Microsoft.Practices.EnterpriseLibrary.SemanticLogging.Schema; using Microsoft.Practices.EnterpriseLibrary.SemanticLogging.Sinks; using Microsoft.VisualStudio.TestTools.UnitTesting; using System; using System.Diagnostics.Tracing; using System.IO; using System.Net; using UAOOI.Networking.UDPMessageHandler.Diagnostic; namespace UAOOI.Networking.UDPMessageHandler.UnitTest.Diagnostic { [TestClass] public class UDPMessageHandlerSemanticEventSourceUnitTest { [TestMethod] public void UDPMessageHandlerSemanticEventSourceTest() { UDPMessageHandlerSemanticEventSource _instance = UDPMessageHandlerSemanticEventSource.Log; Assert.IsNull(_instance.ConstructionException); Assert.AreEqual("UAOOI-Networking-UDPMessageHandler-Diagnostic", _instance.Name); Assert.AreEqual(EventSourceSettings.EtwManifestEventFormat, _instance.Settings); } [TestMethod] public void ReactiveSubscribeTest() { EventEntry _lastEvent = null; int _calls = 0; ObservableEventListener _listener = new ObservableEventListener(); IDisposable subscription = _listener.Subscribe(x => { _calls++; _lastEvent = x; }); using (SinkSubscription _sinkSubscription = new SinkSubscription(subscription, _listener)) { Assert.IsNotNull(_sinkSubscription.Sink); UDPMessageHandlerSemanticEventSource _log = UDPMessageHandlerSemanticEventSource.Log; _sinkSubscription.Sink.EnableEvents(_log, EventLevel.LogAlways, Keywords.All); Assert.IsNull(_lastEvent); _log.ReceivedMessageContent(new IPEndPoint(new IPAddress(new byte[] { 192, 168, 0, 0 }), 25), 100, new byte[] { 1, 2, 3, 4 }); Assert.AreEqual(1, _calls); Assert.IsNotNull(_lastEvent); //_lastEvent content Assert.AreEqual(5, _lastEvent.EventId); Assert.AreEqual(Guid.Empty, _lastEvent.ActivityId); string _message = "Received message: 192.168.0.0:25 [100]: 1,2,3,4"; Assert.AreEqual(_message, _lastEvent.FormattedMessage, _lastEvent.FormattedMessage); Assert.AreEqual("System.Collections.ObjectModel.ReadOnlyCollection`1[System.Object]", _lastEvent.Payload.ToString(), _lastEvent.Payload.ToString()); Assert.AreEqual(1, _lastEvent.Payload.Count); Assert.IsInstanceOfType(_lastEvent.Payload[0], typeof(String)); Assert.AreEqual("192.168.0.0:25 [100]: 1,2,3,4", _lastEvent.Payload[0].ToString()); Assert.AreEqual("payload0", _lastEvent.Schema.Payload[0]); Assert.AreEqual("Info", _lastEvent.Schema.OpcodeName); Assert.AreEqual(EventOpcode.Info, _lastEvent.Schema.Opcode); Assert.AreEqual("Consumer", _lastEvent.Schema.TaskName); Assert.AreEqual(UDPMessageHandlerSemanticEventSource.Tasks.Consumer, _lastEvent.Schema.Task); } } [TestMethod] public void GetIMessageHandlerTest() { EventEntry _lastEvent = null; int _calls = 0; ObservableEventListener _listener = new ObservableEventListener(); IDisposable subscription = _listener.Subscribe(x => { _calls++; _lastEvent = x; }); using (SinkSubscription _sinkSubscription = new SinkSubscription(subscription, _listener)) { Assert.IsNotNull(_sinkSubscription.Sink); UDPMessageHandlerSemanticEventSource _log = UDPMessageHandlerSemanticEventSource.Log; _sinkSubscription.Sink.EnableEvents(_log, EventLevel.LogAlways, Keywords.All); Assert.IsNull(_lastEvent); _log.GetIMessageHandler("NameOfIMessageHandlerMethod"); Assert.AreEqual(1, _calls); Assert.IsNotNull(_lastEvent); //_lastEvent content Assert.AreEqual(2, _lastEvent.EventId); Assert.AreEqual(Guid.Empty, _lastEvent.ActivityId); string _message = "The IMessageHandlerFactory.NameOfIMessageHandlerMethod method has been called."; Assert.AreEqual(_message, _lastEvent.FormattedMessage, _lastEvent.FormattedMessage); //schema EventSchema _Schema = _lastEvent.Schema; Assert.AreEqual("CodeBehaviorStart", _Schema.EventName); Assert.AreEqual(2, _Schema.Id); ////Assert.IsTrue((_Schema.Keywords & UDPMessageHandlerSemanticEventSource.Keywords.Diagnostic) > 0); //Assert.AreEqual("PackageContent", _Schema.KeywordsDescription); Assert.AreEqual(EventLevel.Informational, _Schema.Level); Assert.AreEqual("Start", _Schema.OpcodeName); Assert.AreEqual(EventOpcode.Start, _Schema.Opcode); Assert.AreEqual(new Guid("84C6B563-8282-47CB-9111-7B29D8B43E23"), _Schema.ProviderId); Assert.AreEqual("UAOOI-Networking-UDPMessageHandler-Diagnostic", _Schema.ProviderName); Assert.AreEqual("CodeBehavior", _Schema.TaskName); Assert.AreEqual(UDPMessageHandlerSemanticEventSource.Tasks.CodeBehavior, _Schema.Task); Assert.AreEqual(0, _Schema.Version); //Payload Assert.AreEqual("System.Collections.ObjectModel.ReadOnlyCollection`1[System.Object]", _lastEvent.Payload.ToString(), _lastEvent.Payload.ToString()); Assert.AreEqual(1, _lastEvent.Payload.Count); Assert.IsInstanceOfType(_lastEvent.Payload[0], typeof(String)); Assert.AreEqual("NameOfIMessageHandlerMethod", (string)_lastEvent.Payload[0]); Assert.AreEqual("iMessageHandlerName", _lastEvent.Schema.Payload[0]); } } [TestMethod] public void JoiningMulticastGroupTest() { EventEntry _lastEvent = null; int _calls = 0; ObservableEventListener _listener = new ObservableEventListener(); IDisposable subscription = _listener.Subscribe(x => { _calls++; _lastEvent = x; }); using (SinkSubscription _sinkSubscription = new SinkSubscription(subscription, _listener)) { Assert.IsNotNull(_sinkSubscription.Sink); UDPMessageHandlerSemanticEventSource _log = UDPMessageHandlerSemanticEventSource.Log; _sinkSubscription.Sink.EnableEvents(_log, EventLevel.LogAlways, Keywords.All); Assert.IsNull(_lastEvent); _log.JoiningMulticastGroup(new IPAddress(new byte[] { 192, 168, 0, 0 })); Assert.AreEqual(1, _calls); Assert.IsNotNull(_lastEvent); //_lastEvent content Assert.AreEqual(7, _lastEvent.EventId); Assert.AreEqual(Guid.Empty, _lastEvent.ActivityId); string _message = "Joining the multicast group: 192.168.0.0"; Assert.AreEqual(_message, _lastEvent.FormattedMessage, _lastEvent.FormattedMessage); //schema EventSchema _Schema = _lastEvent.Schema; Assert.AreEqual("StackStart", _Schema.EventName); Assert.AreEqual(7, _Schema.Id); ////Assert.IsTrue((_Schema.Keywords & UDPMessageHandlerSemanticEventSource.Keywords.Diagnostic) > 0); //Assert.AreEqual("PackageContent", _Schema.KeywordsDescription); Assert.AreEqual(EventLevel.Informational, _Schema.Level); Assert.AreEqual("Start", _Schema.OpcodeName); Assert.AreEqual(EventOpcode.Start, _Schema.Opcode); Assert.AreEqual(new Guid("84C6B563-8282-47CB-9111-7B29D8B43E23"), _Schema.ProviderId); Assert.AreEqual("UAOOI-Networking-UDPMessageHandler-Diagnostic", _Schema.ProviderName); Assert.AreEqual("Stack", _Schema.TaskName); Assert.AreEqual(UDPMessageHandlerSemanticEventSource.Tasks.Stack, _Schema.Task); Assert.AreEqual(0, _Schema.Version); //Payload Assert.AreEqual("System.Collections.ObjectModel.ReadOnlyCollection`1[System.Object]", _lastEvent.Payload.ToString(), _lastEvent.Payload.ToString()); Assert.AreEqual(1, _lastEvent.Payload.Count); Assert.IsInstanceOfType(_lastEvent.Payload[0], typeof(String)); Assert.AreEqual("192.168.0.0", (string)_lastEvent.Payload[0]); Assert.AreEqual("multicastGroup", _lastEvent.Schema.Payload[0]); } } [TestMethod] public void LogFailure2LogToFlatFileTest() { string _filePath = $"{nameof(LogFailure2LogToFlatFileTest)}.log"; FileInfo _logFile = new FileInfo(_filePath); if (_logFile.Exists) _logFile.Delete(); MessageHandlerFactory _factory = new MessageHandlerFactory(); ObservableEventListener _listener = new ObservableEventListener(); UDPMessageHandlerSemanticEventSource _log = UDPMessageHandlerSemanticEventSource.Log; _listener.EnableEvents(_log, EventLevel.LogAlways, Keywords.All); SinkSubscription _FlatFileSink = _listener.LogToFlatFile(_filePath); _logFile.Refresh(); Assert.IsTrue(_logFile.Exists); Assert.AreEqual(0, _logFile.Length); _log.Failure(nameof(UDPMessageHandlerSemanticEventSourceUnitTest), nameof(LogFailure2LogToFlatFileTest), "LogFailure"); _FlatFileSink.Sink.FlushAsync(); _logFile.Refresh(); Assert.IsTrue(_logFile.Length > 100); _FlatFileSink.Dispose(); } } } ================================================ FILE: Networking/Tests/UDPMessageHandler.UnitTest/Networking.UDPMessageHandler.UnitTest.csproj ================================================  Debug AnyCPU {ECF931DE-F5F3-4752-AA1B-847F7ED414D1} Library Properties UAOOI.Networking.UDPMessageHandler.UnitTest UAOOI.Networking.UDPMessageHandler.UnitTest v4.7.2 512 {3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} 15.0 $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) $(ProgramFiles)\Common Files\microsoft shared\VSTT\$(VisualStudioVersion)\UITestExtensionPackages False UnitTest true full false bin\Debug\ DEBUG;TRACE prompt 4 IDE0001,IDE0002,IDE0003 pdbonly true bin\Release\ TRACE prompt 4 true OPCUAOOIKey.snk ..\..\..\packages\CommonServiceLocator.2.0.6\lib\net47\CommonServiceLocator.dll ..\..\..\packages\EnterpriseLibrary.SemanticLogging.2.0.1406.1\lib\net45\Microsoft.Practices.EnterpriseLibrary.SemanticLogging.dll ..\..\..\packages\EnterpriseLibrary.SemanticLogging.TextFile.2.0.1406.1\lib\net45\Microsoft.Practices.EnterpriseLibrary.SemanticLogging.TextFile.dll ..\..\..\packages\MSTest.TestFramework.2.2.10\lib\net45\Microsoft.VisualStudio.TestPlatform.TestFramework.dll ..\..\..\packages\MSTest.TestFramework.2.2.10\lib\net45\Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions.dll ..\..\..\packages\Newtonsoft.Json.13.0.1\lib\net45\Newtonsoft.Json.dll ..\..\..\packages\System.Diagnostics.TraceSource.4.3.0\lib\net46\System.Diagnostics.TraceSource.dll True True ..\..\..\packages\System.Reactive.5.0.0\lib\net472\System.Reactive.dll ..\..\..\packages\System.Reactive.Core.5.0.0\lib\net472\System.Reactive.Core.dll ..\..\..\packages\System.Reactive.Interfaces.5.0.0\lib\net472\System.Reactive.Interfaces.dll ..\..\..\packages\System.Runtime.CompilerServices.Unsafe.6.0.0\lib\net461\System.Runtime.CompilerServices.Unsafe.dll ..\..\..\packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll ..\..\..\packages\System.ValueTuple.4.5.0\lib\net47\System.ValueTuple.dll True True AssemblyInfo.tt {afcca7c9-47fe-4fb6-935e-12d686eec58f} Networking.Core {d2eb89f9-321e-46e4-ba79-679138b82b23} Networking.UDPMessageHandler TextTemplatingFileGenerator AssemblyInfo.cs This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. ================================================ FILE: Networking/Tests/UDPMessageHandler.UnitTest/Properties/AssemblyInfo.cs ================================================ //_______________________________________________________________ // Title : Assembly info for: UAOOI.Networking.UDPMessageHandler.UnitTest // System : Microsoft VisualStudio 2017 / C# // // Copyright (C) 2022 Mariusz Postol LODZ POLAND // +48 608 619 899 // mpostol@cas.eu // https://github.com/mpostol/OPC-UA-OOI //_______________________________________________________________ using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; [assembly: AssemblyTitle("UAOOI.Networking.UDPMessageHandler.UnitTest")] [assembly: AssemblyDescription("Object Oriented Internet: UDP IMessageHandlerFactory Implementation Unit Test")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("Mariusz Postol")] [assembly: AssemblyProduct("Object Oriented Internet")] [assembly: AssemblyCopyright("Copyright (C) 2022 Mariusz Postol LODZ POLAND")] [assembly: AssemblyTrademark("Object Oriented Internet")] [assembly: AssemblyCulture("")] [assembly: ComVisible(false)] [assembly: Guid("ecf931de-f5f3-4752-aa1b-847f7ed414d1")] [assembly: AssemblyVersion("4.0.2.*")] [assembly: AssemblyFileVersion("4.0.2")] ================================================ FILE: Networking/Tests/UDPMessageHandler.UnitTest/Properties/AssemblyInfo.tt ================================================ <#@ template debug="false" hostspecific="false" language="C#" #> <#@ output extension=".cs" #> //_______________________________________________________________ // Title : Assembly info for: <#=m_AssemblyTitle#> // System : Microsoft VisualStudio 2017 / C# // // <#=AssemblyCopyright#> // <#=Phone#> // <#=Email#> // <#=Url#> //_______________________________________________________________ using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; [assembly: AssemblyTitle("<#=m_AssemblyTitle#>")] [assembly: AssemblyDescription("<#=NetworkingDataProduct#>: UDP IMessageHandlerFactory Implementation Unit Test")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("<#=AssemblyCompany#>")] [assembly: AssemblyProduct("<#=NetworkingDataProduct#>")] [assembly: AssemblyCopyright("<#=AssemblyCopyright#>")] [assembly: AssemblyTrademark("<#=ProductTrademark#>")] [assembly: AssemblyCulture("")] [assembly: ComVisible(false)] [assembly: Guid("ecf931de-f5f3-4752-aa1b-847f7ed414d1")] [assembly: AssemblyVersion("<#= NetworkingDataVersion #>.*")] [assembly: AssemblyFileVersion("<#= NetworkingDataVersion #>")] <#@ include file = "..\..\..\..\CommonResources\T4Definitions\Model.t4" #> <#+ string m_AssemblyTitle = "UAOOI.Networking.UDPMessageHandler.UnitTest"; #> ================================================ FILE: Networking/Tests/UDPMessageHandler.UnitTest/app.config ================================================  ================================================ FILE: Networking/Tests/UDPMessageHandler.UnitTest/packages.config ================================================  ================================================ FILE: Networking/UDPMessageHandler/BinaryUDPPackageReader.cs ================================================ //____________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //____________________________________________________________________________ using System; using System.Diagnostics; using System.Net; using System.Net.NetworkInformation; using System.Net.Sockets; using UAOOI.Networking.Core; using UAOOI.Networking.UDPMessageHandler.Configuration; using UAOOI.Networking.UDPMessageHandler.Diagnostic; namespace UAOOI.Networking.UDPMessageHandler { /// /// Class BinaryUDPPackageReader - custom implementation of the using UDP protocol.. /// This class cannot be inherited. /// internal sealed class BinaryUDPPackageReader : IBinaryDataTransferGraphReceiver { #region creator /// /// Initializes a new instance of the class. /// /// The configuration of the reader. internal BinaryUDPPackageReader(UDPReaderConfiguration configuration) { UDPMessageHandlerSemanticEventSource.Log.EnteringMethod(nameof(BinaryUDPPackageReader), $"{nameof(BinaryUDPPackageReader)}({configuration.ToString()})"); State = new MyState(this); m_UDPPort = configuration.UDPPortNumber; MulticastGroup = configuration.DefaultMulticastGroup; ReuseAddress = configuration.ReuseAddress; } #endregion #region IBinaryDataTransferObjectReceiver /// /// Gets or sets the state. /// /// The state. public IAssociationState State { get; set; } public void AttachToNetwork() { UDPMessageHandlerSemanticEventSource.Log.EnteringMethod(nameof(BinaryUDPPackageReader), nameof(AttachToNetwork)); Debug.Assert(HandlerState.Operational != State.State); } public event EventHandler OnNewFrameArrived; #endregion #region API internal bool ReuseAddress { get => m_ReuseAddress; set { if (State.State == HandlerState.Operational) { string _msg = $"{nameof(ReuseAddress)} cannot be set in the Operational state"; UDPMessageHandlerSemanticEventSource.Log.Failure(nameof(BinaryUDPPackageReader), nameof(ReuseAddress), _msg); throw new InvalidOperationException(_msg); } m_ReuseAddress = value; } } internal IPAddress MulticastGroup { get => m_MulticastGroup; set { if (State.State == HandlerState.Operational) { string _msg = $"{nameof(MulticastGroup)} cannot be set in the Operational state"; UDPMessageHandlerSemanticEventSource.Log.Failure(nameof(BinaryUDPPackageReader), nameof(ReuseAddress), _msg); throw new InvalidOperationException(_msg); } m_MulticastGroup = value; } } #endregion #region override public override string ToString() { string _multicastGroupMessage = m_MulticastGroup == null ? $"multicast off" : $"joined multicast: {m_MulticastGroup}"; string _reuseAddressMessage = m_ReuseAddress ? "Address is reused" : "Address is not reused."; return $"BinaryUDPPackageReader UPD Port: {m_UDPPort} {_multicastGroupMessage} {_reuseAddressMessage}"; } #endregion #region IDispose /// /// Releases unmanaged and - optionally - managed resources. /// public void Dispose() { UDPMessageHandlerSemanticEventSource.Log.EnteringMethod(nameof(BinaryUDPPackageReader), nameof(Dispose)); if (Client == null) return; UDPMessageHandlerSemanticEventSource.Log.EnteringMethod(nameof(BinaryUDPPackageReader), nameof(Client.Close)); Client.Close(); Client = null; m_MulticastGroup = null; } #endregion #region private //types private class MyState : IAssociationState { #region IAssociationState /// /// Initializes a new instance of the class. /// public MyState(BinaryUDPPackageReader parent) { State = HandlerState.Disabled; m_Parent = parent; } /// /// Gets the current state of the instance. /// /// The state of type. public HandlerState State { get; private set; } /// /// This method is used to enable a configured object. If a normal operation is possible, the state changes into state. /// In the case of an error situation, the state changes into . The operation is rejected if the current is not . /// /// Wrong state public void Enable() { if (State != HandlerState.Disabled) throw new ArgumentException("Wrong state"); State = HandlerState.Operational; m_Parent.OnEnable(); } /// /// This method is used to disable an already enabled object. /// This method call shall be rejected if the current State is or . /// /// Wrong state public void Disable() { if (State != HandlerState.Operational) throw new ArgumentException("Wrong state"); State = HandlerState.Disabled; m_Parent.Dispose(); } #endregion private BinaryUDPPackageReader m_Parent; } //vars private UdpClient Client { get; set; } private readonly int m_UDPPort; private bool m_ReuseAddress = true; private IPAddress m_MulticastGroup = null; private readonly IPGlobalProperties m_Properties = IPGlobalProperties.GetIPGlobalProperties(); //methods /// /// Implements for UDP begin receive. /// /// The asynchronous result. private void ReceiveAsyncCallback(IAsyncResult asyncResult) { UDPMessageHandlerSemanticEventSource.Log.EnteringMethod(nameof(BinaryUDPPackageReader), nameof(ReceiveAsyncCallback)); //if (!asyncResult.IsCompleted) // return; try { UdpClient _client = (UdpClient)asyncResult.AsyncState; IPEndPoint _UEndPoint = null; byte[] _receiveBytes = _client.EndReceive(asyncResult, ref _UEndPoint); int _length = _receiveBytes == null ? -1 : _receiveBytes.Length; UDPMessageHandlerSemanticEventSource.Log.ReceivedMessageContent(_UEndPoint, _length, _receiveBytes); OnNewFrameArrived?.Invoke(this, _receiveBytes); Client.BeginReceive(new AsyncCallback(ReceiveAsyncCallback), Client); } catch (Exception _ex) { UDPMessageHandlerSemanticEventSource.Log.LogException(nameof(BinaryUDPPackageReader), nameof(ReceiveAsyncCallback), _ex); } } private void OnEnable() { UDPMessageHandlerSemanticEventSource.Log.EnteringMethod(nameof(BinaryUDPPackageReader), nameof(OnEnable)); Client = new UdpClient(); Client.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, ReuseAddress); Client.ExclusiveAddressUse = !ReuseAddress; IPEndPoint _ep = new IPEndPoint(IPAddress.Any, m_UDPPort); Client.Client.Bind(_ep); if (m_MulticastGroup != null) { UDPMessageHandlerSemanticEventSource.Log.JoiningMulticastGroup(m_MulticastGroup); Client.JoinMulticastGroup(m_MulticastGroup); } UDPMessageHandlerSemanticEventSource.Log.EnteringMethod(nameof(BinaryUDPPackageReader), nameof(Client.BeginReceive)); Client.BeginReceive(new AsyncCallback(ReceiveAsyncCallback), Client); } #endregion } } ================================================ FILE: Networking/UDPMessageHandler/BinaryUDPPackageWriter.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System; using System.Diagnostics; using System.Linq; using System.Net; using System.Net.Sockets; using UAOOI.Networking.Core; using UAOOI.Networking.UDPMessageHandler.Diagnostic; namespace UAOOI.Networking.UDPMessageHandler { /// /// Class BinaryUDPPackageWriter - custom implementation of the using UDP protocol. /// internal sealed class BinaryUDPPackageWriter : IBinaryDataTransferGraphSender { #region constructor internal BinaryUDPPackageWriter(string remoteHostName, int remotePort) { UDPMessageHandlerSemanticEventSource.Log.EnteringMethod(nameof(BinaryUDPPackageWriter), $"{nameof(BinaryUDPPackageWriter)}(RemoteHostName={remoteHostName},RemotePort={remotePort})"); State = new MyState(this); m_RemoteHostName = remoteHostName; m_remotePort = remotePort; } #endregion #region BinaryMessageEncoder public IAssociationState State { get; set; } public void AttachToNetwork() { UDPMessageHandlerSemanticEventSource.Log.EnteringMethod(nameof(BinaryUDPPackageWriter), nameof(AttachToNetwork)); } public void SendFrame(byte[] buffer) { lock (this) { UDPMessageHandlerSemanticEventSource.Log.EnteringMethod(nameof(BinaryUDPPackageWriter), $"{nameof(SendFrame)} buffer.Length = {buffer.Length}"); UdpClient _UdpClient = m_UdpClient; if (_UdpClient == null) return; try { IPEndPoint _IPEndPoint = new IPEndPoint(m_IPAddresses, m_remotePort); UDPMessageHandlerSemanticEventSource.Log.SentMessageContent(_IPEndPoint, buffer.Length, buffer); _UdpClient.Send(buffer, buffer.Length, _IPEndPoint); } catch (Exception _e) { UDPMessageHandlerSemanticEventSource.Log.LogException(nameof(BinaryUDPPackageWriter), nameof(SendFrame), _e); } } } /// /// Releases unmanaged and - optionally - managed resources. /// /// true to release both managed and unmanaged resources; false to release only unmanaged resources. public void Dispose() { lock (this) { UDPMessageHandlerSemanticEventSource.Log.EnteringMethod(nameof(BinaryUDPPackageWriter), $"Entering {nameof(BinaryUDPPackageWriter)}.{nameof(Dispose)} method"); if (m_UdpClient == null) return; UDPMessageHandlerSemanticEventSource.Log.EnteringMethod(nameof(BinaryUDPPackageWriter), nameof(m_UdpClient.Close)); m_UdpClient.Close(); m_UdpClient = null; } } #endregion #region private //types private class MyState : IAssociationState { #region IAssociationState /// /// Initializes a new instance of the class. /// public MyState(BinaryUDPPackageWriter parent) { State = HandlerState.Disabled; m_Parent = parent; } /// /// Gets the current state of the instance. /// /// The state of type. public HandlerState State { get; private set; } /// /// This method is used to enable a configured object. If a normal operation is possible, the state changes into state. /// In the case of an error situation, the state changes into . The operation is rejected if the current is not . /// /// Wrong state public void Enable() { if (State != HandlerState.Disabled) throw new ArgumentException("Wrong state"); State = HandlerState.Operational; m_Parent.OnEnable(); } /// /// This method is used to disable an already enabled object. /// This method call shall be rejected if the current State is or . /// /// Wrong state public void Disable() { if (State != HandlerState.Operational) throw new ArgumentException("Wrong state"); State = HandlerState.Disabled; m_Parent.Dispose(); } #endregion private BinaryUDPPackageWriter m_Parent; } //vars private UdpClient m_UdpClient; private IPAddress m_IPAddresses; private readonly int m_remotePort = 4800; private readonly string m_RemoteHostName; //Methods private void OnEnable() { UDPMessageHandlerSemanticEventSource.Log.EnteringMethod(nameof(BinaryUDPPackageWriter), nameof(OnEnable)); Debug.Assert(m_UdpClient == null); // Get DNS host information. IPAddress[] _remoteHostAddresses = Dns.GetHostAddresses(m_RemoteHostName); // Get the DNS IP addresses associated with the host. // Get first IPAddress in list returned by the DNS. m_IPAddresses = _remoteHostAddresses.Where(x => x.AddressFamily == AddressFamily.InterNetwork).First(); Debug.Assert(m_IPAddresses != null); UDPMessageHandlerSemanticEventSource.Log.EnteringMethod(nameof(BinaryUDPPackageWriter), $"{nameof(UdpClient)} m_RemoteHostName: {m_RemoteHostName} Ip : {m_IPAddresses.ToString()}"); m_UdpClient = new UdpClient(); } #endregion } } ================================================ FILE: Networking/UDPMessageHandler/Configuration/IPAddressValidationRule.cs ================================================  using System; using System.Net; namespace UAOOI.Networking.UDPMessageHandler.Configuration { internal static class IPAddressValidationRule { internal static IPAddress ValidateIP (string value) { if (String.IsNullOrEmpty(value)) throw new ArgumentNullException($"The string representing IP Address cannot be empty"); IPAddress _address; if (!IPAddress.TryParse(value, out _address)) throw new ArgumentOutOfRangeException($"The string <{value}> doesn't represent IP Address"); if (_address.AddressFamily != System.Net.Sockets.AddressFamily.InterNetwork) throw new ArgumentOutOfRangeException($"The address family {_address.AddressFamily} is not supported"); return _address; } internal static void ValidateMulticast(IPAddress address) { try { byte[] _bytesArray = address.GetAddressBytes(); if (_bytesArray.Length != 4) throw new ArgumentOutOfRangeException($"The address length {_bytesArray.Length} is not expected"); if (_bytesArray[0] > 239 || _bytesArray[0] < 224) throw new ArgumentOutOfRangeException($"The address {address} is outside the IP V4 multicast range 224.0.0.0 - 239.255.255.255"); } catch (Exception _ex) { throw new ArgumentOutOfRangeException($"Validation error: {_ex.GetType().Name}: {_ex.Message}"); } } } } ================================================ FILE: Networking/UDPMessageHandler/Configuration/UDPReaderConfiguration.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2020, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System; using System.Net; using UAOOI.Networking.UDPMessageHandler.Diagnostic; namespace UAOOI.Networking.UDPMessageHandler.Configuration { /// /// Class UDPReaderConfiguration encapsulates configuration for . /// internal class UDPReaderConfiguration { #region API internal static UDPReaderConfiguration Parse(string configuration) { try { string[] _parameters = configuration.Split(','); if (_parameters.Length != 4) throw new ArgumentException($"Wrong number of parameter {_parameters.Length} but expected 4"); UDPReaderConfiguration _ret = new UDPReaderConfiguration { UDPPortNumber = int.Parse(_parameters[0]), JoinMulticastGroup = bool.Parse(_parameters[1]) }; if (_ret.JoinMulticastGroup) _ret.DefaultMulticastGroup = IPAddressValidationRule.ValidateIP(_parameters[2]); _ret.ReuseAddress = bool.Parse(_parameters[3]); return _ret; } catch (Exception _ex) { UDPMessageHandlerSemanticEventSource.Log.LogException(nameof(UDPReaderConfiguration), nameof(Parse), _ex); throw; } } internal int UDPPortNumber { get; set; } internal IPAddress DefaultMulticastGroup { get; set; } = null; internal bool ReuseAddress { get; set; } #endregion API #region Object public override string ToString() { return $"{UDPPortNumber},{JoinMulticastGroup},{DefaultMulticastGroup},{ReuseAddress}"; } #endregion Object #region private private bool JoinMulticastGroup; private UDPReaderConfiguration() { } #endregion private } } ================================================ FILE: Networking/UDPMessageHandler/Configuration/UDPWriterConfiguration.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2020, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System; using UAOOI.Networking.UDPMessageHandler.Diagnostic; namespace UAOOI.Networking.UDPMessageHandler.Configuration { /// /// Class UDPWriterConfiguration encapsulates configuration for . /// internal class UDPWriterConfiguration { #region API internal static UDPWriterConfiguration Parse(string configuration) { try { string[] _parameters = configuration.Split(','); if (_parameters.Length != 2) throw new ArgumentException($"Wrong number of parameter {_parameters.Length} but expected 2"); UDPWriterConfiguration _ret = new UDPWriterConfiguration { UDPPortNumber = int.Parse(_parameters[0]), RemoteHostName = _parameters[1] }; return _ret; } catch (Exception _ex) { UDPMessageHandlerSemanticEventSource.Log.LogException(nameof(UDPWriterConfiguration), nameof(Parse), _ex); throw; } } internal int UDPPortNumber { get; set; } internal string RemoteHostName { get; set; } #endregion API #region Object public override string ToString() { return $"{UDPPortNumber},{RemoteHostName}"; } #endregion Object #region private private UDPWriterConfiguration() { } #endregion private } } ================================================ FILE: Networking/UDPMessageHandler/Diagnostic/NetworkingEventSourceProvider.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2020, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System.ComponentModel.Composition; using System.Diagnostics.Tracing; using UAOOI.Networking.Core; namespace UAOOI.Networking.UDPMessageHandler.Diagnostic { /// /// Class NetworkingEventSourceProvider - gets access to an instance of to be registered by the logging infrastructure. /// /// [Export(typeof(INetworkingEventSourceProvider))] public class NetworkingEventSourceProvider : INetworkingEventSourceProvider { /// /// Gets the part event source. /// /// Returns an instance of . public EventSource GetPartEventSource() { return UDPMessageHandlerSemanticEventSource.Log; } } } ================================================ FILE: Networking/UDPMessageHandler/Diagnostic/UDPMessageHandlerDiagnosticExtension.cs ================================================  using System; using System.Linq; using System.Net; namespace UAOOI.Networking.UDPMessageHandler.Diagnostic { internal static class UDPMessageHandlerDiagnosticExtension { internal static void ReceivedMessageContent(this UDPMessageHandlerSemanticEventSource eventSource, IPEndPoint endPoint, int length, byte[] message) { eventSource.ReceivedMessageContent(MessageContentFormat(endPoint, length, message)); } internal static void SentMessageContent(this UDPMessageHandlerSemanticEventSource eventSource, IPEndPoint endPoint, int length, byte[] message) { eventSource.SentMessageContent(MessageContentFormat(endPoint, length, message)); } internal static void JoiningMulticastGroup(this UDPMessageHandlerSemanticEventSource eventSource, IPAddress multicastGroup) { eventSource.JoiningMulticastGroup(multicastGroup.ToString()); } /// /// Logs the exception using . /// /// The event source source to be used for problem reporting. /// Name of the class. /// Name of the method. /// The exception to be reported. internal static void LogException(this UDPMessageHandlerSemanticEventSource eventSource, string className, string methodName, Exception e) { Exception _exception = e; string _innerText = "An exception has benn caught:"; while (e != null) { eventSource.Failure(className, methodName, $"{_innerText} of type {_exception.GetType().Name} capturing the message: {e.Message}"); e = e.InnerException; _innerText = "It contains inner exception:"; } } private static string MessageContentFormat(IPEndPoint endPoint, int length, byte[] message) { return ($"{endPoint.Address.ToString()}:{endPoint.Port} [{length}]: {String.Join(",", new ArraySegment(message, 0, Math.Min(message.Length, 80)).Select(x => x.ToString("X")).ToArray())}"); } } } ================================================ FILE: Networking/UDPMessageHandler/Diagnostic/UDPMessageHandlerSemanticEventSource.cs ================================================  using System.Diagnostics.Tracing; namespace UAOOI.Networking.UDPMessageHandler.Diagnostic { [EventSource(Name = "UAOOI-Networking-UDPMessageHandler-Diagnostic", Guid = "84C6B563-8282-47CB-9111-7B29D8B43E23")] public class UDPMessageHandlerSemanticEventSource : EventSource { /// /// Class Tasks. /// public class Tasks { public const EventTask Consumer = (EventTask)1; public const EventTask Producer = (EventTask)2; public const EventTask Stack = (EventTask)3; public const EventTask CodeBehavior = (EventTask)4; } /// /// Class Keywords - defines the local keywords (flags) that apply to events. /// public class Keywords { public const EventKeywords PackageContent = (EventKeywords)(1 << 1); public const EventKeywords Diagnostic = (EventKeywords)(1 << 2); public const EventKeywords Performance = (EventKeywords)(1 << 3); public const EventKeywords Settings = (EventKeywords)(1 << 4); } /// /// Gets the log - implements singleton of the . /// /// The log. internal static UDPMessageHandlerSemanticEventSource Log { get; } = new UDPMessageHandlerSemanticEventSource(); [Event(1, Message = "At {0}.{1} encountered application failure: {2}", Opcode = EventOpcode.Info, Task = Tasks.CodeBehavior, Level = EventLevel.Error, Keywords = Keywords.Diagnostic)] public void Failure(string className, string methodName, string problem) { WriteEvent(1, className, methodName, problem); } [Event(2, Message = "The IMessageHandlerFactory.{0} method has been called.", Opcode = EventOpcode.Start, Task = Tasks.CodeBehavior, Level = EventLevel.Informational)] internal void GetIMessageHandler(string iMessageHandlerName) { WriteEvent(2, iMessageHandlerName); } [Event(3, Message = "Entering method {0}.{1}", Opcode = EventOpcode.Info, Task = EventTask.None, Level = EventLevel.Verbose)] internal void EnteringMethod(string className, string methodName) { if (IsEnabled()) WriteEvent(3, className, methodName); } [Event(5, Message = "Received message: {0}", Opcode = EventOpcode.Info, Task = Tasks.Consumer, Level = EventLevel.Verbose)] internal void ReceivedMessageContent(string payload0) { WriteEvent(5, payload0); } [Event(6, Message = "Sent message: {0}", Opcode = EventOpcode.Info, Task = Tasks.Producer, Level = EventLevel.Verbose)] internal void SentMessageContent(string payload0) { WriteEvent(6, payload0); } [Event(7, Message = "Joining the multicast group: {0}", Opcode = EventOpcode.Start, Task = Tasks.Stack, Level = EventLevel.Informational)] internal void JoiningMulticastGroup(string multicastGroup) { WriteEvent(7, multicastGroup); } private UDPMessageHandlerSemanticEventSource() { } } } ================================================ FILE: Networking/UDPMessageHandler/MessageHandlerFactory.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System.ComponentModel.Composition; using UAOOI.Networking.Core; using UAOOI.Networking.UDPMessageHandler.Configuration; using UAOOI.Networking.UDPMessageHandler.Diagnostic; namespace UAOOI.Networking.UDPMessageHandler { /// /// Class - implements /// [Export(typeof(IMessageHandlerFactory))] [PartCreationPolicy(CreationPolicy.Shared)] public class MessageHandlerFactory : IMessageHandlerFactory { #region IMessageHandlerFactory /// /// Gets an instance implementing interface. /// /// The name to be used for identification of the underlying TDG transport channel. /// The configuration of the object implementing the . /// An object implementing that provides functionality supporting reading the messages from the wire. IBinaryDataTransferGraphReceiver IMessageHandlerFactory.GetBinaryDTGReceiver(string name, string configuration) { UDPMessageHandlerSemanticEventSource.Log.GetIMessageHandler($"{nameof(IMessageHandlerFactory.GetBinaryDTGReceiver)}{{ name = {name}, configuration= {configuration} }}"); UDPReaderConfiguration _configuration = UDPReaderConfiguration.Parse(configuration); BinaryUDPPackageReader _ret = new BinaryUDPPackageReader(_configuration); return _ret; } /// /// Gets an instance implementing interface. /// /// The name to be used for identification of the underlying TDG transport channel. /// The configuration of the object implementing the . /// An object implementing that provides functionality supporting sending the messages over the wire. IBinaryDataTransferGraphSender IMessageHandlerFactory.GetBinaryDTGSender(string name, string configuration ) { UDPMessageHandlerSemanticEventSource.Log.GetIMessageHandler($"{nameof(IMessageHandlerFactory.GetBinaryDTGSender)}{{ name = {name}, configuration= {configuration} }}"); UDPWriterConfiguration _configuration = UDPWriterConfiguration.Parse(configuration); BinaryUDPPackageWriter _ret = new BinaryUDPPackageWriter(_configuration.RemoteHostName, _configuration.UDPPortNumber); return _ret; } #endregion } } ================================================ FILE: Networking/UDPMessageHandler/Networking.UDPMessageHandler.csproj ================================================  netstandard2.0 true OPCUAOOIKey.snk 4.0.2 UAOOI.Networking.UDPMessageHandler OOI Reactive Networking: UDP IMessageHandlerFactory Implementation Copyright MPostol (c) 2018 Object Oriented Internet, OPC UA, CommServer, Reactive Networking. GitHub https://commsvr.gitbook.io/ooi https://github.com/mpostol/OPC-UA-OOI https://github.com/mpostol/OPC-UA-OOI/blob/master/license.md Object Oriented Internet commsvr.com MPostol 4.0.2.0 false C:\VS.git\UAOOI\OPC-UA-OOI\Networking\UDPMessageHandler\UAOOI.Networking.UDPMessageHandler.xml True True Networking.UDPMessageHandler.nuspec.tt TextTemplatingFileGenerator Networking.UDPMessageHandler.nuspec.nuspec TextTemplatingFileGenerator ================================================ FILE: Networking/UDPMessageHandler/Networking.UDPMessageHandler.nuspec.nuspec ================================================  UAOOI.Networking.UDPMessageHandler 4.0.2 Object Oriented Internet UDPMessageHandler Mariusz Postol Mariusz Postol false MIT https://github.com/mpostol/OPC-UA-OOI Logo64.PNG OOI Reactive Networking: UDP IMessageHandlerFactory Implementation UDP IMessageHandlerFactory Implementation. Copyright (C) 2022 Mariusz Postol LODZ POLAND Object Oriented Internet, OPC UA, Information Model, IoT, M2M, DOA, Maintenance release - unimportant changes. Copyright (C) 2022 Mariusz Postol LODZ POLAND ================================================ FILE: Networking/UDPMessageHandler/Networking.UDPMessageHandler.nuspec.tt ================================================ <#@ template debug="false" hostspecific="false" language="C#" #> <#@ output extension=".nuspec" #> UAOOI.Networking.UDPMessageHandler 4.0.2 <#=NetworkingDataProduct#> UDPMessageHandler <#=AssemblyCompany#> <#=Owner#> false MIT <#=Url#> Logo64.PNG OOI Reactive Networking: UDP IMessageHandlerFactory Implementation UDP IMessageHandlerFactory Implementation. <#=AssemblyCopyright#> Object Oriented Internet, OPC UA, Information Model, IoT, M2M, DOA, Maintenance release - unimportant changes. <#=AssemblyCopyright#> <#@ include file = "..\..\CommonResources\T4Definitions\Model.t4" #> ================================================ FILE: Networking/UDPMessageHandler/Properties/AssemblyInfo.cs ================================================ //_______________________________________________________________ // Title : Assembly info for: UAOOI.Networking.UDPMessageHandler // System : Microsoft VisualStudio 2017 / C# // // Copyright MPostol (c) 2018 // +48 608 619 899 // commserver@cas.eu // https://github.com/mpostol/OPC-UA-OOI //_______________________________________________________________ using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; [assembly: AssemblyTrademark("Object Oriented Internet")] [assembly: AssemblyCulture("")] [assembly: ComVisible(false)] [assembly: Guid("d2eb89f9-321e-46e4-ba79-679138b82b23")] [assembly: InternalsVisibleTo( "UAOOI.Networking.UDPMessageHandler.UnitTest, PublicKey=" + "00240000048000009400000006020000002400005253413100040000010001005b97a0972ff6b13a" + "8a9ff9c09503aea0e5e2fe29cb2275a0c0942182f4c3431814b6bc9a556d9fe0d7e7823439c1ba28" + "521f6318e4c936c4461604ef668e9686c2021571b093e1bfba071b373bc56a07a3afdc120c5313d3" + "9a935cda64b759f857ebb3db483641444a5347e1564f8ba6d4fad2f968d3caf9991a4fa6aa019ebe" )] ================================================ FILE: Networking/UDPMessageHandler/README.md ================================================ # Underlying Transport over UDP ## Motivation The main goal of this document is to provide instruction on how to expand the transport layer for OOI Networking of the `Semantic-Data` over the User Datagram Protocol (UDP) to be compliant with the specifications mentioned in the section *Normative references*. A reference implementation of the `Transport` over UDP is provided by the project [Networking.UDPMessageHandler][OOI.Networking.UDPMessageHandler]. Because intentionally the SDK is designed to use any transport protocol, a custom external component implementing UDP connectivity can be seamlessly integrated with this SDK using dependency injection concept illustrated by the following domain model: ![Figure 1. Domain Model](../../CommonResources/Media/DataManagementExternalLibraries.png) Instruction for implementers has been covered in the section *Notices for Implementer*. ## Normative References The following documents, in whole or in part, are normatively referenced in this document and are indispensable for its application. - [Internet Standard RFC 768: User Datagram Protocol (UDP)l][RFC.UDP] - [Internet Standard RFC: 791 Internet Protocol (IP)][RFC.UDP.IP] - [Internet Standard RFC 1112 Host Extensions for IP Multicasting][RFC.IPMulticasting] - [OPC Unified Architecture Specification Part 14: PubSub Release 1.04 February 06, 2018][OPC.UA.PubSub] ## Introduction ### User Datagram Protocol The User Datagram Protocol (UDP) is defined to make available a datagram mode of packet-switched computer communication in the environment of an interconnected set of computer networks. This protocol assumes that the [IP][RFC.UDP.IP] protocol is used as the underlying protocol. This protocol provides a procedure for application programs to send `Message` datagrams to other programs with a minimum of protocol mechanism. Using this protocol the messages delivery and duplicate protection are not guaranteed. The protocol is transparent for the user payload sent as the `data octets` (stream of bytes). The `Length` field in the protocol header contains the length in octets of the user datagram including the header and the `data octets`. To identify the communication parties (processes) the following information is used: - `Source Port`: - indicates the port of the sending process; - `Destination Port`: indicates the port of the ultimate destination process; `Source Port` and `Destination Port` have a meaning only within the context of a particular internet address. ### OPC UA PubSub The [OPC.UA.PubSub][OPC.UA.PubSub] offers the publish-subscribe communication pattern as an option to client-server pattern and is a consistent part of the OPC UA specifications suit. The detailed description of the [OPC.UA.PubSub][OPC.UA.PubSub] has been covered by the document [OPC Unified Architecture Part 14: PubSub Main Technology Features][README.PubSubMTF]. The specification defines the following actors: - `Publisher`: pushes messages to an underlying transport` layer. - `Subscriber`: polls messages from the underlying transport layer. The `Publisher` is the actor that pushes `NetworkMessage` structures to an underlying transport layer. It represents a certain data source, for example, a control device, a manufacturing process, a weather station, or a stock exchange. It may be also OPC UA Clients, OPC UA Servers or in general any applications that understand the syntax and semantics of the `NetworkMessage` structure. The `Subscriber` actors are the consumers of `NetworkMessage` structure, which are polled from the underlying transport layer. They may be OPC UA Clients, OPC UA Servers or in general any applications that understand the syntax and semantics of the `NetworkMessage` structure. According to the specification the `Publisher` and `Subscriber` don't have any subscriptions management functionality, namely, they follow a communication paradigm called unsolicited notification. When unsolicited notification occurs, a client receives a message that it has never requested. The `Subscriber` must use a filtering mechanism to process only messages it is interested in. Lack of subscriptions management functionality defined by the PubSub could be mitigated by applying the IP Multicast option defined by the [RFC 1112][RFC.IPMulticasting]. IP multicasting is the transmission of an IP datagram to a "host group", a set of zero or more hosts identified by a single IP destination address. A multicast datagram is delivered to all members of its destination host group with the same "best-efforts" reliability as regular unicast IP datagrams. Internetwork forwarding of IP multicast datagrams is handled by "multicast routers". It means that the router must be multicast enabled. Further discussion related to this topic is outside of the scope of this document. ## UDP Mapping ### General Requirements There must be mapping defined for: - Messages Transport: the PubSub `NetworkMessage` structure serialized as the UDP `Message` payload. - Addressing: `Source Port`/`Destination Port` and appropriate Internet address must be provided by the PubSub upper communication layer. A `Publisher` shall support all variations it allows through configuration. The required set of features is defined through profiles defined in [OPC UA Part 7: Profiles][OPC.UA.Profiles]. A `Subscriber` shall be able to process all possible `NetworkMessage` types and shall be able to skip information the `Subscriber` is not interested in. The `Subscriber` may not support all security policies. ### Messages Transport The UADP `NetworkMessage` is sent as the UDP `data octets`. It is expected that the `Subscriber` process receiving the `NetworkMessage` can process it without needing to know that it was transported via UDP. ### Addressing The syntax of the UDP transporting protocol URL has the following form: > `opc.udp://[:]` The host is either an IP address or a registered name like a host name or domain name. IP addresses can be unicast, multicast or broadcast addresses. It is the destination of the UDP datagram. The IANA registered OPC UA port for UDP communication is `4840`. This is the default and recommended port for broadcast, multicast, and unicast communication. Alternative ports may be defined. It is assumed that the IP multicasting is supported by the UDP protocol stock stack and the network infrastructure. ## Notices for Implementer The article [Reactive Networking of Semantic-Data Library](../SemanticData/README.MD) contains description covering instruction for the external UDP handling components. An example how to implement the `Transport` layer for the UDP protocol is illustrated by the project [UA Data Example Application][OOI.Networking.ReferenceApplication]. This library implements the `IMessageHandlerFactory` in the class `MessageHandlerFactory` used to create communication infrastructure for the `Consumer` and `Producer` role as well. The `JoinMulticastGroup` method subscribes the `UdpClient` to a multicast group using the specified `IPAddress`. After calling the `JoinMulticastGroup` method, the underlying `Socket` sends an Internet Group Management Protocol (IGMP) packet to the router requesting membership to the multicast group. The multicast address range is `224.0.0.0` to `239.255.255.255`. If you specify an address outside this range or if the router to which the request is made is not multicast enabled, `UdpClient` will throw a `SocketException`. Once the `UdpClient` is listed with the router as a member of the multicast group, it will be able to receive multicasted datagrams sent to the specified `IPAddress`. `Publisher` do not need to belong to a multicast group to send datagrams to a multicast IP address. To get more details visit the MSDN online documentation. [RFC.UDP]:https://tools.ietf.org/html/rfc768 [RFC.UDP.IP]:https://tools.ietf.org/html/rfc791 [RFC.IPMulticasting]:https://tools.ietf.org/html/rfc1112 [OPC.UA.PubSub]:https://opcfoundation.org/developer-tools/specifications-unified-architecture/part-14-pubsub/ [OPC.UA.Profiles]:https://opcfoundation.org/developer-tools/specifications-unified-architecture/part-7-profiles/ [README.PubSubMTF]:../SemanticData/README.PubSubMTF.md [OOI.Networking.UDPMessageHandler]:https://github.com/mpostol/OPC-UA-OOI/tree/master/Networking/UDPMessageHandler [OOI.Networking.ReferenceApplication]:https://github.com/mpostol/OPC-UA-OOI/tree/master/Networking/ReferenceApplication ================================================ FILE: Networking/UDPMessageHandler/README.nupkg.md ================================================ # Reactive Networking of Semantic-Data Underlying Transport over UDP ## Motivation The main goal of this document is to provide instruction on how to expand the transport layer for OOI Networking of the `Semantic-Data` over the User Datagram Protocol (UDP) to be compliant with the specifications mentioned in the section *Normative references*. Detailed description of this concept is covered by the document: [Reactive Networking of Semantic-Data Library][RxNetworkingSemantic-Data] A reference implementation of the `Transport` over UDP is provided by the project [Networking.UDPMessageHandler][OOI.Networking.UDPMessageHandler]. Because intentionally the SDK is designed to use any transport protocol, a custom external component implementing UDP connectivity can be seamlessly integrated with this SDK using dependency injection concept. ## Normative References The following documents, in whole or in part, are normatively referenced in this document and are indispensable for its application. - [Internet Standard RFC 768: User Datagram Protocol (UDP)l][RFC.UDP] - [Internet Standard RFC: 791 Internet Protocol (IP)][RFC.UDP.IP] - [Internet Standard RFC 1112 Host Extensions for IP Multicasting][RFC.IPMulticasting] - [OPC Unified Architecture Specification Part 14: PubSub Release 1.04 February 06, 2018][OPC.UA.PubSub] ## Notices for Implementer The article [Reactive Networking of Semantic-Data Library][RxNetworkingSemantic-Data] contains a description covering instruction for the external UDP handling components. An example of how to implement the `Transport` layer for the UDP protocol is illustrated by the project [UA Data Example Application][OOI.Networking.ReferenceApplication]. This library implements the `IMessageHandlerFactory` in the class `MessageHandlerFactory` used to create communication infrastructure for the `Consumer` and `Producer` role as well. The `JoinMulticastGroup` method subscribes the `UdpClient` to a multicast group using the specified `IPAddress`. After calling the `JoinMulticastGroup` method, the underlying `Socket` sends an Internet Group Management Protocol (IGMP) packet to the router requesting membership to the multicast group. The multicast address range is `224.0.0.0` to `239.255.255.255`. If you specify an address outside this range or if the router to which the request is made is not multicast enabled, `UdpClient` will throw a `SocketException`. Once the `UdpClient` is listed with the router as a member of the multicast group, it will be able to receive multicasted datagrams sent to the specified `IPAddress`. `Publisher` do not need to belong to a multicast group to send datagrams to a multicast IP address. To get more details visit the MSDN online documentation. [RxNetworkingSemantic-Data]:https://commsvr.gitbook.io/ooi/reactive-communication/semanticdata [RFC.UDP]:https://tools.ietf.org/html/rfc768 [RFC.UDP.IP]:https://tools.ietf.org/html/rfc791 [RFC.IPMulticasting]:https://tools.ietf.org/html/rfc1112 [OPC.UA.PubSub]:https://opcfoundation.org/developer-tools/specifications-unified-architecture/part-14-pubsub/ [OOI.Networking.UDPMessageHandler]:https://github.com/mpostol/OPC-UA-OOI/tree/master/Networking/UDPMessageHandler [OOI.Networking.ReferenceApplication]:https://github.com/mpostol/OPC-UA-OOI/tree/master/Networking/ReferenceApplication ================================================ FILE: Networking/UDPMessageHandler/UAOOI.Networking.UDPMessageHandler.xml ================================================ UAOOI.Networking.UDPMessageHandler Class BinaryUDPPackageReader - custom implementation of the using UDP protocol.. This class cannot be inherited. Initializes a new instance of the class. The configuration of the reader. Gets or sets the state. The state. Releases unmanaged and - optionally - managed resources. Initializes a new instance of the class. Gets the current state of the instance. The state of type. This method is used to enable a configured object. If a normal operation is possible, the state changes into state. In the case of an error situation, the state changes into . The operation is rejected if the current is not . Wrong state This method is used to disable an already enabled object. This method call shall be rejected if the current State is or . Wrong state Implements for UDP begin receive. The asynchronous result. Class BinaryUDPPackageWriter - custom implementation of the using UDP protocol. Releases unmanaged and - optionally - managed resources. true to release both managed and unmanaged resources; false to release only unmanaged resources. Initializes a new instance of the class. Gets the current state of the instance. The state of type. This method is used to enable a configured object. If a normal operation is possible, the state changes into state. In the case of an error situation, the state changes into . The operation is rejected if the current is not . Wrong state This method is used to disable an already enabled object. This method call shall be rejected if the current State is or . Wrong state Class UDPReaderConfiguration encapsulates configuration for . Class UDPWriterConfiguration encapsulates configuration for . Class NetworkingEventSourceProvider - gets access to an instance of to be registered by the logging infrastructure. Gets the part event source. Returns an instance of . Logs the exception using . The event source source to be used for problem reporting. Name of the class. Name of the method. The exception to be reported. Class Tasks. Class Keywords - defines the local keywords (flags) that apply to events. Gets the log - implements singleton of the . The log. Class - implements Gets an instance implementing interface. The name to be used for identification of the underlying TDG transport channel. The configuration of the object implementing the . An object implementing that provides functionality supporting reading the messages from the wire. Gets an instance implementing interface. The name to be used for identification of the underlying TDG transport channel. The configuration of the object implementing the . An object implementing that provides functionality supporting sending the messages over the wire. ================================================ FILE: Networking/UDPMessageHandler/app.config ================================================  ================================================ FILE: Networking.playlist ================================================ ================================================ FILE: OPCUAMainTechnologyFeatures.md ================================================ # OPC UA Main Technology Features ## Introduction One of the main goals of the [OPC Unified Architecture](OPCUnifiedArchitecture.md) is to provide a consistent mechanism for the integration of process control and management systems. It is assumed that it should be robust and the implementation should be platform independent. In this section, I will examine technologies and paradigms used as a foundation for the development of the OPC UA standard and discuss their impact on the final result. ## Object Oriented Information Model To make systems interoperable, the data transfer mechanism must be associated with a consistent information representation model. OPC UA uses an object as a fundamental notion to represent data and activity of an underlying system. The objects are placeholders of variables, events, and methods and are interconnected by references. This concept is similar to well-known object-oriented programming (OOP) that is a programming paradigm using "objects" – data structures consisting of fields, events and methods – and their interactions to design applications and computer programs. The OPC UA Information Model provides features such as data abstraction, encapsulation, polymorphism, and inheritance. The OPC UA object model allows servers to provide type definitions for objects and their components. Type definition may be abstract and may be inherited by new type to reflect polymorphism. They may also be common or they may be system-specific. Object types may be defined by standardization organizations, vendors or end-users. The Information Model is a very powerful concept, but it is abstract and hence, in a real environment, it must be implemented in terms of bit streams (to make information transferable) and addresses (to make information selectively available). To meet this requirement, OPC UA introduces a Node notion as an atomic addressable entity that consists of attributes (value-holders) and references (address-holders of coupled nodes). The set of Nodes that an OPC UA Server makes available to clients is referred to as its Address Space, which enables the representation of both real process environment and real-time process behavior. The Address Space is described in depth in the [OPC UA eBook][CAS.EBOOK]. Each of the previous OPC Classic specifications defined their own address space model and their own set of services. OPC UA unifies the previous models into a single integrated Address Space with a single set of services. A detailed description of this topic is covered by the section [*Semantic-Data Processing Architecture*][SDPA]. This section is an executive summary targeting the new concept called `Semantic-data` derived from the OPC Unified Architecture address space model. ## Service Oriented Architecture At the very beginning of new solution development, we must address a question about its fundamental paradigms and architecture. OPC Classic is based on the functionality provided by an operating system and is actually an instruction on how to use the functionality to interconnect participants of the data exchange. This was recognized as one of the drawbacks making the lifetime of the OPC Classic standard dependent on the lifetime of the technology it is based on. Observing continuous evolution of the IT domain, it seems that finding a solution that will guarantee an unlimited lifetime is a real challenge. However, decoupling the solution from any base technology increases the chance of it surviving the disappearance of the base technology from the market. Developing services and deploying them using a [Service Oriented Architecture](https://en.wikipedia.org/wiki/Service-oriented_architecture) (SOA) is the best way to invent IT systems to meet this challenge. A service differs from an object or a procedure because it is defined by messages that it exchanges with other services. SOA defines the way in which services are deployed and managed. Using an SOA approach leverages the solution re-usage, lowers overall cost, and improves the ability to rapidly change and evolve systems, whether old or new. To make systems interoperable, any even brilliant idea is not enough. We need a data transfer technology, however – when defining data exchange in the context of messages – we do not need to bother with the different technologies used by the participants as long as they can absorb the messages. Today, an ideal platform for the SOA concept implementation is Web Service technologies. They represent the most widely adopted distributed computing standards in industry history. Web Services are a set of specifications based on XML ([eXtensible Markup Language](https://en.wikipedia.org/wiki/XML)) and developed by W3C \( [World Wide Web Consortium](https://www.w3.org/) \). Those standards are generally marked with a WS-\* symbol. Because the WS-\* standards are developed without any initial assumption concerning the underlying system platform they are implemented on, they, therefore, must precisely define what must be on the "wire". The WS-\* standards are the basic foundation for OPC UA but, using them alone, would not be enough to reach the expected data throughput performance in industrial applications. The OPC UA suite of protocols, therefore, expands the WS-\* standards by defining a few proprietary ones that can be used alternatively. OPC UA messages may be encoded as an XML text or in binary format for efficiency purposes. They may be transferred using multiple underlying kinds of transport, for example, TCP or SOAP over HTTP. Clients and servers that support multiple kinds of transport and encodings will allow end users to make decisions about tradeoffs between performance and XML Web Services compatibility at the time of deployment, rather than having these tradeoffs determined by the OPC vendor at the time of product selection. ## Abstraction and Mapping To make systems interoperable, the data transfer mechanism must be associated with a consistent information representation model. OPC UA uses an object as a fundamental notion to represent data and activity of an underlying system. The objects are placeholders of variables, events, and methods and are interconnected by references. This concept is similar to well-known object-oriented programming (OOP) that is a programming paradigm using "objects" – data structures consisting of fields, events and methods – and their interactions to design applications and computer programs. The OPC UA Information Model provides features such as data abstraction, encapsulation, polymorphism, and inheritance. The OPC UA object model allows servers to provide type definitions for objects and their components. Type definition may be abstract and may be inherited by new type to reflect polymorphism. They may also be common or they may be system-specific. Object types may be defined by standardization organizations, vendors or end-users. The Information Model is a very powerful concept, but it is abstract and hence, in a real environment, it must be implemented in terms of bit streams (to make information transferable) and addresses (to make information selectively available). To meet this requirement, OPC UA introduces a Node notion as an atomic addressable entity that consists of attributes (value-holders) and references (address-holders of coupled nodes). The set of Nodes that an OPC UA Server makes available to clients is referred to as its Address Space, which enables the representation of both real process environment and real-time process behavior. The Address Space is described in depth in the [OPC UA eBook][CAS.EBOOK]. Each of the previous OPC Classic specifications defined their own address space model and their own set of services. OPC UA unifies the previous models into a single integrated Address Space with a single set of services. ## Security Security is a fundamental aspect of computer systems, in particular, those dedicated to enterprise and process management. Especially in this kind of application, security must be robust and effective. Security infrastructure should also be flexible enough to support a variety of security policies required by different organizations. OPC UA may be deployed in diverse environments; from clients and servers residing on the same hosts, throughout hosts located on the same operation network protected by the security boundary protections that separate the operation network from external connections, up to applications running in global environments using public network infrastructure. Depending on the environment and application requirements, the communication services must provide different protections to make the solution secure, therefore OPC UA specification must offer scalability. OPC UA Security is concerned with the authentication of clients and servers, the authorization of users, the integrity and confidentiality of their communications and the auditing of client-server interactions. To meet this goal, security is integrated into all aspects of the design and implementation of OPC UA Servers and Clients. The OPC Foundation has also addressed the security issues that arise from implementation. This includes independent reviews of all aspects of security starting from the design of in-depth security provided by the specification (which is built and model on the WS* specifications); to the actual implementation provided by the OPC Foundation. The OPC Foundation has chosen to use industry-standard security algorithms and industry standard security libraries to implement OPC UA Security. Security mechanisms can be provided by diverse communication layers. Transport-level security is a solution limited to point-to-point messaging. In this case, messages can be protected by establishing a secure connection (association) between two hosts using for example Transport Layer Security (TLS) or IPSec protocols. But, if intermediaries are present when using secure transport, the initial sender and the ultimate receiver need to trust those intermediaries to help provide end-to-end security, because each hop is secured separately. In addition to explicit trust of all intermediaries, other risks such as local storage of messages and the potential for an intermediary to be compromised must be considered. Thus, using only transport security limits the robustness of the security solution to transport-specific features. For OPC UA over the session communication, the security association must survive beyond a single transport connection. To meet the above requirements, the OPC UA security architecture is defined as a generic solution that allows the implementation of the required security features at various places in the application architecture. The OPC UA security architecture is structured in an application layer and a communication layer atop the transport layer. The routine work of a client application and a server application to transmit plant information, settings, and commands is done in a session in the application layer. The application layer also manages user authentication and user authorization. OPC UA Client and Server applications identify and authenticate themselves with X.509 Certificates. Clients pass a user identity token to the OPC UA Server. The OPC UA Server authenticates the user token. Applications accept tokens in any of the following three forms: user-name/password, an X.509v3 certificate or a WS-SecurityToken A session in the application layer communicates over a secure channel that is created in the communication layer and relies upon it for secure communication. All of the session data is passed to the communication layer for further processing. The secure channel is responsible for messages integrity, confidentiality, and applications authentication. OPC UA uses symmetric and asymmetric encryption to protect confidentiality as a security objective. OPC UA relies upon the site cyber security management system to protect confidentiality on the network and system infrastructure and utilizes the Public Key Infrastructure to manage keys used for symmetric and asymmetric encryption. OPC UA uses symmetric and asymmetric signatures to address integrity as a security objective. ## Profiles OPC UA is designed to support a variety of applications, from plant-floor PLCs to enterprise servers. Those applications require a variety of execution platforms and functional capabilities. Therefore, OPC UA defines a comprehensive set of capabilities, of which applications may implement a subset of. These subsets are referred to as Profiles, and applications may claim conformance to them. Clients can then discover the Profiles for a Server, and tailor their interactions with that server based on the Profiles. The client also contains Profiles which allow the end user the ability to match up server profiles to client profiles, making it easier to ensure that diverse clients and servers will interoperate. Servers can also discover these client profiles and could tailor their response to the client based on the client profile. ## Robustness OPC UA is designed to provide robustness of published data. The major feature of all OPC UA Servers is the ability to publish data and event notifications. OPC UA provides mechanisms for clients to quickly detect and recover from communication failures associated with transfers without having to wait for long timeouts provided by the underlying protocols. The design of OPC UA ensures that vendors can create redundant clients and redundant servers in a consistent manner. Redundancy may be used for high availability, fault tolerance, and load balancing. Generally, we can distinguish redundancy of servers/clients, communication paths and signals. Although the specification provides support only for client/server redundancy, product vendors can incorporate all kinds of redundancy into the framework proposed by the specification. For example, a server can establish a wireless connection as the means of recovery from cable connection failure or a server can use many data sources bound to a variable to provide continuous updating of the variable value even if one of the sensors has been damaged. OPC UA requires a stateful model as the next feature that increases the solution robustness. State information is maintained inside an application session. Examples of state information are subscriptions, user credentials and continuation points for operations that span multiple requests. Sessions are defined as logical connections between clients and servers. What is worth stressing, each session is independent of the underlying communications protocols. Failures of these protocols do not automatically cause the session to terminate. Sessions terminate based on: - a client or server request - the inactivity of the client ## See also - [1] [OPC UA Address Space Model Designer][CAS.ASMD] - [2] [OPC Unified Architecture e-book, 2010][CAS.EBOOK] - [3] [Part 5: Information Model, OPC Foundation, Rel. 1.04, 2017-11-22][OPC.UA.Part5] - [4] [Semantic-Data Processing Architecture][SDPA] [SDPA]:SemanticData/README.MD [OPC.UA.Part5]:https://opcfoundation.org/developer-tools/specifications-unified-architecture/part-5-information-model/ [CAS.ASMD]: https://github.com/mpostol/ASMD [CAS.EBOOK]:https://commsvr-com.github.io/Documentation/ModelDesigner/html/a2d55988-b59a-4a87-95b9-933f6bbdf5bd.htm ================================================ FILE: OPCUnifiedArchitecture.md ================================================ # OPC Unified Architecture ## Introduction OPC Unified Architecture (OPC UA) is described in a layered set of specifications broken into parts. It is purposely described in abstract terms and only in selected parts coupled to existing technology on which software can be built. This layering is intentional and helps isolate changes in OPC UA from changes in the technology used to implement it. The OPC UA specifications are organized as a multipart document comprising the following sets: - Core specification - Access type specification - Utility specification The first set specifies the core capabilities of OPC UA. Those core capabilities define the concept and structure of the Address Space and the services that operate on it. The access type set applies those core capabilities to specific models of data access. Like in OPC Classic, there are distinguished: Data Access (DA), Alarms and Conditions (A&C) and Historical Access (HA). A new access mode is provided as a result of introducing the programs concept and aggregation mechanisms. This set also specifies the UA server discovery process. Those mechanisms are not directly dedicated to support data exchange, but play a very important role in the whole interoperability process. The core set contains the following specifications ([References]): - Part 1 – Overview and Concepts: presents the concepts and overview of OPC Unified Architecture. - Part 2 – Security Model: describes the model for securing interactions between OPC UA clients and servers. - Part 3 – Address Space Model: describes an object model that servers use to expose underlying real-time processes to create an OPC UA connectivity space. - Part 4 – Services: specifies the services provided by OPC UA servers. - Part 5 – Information Model: specifies information representations - types that OPC UA servers use to expose underlying real-time processes. - Part 6 – Mappings: specifies transport mappings and data encoding supported by OPC UA. - Part 7 – Profiles: introduces the concept of profiles and defines available profiles that are groups of services or functionality. The access type set contains the following specifications: - Part 8 – Data Access: specifies the use of OPC UA for data access. - Part 9 – Alarms and Conditions: specifies the use of OPC UA support for accessing alarms and conditions. - Part 10 – Programs: specifies OPC UA support for accessing programs. - Part 11 – Historical Access: specifies the use of OPC UA for historical access. This access includes both historical data and historical events. The utility specification parts contain the following specifications: - Part 12 – Discovery: introduces the concept of the Discovery Server and specifies how OPC UA clients and servers should interact to recognize OPC UA connectivity. - Part 13 – Aggregates: describes ways of aggregating data. - Part 14 - PubSub This specification defines the OPC Unified Architecture (OPC UA) PubSub communication model. The PubSub communication model defines an OPC UA publish-subscribe pattern instead of the client-server pattern defined by the Services in Part 4. Part 100: Device Information Model. Companion Specification featuring an Information Model for Devices. ## Overview and Concepts This part describes the goal of OPC UA and introduces the following models to achieve it: - Address Space (Section [Address Space and Address Space Model]) and Information Model (Section [UA Information Model - Concept]) to represent structure, behavior, semantics, and infrastructure of the underlying real-time system. - Message model to interact between applications. - Communication models to transfer data over the network. - Conformance model to guarantee interoperability between systems. - Security model to guarantee cyber security addressing client/server authorization, data integrity and encryption. ## Security Model This part describes the OPC UA security model. OPC UA provides countermeasures to resist threats that can be made against the environments in which OPC UA will be deployed. It describes how OPC UA relies upon other standards for security. The proposed architecture is structured in an application layer and a communication layer. Introduced security policies specify which security mechanisms are to be used. The server uses security policies to announce what mechanisms it supports and the client - to select one of those available policies to be used when establishing the connection. ## Address Space There is no doubt that information technology and process control engineering have to be integrated to benefit from macro optimization and synergy effect. To integrate them, we must make systems interoperable. It causes the necessity of exchanging information, but to exchange information, it has to be represented as computer centric (saveable in a binary memory) and transferable (a stream of bits) data. According to the specification, a set of objects that an OPC UA server makes available to clients as data representing an underlying real-time system is referred to as its Address Space ((Section [Address Space and Address Space Model])). The breaking feature of the Address Space concept allows representing both real process environment and real-time process behavior - by a unique means, mutually understandable by diverse systems. ## Services The OPC UA services described in this part are a collection of abstract remote procedure calls that is to be implemented by the servers and called by the clients. The services are considered abstract because no particular implementation is defined in this part. The part Mappings describes more specific mappings supported for implementation. Separation of the service definition and implementation allows for harmonization with new emerging technologies by making new mappings. ## Information Model To make the data exposed by the Address Space mutually understandable by diverse systems, the information model (Section [UA Information Model - Concept]) part standardizes the information representation as computer centric data. To promote interoperability, the standard information model (Section [Standard Information Model]) defines the content of the Address Space of the OPC UA server. This content can be used as a starting browse point to discover all information relevant to any client. Definitions provided in this part are considered abstract because they do not define any particular representation on the wire. To make the solution open for new technologies, the representation mappings are postponed to the part Mappings. The solution proposed in this model is also open to defining vendor specific representations. ## Mappings This part defines mappings between abstract definitions contained in the specification (e.g. in the parts: Information Model, Services, Security Model) and technologies that can be used to implement them. Mappings are organized into three groups: data encoding, security protocols and transport protocols. Different mappings are combined together to create stack profiles. ## Profiles This part describes the OPC UA profiles as groups of services or functionality that can be used for conformance level certification. Individual features are grouped into conformance units, which are further grouped into profiles. All OPC UA applications shall implement at least one stack profile and can only communicate with other OPC UA applications that implement the same stack profile. Servers and clients will be tested against the profiles. Servers and clients must be able to describe which of the features they support. ## Data Access This part describes the information model associated with the Data Access (DA) mode. It particularly includes an additional definition of variable types and a complementary description of Address Space objects. This part also includes additional descriptions of node classes and attributes needed for DA, as well as DA specific usage of services to access process data. ## Alarms and Conditions This part describes the representation of events and alarms in the OPC UA Address Space and introduces the concepts of condition, dialog, acknowledge-able condition, configure-able condition and alarm. To expose above information, it extends the information model defined in other parts and describes alarm specific uses of services. ## Programs This part extends the notion of methods and introduces the concept of programs as a complex, stateful functionality in a server or underlying system that can be invoked and managed by a OPC UA client. The provided definitions describe the standard representation of programs as part of the OPC Unified Architecture information model. The specific use of services is also discussed. Historical Access This part describes an extension of the information model associated with Historical Access (HA). It particularly includes additional and complementary definitions of the representation of historical time series data and historical event data. Additionally, this part covers HA specific usage of services to detect and access historical data and events. ## Discovery The main aim of this part is to address the discovery process that allows the clients to first find servers on the network and then find out how to connect to them. This part describes how UA clients and servers interact to exchange information on resources available on the network in different scenarios. To achieve this goal, there are introduced the concepts of a discovery server that is a placeholder of global scope information and a local discovery server, whose main task is to manage information vital to local resources. Finally, this part describes how to discover UA applications when using common directory service protocols such as UDDI and LDAP. ## Aggregates This part specifies the information model associated with aggregates and describes how to compute and return aggregates like minimum, maximum, average etc. Aggregates can be used with base (live) data as well as historical (HA) data. This part also addresses the aggregate specific usage of services. ## Conclusion All of the features presented in this section are very important for assessing the specification against particular requirements vital for industrial IT application domain. For the rest of this paper they can be recognized as **must have option** to be surrounded by tools and deployment methodology to finally produce a widely accepted powerful technology. To meet the goal of this paper we will focus on the information representation rules proposed by this standard and methodology of practical deployment thereof. In this context there are two fundamental concepts introduced by the OPC UA specification: - Address Space Model – all about exposing information in a standard way - Information Model – all about unambiguous, computer centric definition of information ## See also - [Address Space and Address Space Model] - [UA Information Model - Concept] - [Standard Information Model] - [OPC UA Main Technology Features] - [OPC Unified Architecture - Main Technological Features](http://wp.me/p3MGZj-i) - [OPC UA Makes Smart Factory Possible](http://mpostol.wordpress.com) - [References] [Standard Information Model]:SemanticData/StandardInformationModel.md [Address Space and Address Space Model]:SemanticData/AddressSpaceAddressSpaceModel.md [UA Information Model - Concept]:SemanticData/InformationModelConcept.md [OPC UA Main Technology Features]:OPCUAMainTechnologyFeatures.md [References]:REFERENCES.md ================================================ FILE: Preface.md ================================================ # Introduction to Object-Oriented Internet ## Preface The industrial IT applications domain is an integrated set of ICT (Information and Communication Technologies) systems. System integration means the necessity of the information exchange between them (the nodes of a common domain). The main aim of this project is to present a new emerging engineering discipline as a synergy between systematic design methodology and available tools. Bothering about information processing is usually a subject recognized as research and development activity. Engaging R&D activity to provide information processing solutions has many drawbacks. It requires distinct skills and, in consequence, solving a problem and deploying the solution must be carried out as two independent phases. It is not efficient and, therefore, very expensive and risky. The Object-Oriented Internet concept addresses this problem, namely it proposes an architecture, services, tools, and information modeling consistent concepts with the goal to allow vendors to release out-of-the-box products ready to be used by engineers. The above-mentioned issues could be overcome by reusability and unification. The main challenge of this project is to converge the methodology and tools development to eliminate research and programming needs. This project is dedicated to process architects and software developers to help them deploy the real-time process state and behavior description as a ready to use solution in a real production environment and use this description to integrate the process as a consistent part of a selected Industrial IT application domain. To comply with the Industry 4.0 communication criterion, even the lowest category requires the product to integrate at least the OPC Unified Architecture Information Model. As a result, any product being advertised as Industry 4.0-enabled must be OPC UA-capable somehow. The OPC Unified Architecture (UA) technology (Section [OPC UA Main Technology Features]) is selected because: - it is Internet-based technology - it supports the client-server and publisher-subscriber communications relationship - it is a platform neutral standard allowing easy implementation on any system including embedded systems - it is designed to support complex data types and object models (structural data) - it is designed to achieve high-speed data transfers using efficient binary data encoding/decoding - it is scalable from embedded applications up to the process control and enterprise management/operation systems - it has broad industry support and is being used in support of other industry standards such as ISA S95, ISA S88, EDDL, MIMOSA, OAGiS, etc. Considering the above-defined requirements and OPC UA main technology features (Section [OPC UA Main Technology Features]) as a starting point for further discussion a generic architecture is proposed (Section [Semantic-Data Processing Architecture]) that allows designing robust real-time globally scoped distributed systems against the cyber-physical systems paradigm called Industry 4.0. To deploy the Industry 4.0 paradigm additionally the data holder mobility behavior must be incorporated. This way we have entered the domain of Internet applications coined as the Internet of Things (IoT) (Section [Internet of Things (IoT) Communication]). One of the arguments for an Internet of Things is allowing distributed yet interlinked devices, machines, and objects (data holders) to interact with each other without relying on human intervention to set-up and commission the embedded intelligence. In this context, the IoT is all about: - mobile data fetching - how to gather data from mobile things (data holders) - mobile data distribution - how to transfer the data over the Internet to a place where it could be processed - mobile data processing - how to integrate consistently the partial data into a selected application as one whole to improve process behavioral performance On the foundation of this model, selected interoperability deployment issues and available solutions are being researched in the project. The discussion is focused on the issues related to: - meaningful data transfer based on reactive and interactive parties relationship - data oriented architecture - underlying process data binding - data discovery - data security > OPC Unified Architecture is a suit of standardization documents so more research is required to achieve a synergy between systematic design methodology and available tools compliant with this specification. ## See also - [OPC UA Main Technology Features] - [Semantic-Data Processing Architecture] - [Internet of Things (IoT) Communication] [Internet of Things (IoT) Communication]:Networking/README.MD [Semantic-Data Processing Architecture]:SemanticData/README.MD [Address Space and Address Space Model]:SemanticData/AddressSpaceAddressSpaceModel.md [UA Information Model - Concept]:SemanticData/InformationModelConcept.md [OPC UA Main Technology Features]:OPCUAMainTechnologyFeatures.md [References]:REFERENCES.md ================================================ FILE: README.MD ================================================ # Object-Oriented Internet ## Preface ### Object-Oriented Internet - Machines to Machine Meaningful Interoperability It is said that we are or soon will be citizens of a global village - a world considered as a single community linked by telecommunications. All applications designed atop of network communication can be grouped as follows: - **human-centric** - applications where the information origin or information destination is an operator - **machine-centric** - applications where information creation, consumption, networking, and processing are achieved entirely without human interaction A typical **human-centric** approach is web-service supporting, for example, online bank account management. In this case, it is essential that any uncertainty and necessity to make a decision can be relaxed by human interaction. Coordination of multi-robot behavior in a work-cell or autonomous cars entering a service area fulfills the **machine-centric** scenario. It is crucial that, in this case, any human interaction is impractical or even impossible. **This interoperability scenario requires a machine to machine communication (M2M) demanding multi-vendor devices integration**. The human-centric global village is almost done. However, the machine-centric global village still needs design and development effort. Information and Communication Technology (ICT) has provided society with a vast variety of distributed machine-oriented applications including the meaningful Machine to Machine (M2M) communication targeting distributed mobile applications in the context of new emerging disciplines, i.e. Industry 4.0 (I40) and Internet of Things (IoT). However, it is a real challenge if the mentioned machines are provided by a vast variety of vendors. The real challenge we are facing is how to produce independently smart things (i.e. machines, devices, appliances, assets, etc.) to guarantee that they are plug and produce ready. There are no doubts, it requires standardization. I believe that while producing the machines in compliance with the OPC Unified Architecture this issue is relaxed by applying the following OPC UA standardized concepts: - **Information Model** - all about how to design a formal but mutually meaningful and shareable description of the considered process - **Address Space** - all about how to instantiate and expose to the network a life replica of the process providing real-time data according to the above-mentioned formal description The standardization process may be "paper-driven" or "community-driven". In both cases, standardization is indispensable but not sufficient. Let me recall that the foundation for the human-centric global village is just the Internet Protocol defined in 1981 and derived from the academic abstract knowledge and practitioners' concrete experience. It is worth stressing that it was published as an open-access document (RFC 791) and it has not been deprecated yet. This umbrella project targets multi-vendor plug-and-produce machines interoperability scenarios targeting all aspects of the machine-centric global village concept aimed at providing reusable deliverables, training, best practice rules, prototyping, compliance testing and dissemination of valuable results. I am a researcher who is passionate about applying knowledge and experience in building a machine-centric global village. Let's build it with you and for you. To join our effort and create an organization context I have launched the [**Object-Oriented Internet Partnership Program**](https://github.commsvr.com/AboutPartnershipProgram.md.html). > Consider joining as a sponsor, contributor or end-user. Details are covered by the section [**How to be involved**](https://github.commsvr.com/AboutPartnershipProgram.md.html#how-to-be-involved) > > Your participation is needed to make sure the work will continue as expected. ### What is Object Oriented Internet In this project, C\# deliverables supporting a new Machine To Machine \(M2M\) communication approach based on the **Data-Oriented Architecture** (DOA) paradigm is to be researched. The goal is to provide a generic solution for publishing and updating information in a context that can be used to describe and discover it by software applications. It is implemented based on the [OPC Unified Architecture][wordpress.OPCUAMTF] (OPC UA)- an industrial integration standard that fulfills the proposed architecture requirements. The [Object Oriented Internet](https://fedcsis.org/proceedings/2015/pliks/160.pdf) article published in **Proceedings of the Federated Conference on Computer Science and Information Systems** captures description of this idea. | Go To | Description | | :-------------------------------------------------------------------------------------------------------------------------------------: | --------------------------------------------------------------------------------------------------------------------------------------------------------- | | [![Release](https://img.shields.io/github/release/mpostol/OPC-UA-OOI.svg?style=popout)](https://github.com/mpostol/OPC-UA-OOI/releases) | latest release | | [![ebook](https://img.shields.io/badge/OOI-read_on_Gitbook-brightgreen.svg)](https://commsvr.gitbook.io/ooi) | the ebook **Object Oriented Internet** contains description of this project - it is auto-generated content gathered from *.md files from this repository. | | [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.1198852.svg)](https://doi.org/10.5281/zenodo.1198852) | you can cite all versions by using the DOI 10.5281/zenodo.1198852. This DOI represents all versions, and will always resolve to the latest one. | > Note: the DOI number is a unique identifying number associated with the repository version. Visit the section `How to cite the software and associated documentation files` to learn how to create derived works and cite the origin. ### Keywords > *OPC, OPC UA, M2M communication, Client-Server, Publisher-Subscriber, Data Oriented Architecture, DOA, AMQP, MQTT, PubSub, OPC UA PubSub, Semantic-Data, Industry 4.0, I4.0, Internet Of Things, IoT, IIoT, Global Data Discovery, Security* ### Releases We use [Semantic Versioning](http://semver.org/) for versioning. For the versions available, see the [releases on this repository](https://github.com/mpostol/OPC-UA-OOI/releases). For your convenience, the versions of the repository, tools and NuGet packages has been listed in the next subsections. #### Repository | Version | Milestone | DOI | Date | | :---------: | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------: | :----------: | | 6.1.2 | Azure Gateway Implementation 1.0 | [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.4361640.svg)](https://doi.org/10.5281/zenodo.4361640) | Dec 18, 2020 | | 5.1.0 | Semantic-Data ModelDesign Export 5.1.0 | 10.5281/zenodo.3345043 | Jul 21, 2019 | | 5.0.2-Alpha | Updated the UA Address Space build against OPC UA Specification 1.04; updated UANodeSet schema; added export to ModelDesign [OPC UA Address Space Prototyping](SemanticData/AddressSpaceComplianceTestTool/README.md) | 10.5281/zenodo.2636426 | Apr 11, 2019 | | 4.0.1 | .NET Standard implementation, documentation improved, new code help documentation available, tested against Xamarin.Android | 10.5281/zenodo.2555407 | Feb 1, 2019 | | 3.1.0 | New version of the UAOOI.Networking.ReferenceApplication, documentation has been improved. | 10.5281/zenodo.1291549 | Jun 17, 2018 | | 3.0.0 | DOI creation for the publication purpose. | 10.5281/zenodo.1198853 | Mar 14, 2018 | #### Tools The table below lists the latest versions of the published Tools. | Description | Version | | ------------------------------------------------------------------------------------------ | :-----: | | [OPC UA Address Space Prototyping](SemanticData/AddressSpaceComplianceTestTool/README.md) | 5.1.0 | | [Semantic-Data Processing ReferenceApplication](Networking/ReferenceApplication/README.MD) | 4.00.01 | #### NuGet packages The table below lists the latest versions of the published NuGet packages. | Id | Version | Description | | ------------------------------------------------------------------------------------------------------------------------ | :-----: | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | [UAOOI.Common.Infrastructure](https://www.nuget.org/packages/UAOOI.Common.Infrastructure) | 4.0.1 | This library provides API for common infrastructure management functionality aimed at Object Oriented Internet application deployment.) | | [UAOOI.Configuration.Core](https://www.nuget.org/packages/UAOOI.Configuration.Core) | 4.0.1 | The library contains a shared interfaces for server configuration which OPC UA applications can reference. The library provides an abstraction over any OPC UA Server configuration plug-in. Using the library allows an application to indirectly access the server configuration attributes without relying on hard references. The hope is that using this library, third-party applications and frameworks can begin to leverage server configuration management without tying themselves down to a specific implementation. | | [UAOOI.Configuration.DataBindings](https://www.nuget.org/packages/UAOOI.Configuration.DataBindings) | 4.0.1 | OPC UA Object Oriented Internet (UAOOI) DataBindings library is dedicated to create a plug-in aimed at editing of the configuration of any application based on OPC UA Information Model. It allows also to add data binding to the configuration. | | [UAOOI.Configuration.Networking](https://www.nuget.org/packages/UAOOI.Configuration.Networking) | 4.0.1 | OPC UA Object Oriented Internet (UAOOI) UAOOI.Configuration.Networking library is dedicated to create a plug-in aimed at provisioning configuration of any application based on OPC UA Information Model. | | [UAOOI.Networking.Core](https://www.nuget.org/packages/UAOOI.Networking.Core) | 4.0.2 | The core functionality of `Semantic-Data` reactive networking library based on OPC UA Part 14 Pub/Sub. | | [UAOOI.Networking.Encoding](https://www.nuget.org/packages/UAOOI.Networking.Encoding) | 4.0.2 | This package provides functionality to lookup a dictionary containing value converters. The interface is used for late binding to inject dependency on the external library. This library provides IEncodingFactory functionality limited to encoding simple data types only for the testing purpose only. | | [UAOOI.Networking.SemanticData](https://www.nuget.org/packages/UAOOI.Networking.SemanticData) | 4.0.2 | SemanticData Reactive Networking library based on OPC UA Part 14 Pub/Sub. | | [UAOOI.Networking.UDPMessageHandler](https://www.nuget.org/packages/UAOOI.Networking.UDPMessageHandler) | 4.0.2 | OOI Reactive Networking: UDP IMessageHandlerFactory Implementation | | [UAOOI.SemanticData.InformationModelFactory](https://www.nuget.org/packages/UAOOI.SemanticData.InformationModelFactory/) | 5.1.0 | OPC UA Information Model Factory Library | | [UAOOI.SemanticData.UANodeSetValidation](https://www.nuget.org/packages/UAOOI.SemanticData.UANodeSetValidation/) | 5.1.0 | This project supports validation of the OPC UA Address Space captured in the XML file against the OPC UA Specification. It is assumed that the Address Space is represented as an XML file compliant with the NodeSet schema. This library is dedicated to creating a plug-in aimed at importing models based on the OPC UA Information Model. It is part of the project supporting OPC UA Object Oriented Internet paradigm. | | [UAOOI.SemanticData.UAModelDesignExport](https://www.nuget.org/packages/UAOOI.SemanticData.UAModelDesignExport/) | 5.1.0 | This library provides an implementation of the export functionality of an XML file compliant with the UAModelDeign schema. By design, the UAModelDeign schema describes the syntax of an XML document representing the OPC UA Information Model. | | [UAOOI.SemanticData.BuildingErrorsHandling](https://www.nuget.org/packages/UAOOI.SemanticData.BuildingErrorsHandling/) | 5.1.0 | It provides descriptions of building errors to be used for OPC UA Address Space consistency validation purpose. | ## Content ### Architecture The repository workspace are organized as it is illustrated in the Figure below. ![Figure 1. Packages relationship](CommonResources/Media/Packages.png) Next sections describe the content of the packages in the repository. The packages are loosely coupled. Each package contains applications (tools), libraries, and unit tests. All common resources are collected in the `CommonResources`. ### Common This workspace provides API for common infrastructure management functionality aimed at Object Oriented Internet application deployment. ### Configuration This workspace is aimed at implementing an editor of the `OOI Reactive Application` configuration file. It contains types that supports the configuration management of application implementing the paradigm described in [Semantic-Data Processing Architecture](SemanticData/README.MD). The configuration may be read to or write from the xml or json files. By design this library may be used to support variety kinds of applications at design and run time. It supports also the data binding mechanism to define how the process data relate to the real world. ### DataDiscovery This workspace contains libraries and tools to find the data over the network. In the proposed approach the URI of the OPC UA **Information Model** is to be used as a unique key to browse the **Global Data Discovery System** \(GDDS ֠an expanded version of GDS\) to find recursively the destination `OPC UA Server` or `UA Data Application` exposing the requested data. To get more details visit the section [Global Data Discovery](./DataDiscovery/README.MD) ### Networking This workspace contains library empowering the Industrial Internet of Things \(IIoT\) and Industry 4.0. as the result of using reactive networking paradigm. Intentionally it is designed on top of OPC UA Part 14 Pub/Sub protocol supporting interoperability with any product compliant with this specification. Seamless integration with AMQP, MQTT, etc. allows meaningful data transfer in the context of semantics defined using **OPC UA Information Model**. To get more details visit the section [Internet of Things (IoT) Communication](./Networking/README.MD) ### SemanticData #### Introduction The `SemanticData` folder contains projects related to support the [OOI Semantic-Data Processing Architecture](./SemanticData/README.MD). Processing of the OPC UA Data Outside of the Server context is based on the **Semantic-Data** concept. This project is aimed to workout deliverables supporting Process Data handling over Internet including but not limiting to: - Data edition ֠UI allowing display and edition of any custom data - Data serialization and deserialization - see white-paper [Address Space Interchange XML][InterchangeXML] - Data prototyping - methods and tools to design custom data types - Exposition of the process data in the context of metadata [OPC UA Address Space Model Designer](https://github.com/mpostol/ASMD) - Browsing of the Metadata to selectively access requested Process Data - Modeling and representation of the metadata - detailed description is covered by the section [OPC UA Information Model Deployment](SemanticData/InformationModelsDevelopment.md) - Validation of the semantics and consistency of the metadata - see project [USNodeSetValidationUnitTestProject](./SemanticData/UANodeSetValidation/README.MD) - Data Oriented Architecture (DOA) #### Project `AddressSpaceComplianceTestTool` It is a command-line application aimed at the validation of the XML files compliant with the [UANodeSet schema](https://opcfoundation.org/UA/2011/03/UANodeSet.xsd) defined in Part 6 of the OPC UA Specification. The description of this schema is captured by the document [Address Space Interchange XML][InterchangeXML] #### Project `UANodeSetValidation` The [UANodeSetValidation](./SemanticData/UANodeSetValidation/README.MD) project is a library aimed at validate `UANodeSet` xml files. To validate a new model add the code to the [USNodeSetValidationUnitTestProject](./SemanticData/Tests/USNodeSetValidationUnitTestProject/README.md) and XML file to the XMLModels in this project. If the validation test does not recognize an error the code in the UANodeSetValidation must be improved. In this case add issue or modify the code on your fork and add pull request after finishing. **Public API**: The public API for this project is defined by the interface: - `IAddressSpaceContext` This interface may be used for dependency injection where validation of the input data conforming to the `UANodeSet` schema is processed. #### Project `InformationModelFactory` The project is dedicated to develop the OPC UA Information Model Factory Library. It is a library used as the dependency injection to produce OPC UA **Information Model** by a selected importer. The abstract API must be implemented by a classes providing functionality of **Information Model** creation. Detailed description is covered by the document [InformationModelFactory Library](./SemanticData/InformationModelFactory/README.md) ## Related work ### OPC UA Address Space Model Designer (`ASMD`) The main challenge of the project [OPC UA Address Space Model Designer (ASMD)][ASMD] is to offer the designers a user-friendly tool supporting all aspects of the OPC UA Address Space model designing process. It brings together: designing, learning, and deploying. Description of the main features of the tool is covered by the section [Design and Deployment Support][DDSupport]. The OPC UA Address Space Model Designer ([`ASMD`][ASMD]) implements conceptual containers called solutions and projects to apply their settings. Any solution contains one or more projects and it manages the way the designer configures, builds, and deploys sets of related projects. Any project includes source files containing the model representation and related metadata such as properties and references to other projects. The designer Integrated Development Environment (IDE) provides tools that help you edit and manipulate models, namespaces, and add references to external resources. ### Process-Observer (`PO`) Process-Observer (`PO`) is an archetype that allows creation consistent, homogeneous real-time representation of the underlying process. This representation is a kind of a process state and behavior replica, which exposes real-time process data to the network using standardized interfaces like OPC Classic, OPC Unified Architecture, OPC PubSub, AMQP, MQTT, etc. In other words, it supports **Machine to Sensors Connectivity (M2S)**, i.e. it allows an open, uniform, secure and standards-based communication solution between sensors, actuators, controllers and the upper layer applications. A detailed description of this concept is covered by the article [Object Oriented Internet][OOI.ieeexplore]. By design this concept supports - **Process Devices Interconnection** - synchronization of the process replica with the process state - **Process Simulation** - simulation of the process behavior to recover unavailable data and ensure a safe testing environment - **Resource Monitoring** - allowing to add information processing and networking infrastructure to be exposed consistently aggregated with the process replica - **Server to Server Interactions** - supports a scenario in which `PO` is the Client of a Server The `PO` concept has been implemented as a generic communication engine used by the CAS CommServer Classic and Unified Architecture servers. This implementation is optimized for highly distributed applications. This implementation is maintained in the [mpostol/ProcessObserver][OOI.PO] repository. ### CommServer [CommServer][commserver] is a package of software to manage data transfer using OPC standards. Built-in technologies and algorithms support Machine to Machine (M2M) meaningful interoperability. The [CommServer][commserver] was written by CAS Lodz Poland. The GitHub repository [commsvr-com/migration2os][migration2os] is aimed at the `CommServer` software migration from on-premise subversion repository to GitHub and publishing it as the Open-Source Software (OSS). The members of the `CommServer` family are to be converged with the Object-Oriented Internet paradigms and integrated with the solutions maintained in this repository. ### Object Oriented Internet Reactive Networking Configuration Editor OPC-UA-OOI.ConfigEditor is a package of software to manage the configuration of the [Reactive Communication][OOIBookToC]. The `OPC-UA-OOI.ConfigEditor` was written by CAS Lodz Poland. The [mpostol/OPC-UA-OOI.ConfigEditor][ConfigEditor] repository is aimed at the software migration from on-premise subversion repository to GitHub and publishing it as the Open-Source Software (OSS). After migration, this repository will be used to manage all activities addressing the software maintenance process as a plug-in of the [ASMD][ASMD]. ## How to cite the software and associated documentation files To be compliant with the license of the repository the below copyright notice shall be included in all copies or substantial portions of the software and associated documentation files (the "Software"). Copyright (c) 2020 Mariusz Postol In this section, you will learn how to cite the "Software" using the DOI number. A DOI number is a unique identifying number for the Software version. Because this repository has a DOI, use the DOI in your citation for the article or any derived work, like this: > Mariusz Postol, Object Oriented Internet: [Target Part Name], `https://github.com/mpostol/OPC-UA-OOI`, [year] DOI: [10.5281/zenodo.1198852](http://doi.org/10.5281/zenodo.1198852). or > Mariusz Postol, Object Oriented Internet: [Target Part Name], `https://github.com/mpostol/OPC-UA-OOI`, [year] DOI: [http://doi.org/10.5281/zenodo.1198852](http://doi.org/10.5281/zenodo.1198852). Replace [year] with the current year and [Target Part Name] with the name (or names) of the files you are referring to. ## How to follow up? GitHub offers `Discussions` as a space to connect with other members of the community. I hope that using the `Discussion` space you: - ask questions you’re wondering about - share ideas - engage with other community members - welcome others and are open-minded; remember that this is a community we build together I have activated the [Discussion][Discussion] space for this repository. Follow the [Discussion][Discussion] to be in touch. To follow any activity in the repository, switch on the `Watch` functionality. If you find the project interesting, please star the repository. Starring a repository also shows appreciation to the repository maintainer for their work. You can star repositories and topics to keep track of projects you find interesting and discover related content in your news feed. Check out [Saving repositories with stars](https://docs.github.com/en/get-started/exploring-projects-on-github/saving-repositories-with-stars) to get more. ## Conclusion I hope it is a good place to prototype and converge the OPC UA communication technology with `Semantic-Data`, Industry 4.0, Internet Of Things, Data Oriented Architecture, Plug and Play, Global Data Discovery, Selective Availability, etc. concepts. My goal is to bridge a gap between OPC UA technology and Industrial IT Application Domains. The presented approach is a real proposal for a new technology wave based on the existing Internet infrastructure because it allows vendors to provide generic off-the-shelf products tested independently for interoperability. ## Partnership Program I am a researcher and University associate who is passionate about applying knowledge and experience in building a Machine to Machine (M2M) meaningful interoperability based on OPC UA. Let's build it with you and for you. To join our effort and create an organizational context I have launched an open-access **Object-Oriented Internet Partnership Program**. Hence, maintenance of this repository and further development of the OPC UA Information Model Domain-Specific Language will be carried out under a broader concept described in the following article [Object-Oriented Internet Partnership Program][Sponsorship] **Consider joining**. Visit the section [How to be involved][SponsorshipToBeInvolved] to get more. I hope that thanks to this partnership program we will establish long-term mutually beneficial cooperation. Your participation is needed to make sure that the work will continue as expected. As a rule of thumb, the work priority is derived from community feedback. I strongly encourage community participation and contribution to this project. First, please fork the repository and commit your changes there. Once happy with your changes you can generate a 'pull request'. When contributing to this repository, please first discuss the change you wish to make via issue, email, or any other method with the owners of this repository before making a change. Please note we have a code of conduct, please follow it in all your interactions with the project. ## See Also ### Publications - [Object-Oriented Internet](https://youtube.com/playlist?list=PLC7zPvgw-YbyWss-0j_waddacgroLFTzi) This playlist on YouTube addresses research results on the systematic approach to the design of the meaningful Machine to Machine (M2M) communication targeting distributed mobile applications in the context of new emerging disciplines, i.e. Industry 4.0 and Internet of Things. - Postół M., Szymczak P. (2021) Object-Oriented Internet Cloud Interoperability. In: Paszynski M., Kranzlmüller D., Krzhizhanovskaya V.V., Dongarra J.J., Sloot P.M. (eds) Computational Science – ICCS 2021. ICCS 2021. Lecture Notes in Computer Science, vol 12745. Springer, Cham. - Available on [ResearchGate](https://www.researchgate.net/publication/352289895_Object-Oriented_Internet_Cloud_Interoperability) - ICCS 2021: INTERNATIONAL CONFERENCE ON COMPUTATIONAL Presentation is available on [YouTube](https://youtu.be/yXH09wuWEcA) - Postół M. (2020) Object-Oriented Internet Reactive Interoperability. In: Krzhizhanovskaya V. et al. (eds) Computational Science – ICCS 2020. ICCS 2020. Lecture Notes in Computer Science, vol 12141. Springer, Cham; [DOI: https://doi.org/10.1007/978-3-030-50426-7_31](https://doi.org/10.1007/978-3-030-50426-7_31) - Postół M. (2020) [Object-Oriented Internet Reactive Interoperability](https://www.researchgate.net/publication/341882427_Object-Oriented_Internet_Reactive_Interoperability), presentation, DOI: 10.13140/RG.2.2.33984.56323 - Mariusz Postol, [Machine to Machine Semantic-Data Based Communication: Comprehensive Survey](https://www.researchgate.net/publication/341165347_Machine_to_Machine_Semantic-Data_Based_Communication_Comprehensive_Survey) chapter in book [Computer Game Innovations 2018](https://www.researchgate.net/publication/335524620_Computer_Game_Innovations_2018), Publisher: Lodz University of Technology Press; ISBN: 978-83-7283-999-2 - ebook **Object Oriented Internet** contains description of this project - it is auto-generated content gathered from *.md files [![ebook](https://img.shields.io/badge/Gitbook-Release-brightgreen.svg)](https://commsvr.gitbook.io/ooi/tableofcontent) - Mariusz Postol, [Object Oriented Internet][OOI.ieeexplore], [3rd International Conference on Innovative Network Systems and Applications](https://fedcsis.org/2015/inetsapp), 2015, [IEEE Xplore Digital Library][OOI.ieeexplore] [![DOI](https://img.shields.io/badge/DOI-10.15439%2F015F160-blue)](https://fedcsis.org/proceedings/2015/pliks/160.pdf) ### Related documents - [Object-Oriented Internet Partnership Program][Sponsorship] - [How to be involved][SponsorshipToBeInvolved] - [WIKI of this project](https://github.com/mpostol/OPC-UA-OOI/wiki) - [API Browser (is available for sponsors - consider joining)](https://github.commsvr.com/AboutPartnershipProgram.md.html) - [OPC UA Address Space Model Designer (ASMD)][ASMD] - [My Blog: About enablers of future solutions](http://wwww.mpostol.wordpress.com/) - [OPC Unified Architecture – Main Technological Features][wordpress.OPCUAMTF] - [About me on LinkedIn](https://pl.linkedin.com/in/mpostol) - [References](REFERENCES.md) - this section contains links to selected internal and external resources. ### Related websites - [OPC Foundation](https://opcfoundation.org/) - [Sponsored by commsvr.com](http://www.commsvr.com/) [Sponsorship]: https://github.commsvr.com/AboutPartnershipProgram.md.html [SponsorshipToBeInvolved]: https://github.commsvr.com/AboutPartnershipProgram.md.html#how-to-be-involved [wordpress.OPCUAMTF]: https://mpostol.wordpress.com/2013/08/04/opc-unified-architecture-main-technological-features/ [ASMD]:https://github.com/mpostol/ASMD [DDSupport]:SemanticData/DesignDeploymentSupport.md [InterchangeXML]: https://www.researchgate.net/publication/334259707_OPC_UA_Address_Space_Interchange_XML [commserver]: http://www.commsvr.com/ [migration2os]: https://github.com/commsvr-com/migration2os [migration2osProj]: https://github.com/orgs/commsvr-com/projects [ConfigEditor]: https://github.com/mpostol/OPC-UA-OOI.ConfigEditor [OOIBookToC]: TableOfContent.md#reactive-communication [OOI.ieeexplore]:https://ieeexplore.ieee.org/abstract/document/7321562 [OOI.PO]:https://github.com/mpostol/ProcessObserver#process-observer [Discussion]: https://github.com/mpostol/OPC-UA-OOI/discussions ================================================ FILE: REFERENCES.md ================================================ # References ## Mariusz Postol - [Object-Oriented Internet](https://youtube.com/playlist?list=PLC7zPvgw-YbyWss-0j_waddacgroLFTzi) This playlist on YouTube addresses research results on the systematic approach to the design of the meaningful Machine to Machine (M2M) communication targeting distributed mobile applications in the context of new emerging disciplines, i.e. Industry 4.0 and Internet of Things. - Postół M., Szymczak P. (2021) Object-Oriented Internet Cloud Interoperability. In: Paszynski M., Kranzlmüller D., Krzhizhanovskaya V.V., Dongarra J.J., Sloot P.M. (eds) Computational Science – ICCS 2021. ICCS 2021. Lecture Notes in Computer Science, vol 12745. Springer, Cham. - Available on [ResearchGate](https://www.researchgate.net/publication/352289895_Object-Oriented_Internet_Cloud_Interoperability) - ICCS 2021: INTERNATIONAL CONFERENCE ON COMPUTATIONAL Presentation is available on [YouTube](https://youtu.be/yXH09wuWEcA) - Postół M. (2020) Object-Oriented Internet Reactive Interoperability. In: Krzhizhanovskaya V. et al. (eds) Computational Science – ICCS 2020. ICCS 2020. Lecture Notes in Computer Science, vol 12141. Springer, Cham; [DOI: https://doi.org/10.1007/978-3-030-50426-7_31](https://doi.org/10.1007/978-3-030-50426-7_31) - Postół M. (2020) [Object-Oriented Internet Reactive Interoperability](https://www.researchgate.net/publication/341882427_Object-Oriented_Internet_Reactive_Interoperability), presentation, DOI: 10.13140/RG.2.2.33984.56323 - Mariusz Postol, [Machine to Machine Semantic-Data Based Communication: Comprehensive Survey](https://www.researchgate.net/publication/341165347_Machine_to_Machine_Semantic-Data_Based_Communication_Comprehensive_Survey) chapter in book [Computer Game Innovations 2018](https://www.researchgate.net/publication/335524620_Computer_Game_Innovations_2018), Publisher: Lodz University of Technology Press; ISBN: 978-83-7283-999-2 - Mariusz Postol, [Object Oriented Internet](https://ieeexplore.ieee.org/abstract/document/7321562), [3rd International Conference on Innovative Network Systems and Applications](https://fedcsis.org/2015/inetsapp), 2015, [IEEE Xplore Digital Library](https://ieeexplore.ieee.org/abstract/document/7321562) [![DOI](https://img.shields.io/badge/DOI-10.15439%2F2015F160-blue)](https://fedcsis.org/proceedings/2015/pliks/160.pdf) - [Object Oriented Internet - C# deliverables supporting a new Machine To Machine (M2M) communication architecture; GitHub Open Source Software][OOI] - [GitHub UAOOI.Networking.UDPMessageHandler][OOI.Networking.UDPMessageHandler] - [GitHub UAOOI.Networking.ReferenceApplication][OOI.Networking.ReferenceApplication] - [GitHub UAOOI Releases Page][OOI.Releases] - [API Browser is available for sponsors- consider joining](https://github.commsvr.com/AboutPartnershipProgram.md.html) [OOI]:https://github.com/mpostol/OPC-UA-OOI [OOI.Networking.UDPMessageHandler]:https://github.com/mpostol/OPC-UA-OOI/tree/master/Networking/UDPMessageHandler [OOI.Networking.ReferenceApplication]:https://github.com/mpostol/OPC-UA-OOI/tree/master/Networking/ReferenceApplication [OOI.Releases]:https://github.com/mpostol/OPC-UA-OOI/releases - [Object Oriented Internet - online ebook][OOIBook] [OOIBook]:https://commsvr.gitbook.io/ooi/readme - [OPC UA Address Space Model Designer (ASMD); GitHub Open Source Software][ASMD] [ASMD]:https://github.com/mpostol/ASMD - [CommServer software family - management of the migration to open source.][migration2os] [migration2os]:https://github.com/commsvr-com/migration2os - [Postół M. (2016) OPC UA Address Space Interchange XML; Technical Report; DOI: 10.13140/RG.2.2.12228.37768][InterchangeXML] [InterchangeXML]: https://www.researchgate.net/publication/334259707_OPC_UA_Address_Space_Interchange_XML - [OPC Unified Architecture][wordpress.opc-ua] [wordpress.opc-ua]: https://mpostol.wordpress.com/opc-ua/ - [OPC UA Makes Reactive Object Oriented Internet Possible][wordpress.ReactiveOOI] [wordpress.ReactiveOOI]:https://mpostol.wordpress.com/2019/01/14/opc-ua-makes-reactive-object-oriented-internet-possible/ - [IoT versus SCADA/DCS Data Acquisition Patterns][wordpress.IoTVersus] [wordpress.IoTVersus]: https://mpostol.wordpress.com/2017/09/19/iot-versus-scadadcs/ - [OPC UA Makes Complex Data Processing Possible][wordpress.OPCUACD] [wordpress.OPCUACD]: https://mpostol.wordpress.com/2014/05/08/opc-ua-makes-complex-data-access-possible/ - [OPC UA Makes Smart User Interface Possible][wordpress.HMI] [wordpress.HMI]:https://mpostol.wordpress.com/2013/08/11/opc-ua-makes-smart-user-interface-possible/ - [OPC Unified Architecture – Main Technological Features][wordpress.OPCUAMTF] [wordpress.OPCUAMTF]: https://mpostol.wordpress.com/2013/08/04/opc-unified-architecture-main-technological-features/ - [Mariusz Postol. OPC UA Information Model Deployment. 2016. Version 1.2][CAS.OPCUAIMD] [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.2586616.svg)](https://doi.org/10.5281/zenodo.2586616) [CAS.OPCUAIMD]: https://www.researchgate.net/publication/331565040_OPC_UA_INFORMATION_MODEL_DEPLOYMENT - [CAS OPC UA Address Space Model Designer][CAS.ASMD] [CAS.ASMD]: https://github.com/mpostol/ASMD - [OPC Unified Architecture e-book, 2010][CAS.EBOOK] [CAS.EBOOK]:https://commsvr-com.github.io/Documentation/OPCUAebook/html/e34055b2-23e0-4f1a-9e00-52d75becaeec.htm ## ietf.org - [RFC 768: User Datagram ProtocolJ, August 1980][RFC.UDP] [RFC.UDP]:https://tools.ietf.org/html/rfc768 - [RFC 791: INTERNET PROTOCOL, September 1981][RFC.UDP.IP] [RFC.UDP.IP]:https://tools.ietf.org/html/rfc791 - [RFC 2616: Hypertext Transfer Protocol -- HTTP/1.1][RFC.HTTP] [RFC.HTTP]:https://tools.ietf.org/html/rfc2616 - [RFC 8259: The JavaScript Object Notation (JSON) Data Interchange Format][RFC.JSON] [RFC.JSON]:https://tools.ietf.org/html/rfc8259 - [IANA (Internet Assigned Numbers Authority), Hypertext Transfer Protocol (HTTP) Parameters.][IANAHTTPPARAMS] [IANAHTTPPARAMS]: http://www.iana.org/assignments/http-parameters/http-parameters.xml ## OPCFoundation - [OPC Unified Architecture Specification Part 3: Address Space Model, OPC Foundation, Rel. 1.04, 2017-11-22][Opc.UA.Part3] [Opc.UA.Part3]:https://opcfoundation.org/developer-tools/specifications-unified-architecture/part-3-address-space-model/ - [OPC Unified Architecture Specification Part 4: Services, OPC Foundation, Rel. 1.04, 2017-11-22][Opc.UA.Part4] [Opc.UA.Part4]:https://opcfoundation.org/developer-tools/specifications-unified-architecture/part-4-services/ - [OPC Unified Architecture Specification Part 5: Information Model, OPC Foundation, Rel. 1.04, 2017-11-22][OPC.UA.Part5] [OPC.UA.Part5]:https://opcfoundation.org/developer-tools/specifications-unified-architecture/part-5-information-model/ - [OPC Unified Architecture Specification Part 6: Mappings, OPC Foundation, Rel. 1.04, 2017-11-22][OPC.UA.Part6] [Opc.UA.Part6]:https://opcfoundation.org/developer-tools/specifications-unified-architecture/part-6-mappings/ - [OPC Unified Architecture Specification Part 7: Profiles Release 1.04][OPC.UA.Profiles] [OPC.UA.Profiles]:https://opcfoundation.org/developer-tools/specifications-unified-architecture/part-7-profiles/ - [OPC Unified Architecture Specification Part 14: PubSub Release 1.04 February 06, 2018][OPC.UA.PubSub] [OPC.UA.PubSub]: https://opcfoundation.org/developer-tools/specifications-unified-architecture/part-14-pubsub/ - [OPC Unified Architecture Specification Part 100: Device Information Model, OPC Foundation, 1.02, 2019-04-19][OPC.UA.DI] [OPC.UA.DI]:https://opcfoundation.org/developer-tools/specifications-unified-architecture/part-100-device-information-model/ - [OPC Unified Architecture for Analyzer, OPC Foundation, Rel. 1.1a, 2015-01-09][OPC.UA.ADI] [OPC.UA.ADI]:https://opcfoundation.org/developer-tools/specifications-opc-ua-information-models/opc-unified-architecture-for-analyzer-devices-adi/ - [mpostol/UA-ModelCompiler][OPC.UA.ModelCompiler] [OPC.UA.ModelCompiler]:https://github.com/mpostol/UA-ModelCompiler ## OASIS - [OASIS MQTT Version 3.1.1 specification][MQTT] [MQTT]:http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/mqtt-v3.1.1.html - [amqp-core-overview-v1.0 OASIS Advanced Message Queuing Protocol (AMQP) Version 1.0][AMQP] [AMQP]:http://docs.oasis-open.org/amqp/core/v1.0/os/amqp-core-overview-v1.0-os.html ## ISO - [ISO/IEC 19464:2014: Advanced Message Queuing Protocol (AMQP) v1.0][ISO.AMQP] [ISO.AMQP]: https://www.iso.org/standard/64955.html - [ISO/IEC 20922:2016: Message Queuing Telemetry Transport (MQTT) v3.1.1][ISO.MQTT] [ISO.MQTT]: https://www.iso.org/standard/69466.html ## IEEE - [IEEE 802.3 ETHERNET WORKING GROUP][IEEE] [IEEE]:http://www.ieee802.org/3/ ================================================ FILE: SUMMARY.md ================================================ # Object Oriented Internet * [Executive Summary](README.MD) * [Table of Content](TableOfContent.md) ## Introduction * [Introduction to Object-Oriented Internet](Preface.md) * [Introduction to Complex Data Processing](Introduction2ComplexDataProcessing.md) * [OPC Unified Architecture](OPCUnifiedArchitecture.md) * [OPC UA Main Technology Features](OPCUAMainTechnologyFeatures.md) ## Semantic-Data Processing * [Semantic-Data Processing Architecture](SemanticData/README.MD) * [Address Space and Address Space Model](SemanticData/AddressSpaceAddressSpaceModel.md) * [UA Information Model - Concept](SemanticData/InformationModelConcept.md) * [Standard Information Model](SemanticData/StandardInformationModel.md) * [Information Models Development](SemanticData/InformationModelsDevelopment.md) * [Adopting Companion Standard Models - Analyzer Devices Integration](SemanticData/AdoptingCompanionStandardADI.md) * [Companion Specification - Information Model for Analyzers](SemanticData/CompanionSpecificationInformationModelFforAnalyzers.md) * [ADI Information Model Adoption](SemanticData/ADIInformationModelAdoption.md) * [ADI Model Deployment](SemanticData/ADIModelDeployment.md) * [Address Space Model Life-cycle](SemanticData/InformationModelLifecycle.md) * [Design and Deployment Support](SemanticData/DesignDeploymentSupport.md) * [`Address Space Management` Implementation](SemanticData/UANodeSetValidation/README.MD) * [Address Space Prototyping Tool (asp.exe)](SemanticData/AddressSpaceComplianceTestTool/README.md) * [`UAModelDesignExport` Library](SemanticData/UAModelDesignExport/README.md) ## Internet of Things (IoT) Archetype * [Semantic-Data Message Centric Communication](Networking/README.MessageCentricCommunication.md) * [Internet of Things (IoT) Communication](Networking/README.MD) ## Reactive Communication * [UA Part 14: PubSub Main Technology Features](Networking/SemanticData/README.PubSubMTF.md) * [Reactive Networking of Semantic-Data Library](Networking/SemanticData/README.MD) * [Underlying Transport over UDP](Networking/UDPMessageHandler/README.md) * [Underlying Transport over MQTT](Networking/SemanticData/README_MQTTMapping.md) * [Underlying Transport over AMQP](Networking/SemanticData/README_AMQPMapping.md) * [Underlying Transport over Ethernet](Networking/SemanticData/README_EthernetMapping.md) * [DataSet and Communication Channel Association](Networking/SemanticData/READMEDataDiscoveryAndBinding.md) * [Encoding Library](Networking/Encoding/README.md) * [Getting Started Tutorial](Networking/SemanticData/READMEGettingStartedTutorial.md) * [Walk-through `ReferenceApplication`](Networking/ReferenceApplication/README.MD) * [`ReferenceApplication` Utilities](Networking/ReferenceApplication.Core/README.md) * [Azure Gateway DataRepository](Networking/DataRepository/AzureGateway/README.md) * [`ReferenceApplication` Consumer - Data Logger](Networking/DataRepository/DataLogger/README.md) * [`ReferenceApplication` Producer - Interoperability Test Data Generator](Networking/SimulatorInteroperabilityTest/README.md) * [`ReferenceApplication` Producer - Boilers Set Simulator](Networking/Simulator.Boiler/README.md) ## Configuration * [Configuration - Executive Summary](Configuration/README.md) * [Reactive Networking (RxNetworking) Configuration](Configuration/Networking/README.MD) * [DataBinding library](Configuration/DataBindings/README.MD) ## Global Data Discovery * [Concept](DataDiscovery/README.MD) * [Domain Model](DataDiscovery/DomainModel.md) ## References * [See also](REFERENCES.md) ================================================ FILE: SemanticData/ADIInformationModelAdoption.md ================================================ # ADI Information Model Adoption The main tasks of the ADI Information Model adoption are as follows: - Model extension by definition of vendor specific types. - Model customization by overriding components of the existing types. - Instantiation of all objects making up the ADI compliant Address Space. The Information Model defined in the ADI specification [[1]][OPC.UA.ADI] is generic, and to expose representative information for a selected analyzer device it must be extended further by defining parameters and/or subtypes derived from the base types provided in this specification. These types can be used to create all objects representing the analyzer device in the Address Space exposed by the UA Server. This process is described in more details in the section Design and Deployment Support). Each analyzer device must be represented in the Address Space by an object of a type indirectly derived from an abstract `AnalyserDeviceType`. Additionally, this object must be interconnected to the standard infrastructure of the Address Space. Many instance declarations in the ADI Information Model are optional or have only meta-definition (e.g. components representing channels); therefore they are not created by default as a result of instantiation of their parent and must be subject of further definition refining. Extending the ADI Information Model and refining the definitions provided in the specification should allow designers to adjust the Address Space exposed by the UA Server so as to represent truthfully the underlying process. ![Figure 1 New types definition](../CommonResources/Media/SemanticData/StandardInformationModel.ADINewTypesDefinition.PNG) To create a vendor specific Information Model, usually additional types must be defined. Figure 1 illustrates a set of new types derived indirectly form the AccessoryType. More examples on how to expand the model are described in the specification [[1]][OPC.UA.ADI] and in the [2]. ![Figure 2 Solution concept](../CommonResources/Media/SemanticData/StandardInformationModel.ADI.SolutionConcept.PNG) The Information Model representing a device is layered (Figure 2) and, therefore, the question how to distribute definitions among layers must be addressed. According to the best practice rules, the vendor specific part of the Information Model shall be layered as follows: - Base product type definitions. - Product models type definitions. - Instance declaration modifications. In this simple example no product models are recognized and, therefore, we have no definition on layer 2. According to the above rule the `FTNIR_Simulator` object has been located in the `FTNIRModelInstance` project and all types presented in Figure 1 are provided by the `FTNIRModel` project (Figure 2). ## See also - [[1] OPC Unified Architecture for Analyzer, OPC Foundation, Rel. 1.1a, 2015-01-09][OPC.UA.ADI] - [2] Wolfgang Mahnke, Stefan Helmut Leitner, Matthias Damm. OPC Unified Architecture. Berlin: Springer, 2009. [OPC.UA.ADI]:https://opcfoundation.org/developer-tools/specifications-opc-ua-information-models/opc-unified-architecture-for-analyzer-devices-adi/ ================================================ FILE: SemanticData/ADIModelDeployment.md ================================================ # ADI Model Deployment Taking into consideration that the browse mechanism is based on the incremental and relative passage along a nodes path, we can easily find out that each path must have a defined entry point, so we must address a question where to start. To meet this requirement, the OPC UA Specifications provide a predefined structure [[2]][OPC.UA.Part5] containing well defined nodes that can be used as anchors to start discovering the Address Space by clients. Information Model|Address Space -|- ![Figure 1 Object locations](../CommonResources/Media/SemanticData/StandardInformationModel.ADIObjectLocations.PNG)|![Figure 2 OPC UA Client topmost view](../CommonResources/Media/SemanticData/StandardInformationModel.ADI.ASOPCUAClientTopmostView.PNG) For the above example, a typical organization of the UA Server Address Space seen by a client is presented in Figure 2. Two objects can be distinguished in this hierarchy: Objects and `DeviceSet`. The purpose of the Objects is that all objects and variables that are not used for type definitions or other organizational purposes (e.g. organizing the Views) are accessible through hierarchical references starting from this node. `DeviceSet` is an object containing all the devices according to the DI Information Model specification [[1]][OPC.UA.DI]. To locate an object in the nodes layout presented in Figure 2, a `HasComponent` reference must be added to the object FT-IR spectrometer simulator (Figure 1). The `HasComponent` references are used to browse the Address Space from the top toward the bottom, but it is worth noting that in the model this reference is added to the destination node instead (Figure 1). The main reason is to keep the DI model representation invariant. The reference must be added at some point in time during the design phase, i.e. before the Address Space is instantiated. It is one of the main reasons why we need an independent view of the Information Model (planet) and Address Space (created). The Address Space content exposed by the UA Server can change in time reflecting any change of the underlying process. A good example, where the dynamic content of the Address Space is very useful, is hot-swappable device modules, like accessories. In this case the server must be able to discover the current configuration and instantiate/delete nodes and/or references according to this configuration. As it was stated above, to create the Address Space, the UA Server needs to instantiate nodes and interconnect them by References. According to the specification requirements, to create the Address Space, any UA Server must instantiate all mandatory objects that organize the Address Space and can be used as entry points to start browsing and discovering it. One of them is Objects (Figure 2) that is the server browse entry point for objects. ![Figure 3 Solution concept](../CommonResources/Media/SemanticData/StandardInformationModel.ADI.SolutionConcept.PNG) Having all objects organizing the Address Space, the UA Server creates instance of objects declared by the custom information model. In the above sample model, the server instantiates FT-IR spectrometer simulator as a component of the `DeviceSet` defined in the `OpcUaDiModel` (Figure 3). ![Figure 4 SpectrometerDeviceType inheritance hierarchy](../CommonResources/Media/SemanticData/ADI.SpectrometerDeviceTypeInheritanceHierarchy.PNG) After parent type instantiation, the server creates also all components of that type and all its base type components called instance declaration. This operation is applied recursively. In other words, in order to get full information about a subtype, the inherited instance declarations shall be collected from all types that can be found by recursively following the inverse `HasSubtype` references from the subtype. For the above example, the nodes under the FT-IR spectrometer simulator are a collection of all components (coupled by `HasComponent` reference to the type) traversing the inheritance chain Figure 4: - `SpectrometerDeviceType` - `AnalyserDeviceType` - `DeviceType` - `TopologyElementType` - `BaseObjectType` The newly created nodes have the same value of the `BrowseName` attribute as in the type definition. Since `BrowseName` values shall be unique in the context of the parent type definition, the new nodes may be created without any fear of breaking the browse path uniqueness rules. This browse path is always unique, because the `BrowseName` of the created main object must be unique in the context it is located in and all instance declarations shall have unique `BrowseName` values in the context of types they are defined by. More detailed discussion on the instance declaration concept can be found in the section Custom Models - Boiler. ![Figure 5 FTNIR Address Space](../CommonResources/Media/SemanticData/ADI.FTNIRAddressSpace.PNG) The inheritance mechanism and automatic creation of instance declaration cause that the objects in the Address Space exposed by the UA Server may have more components then their type definition. An example is the `FTNIR_Simulator` object (labeled FT-IR spectrometer simulator in Figure 5) with the `DisplayName` from the attribute of type `SpectrometerDeviceType`. The type has only two components: `ParameterSet` and `FactorySettings`, but in the exposed Address Space fragment (Figure 5), the other nodes (except `IRSourceSlot`, `Channel1` and `Channel2`) are created because they are defined as components in one of the basic types making up the inheritance hierarchy (Figure 4). The instantiation process may be modified by overriding the already defined components in the derived types and by adding new components manually. `IRSourceSlot`, `Channel1` and `Channel2` are added to the definition of the `FTNIR_Simulator` object (Figure 5). `IRSourceSlot` is of `AccessorySlotType`, and `Channel1` and `Channel2` are of `AnalyserChannelType`. All are defined as components of the `AnalyserDeviceType`. The definition of the `AnalyserDeviceType` allows designers to add as many components of the `AccessorySlotType` and `AnalyserChannelType` to the created object as it is necessary to represent the structure of an existing analyzer. `AnalyserDeviceType` defines cardinality 1..* for the channel meta-definition and, therefore, it imposes a limitation that at least one channel must be created. Components of the `AnalyserChannelType` are an example where the basic ADI Information Model must be customized to converge the Address Space with the represented underlying environment. The properties `SerialNumber`, `RevisionCounter`, `Manufacturer`, `Model`, `DeviceManual`, `DeviceRevision`, `SoftwareRevision` and `HardwareRevision` (Figure 5) are inherited from the `DeviceType` defined by the DI Information Model. Values of these properties can be defined as default values in the model or provided by the equipment at run-time. A very important `AnalyserStateMachine` component of the FT-IR spectrometer simulator is inherited from `AnalyserDeviceType`. `AnalyserStateMachine` is an object that represents behavior of the analyzer device using the state machine concept. This construct can be used to model discrete object behavior in terms of the states an object can reside in and transitions that can happen between those states. State machines are built as complex objects using dedicated `ObjectTypes`, `VariableTypes` and `ReferenceTypes`, whose semantics is governed by the rules that must be strictly observed. A state is a condition in which an object can be at some point during its lifetime, for some finite amount of time. A transition is a change of an object from one state (the source state) to another (the target state). The transition is triggered ("fires") when an event of interest - cause - to a given object occurs. According to the Information Model concept, causes are represented in the form of Methods that shall be called, but a vendor can define other items or have them be internal (i.e. nothing is listed causing the transition). There may also be an action associated with a triggered transition. This action is executed unconditionally before the object enters the target state and effects in the form of Events that are generated. The `AnalyserDeviceType` is also a source of definition of the Methods exposed by the UA Server (Figure 5). All the methods are collected as components of the `MethodSet` object. ## See also - [[1 ] Part 100: Device Information Model, OPC Foundation, 1.02, 2019-04-19][OPC.UA.DI] - [[2] Part 5: Information Model, OPC Foundation, Rel. 1.04, 2017-11-22][OPC.UA.Part5] [OPC.UA.DI]:https://opcfoundation.org/developer-tools/specifications-unified-architecture/part-100-device-information-model/ [OPC.UA.Part5]:https://opcfoundation.org/developer-tools/specifications-unified-architecture/part-5-information-model/ ================================================ FILE: SemanticData/AddressSpaceAddressSpaceModel.md ================================================ # Address Space and Address Space Model ## Address Space The primary objective of the OPC UA server is to expose information that can be used by clients to manage an underlying real-time process and the entire enterprise as a large whole with the main challenge of integrating systems and management resources into one homogeneous environment. Information describes the state and behavior of the process and the server must be able to transfer it in both directions. The main challenge of the OPC UA Address Space is to support this transfer in a unique and transparent way in spite of the process complexity and roles of clients in the enterprise management hierarchy. To make the data available for further processing by computer systems it must be assured that the data is: - **transferable** – there must exist mechanisms to transfer the data over the network, - **addressable** – there must exist services to selectively access the data, - **meaningful** – there must exist rules (unambiguous for all interoperating parties) how to apply the semantics to bit patterns. OPC UA Address Space concept is all about exposing the data in a standard way, so it must address the above mentioned issues, but the description of mechanisms involved in the data transfer is outside this section scope. Generally speaking, to select a particular target piece of complex data we have two options: random access or browsing. Random access requires that the target item must have been assigned a globally unique address and the clients must know it in advance. We call them well-known addresses. The browsing approach means that the clients walk down available paths from entity to entity that build up the structure of data - a data graph - using references interconnecting entities. This process is costly because instead of jumping to a target, we need to discover the graph step by step using references. The main advantage of this approach is that the clients do not need any prior knowledge of the data structure – the clients of this type are called generic clients. To minimize the cost, after having found the target, every operation targeting it can use direct access. Random access is possible since the browsing path is convertible to a globally unique direct address. It seems that, in spite of the access method, we have to assign an address to all of the accessible items in the representation of the data structure. We therefore call the collection of these items the Address Space [\[1\]][CAS.ASMD], [2], [\[3\]][Opc.UA.Part3]. > In this concept this atomic addressable item is called a node. Each node is a collection of attributes (value-holders) that have values accessible locally in context of the node. To enable browsing, i.e. to represent information about the internal structure of the nodes graph, nodes are interconnected by references (address-holders of coupled nodes). ## Address Space Meta-Model The main goal of exposing a graph of nodes to clients is to create a meaningful context for the underlying process data. To create the Address Space, we need to instantiate nodes and interconnect them by references. Instantiating nodes requires assigning appropriate values to attributes. To make information internally consistent as a large whole, we need rules governing the creation and modification processes, i.e. Address Space Meta-Model. According to the model, the roles of nodes in the graph are well defined as a result of the definition of a set of types called `NodeClass`. In other words, the node is an instance of the selected `NodeClass`. Available `NodeClass` types are predefined, i.e. the Address Space Meta-Model provides a strictly defined and non-extensible set of `NodeClass` types. Each one is assigned a dedicated function to represent well-defined information at run-time. `NodeClass` is a formal description of the node defining the allowed attributes and references. Each node must be an instance of the selected `NodeClass`. ![Figure 1. Address Space Model](../CommonResources/Media/InformationModelClassDisgram.png) The Address Space Model defines the following set of `NodeClass` types (Figure 1): - `View`: defines a subset of nodes in the Address Space. - `ObjectType`: provides definition for objects. - `Object`: is used to represent systems, system components, real-world objects and software objects. - `ReferenceType`: is used to define the meaning of the nodes relationship. - `DataType`: is used to define simple and complex data types of the Variable values. - `VariableType`: is used to provide type definition for variables. - `Variable`: is used as real-time process data holders, i.e. it provides a value. - `Method`: is a lightweight function, whose scope is bounded by an owning object. All the presented in above figure types derive from common Root `NodeClass`. Each View `NodeClass` represents a subset of the nodes in the Address Space. The entire Address Space is the default view. Each node in a view may contain only a subset of its references, as defined by the creator of the view. The View instance acts as the root for the nodes in the represented view. `ObjectType` provides definition for objects. `Object` instance are used to represent systems, system components, real-world objects and software objects. It is worth noting that the `ReferenceType` are visible in the Address Space. In contrast, a reference instance of this type is an inherent part of a node and no `NodeClass` is used to represent reference instances. In other words, any node is a collection of references, so there is no need to instantiate an additional object as reference with the role of a nodes couple. The `Variable` node is used to be a holder of the process data – it has a `Value` attribute. To be used as the real-time process state representation, the value of the `Value` attribute must be bound to a real data source, e.g. a sensor or actuator. The `Method` node represents functions that can be called by the clients connected to the server. In this case the real-time process bindings are responsible for conveying the parameters current values, invoking the represented function and returning the execution result. Both classes are the main building blocks that allow the server to couple the exposed address space` with the current state and behavior of the underlying process. The `DataType` is used to define simple and structured data types. Data types are used to describe the bits pattern of the `Value` attribute of `Variable` and their `VariableType` nodes. Therefore each `Variable` and `VariableType` refers to an instance of the `DataType` `NodeClass`. Address Space Meta-Model is an intermediate language used by the Information Model to formally describe the content of the Address Space instance. Detailed description is covered in the section [UA Information Model - Concept][UAInformationModelConcept]. Accessing information by clients is the first aspect of controlling the information stream between the clients and underling process. Another one is creating and maintaining the Address Space in real-time. This activity includes also creation of data bindings with the underlying real-time process. This topic is described in more details in the section [*Address Space Model Life-cycle*][ASMLC]. ## See also - [1] [Address Space Model Designer (ASMD)][CAS.ASMD] - [2] Wolfgang Mahnke, Stefan Helmut Leitner, Matthias Damm. OPC Unified Architecture. Berlin: Springer, 2009. - [3] [OPC Unified Architecture Specification Part 3: Address Space Model, OPC Foundation, Rel. 1.04, 2017-11-22][Opc.UA.Part3] - [4] [Address Space Model Life-cycle][ASMLC] - [5] [UA Information Model - Concept][UAInformationModelConcept] [Opc.UA.Part3]:https://opcfoundation.org/developer-tools/specifications-unified-architecture/part-3-address-space-model/ [CAS.ASMD]:https://github.com/mpostol/ASMD [UAInformationModelConcept]:InformationModelConcept.md [ASMLC]:InformationModelLifecycle.md ================================================ FILE: SemanticData/AddressSpaceComplianceTestTool/App.config ================================================ ================================================ FILE: SemanticData/AddressSpaceComplianceTestTool/CommandLineSyntax/Extensions.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using CommandLine; using System; using System.Collections.Generic; namespace UAOOI.SemanticData.AddressSpacePrototyping.CommandLineSyntax { internal static class Extensions { internal static void Parse(this string[] args, Action RunCommand, Action> dump) { using (Parser parser = Parser.Default) { ParserResult parserResult = parser.ParseArguments(args).WithParsed((T opts) => { RunCommand(opts); }).WithNotParsed(dump); } } } } ================================================ FILE: SemanticData/AddressSpaceComplianceTestTool/CommandLineSyntax/Options.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2021, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ using CommandLine; using CommandLine.Text; using System.Collections.Generic; namespace UAOOI.SemanticData.AddressSpacePrototyping.CommandLineSyntax { /// /// Class Options - defines command line switches used to control behavior of the application. /// internal class Options { [Value(0, Required = true, HelpText = "Specifies the input file to convert. At least one file containing Address Space definition compliant with UANodeSet schema must be specified. Many files may be entered at once.", MetaValue = "filePath")] public IEnumerable Filenames { get; set; } [Option('e', "export", HelpText = "Specifies the output file path containing the ModelDesign XML document.", MetaValue = "filePath")] public string ModelDesignFileName { get; set; } [Option('s', "stylesheet", HelpText = "Name of the stylesheet document (XSLT - eXtensible Stylesheet Language Transformations). With XSLT you can transform an XML document into any text document.", MetaValue = "stylesheetName")] public string Stylesheet { get; set; } [Option('n', "namespace", Required = true, HelpText = "Specifies the namespace for the generated types. If not specified last imported model is used for export.", MetaValue = "ns")] public string IMNamespace { get; set; } [Option("nologo", HelpText = "If present suppresses the banner.")] public bool NoLogo { get; set; } [Usage(ApplicationAlias = "asp")] public static IEnumerable Examples => new List() { new Example("Validate UANodeSet", new Options() { Filenames = new List(){ @"XMLModels\DataTypeTest.NodeSet2.xml", @"XMLModels\ReferenceTest.NodeSet2.xml", @"XMLModels\ObjectTypeTest.NodeSet2.xml", @"XMLModels\VariableTypeTest.NodeSet2.xml" } }), new Example("Recover ModelDesign", new Options(){ Filenames = new List(){ @"XMLModels\DataTypeTest.NodeSet2.xml" }, ModelDesignFileName = @"XMLModels\DataTypeTest.ModelDesign.xml", IMNamespace = "http://cas.eu/UA/CommServer/UnitTests/DataTypeTest"}) }; }; } ================================================ FILE: SemanticData/AddressSpaceComplianceTestTool/DoDisplayHelp.cmd ================================================ asp --help --version ================================================ FILE: SemanticData/AddressSpaceComplianceTestTool/DoExport.cmd ================================================ asp "XMLModels\DataTypeTest.NodeSet2.xml" "XMLModels\ReferenceTest.NodeSet2.xml" "XMLModels\ObjectTypeTest.NodeSet2.xml" "XMLModels\VariableTypeTest.NodeSet2.xml" -e "XMLModels\DataTypeTest.ModelDesign.xml" -s XMLstylesheet -n "http://cas.eu/UA/CommServer/UnitTests/DataTypeTest" ================================================ FILE: SemanticData/AddressSpaceComplianceTestTool/DoExportXMLModels.cmd ================================================ asp "XMLModels\DataTypeTest.NodeSet2.xml" -e "XMLModels\DataTypeTest.asp.xml" -s XMLstylesheet -n "http://cas.eu/UA/CommServer/UnitTests/DataTypeTest" asp "XMLModels\ObjectTypeTest.NodeSet2.xml" -e "XMLModels\ObjectTypeTest.asp.xml" -s XMLstylesheet -n "http://cas.eu/UA/CommServer/UnitTests/ObjectTypeTest" asp "XMLModels\ReferenceTest.NodeSet2.xml" -e "XMLModels\ReferenceTest.asp.xml" -s XMLstylesheet -n "http://cas.eu/UA/CommServer/UnitTests/ReferenceTest" asp "XMLModels\VariableTypeTest.NodeSet2.xml" -e "XMLModels\VariableTypeTest.asp.xml" -s XMLstylesheet -n "http://cas.eu/UA/CommServer/UnitTests/VariableTypeTest" ================================================ FILE: SemanticData/AddressSpaceComplianceTestTool/DoValidate.cmd ================================================ asp "XMLModels\DataTypeTest.NodeSet2.xml" "XMLModels\ReferenceTest.NodeSet2.xml" "XMLModels\ObjectTypeTest.NodeSet2.xml" "XMLModels\VariableTypeTest.NodeSet2.xml" ================================================ FILE: SemanticData/AddressSpaceComplianceTestTool/Program.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2022, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ using CommandLine; using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Reflection; using System.Threading.Tasks; using UAOOI.Common.Infrastructure.Diagnostic; using UAOOI.SemanticData.AddressSpace.Abstractions; using UAOOI.SemanticData.AddressSpacePrototyping.CommandLineSyntax; using UAOOI.SemanticData.InformationModelFactory; using UAOOI.SemanticData.UAModelDesignExport; using UAOOI.SemanticData.UANodeSetValidation; namespace UAOOI.SemanticData.AddressSpacePrototyping { /// /// Class Program - main entry point to the OPC UA Address Space Prototyping tool (asp.exe) /// public class Program { #region public API public static void Main(string[] args) { Program program = new Program(); try { AssemblyName myAssembly = Assembly.GetExecutingAssembly().GetName(); program.AssemblyHeader = $"Address Space Prototyping (asp.exe) Version {myAssembly.Version}"; program.TraceSource.TraceData(TraceEventType.Information, 1637887218, program.AssemblyHeader); program.TraceSource.TraceData(TraceEventType.Information, 1637887219, Copyright); program.Execute(args); } catch (Exception ex) { string errorMessage = $"Program stopped by the exception: {ex.Message}"; Console.WriteLine(errorMessage); program.TraceSource.TraceData(TraceEventType.Critical, 828896092, errorMessage); Environment.Exit(1); } } internal async Task Run(string[] args) { try { //TODO Integrate with the UA-ModelCompiler #648 https://github.com/commandlineparser/commandline/wiki/Verbs await Task.Run(() => args.Parse(Do, HandleErrors)); } catch (Exception ex) { Console.WriteLine(string.Format("Program stopped by the exception: {0}", ex.Message)); throw; } } private void DoValidateAndExportModel(Options options) { IAddressSpaceContext addressSpace = AddressSpaceFactory.AddressSpace(); DoValidateAndExportModel(options, addressSpace); } internal void DoValidateAndExportModel(Options options, IAddressSpaceContext addressSpace) { IModelDesignExport exporter = ModelDesignExportAPI.GetModelDesignExport(); //creates new instance of the ModelDesignExport class that captures functionality supporting export of the OPC UA Information Model represented //by an XML file compliant with UAModelDesign schema. bool _exportModel = false; IModelFactory modelFactory = null; if (!string.IsNullOrEmpty(options.ModelDesignFileName)) { modelFactory = exporter.GetFactory(); //Sets the information model factory, which can be used to export a part of the OPC UA Address Space. _exportModel = true; } if (options.Filenames == null) throw new ArgumentOutOfRangeException($"{nameof(options.Filenames)}", "List of input files to convert is incorrect. At least one file UANodeSet must be entered."); if (string.IsNullOrEmpty(options.IMNamespace)) throw new ArgumentOutOfRangeException("namespace", "A namespace must be provided to validate associated model"); Uri uri = new Uri(options.IMNamespace); //m_TraceEvent.WriteTraceMessage(TraceMessage.DiagnosticTraceMessage("Entering AddressSpaceContext creator - starting creation the OPC UA Address Space.")); IUANodeSet _standard = UANodeSetValidation.XML.UANodeSet.ReadUADefinedTypes(); //m_TraceEvent.WriteTraceMessage(TraceMessage.DiagnosticTraceMessage("Address Space - the OPC UA defined has been uploaded.")); addressSpace.ImportUANodeSet(_standard); foreach (string _path in options.Filenames) { FileInfo _fileToRead = new FileInfo(_path); if (!_fileToRead.Exists) { string message = $"The file {_fileToRead.FullName} doesn't exist."; TraceSource.TraceData(TraceEventType.Critical, 1637887215, message); throw new FileNotFoundException(message, _path); } TraceSource.TraceData(TraceEventType.Verbose, 1637887216, $"Importing UANodeSet document from file {_fileToRead.FullName}"); IUANodeSet nodeSet = UANodeSetValidation.XML.UANodeSet.ReadModelFile(_fileToRead); addressSpace.ImportUANodeSet(nodeSet); } TraceSource.TraceData(TraceEventType.Verbose, 1637887217, $"Validating and exporting a model from namespace {uri}"); addressSpace.ValidateAndExportModel(uri, modelFactory); //Validates and exports the selected model. if (_exportModel) { TraceSource.TraceData(TraceEventType.Verbose, 1637887217, $"Writing model to XML file {options.ModelDesignFileName}"); exporter.ExportToXMLFile(options.ModelDesignFileName, options.Stylesheet); //Serializes the already generated model and writes the XML document to a file. } } internal ITraceSource DebugITraceSource { set => TraceSource = value; } #endregion public API #region private private string AssemblyHeader = String.Empty; private ITraceSource TraceSource = new TraceSourceBase("AddressSpacePrototyping"); private const string Copyright = "Copyright(c) 2022 Mariusz Postol"; private bool Running = true; private void Execute(string[] args) { Task heartbeatTask = Heartbeat(); Run(args).Wait(); Running = false; heartbeatTask.Wait(); } private async Task Heartbeat() { await Task.Run(async () => { int counter = 0; while (Running) { await Task.Delay(1000); Console.Write("\r"); if (counter % 2 == 0) Console.Write(@"\"); else Console.Write("/"); counter++; } TraceSource.TraceData(TraceEventType.Verbose, 918215642, $"Execution time = {counter}s"); Console.WriteLine(); Console.WriteLine($"Execution time = {counter}s"); }); } private void HandleErrors(IEnumerable errors) { foreach (Error _item in errors) { string _processing = _item.StopsProcessing ? "and it stops processing" : "but the processing continues"; string errorMessage = $"The list of command line parameters has the error: {_item.ToString()} {_processing}."; TraceSource.TraceData(TraceEventType.Error, 1230327407, errorMessage); Console.WriteLine(errorMessage); } } //TODO private void Do(Options options) { PrintLogo(options.NoLogo); TraceSource.TraceData(TraceEventType.Verbose, 6710129, "Creating Address Space populated using Standard Model. It will take a while ..."); //TODO Integrate with the UA-ModelCompiler #648 if (true) { //TODO Define independent Address Space API #645 ////m_TraceEvent.WriteTraceMessage(TraceMessage.DiagnosticTraceMessage("Entering AddressSpaceContext creator - starting creation the OPC UA Address Space.")); //IUANodeSet _standard = UANodeSetValidation.XML.UANodeSet.ReadUADefinedTypes(); ////m_TraceEvent.WriteTraceMessage(TraceMessage.DiagnosticTraceMessage("Address Space - the OPC UA defined has been uploaded.")); //IAddressSpaceContext addressSpace = AddressSpaceFactory.AddressSpace(); //addressSpace.ImportUANodeSet(_standard); DoValidateAndExportModel(options); //, addressSpace); } else ; } private void PrintLogo(bool nologo) { if (nologo) return; Console.WriteLine(AssemblyHeader); Console.WriteLine(Copyright); Console.WriteLine(); } #endregion private #region DEBUG [Conditional("DEBUG")] internal void GetTraceSource(Action geter) { geter(TraceSource); } #endregion DEBUG } } ================================================ FILE: SemanticData/AddressSpaceComplianceTestTool/Properties/AssemblyInfo.cs ================================================ //_______________________________________________________________ // Title : Assembly info for: Address Space Prototyping // System : Microsoft VisualStudio 2015 / C# // // Copyright (C) 2022 Mariusz Postol LODZ POLAND // +48 608 619 899 // mpostol@cas.eu // https://github.com/mpostol/OPC-UA-OOI //_______________________________________________________________ using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; [assembly: AssemblyTitle("Address Space Prototyping")] [assembly: AssemblyDescription("Command Line OPC UA Address Space Prototyping Tool")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("Mariusz Postol")] [assembly: AssemblyProduct("Object Oriented Internet")] [assembly: AssemblyCopyright("Copyright (C) 2022 Mariusz Postol LODZ POLAND")] [assembly: AssemblyTrademark("Object Oriented Internet")] [assembly: AssemblyCulture("")] [assembly: Guid("157926b5-f6a5-4496-84c2-f5f9dae937ae")] [assembly: AssemblyVersion("6.5.6.*")] [assembly: AssemblyFileVersion("6.5.6")] [assembly: InternalsVisibleToAttribute("AddressSpaceComplianceTestToolUnitTests, PublicKey=00240000048000009400000006020000002400005253413100040000010001005b97a0972ff6b1" + "3a8a9ff9c09503aea0e5e2fe29cb2275a0c0942182f4c3431814b6bc9a556d9fe0d7e7823439c1" + "ba28521f6318e4c936c4461604ef668e9686c2021571b093e1bfba071b373bc56a07a3afdc120c" + "5313d39a935cda64b759f857ebb3db483641444a5347e1564f8ba6d4fad2f968d3caf9991a4fa6" + "aa019ebe")] ================================================ FILE: SemanticData/AddressSpaceComplianceTestTool/Properties/AssemblyInfo.tt ================================================ <#@ template debug="false" hostspecific="false" language="C#" #> <#@ output extension=".cs" #> //_______________________________________________________________ // Title : Assembly info for: <#=m_AssemblyTitle#> // System : Microsoft VisualStudio 2015 / C# // // <#=AssemblyCopyright#> // <#=Phone#> // <#=Email#> // <#=Url#> //_______________________________________________________________ using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; [assembly: AssemblyTitle("<#=m_AssemblyTitle#>")] [assembly: AssemblyDescription("Command Line OPC UA Address Space Prototyping Tool")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("<#=AssemblyCompany#>")] [assembly: AssemblyProduct("<#=SemanticDataProduct#>")] [assembly: AssemblyCopyright("<#=AssemblyCopyright#>")] [assembly: AssemblyTrademark("<#=ProductTrademark#>")] [assembly: AssemblyCulture("")] [assembly: Guid("157926b5-f6a5-4496-84c2-f5f9dae937ae")] [assembly: AssemblyVersion("<#= SemanticDataVersion #>.*")] [assembly: AssemblyFileVersion("<#= SemanticDataVersion #>")] [assembly: InternalsVisibleToAttribute("AddressSpaceComplianceTestToolUnitTests, PublicKey=00240000048000009400000006020000002400005253413100040000010001005b97a0972ff6b1" + "3a8a9ff9c09503aea0e5e2fe29cb2275a0c0942182f4c3431814b6bc9a556d9fe0d7e7823439c1" + "ba28521f6318e4c936c4461604ef668e9686c2021571b093e1bfba071b373bc56a07a3afdc120c" + "5313d39a935cda64b759f857ebb3db483641444a5347e1564f8ba6d4fad2f968d3caf9991a4fa6" + "aa019ebe")] <#@ include file = "..\..\..\CommonResources\T4Definitions\Model.t4" #> <#+ string m_AssemblyTitle = "Address Space Prototyping"; #> ================================================ FILE: SemanticData/AddressSpaceComplianceTestTool/README.md ================================================ # Address Space Prototyping Tool (asp.exe) ## Getting Started The **OPC UA Address Space Prototyping** (asp.exe) is an engineering tool and can be utilized in several ways: - creates `UA Address Space` populated using input XML files compliant with the `UANodeSet` schema defined in Part 6 Annex F. - validates an instance of the `UA Address Space` against the OPC UA specification 1.04. - exports XML file compliant with the `ModelDesign` schema that may be used as the input for the [OPC UA Information Model Compiler][OPC.UA.ModelCompiler]. These instructions will get you a copy of the software up and running on your local machine for development and testing purposes. See deployment for notes on how to deploy the project on a live system. ## Syntax ```txt asp { filePath } [(-e | --export=) filePath] [ (-s | --stylesheet=)*stylesheetName* ] (-n | --namespace=) ns [--nologo] asp [--help] [--version] asp [help] [version] ``` ### Argument | Argument | Description | | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | *filePath* | Specifies the input file to populate the internal `UA Address Space`. At least one file containing `UA Address Space` model compliant with `UANodeSet` schema must be specified. Many files can be entered at once. | ### General Options | Option | Description | | --------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `help` | Displays command syntax and options for the tool. It halts processing and displays the help screen. The help screen is also displayed when the parsing process fails, along with the clear and explicit description of every error encountered. The switch or the built-in `help` verb can be used. | | `version` | Prints version information. The switch or the built-in `version` verb can be used. | | `nologo` | Suppresses the banner. | ### ModelDesign Options | Option | Description | | ----------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | | `e`[ `xport` ] *path* | Specifies the output file containing the ModelDesign XML document. | | `s`[ `tylesheet` ] *stylesheetName* | Name of the stylesheet document (XSLT - eXtensible Stylesheet Language Transformations). With XSLT you can transform an XML document into any text document. | | `n`[ `amespace` ] *ns* | Specifies the namespace of the model to be processed. | ### Command-line Syntax The following table describes the notation used to indicate command-line syntax. | Notation | Description | | ------------------------------- | -------------------------------------------------- | | Text without brackets or braces | Items you must type as shown | | Text Italic | Placeholder for which you must supply a value | | [Text inside square brackets] | Optional items | | {Text inside braces} | Items that can be repeated | | \| Vertical bar | Separator for mutually exclusive items; choose one | ## Deployment The current binary release containing ready to use application is available on the repository [Releases][OOI.Releases] page. Download and run the file to unzip the content to the selected folder. Now you may run the application file `asp.exe`. The section `Examples` cover details on how to get started using attached examples. The application is located on the GitHub at [OPC-UA-OOI][OPC-UA-OOI] and maintained as the project - [`OPC-UA-OOI/SemanticData/AddressSpaceComplianceTestTool/`](https://github.com/mpostol/OPC-UA-OOI/tree/master/SemanticData/AddressSpaceComplianceTestTool). ## Examples ### Common Task Scrips There are the following Windows Command shell scripts attached to the software and located in the main folder where the downloaded file has been unzipped: - `DoDisplayHelp.cmd` - displays a help screen and version information - `DoValidate.cmd` - validates the `UA Address Space` content populated using the `XMLModels\DataTypeTest.NodeSet2.xml` XML document - `DoExport.cmd` - validates the `UA Address Space` populated as above and exports the model to the `XMLModels\DataTypeTest.ModelDesign.xml` > NOTE: The folder `XMLModels` also contains an example `DataTypeTest.NodeSet2.xml` XML document compliant with `UANodeSet` used by above-mentioned scripts. For your convenience, the folder also contains relevant schema files. ### How to Display Help Run the script `DoDisplayHelp.cmd` or enter the following command ``` C# asp --help --version ``` It allows you to display a help screen and version information. A similar screen is used to report syntax errors to the end user. ### How to validate `UA Address Space` consistency Run the script `DoValidate.cmd` or enter the following command ``` txt asp "XMLModels\DataTypeTest.NodeSet2.xml" ``` The screen will contain a verbose listing of diagnostic messages related to the processing of the input file `DataTypeTest.NodeSet2.xml` The messages can be examined to improve the files used to populate the `UA Address Space` and remove any inconsistency against the OPC UA Specification 1.04. ### How to Export Selected Model to ModelDesign Run the script `DoExport.cmd` or enter a similar command to the following one ``` txt asp "XMLModels\DataTypeTest.NodeSet2.xml" -e "XMLModels\DataTypeTest.ModelDesign.xml" -s XMLstylesheet ``` The screen will contain a verbose listing of diagnostic messages related to the processing of the input file - `DataTypeTest.NodeSet2.xml` in this example. All inconsistency problems will be fixed on a best-effort attempt basis. Finally, the model will be exported to the file `XMLModels\DataTypeTest.ModelDesign.xml`. The model contains the XSLT instruction ```XML ``` to transform XML documents into other formats (like transforming XML into HTML, PDF, mark-down, etc). - XSL (eXtensible Stylesheet Language) is a styling language for XML. - XSLT stands for XSL Transformations. Have a look at W3C documentation [XSLT Introduction][XSLT Introduction] to get more about XML transformation ### Remarks - **Versioning** We use [Semantic Versioning 2.0.0](http://semver.org/) for versioning. For the versions available, see the [releases][OOI.Releases] page of the project. - **Related work** The `ModelDesign` exporter has been derived from the [CAS Address Space Model Designer][CAS.ASMD] component. - **Contributing** Please read [CONTRIBUTING.md][CONTRIBUTING.md] for details, and the process for submitting pull requests to us. Let me know in case any problems related to documentation, application asp.exe or the libraries is encountered. - **License** This software is licensed under the MIT License - see the [LICENSE.md][LICENSE.md] file for details. - **Version limitations** ## See also - [Mariusz Postol. OPC UA Information Model Deployment. 2016. Version 1.2][CAS.OPCUAIMD] [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.2586616.svg)](https://doi.org/10.5281/zenodo.2586616) - [![ebook](https://img.shields.io/badge/OOI-read_on_Gitbook-brightgreen.svg)](https://commsvr.gitbook.io/ooi) - the ebook **Object Oriented Internet** contains description of this project. - [OPC-UA-OOI Home Page][OPC-UA-OOI] - [OPC Unified Architecture][wordpress.opc-ua] - [OPC Unified Architecture - Main Technological Features][wordpress.OPCUAMTF] - [OPC UA Makes Complex Data Processing Possible][wordpress.OPCUACD] - [OPC UA Address Space Model Designer][CAS.ASMD] - [XSLT Introduction][XSLT Introduction] - [OPC UA Information Model Compiler][OPC.UA.ModelCompiler] - [How to contribute][CONTRIBUTING.md] [CAS.OPCUAIMD]: https://zenodo.org/record/2586616#.XdAT5FdKiUk [wordpress.opc-ua]: https://mpostol.wordpress.com/opc-ua/ [wordpress.OPCUAMTF]: https://mpostol.wordpress.com/2013/08/04/opc-unified-architecture-main-technological-features/ [wordpress.OPCUACD]: https://mpostol.wordpress.com/2014/05/08/opc-ua-makes-complex-data-access-possible/ [LICENSE.md]: https://github.com/mpostol/OPC-UA-OOI/blob/master/license.md [CONTRIBUTING.md]: https://github.com/mpostol/OPC-UA-OOI/blob/master/CONTRIBUTING.md [OPC-UA-OOI]: https://github.com/mpostol/OPC-UA-OOI [OOI.Releases]: https://github.com/mpostol/OPC-UA-OOI/releases [CAS.ASMD]: https://github.com/mpostol/ASMD [OPC.UA.ModelCompiler]: https://github.com/mpostol/UA-ModelCompiler#opc-ua-information-model-compiler- [XSLT Introduction]: https://www.w3schools.com/xml/xsl_intro.asp ================================================ FILE: SemanticData/AddressSpaceComplianceTestTool/SemanticData.AddressSpaceComplianceTestTool.csproj ================================================  Debug AnyCPU {05DB9E60-B12B-4AA3-8A7C-514F87CFF464} Exe Properties UAOOI.SemanticData.AddressSpacePrototyping asp v4.7.2 512 true AnyCPU true full false bin\Debug\ TRACE;DEBUG prompt 4 false IDE0001,IDE0002,IDE0003;IDE0049 AnyCPU pdbonly true bin\Release\ TRACE prompt 4 true OPCUAOOIKey.snk UAOOI.SemanticData.AddressSpacePrototyping.Program ..\..\packages\CommandLineParser.2.9.1\lib\net461\CommandLine.dll ..\..\packages\CommonServiceLocator.2.0.6\lib\net47\CommonServiceLocator.dll ..\..\packages\UAOOI.Common.Infrastructure.6.4.7\lib\netstandard2.0\UAOOI.Common.Infrastructure.dll True True AssemblyInfo.tt PreserveNewest PreserveNewest PreserveNewest TextTemplatingFileGenerator AssemblyInfo.cs PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest {6d20785d-0451-46a9-9ac2-ec66b7c0d18a} SemanticData.InformationModelFactory {c970c14c-98aa-48a9-9f6f-d00c92fa6cef} SemanticData.UAModelDesignExport {352378a0-8b2e-4679-bb44-fd0bcc8467d9} SemanticData.UANodeSetValidation ================================================ FILE: SemanticData/AddressSpaceComplianceTestTool/XMLModels/DataTypeTest.NodeSet2.xml ================================================  http://cas.eu/UA/CommServer/UnitTests/DataTypeTest i=1 i=2 i=3 i=4 i=5 i=6 i=7 i=8 i=9 i=10 i=11 i=13 i=12 i=15 i=14 i=16 i=17 i=18 i=20 i=21 i=19 i=22 i=26 i=27 i=28 i=47 i=46 i=35 i=36 i=48 i=45 i=40 i=37 i=38 i=39 AbstractEnumerationDataType ns=1;i=10 i=29 EnumStrings i=68 i=78 ns=1;i=9 Field1 Field2 EnumerationDataType Enumeration DataType derived from abstract type ns=1;i=12 ns=1;i=9 EnumValues i=68 i=78 ns=1;i=11 i=7616 1 Field3 AbstractStructure Abstract structure i=22 DerivedStructure ns=1;i=13 Derived from Number Default XML ns=1;i=13 ns=1;i=15 i=76 Default XML ns=1;i=22 ns=1;i=24 i=76 DataTypeTest ns=1;i=4 ns=1;i=15 ns=1;i=24 i=92 i=72 PHhzOnNjaGVtYQ0KICB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEi DQogIHhtbG5zOnVhPSJodHRwOi8vb3BjZm91bmRhdGlvbi5vcmcvVUEvMjAwOC8wMi9UeXBlcy54 c2QiDQogIHhtbG5zOnRucz0iaHR0cDovL2Nhcy5ldS9VQS9Db21tU2VydmVyL1VuaXRUZXN0cy9E YXRhVHlwZVRlc3QiDQogIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2Nhcy5ldS9VQS9Db21tU2Vy dmVyL1VuaXRUZXN0cy9EYXRhVHlwZVRlc3QiDQogIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlm aWVkIg0KPg0KICA8eHM6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL29wY2ZvdW5kYXRpb24ub3Jn L1VBLyIgLz4NCg0KICA8eHM6c2ltcGxlVHlwZSAgbmFtZT0iQWJzdHJhY3RFbnVtZXJhdGlvbkRh dGFUeXBlIj4NCiAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIj4NCiAgICAgIDx4 czplbnVtZXJhdGlvbiB2YWx1ZT0iRmllbGQxXzAiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24g dmFsdWU9IkZpZWxkMl8xIiAvPg0KICAgIDwveHM6cmVzdHJpY3Rpb24+DQogIDwveHM6c2ltcGxl VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iQWJzdHJhY3RFbnVtZXJhdGlvbkRhdGFUeXBlIiB0 eXBlPSJ0bnM6QWJzdHJhY3RFbnVtZXJhdGlvbkRhdGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4 VHlwZSBuYW1lPSJMaXN0T2ZBYnN0cmFjdEVudW1lcmF0aW9uRGF0YVR5cGUiPg0KICAgIDx4czpz ZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkFic3RyYWN0RW51bWVyYXRpb25EYXRh VHlwZSIgdHlwZT0idG5zOkFic3RyYWN0RW51bWVyYXRpb25EYXRhVHlwZSIgbWluT2NjdXJzPSIw IiBtYXhPY2N1cnM9InVuYm91bmRlZCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNv bXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZBYnN0cmFjdEVudW1lcmF0aW9u RGF0YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZBYnN0cmFjdEVudW1lcmF0aW9uRGF0YVR5cGUiIG5p bGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOnNpbXBsZVR5cGUgIG5hbWU9IkVu dW1lcmF0aW9uRGF0YVR5cGUiPg0KICAgIDx4czphbm5vdGF0aW9uPg0KICAgICAgPHhzOmRvY3Vt ZW50YXRpb24+RW51bWVyYXRpb24gRGF0YVR5cGUgZGVyaXZlZCBmcm9tIGFic3RyYWN0IHR5cGU8 L3hzOmRvY3VtZW50YXRpb24+DQogICAgPC94czphbm5vdGF0aW9uPg0KICAgIDx4czpyZXN0cmlj dGlvbiBiYXNlPSJ4czpzdHJpbmciPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJGaWVs ZDNfMSIgLz4NCiAgICA8L3hzOnJlc3RyaWN0aW9uPg0KICA8L3hzOnNpbXBsZVR5cGU+DQogIDx4 czplbGVtZW50IG5hbWU9IkVudW1lcmF0aW9uRGF0YVR5cGUiIHR5cGU9InRuczpFbnVtZXJhdGlv bkRhdGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZFbnVtZXJhdGlv bkRhdGFUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJF bnVtZXJhdGlvbkRhdGFUeXBlIiB0eXBlPSJ0bnM6RW51bWVyYXRpb25EYXRhVHlwZSIgbWluT2Nj dXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8 L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZFbnVtZXJhdGlvbkRh dGFUeXBlIiB0eXBlPSJ0bnM6TGlzdE9mRW51bWVyYXRpb25EYXRhVHlwZSIgbmlsbGFibGU9InRy dWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iQWJzdHJhY3RTdHJ1 Y3R1cmUiPg0KICAgIDx4czphbm5vdGF0aW9uPg0KICAgICAgPHhzOmRvY3VtZW50YXRpb24+QWJz dHJhY3Qgc3RydWN0dXJlPC94czpkb2N1bWVudGF0aW9uPg0KICAgIDwveHM6YW5ub3RhdGlvbj4N CiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJOdW1iZXIiIHR5cGU9 InVhOlZhcmlhbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hz OmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJBYnN0cmFjdFN0cnVjdHVyZSIgdHlw ZT0idG5zOkFic3RyYWN0U3RydWN0dXJlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJM aXN0T2ZBYnN0cmFjdFN0cnVjdHVyZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVs ZW1lbnQgbmFtZT0iQWJzdHJhY3RTdHJ1Y3R1cmUiIHR5cGU9InRuczpBYnN0cmFjdFN0cnVjdHVy ZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+ DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQg bmFtZT0iTGlzdE9mQWJzdHJhY3RTdHJ1Y3R1cmUiIHR5cGU9InRuczpMaXN0T2ZBYnN0cmFjdFN0 cnVjdHVyZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5 cGUgbmFtZT0iRGVyaXZlZFN0cnVjdHVyZSI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVk PSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpBYnN0cmFjdFN0cnVjdHVy ZSI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJO dW1iZXIiIHR5cGU9InhzOmludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICA8L3hzOnNlcXVl bmNlPg0KICAgICAgPC94czpleHRlbnNpb24+DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAg PC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iRGVyaXZlZFN0cnVjdHVyZSIg dHlwZT0idG5zOkRlcml2ZWRTdHJ1Y3R1cmUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9 Ikxpc3RPZkRlcml2ZWRTdHJ1Y3R1cmUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czpl bGVtZW50IG5hbWU9IkRlcml2ZWRTdHJ1Y3R1cmUiIHR5cGU9InRuczpEZXJpdmVkU3RydWN0dXJl IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4N CiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBu YW1lPSJMaXN0T2ZEZXJpdmVkU3RydWN0dXJlIiB0eXBlPSJ0bnM6TGlzdE9mRGVyaXZlZFN0cnVj dHVyZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KPC94czpzY2hlbWE+ NamespaceUri A URI that uniquely identifies the dictionary. i=68 ns=1;i=2 http://cas.eu/UA/CommServer/UnitTests/DataTypeTest AbstractStructure i=69 ns=1;i=2 //xs:element[@name='AbstractStructure'] DerivedStructure i=69 ns=1;i=2 //xs:element[@name='DerivedStructure'] Default Binary ns=1;i=13 ns=1;i=19 i=76 Default Binary ns=1;i=22 ns=1;i=28 i=76 DataTypeTest ns=1;i=7 ns=1;i=19 ns=1;i=28 i=93 i=72 PG9wYzpUeXBlRGljdGlvbmFyeQ0KICB4bWxuczpvcGM9Imh0dHA6Ly9vcGNmb3VuZGF0aW9uLm9y Zy9CaW5hcnlTY2hlbWEvIg0KICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1M U2NoZW1hLWluc3RhbmNlIg0KICB4bWxuczp1YT0iaHR0cDovL29wY2ZvdW5kYXRpb24ub3JnL1VB LyINCiAgeG1sbnM6dG5zPSJodHRwOi8vY2FzLmV1L1VBL0NvbW1TZXJ2ZXIvVW5pdFRlc3RzL0Rh dGFUeXBlVGVzdCINCiAgRGVmYXVsdEJ5dGVPcmRlcj0iTGl0dGxlRW5kaWFuIg0KICBUYXJnZXRO YW1lc3BhY2U9Imh0dHA6Ly9jYXMuZXUvVUEvQ29tbVNlcnZlci9Vbml0VGVzdHMvRGF0YVR5cGVU ZXN0Ig0KPg0KICA8IS0tIFRoaXMgRmlsZSB3YXMgZ2VuZXJhdGVkIG9uIDIwMTktMDUtMTEgYW5k IHN1cHBvcnRzIHRoZSBzcGVjaWZpY2F0aW9ucyBzdXBwb3J0ZWQgYnkgdmVyc2lvbiAxLjIuMjYu MTYwMzIgb2YgdGhlIE9QQyBVQSBkZWxpdmVyYWJsZXMuIC0tPg0KICA8b3BjOkltcG9ydCBOYW1l c3BhY2U9Imh0dHA6Ly9vcGNmb3VuZGF0aW9uLm9yZy9VQS8iIExvY2F0aW9uPSIuQmluYXJ5U2No ZW1hLmJzZCIvPg0KDQogIDxvcGM6RW51bWVyYXRlZFR5cGUgTmFtZT0iQWJzdHJhY3RFbnVtZXJh dGlvbkRhdGFUeXBlIiBMZW5ndGhJbkJpdHM9IjMyIj4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1 ZSBOYW1lPSJGaWVsZDEiIFZhbHVlPSIwIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5h bWU9IkZpZWxkMiIgVmFsdWU9IjEiIC8+DQogIDwvb3BjOkVudW1lcmF0ZWRUeXBlPg0KDQogIDxv cGM6RW51bWVyYXRlZFR5cGUgTmFtZT0iRW51bWVyYXRpb25EYXRhVHlwZSIgTGVuZ3RoSW5CaXRz PSIzMiI+DQogICAgPG9wYzpEb2N1bWVudGF0aW9uPkVudW1lcmF0aW9uIERhdGFUeXBlIGRlcml2 ZWQgZnJvbSBhYnN0cmFjdCB0eXBlPC9vcGM6RG9jdW1lbnRhdGlvbj4NCiAgICA8b3BjOkVudW1l cmF0ZWRWYWx1ZSBOYW1lPSJGaWVsZDEiIFZhbHVlPSIwIiAvPg0KICAgIDxvcGM6RW51bWVyYXRl ZFZhbHVlIE5hbWU9IkZpZWxkMiIgVmFsdWU9IjEiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFs dWUgTmFtZT0iRmllbGQzIiBWYWx1ZT0iMSIgLz4NCiAgPC9vcGM6RW51bWVyYXRlZFR5cGU+DQoN CiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJBYnN0cmFjdFN0cnVjdHVyZSIgQmFzZVR5cGU9 InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpEb2N1bWVudGF0aW9uPkFic3RyYWN0IHN0 cnVjdHVyZTwvb3BjOkRvY3VtZW50YXRpb24+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOdW1iZXIi IFR5cGVOYW1lPSJ1YTpWYXJpYW50IiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8 b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkRlcml2ZWRTdHJ1Y3R1cmUiIEJhc2VUeXBlPSJ0bnM6 QWJzdHJhY3RTdHJ1Y3R1cmUiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTnVtYmVyIiBUeXBlTmFt ZT0idWE6VmFyaWFudCIgU291cmNlVHlwZT0idG5zOkFic3RyYWN0U3RydWN0dXJlIiAvPg0KICAg IDxvcGM6RmllbGQgTmFtZT0iTnVtYmVyIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICA8L29w YzpTdHJ1Y3R1cmVkVHlwZT4NCg0KPC9vcGM6VHlwZURpY3Rpb25hcnk+ NamespaceUri A URI that uniquely identifies the dictionary. i=68 ns=1;i=5 http://cas.eu/UA/CommServer/UnitTests/DataTypeTest AbstractStructure i=69 ns=1;i=5 AbstractStructure DerivedStructure i=69 ns=1;i=5 DerivedStructure ================================================ FILE: SemanticData/AddressSpaceComplianceTestTool/XMLModels/ObjectTypeTest.NodeSet2.xml ================================================  http://cas.eu/UA/CommServer/UnitTests/ObjectTypeTest i=1 i=2 i=3 i=4 i=5 i=6 i=7 i=8 i=9 i=10 i=11 i=13 i=12 i=15 i=14 i=16 i=17 i=18 i=20 i=21 i=19 i=22 i=26 i=27 i=28 i=47 i=46 i=35 i=36 i=48 i=45 i=40 i=37 i=38 i=39 ComplexObjectType ns=1;i=2 ns=1;i=3 ns=1;i=43 ns=1;i=10 i=58 ChildObject i=58 i=11510 ns=1;i=1 ChildProperty i=68 i=78 ns=1;i=1 ChildVariable ns=1;i=47 i=2368 i=78 ns=1;i=1 EURange i=68 i=78 ns=1;i=43 ChildMethod i=78 ns=1;i=1 DerivedFromComplexObjectType ns=1;i=25 ns=1;i=1 ChildMethodNewName i=78 ns=1;i=16 InstanceOfDerivedFromComplexObjectType ns=1;i=32 ns=1;i=55 ns=1;i=39 i=85 ns=1;i=16 ChildProperty i=68 ns=1;i=30 ChildVariable ns=1;i=59 i=2368 ns=1;i=30 EURange i=68 ns=1;i=55 ChildMethodNewName ns=1;i=30 ================================================ FILE: SemanticData/AddressSpaceComplianceTestTool/XMLModels/ReferenceTest.NodeSet2.xml ================================================  http://cas.eu/UA/CommServer/UnitTests/ReferenceTest i=1 i=2 i=3 i=4 i=5 i=6 i=7 i=8 i=9 i=10 i=11 i=13 i=12 i=15 i=14 i=16 i=17 i=18 i=20 i=21 i=19 i=22 i=26 i=27 i=28 i=47 i=46 i=35 i=36 i=48 i=45 i=40 i=37 i=38 i=39 ReferenceTypeTest i=46 FromSomwhere ================================================ FILE: SemanticData/AddressSpaceComplianceTestTool/XMLModels/VariableTypeTest.NodeSet2.xml ================================================  http://cas.eu/UA/CommServer/UnitTests/VariableTypeTest i=1 i=2 i=3 i=4 i=5 i=6 i=7 i=8 i=9 i=10 i=11 i=13 i=12 i=15 i=14 i=16 i=17 i=18 i=20 i=21 i=19 i=22 i=26 i=27 i=28 i=47 i=46 i=35 i=36 i=48 i=45 i=40 i=37 i=38 i=39 ComplexVariableType ns=1;i=12 ns=1;i=14 i=2368 NewDisplayName i=68 i=78 ns=1;i=8 VariableChild i=68 i=78 ns=1;i=8 ArrayVariableType i=63 SimpleVariableWithValueType i=63 1 ================================================ FILE: SemanticData/AddressSpaceComplianceTestTool/packages.config ================================================  ================================================ FILE: SemanticData/AdoptingCompanionStandardADI.md ================================================ # Adopting Companion Standard Models - Analyzer Devices Integration ## Introduction An analyzer is a device comprised of one or more measurement channels, which has its own configuration, status and control. There is a variety of analyzer groups such as light spectrometers, particle size monitoring systems, imaging particle size monitoring systems, acoustic spectrometers, mass spectrometers, chromatographs, imaging systems and nuclear magnetic resonance spectrometers. These groups can be extended and each group can also be further divided. The main goal of the analyzer device is to provide process data that is generated from scaled data by applying a chemometric model. Process data is typically represented as a scalar value or a set of scalar values and it is often used for process control. Examples of process data are: concentration, moisture and hardness. Scaled data is generated from raw data and represents an actual measurement expressed in meaningful units. Scaled data is typically an array of numbers. Examples of scaled data are: absorbance, scatter intensity. To obtain scaled data a mathematical description - analyzer model - of the process and associated information to convert raw data into scaled data is used. Raw Data is generated by an analyzer representing an actual measurement. Raw data is typically represented as an array of numbers. Examples of raw data are: raw spectrum, chromatogram and particle size bin count. The analyzer configuration is a set of values of all parameters that when set, put the analyzer in a well-defined state. Analyzers contain measurement channels. A channel is a subset of an analyzer that represents a specific sensing port and associated data, which includes raw and scaled data (e.g. spectrum), configuration, status and control. To enhance the analyzer behavior or operation replaceable accessories are used. An accessory is a physical device that can be mounted directly on the analyzer or analyzer channel. Examples of accessories are: vial holder, filter wheel, auger, and heater. The accessories are attached using accessory slots. A sampling point is a physical interface point on the process where the process is monitored. To provide mapping between a channel and a process sampling points the concept of stream is used. Because there is a large variety of analyzer types from various vendors with many different types of data, including complex arrays and structures, the integration of the analyzers and control and monitoring systems is a real challenge. Initiatives such as Process Analytical Technology are driving analyzer integration and the best way to accomplish this is via open standards. To address the problem two questions can be asked: - How to get access to (transport) the process data? - How to represent (model) the process data? To answer the first question we need a universally accepted, platform-neutral communication standard that allows also addressing the second question, i.e. designing an appropriate information model. OPC Unified Architecture technology meets all the requirements, because: - It is a platform neutral standard allowing for easy embedded implementation. - It is designed to support complex data types and object models. - It is designed to achieve high speed data transfers using efficient binary protocols. - It has broad industry support beyond just process automation and is being used in support of other industry standards such as S95, S88, EDDL, MIMOSA, OAGiS. ================================================ FILE: SemanticData/BuildingErrorsHandling/BuildErrors.cs ================================================  //__________________________________________________________________________________________________ // // Copyright (C) 2021, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ namespace UAOOI.SemanticData.BuildingErrorsHandling { /// /// Class BuildError - provides building descriptions of building errors. /// public partial class BuildError { /// /// Error: P3-0305000000; Focus: Reference; It is not allowed that References are used to create a looping hierarchy. /// /// An instance of describing the error P3-0305000000. public static BuildError NotValidLoopingHierarchy { get { return new BuildError() { Focus = Focus.Reference, Identifier = "P3-0305000000", Descriptor = "It is not allowed that References are used to create a looping hierarchy." }; } } /// /// Error: P0-0001010000; Focus: Diagnostic; The XML attribute or element is not supported and neglected. /// /// An instance of describing the error P0-0001010000. public static BuildError NotSupportedFeature { get { return new BuildError() { Focus = Focus.Diagnostic, Identifier = "P0-0001010000", Descriptor = "The XML attribute or element is not supported and neglected." }; } } /// /// Error: P0-0001020000; Focus: XML; Node cannot be null /// /// An instance of describing the error P0-0001020000. public static BuildError NodeCannotBeNull { get { return new BuildError() { Focus = Focus.XML, Identifier = "P0-0001020000", Descriptor = "Node cannot be null" }; } } /// /// Error: P0-0001030000; Focus: XML; Models element cannot be null or empty /// /// An instance of describing the error P0-0001030000. public static BuildError ModelsCannotBeNull { get { return new BuildError() { Focus = Focus.XML, Identifier = "P0-0001030000", Descriptor = "Models element cannot be null or empty" }; } } /// /// Error: P0-0001040000; Focus: XML; NamespaceUris element cannot be null or empty /// /// An instance of describing the error P0-0001040000. public static BuildError NamespaceUrisCannotBeNull { get { return new BuildError() { Focus = Focus.XML, Identifier = "P0-0001040000", Descriptor = "NamespaceUris element cannot be null or empty" }; } } /// /// Error: P0-0001050000; Focus: XML; Selected model contains errors. /// /// An instance of describing the error P0-0001050000. public static BuildError ModelContainsErrors { get { return new BuildError() { Focus = Focus.XML, Identifier = "P0-0001050000", Descriptor = "Selected model contains errors." }; } } /// /// Error: P0-0002010000; Focus: NonCategorized; General processing error see trace for details. /// /// An instance of describing the error P0-0002010000. public static BuildError NonCategorized { get { return new BuildError() { Focus = Focus.NonCategorized, Identifier = "P0-0002010000", Descriptor = "General processing error see trace for details." }; } } /// /// Error: P0-0003010000; Focus: Diagnostic; It is diagnostic information /// /// An instance of describing the error P0-0003010000. public static BuildError DiagnosticInformation { get { return new BuildError() { Focus = Focus.Diagnostic, Identifier = "P0-0003010000", Descriptor = "It is diagnostic information" }; } } /// /// Error: P0-0605020209; Focus: NodeClass; The syntax of the NodeId is not valid. /// /// An instance of describing the error P0-0605020209. public static BuildError NodeIdInvalidSyntax { get { return new BuildError() { Focus = Focus.NodeClass, Identifier = "P0-0605020209", Descriptor = "The syntax of the NodeId is not valid." }; } } /// /// Error: P0-0605020210; Focus: NodeClass; The syntax of the ExpandedNodeId is not valid. /// /// An instance of describing the error P0-0605020210. public static BuildError ExpandedNodeIdInvalidSyntax { get { return new BuildError() { Focus = Focus.NodeClass, Identifier = "P0-0605020210", Descriptor = "The syntax of the ExpandedNodeId is not valid." }; } } /// /// Error: P6-0503021400; Focus: DataEncoding; The syntax of the QualifiedName is not valid. /// /// An instance of describing the error P6-0503021400. public static BuildError QualifiedNameInvalidSyntax { get { return new BuildError() { Focus = Focus.DataEncoding, Identifier = "P6-0503021400", Descriptor = "The syntax of the QualifiedName is not valid." }; } } /// /// Error: P3-0403040000; Focus: NodeClass; The reference target doesn't exist. OPC UA does not require that the TargetNode exists, thus References may point to a Node that does not exist. /// /// An instance of describing the error P3-0403040000. public static BuildError DanglingReferenceTarget { get { return new BuildError() { Focus = Focus.NodeClass, Identifier = "P3-0403040000", Descriptor = "The reference target doesn't exist. OPC UA does not require that the TargetNode exists, thus References may point to a Node that does not exist." }; } } /// /// Error: P3-0502020000; Focus: NodeClass; Nodes shall be unambiguously identified using NodeId /// /// An instance of describing the error P3-0502020000. public static BuildError NodeIdDuplicated { get { return new BuildError() { Focus = Focus.NodeClass, Identifier = "P3-0502020000", Descriptor = "Nodes shall be unambiguously identified using NodeId" }; } } /// /// Error: P3-0502020001; Focus: NodeClass; NodeId is not defined. /// /// An instance of describing the error P3-0502020001. public static BuildError NodeIdNotDefined { get { return new BuildError() { Focus = Focus.NodeClass, Identifier = "P3-0502020001", Descriptor = "NodeId is not defined." }; } } /// /// Error: P3-0502050000; Focus: NodeClass; The string part of the DisplayName is restricted to 512 characters. /// /// An instance of describing the error P3-0502050000. public static BuildError WrongDisplayNameLength { get { return new BuildError() { Focus = Focus.NodeClass, Identifier = "P3-0502050000", Descriptor = "The string part of the DisplayName is restricted to 512 characters." }; } } /// /// Error: P3-0502070000; Focus: NodeClass; The value must be less than 0x200000 for the UAVariable and less than 0x400000 for other node types. /// /// An instance of describing the error P3-0502070000. public static BuildError WrongWriteMaskValue { get { return new BuildError() { Focus = Focus.NodeClass, Identifier = "P3-0502070000", Descriptor = "The value must be less than 0x200000 for the UAVariable and less than 0x400000 for other node types." }; } } /// /// Error: P3-0856000000; Focus: NodeClass; The value must be less than 0x7. /// /// An instance of describing the error P3-0856000000. public static BuildError WrongAccessRestriction { get { return new BuildError() { Focus = Focus.NodeClass, Identifier = "P3-0856000000", Descriptor = "The value must be less than 0x7." }; } } /// /// Error: P3-0503020000; Focus: NodeClass; Unexpected value of the InverseName. /// /// An instance of describing the error P3-0503020000. public static BuildError WrongInverseName { get { return new BuildError() { Focus = Focus.NodeClass, Identifier = "P3-0503020000", Descriptor = "Unexpected value of the InverseName." }; } } /// /// Error: P3-0503020001; Focus: NodeClass; The BrowseName of a ReferenceType shall be unique. /// /// An instance of describing the error P3-0503020001. public static BuildError DuplicatedReferenceType { get { return new BuildError() { Focus = Focus.NodeClass, Identifier = "P3-0503020001", Descriptor = "The BrowseName of a ReferenceType shall be unique." }; } } /// /// Error: P3-0503020002; Focus: NodeClass; The BrowseName of a ReferenceType is defined outside of the model. /// /// An instance of describing the error P3-0503020002. public static BuildError BrowseNameReferenceTypeScope { get { return new BuildError() { Focus = Focus.NodeClass, Identifier = "P3-0503020002", Descriptor = "The BrowseName of a ReferenceType is defined outside of the model." }; } } /// /// Error: P3-0503030201; Focus: Reference; Wrong Reference type targeting the Property component. /// /// An instance of describing the error P3-0503030201. public static BuildError WrongReference2Property { get { return new BuildError() { Focus = Focus.Reference, Identifier = "P3-0503030201", Descriptor = "Wrong Reference type targeting the Property component." }; } } /// /// Error: P3-0505010000; Focus: NodeClass; Object NodeClass: EventNotifier is out of range. /// /// An instance of describing the error P3-0505010000. public static BuildError WrongEventNotifier { get { return new BuildError() { Focus = Focus.NodeClass, Identifier = "P3-0505010000", Descriptor = "Object NodeClass: EventNotifier is out of range." }; } } /// /// Error: P3-0505010001; Focus: NodeClass; Object NodeClass: Value of the EventNotifier attribute is not supported. /// /// An instance of describing the error P3-0505010001. public static BuildError EventNotifierValueNotSupported { get { return new BuildError() { Focus = Focus.NodeClass, Identifier = "P3-0505010001", Descriptor = "Object NodeClass: Value of the EventNotifier attribute is not supported." }; } } /// /// Error: P3-0506020000; Focus: NodeClass; ValueRank value is out of range. /// /// An instance of describing the error P3-0506020000. public static BuildError WrongValueRank { get { return new BuildError() { Focus = Focus.NodeClass, Identifier = "P3-0506020000", Descriptor = "ValueRank value is out of range." }; } } /// /// Error: P3-0506040000; Focus: NodeClass; AccessLevel value is out of range. /// /// An instance of describing the error P3-0506040000. public static BuildError WrongAccessLevel { get { return new BuildError() { Focus = Focus.NodeClass, Identifier = "P3-0506040000", Descriptor = "AccessLevel value is out of range." }; } } /// /// Error: P3-0707000000; Focus: Reference; Wrong Reference type targeting the DataVariable component. /// /// An instance of describing the error P3-0707000000. public static BuildError WrongReference2Variable { get { return new BuildError() { Focus = Focus.Reference, Identifier = "P3-0707000000", Descriptor = "Wrong Reference type targeting the DataVariable component." }; } } /// /// Error: P3-0707000001; Focus: Reference; Wrong Reference type targeting the Method component. /// /// An instance of describing the error P3-0707000001. public static BuildError WrongReference2Method { get { return new BuildError() { Focus = Focus.Reference, Identifier = "P3-0707000001", Descriptor = "Wrong Reference type targeting the Method component." }; } } /// /// Error: P3-0707000002; Focus: Reference; Dangling reference - undefined target of the HasComponent reference. /// /// An instance of describing the error P3-0707000002. public static BuildError UndefinedHasComponentTarget { get { return new BuildError() { Focus = Focus.Reference, Identifier = "P3-0707000002", Descriptor = "Dangling reference - undefined target of the HasComponent reference." }; } } /// /// Error: P3-0708000000; Focus: Reference; Dangling reference - undefined target of the HasProperty reference. /// /// An instance of describing the error P3-0708000000. public static BuildError UndefinedHasPropertyTarget { get { return new BuildError() { Focus = Focus.Reference, Identifier = "P3-0708000000", Descriptor = "Dangling reference - undefined target of the HasProperty reference." }; } } /// /// Error: P3-0710000000; Focus: Reference; Each Node shall be the TargetNode of at most one Reference of type HasSubtype. /// /// An instance of describing the error P3-0710000000. public static BuildError HasSubtypeMulitarget { get { return new BuildError() { Focus = Focus.Reference, Identifier = "P3-0710000000", Descriptor = "Each Node shall be the TargetNode of at most one Reference of type HasSubtype." }; } } /// /// Error: P3-0710000001; Focus: Reference; Dangling reference - undefined target of the HasSubtype reference. /// /// An instance of describing the error P3-0710000001. public static BuildError UndefinedHasSubtypeTarget { get { return new BuildError() { Focus = Focus.Reference, Identifier = "P3-0710000001", Descriptor = "Dangling reference - undefined target of the HasSubtype reference." }; } } /// /// Error: P3-0713000000; Focus: Reference; Undefined HasTypeDefinition - each Variable and each Object shall be the SourceNode of exactly one HasTypeDefinition Reference. /// /// An instance of describing the error P3-0713000000. public static BuildError UndefinedHasTypeDefinition { get { return new BuildError() { Focus = Focus.Reference, Identifier = "P3-0713000000", Descriptor = "Undefined HasTypeDefinition - each Variable and each Object shall be the SourceNode of exactly one HasTypeDefinition Reference." }; } } /// /// Error: P3-0802020000; Focus: Naming; Undefined namespace index - The numeric values used to identify namespaces correspond to the index into the NamespaceArray. /// /// An instance of describing the error P3-0802020000. public static BuildError UndefinedNamespaceIndex { get { return new BuildError() { Focus = Focus.Naming, Identifier = "P3-0802020000", Descriptor = "Undefined namespace index - The numeric values used to identify namespaces correspond to the index into the NamespaceArray." }; } } /// /// Error: P6-0503011400; Focus: NodeClass; BrowseName cannot be null string. /// /// An instance of describing the error P6-0503011400. public static BuildError EmptyBrowseName { get { return new BuildError() { Focus = Focus.NodeClass, Identifier = "P6-0503011400", Descriptor = "BrowseName cannot be null string." }; } } /// /// Error: P6-0F03000000; Focus: NodeClass; SymbolicName contains characters that are not allowed. Only letters, digits or the underscore (‘_’) are permitted. /// /// An instance of describing the error P6-0F03000000. public static BuildError WrongSymbolicName { get { return new BuildError() { Focus = Focus.NodeClass, Identifier = "P6-0F03000000", Descriptor = "SymbolicName contains characters that are not allowed. Only letters, digits or the underscore (‘_’) are permitted." }; } } /// /// Error: P6-0F02000000; Focus: XML; The required model is missing. /// /// An instance of describing the error P6-0F02000000. public static BuildError LackOfRequiredModel { get { return new BuildError() { Focus = Focus.XML, Identifier = "P6-0F02000000", Descriptor = "The required model is missing." }; } } /// /// Error: P3-XXXXX00000; Focus: DataType; Abstract DataType of the field of a concrete structure is not permitted. /// /// An instance of describing the error P3-XXXXX00000. public static BuildError FieldAbstractDataType { get { return new BuildError() { Focus = Focus.DataType, Identifier = "P3-XXXXX00000", Descriptor = "Abstract DataType of the field of a concrete structure is not permitted." }; } } /// /// Error: P3-XXXXX00000; Focus: DataType; All fields must be present in derived Structure DataType. /// /// An instance of describing the error P3-XXXXX00000. public static BuildError MissingFieldInDerivedStructure { get { return new BuildError() { Focus = Focus.DataType, Identifier = "P3-XXXXX00000", Descriptor = "All fields must be present in derived Structure DataType." }; } } /// /// Error: P3-XXXXX00000; Focus: DataType; Wrong DataType of field derived from Structure. /// /// An instance of describing the error P3-XXXXX00000. public static BuildError WrongDerivedFieldData { get { return new BuildError() { Focus = Focus.DataType, Identifier = "P3-XXXXX00000", Descriptor = "Wrong DataType of field derived from Structure." }; } } /// /// Error: P3-0508010000; Focus: DataType; It is not permitted for two DataTypes to point to the same DataTypeEncoding. /// /// An instance of describing the error P3-0508010000. public static BuildError WrongDataType2DataTypeEncodingReference { get { return new BuildError() { Focus = Focus.DataType, Identifier = "P3-0508010000", Descriptor = "It is not permitted for two DataTypes to point to the same DataTypeEncoding." }; } } /// /// Error: P3-0508010000; Focus: DataType; The DataTypeEncoding Object shall point to exactly one Variable of type DataTypeDescriptionType /// /// An instance of describing the error P3-0508010000. public static BuildError WrongDataTypeEncoding2DataTypeDescriptionReference { get { return new BuildError() { Focus = Focus.DataType, Identifier = "P3-0508010000", Descriptor = "The DataTypeEncoding Object shall point to exactly one Variable of type DataTypeDescriptionType" }; } } /// /// Error: P3-0508010000; Focus: DataType; The DataTypeDescription Variable shall belong to a DataTypeDictionary Variable. /// /// An instance of describing the error P3-0508010000. public static BuildError WrongDataTypeDescription2DataTypeDictionaryReference { get { return new BuildError() { Focus = Focus.DataType, Identifier = "P3-0508010000", Descriptor = "The DataTypeDescription Variable shall belong to a DataTypeDictionary Variable." }; } } /// /// Error: P3-0508030000; Focus: DataType; Only concrete Structured DataTypes may use HasEncoding References. Abstract, Built-in, Enumeration, and Simple DataTypes are not allowed to be the SourceNode of a HasEncoding Reference. /// /// An instance of describing the error P3-0508030000. public static BuildError AbstractDataType2HasEncodingReference { get { return new BuildError() { Focus = Focus.DataType, Identifier = "P3-0508030000", Descriptor = "Only concrete Structured DataTypes may use HasEncoding References. Abstract, Built-in, Enumeration, and Simple DataTypes are not allowed to be the SourceNode of a HasEncoding Reference." }; } } /// /// Error: P3-0508030000; Focus: DataType; Each concrete Structured DataType shall point to at least one DataTypeEncoding Object with the BrowseName “Default Binary” or “Default XML” having the NamespaceIndex 0. /// /// An instance of describing the error P3-0508030000. public static BuildError ConcreteDataType2HasEncodingReference { get { return new BuildError() { Focus = Focus.DataType, Identifier = "P3-0508030000", Descriptor = "Each concrete Structured DataType shall point to at least one DataTypeEncoding Object with the BrowseName “Default Binary” or “Default XML” having the NamespaceIndex 0." }; } } } } ================================================ FILE: SemanticData/BuildingErrorsHandling/BuildErrors.partial.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2021, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ namespace UAOOI.SemanticData.BuildingErrorsHandling { /// /// Enum Focus /// public enum Focus { /// /// The reference /// Reference, /// /// The diagnostic /// Diagnostic, /// /// The NodeClass /// NodeClass, /// /// The XML error /// XML, /// /// The non categorized error, e.g. exception during execution. /// NonCategorized, /// /// The data encoding errors - the syntax is validated against OPC UA XML encoding. /// DataEncoding, /// /// The data type definition error - eny error that relates to custom DataType definion. /// DataType, /// /// The naming /// Naming } /// /// Class BuildError - provides building descriptions of building errors. /// public partial class BuildError { /// /// Gets the focus. /// /// The focus. public Focus Focus { get; set; } /// /// Gets or sets the unique identifier of the error. /// /// The identifier. public string Identifier { get; set; } /// /// Gets or sets the descriptor of the error. /// /// The descriptor. public string Descriptor { get; set; } /// /// Returns a that represents this instance. /// /// A that represents this instance. public override string ToString() { return string.Format("Focus: {0}, Identifier: {1} Description: {2}", Focus, Identifier, Descriptor); } } } ================================================ FILE: SemanticData/BuildingErrorsHandling/BuildErrors.tt ================================================ <#@ template debug="true" hostspecific="true" language="C#" #> <#@ assembly name="System.Core" #> <#@ assembly name="System.Xml.dll" #> <#@ assembly name="EnvDTE" #> <#@ import namespace="System.Linq" #> <#@ import namespace="System.Text" #> <#@ import namespace="System.Collections.Generic" #> <#@ import namespace="System.Xml" #> <#@ output extension=".cs" #> //__________________________________________________________________________________________________ // // Copyright (C) 2021, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ namespace UAOOI.SemanticData.BuildingErrorsHandling { /// /// Class BuildError - provides building descriptions of building errors. /// public partial class BuildError { <# EnvDTE.DTE dte = (EnvDTE.DTE) ((IServiceProvider) this.Host).GetService(typeof(EnvDTE.DTE)); // Open the prototype document. string _xsdPath = System.IO.Path.Combine(System.IO.Path.GetDirectoryName(dte.ActiveDocument.FullName), @"XML\BuildErrorsCollection.xsd"); XmlReaderSettings _settings = new XmlReaderSettings(); string _ns = "http://commsvr.com/UAOOI/SemanticData/UANodeSetValidation/BuildErrorsCollection.xsd"; _settings.Schemas.Add(_ns, _xsdPath); _settings.ValidationType = ValidationType.Schema; string _path = System.IO.Path.Combine(System.IO.Path.GetDirectoryName(dte.ActiveDocument.FullName), @"XML\BuildErrorsCollection.xml"); XmlReader _errorsReader = XmlReader.Create(_path, _settings); XmlDocument _doc = new XmlDocument(); _doc.Load(_errorsReader); XmlNamespaceManager _nsmgr = new XmlNamespaceManager(_errorsReader.NameTable); _nsmgr.AddNamespace("ns", _ns); XmlNode _list = _doc.SelectSingleNode("//ns:BuildErrorsCollection/ns:ListOfBuildErrors", _nsmgr); foreach (XmlNode _node in _list.SelectNodes("ns:NamedBuildError", _nsmgr)) { string Name = _node.SelectSingleNode("ns:Name", _nsmgr).InnerText; string Focus = _node.SelectSingleNode("ns:Focus", _nsmgr).InnerText; string Identifier = _node.SelectSingleNode("ns:Identifier", _nsmgr).InnerText; string Descriptor = _node.SelectSingleNode("ns:Descriptor", _nsmgr).InnerText; #> /// /// Error: <#=Identifier#>; Focus: <#= Focus #>; <#= Descriptor #> /// /// An instance of describing the error <#=Identifier#>. public static BuildError <#=Name#> { get { return new BuildError() { Focus = Focus.<#=Focus#>, Identifier = "<#=Identifier#>", Descriptor = "<#=Descriptor #>" }; } } <# } #> } } ================================================ FILE: SemanticData/BuildingErrorsHandling/IIdentifierSyntax.md ================================================ # BuildError.Identifier syntax ## ABNF ``` TXT Identyfier = Part - Section Number Part = Prefix 2DIGIT Prefix = "P" Section = 8DIGIT Number = 2DIGIT ``` where: | Rule | Meaning | Syntax | | ------- | ------------------ | ---------------------------------------------------- | | Prefix | | matches the character `P` literally (case sensitive) | | Part | OPC UA part number | matches a digit (equal to [0-9]) exactly 2 times | | Section | section number | matches a digit (equal to [0-9]) exactly 8 times | | Number | sequential number | matches a digit (equal to [0-9]) exactly 2 times | ## Reqular expresion `(P\d{2,2})-(\d{8,8})(\d{2,2})` where: - `Part`: OPC UA part number; 1st Capturing Group (P\d{2,2}) - `P` matches the character `P` literally (case sensitive) - `\d{2,2}` matches a digit (equal to [0-9]) - {2,2} Quantifier — Matches exactly 2 times - `-` matches the character `-` literally (case sensitive) - `Section`: section number; 2nd Capturing Group (\d{8,8}) - `\d{8,8}` matches a digit (equal to [0-9]) - {8,8} Quantifier — Matches exactly 8 times - `Number`: sequential number; 3rd Capturing Group (\d{2,2}) - \d{2,2} matches a digit (equal to [0-9]) - {2,2} Quantifier — Matches exactly 2 times ## Example - [P3-0503030201](https://reference.opcfoundation.org/v104/Core/docs/Part3/5.3.3/#5.3.3.2) ## See also - [Augmented BNF for Syntax Specifications: ABNF; RFC5234; 2008](https://tools.ietf.org/html/rfc5234) - [Regular expression; From Wikipedia, the free encyclopedia](https://en.wikipedia.org/wiki/Regular_expression) ================================================ FILE: SemanticData/BuildingErrorsHandling/Properties/SemanticData.BuildingErrorsHandling.nuspec ================================================  UAOOI.SemanticData.BuildingErrorsHandling 6.5.6-Oscar Object Oriented Internet Common Infrastructure Mariusz Postol Mariusz Postol false MIT https://commsvr.gitbook.io/ooi/readme Logo64.PNG It provides descriptions of building errors to be used for OPC UA Address Space consistency validation purpose. It provides descriptions of building errors to be used for OPC UA Address Space consistency validation purpose. Copyright (C) 2022 Mariusz Postol LODZ POLAND Object Oriented Internet, OPC UA, Information Model, IoT, M2M, DOA ModelDesign Export Release Candidate. Copyright (C) 2022 Mariusz Postol LODZ POLAND ================================================ FILE: SemanticData/BuildingErrorsHandling/Properties/SemanticData.BuildingErrorsHandling.tt ================================================ <#@ template debug="false" hostspecific="false" language="C#" #> <#@ output extension=".nuspec" #> UAOOI.SemanticData.BuildingErrorsHandling <#=SemanticDataVersion#><#= SemanticDataPrerelease#> <#=SemanticDataProduct#> Common Infrastructure <#=AssemblyCompany#> <#=Owner#> false MIT https://commsvr.gitbook.io/ooi/readme Logo64.PNG It provides descriptions of building errors to be used for OPC UA Address Space consistency validation purpose. It provides descriptions of building errors to be used for OPC UA Address Space consistency validation purpose. <#=AssemblyCopyright#> Object Oriented Internet, OPC UA, Information Model, IoT, M2M, DOA ModelDesign Export Release Candidate. <#=AssemblyCopyright#> <#@ include file = "..\..\..\CommonResources\T4Definitions\Model.t4" #> ================================================ FILE: SemanticData/BuildingErrorsHandling/SemanticData.BuildingErrorsHandling.csproj ================================================ netstandard2.0 UAOOI.SemanticData.BuildingErrorsHandling UAOOI.SemanticData.BuildingErrorsHandling Mariusz Postol commsvr.com Object Oriented Internet It provides descriptions of building errors to be used for OPC UA Address Space consistency validation purpose. Copyright (C) 2019 Mariusz Postol LODZ POLAND MIT https://commsvr.gitbook.io/ooi/readme https://github.com/mpostol/OPC-UA-OOI GitHub Object Oriented Internet, OPC UA, Information Model, IoT, M2M, DOA, true OPCUAOOIKey.snk 6.4.6 6.4.6 6.4.6 https://github.com/mpostol/OPC-UA-OOI/blob/master/CommonResources/Media/Logo64.PNG?raw=true false Logo.ico Object-Oriented Internet Semantic-Data Building Errors Handling bin\Debug\netstandard2.0\UAOOI.SemanticData.BuildingErrorsHandling.xml bin\Debug\netstandard2.0\ TextTemplatingFileGenerator BuildErrors.cs TextTemplatingFileGenerator Common.Infrastructure.nuspec.nuspec TextTemplatingFileGenerator Common.Infrastructure.nuspec True True SemanticData.BuildingErrorsHandling.tt TextTemplatingFileGenerator SemanticData.BuildingErrorsHandling.nuspec True True BuildErrors.tt ================================================ FILE: SemanticData/BuildingErrorsHandling/TraceMessage.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2021, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ using System; using System.Diagnostics; namespace UAOOI.SemanticData.BuildingErrorsHandling { /// /// Class TraceMessage - supports formatting of the warnings for the tracing purpose /// public class TraceMessage : IFormattable { #region public API /// /// Creates new instance of the to be used for diagnostic purpose /// /// The new containing the . /// The new diagnostic message. public static TraceMessage DiagnosticTraceMessage(string message) { return new TraceMessage(BuildError.DiagnosticInformation, TraceEventType.Verbose, message); } /// /// creates new to be used for diagnostic purpose /// /// The to be added to the . /// The new containing the . /// The new diagnostic message. public static TraceMessage BuildErrorTraceMessage(BuildError error, string message) { return new TraceMessage(error, TraceEventType.Warning, message); } /// /// Gets the build error. /// /// The build error. public BuildError BuildError { get => b_BuildError; private set => b_BuildError = value; } /// /// Gets the trace level. /// /// The trace level. public TraceEventType TraceLevel { get => b_TraceLevel; private set => b_TraceLevel = value; } /// /// Gets the message. /// /// The message. public string Message { get => b_Location; private set => b_Location = value; } #endregion public API #region IFormattable /// /// Returns a that represents this instance. /// /// The format to use.-or- A null reference (Nothing in Visual Basic) to use the default format defined for the type of the implementation. /// The provider to use to format the value.-or- A null reference (Nothing in Visual Basic) to obtain the numeric format information from the current locale setting of the operating system. /// A that represents this instance. public string ToString(string format, IFormatProvider formatProvider) { //TODO implement IFormattable return ToString(); } #endregion IFormattable #region object /// /// Returns a that represents this instance. /// /// A that represents this instance. public override string ToString() { return string.Format("Trace: {0}, Error {1} {2}", TraceLevel, BuildError.ToString(), Message); } #endregion object #region private private TraceMessage(BuildError buildError, TraceEventType traceLevel, string message) { BuildError = buildError; TraceLevel = traceLevel; Message = message; } private TraceEventType b_TraceLevel; private BuildError b_BuildError; private string b_Location; #endregion private } } ================================================ FILE: SemanticData/BuildingErrorsHandling/XML/BuildErrorsCollection.xml ================================================ Reference P3-0305000000 It is not allowed that References are used to create a looping hierarchy. NotValidLoopingHierarchy Diagnostic P0-0001010000 The XML attribute or element is not supported and neglected. NotSupportedFeature XML P0-0001020000 Node cannot be null NodeCannotBeNull XML P0-0001030000 Models element cannot be null or empty ModelsCannotBeNull XML P0-0001040000 NamespaceUris element cannot be null or empty NamespaceUrisCannotBeNull XML P0-0001050000 Selected model contains errors. ModelContainsErrors NonCategorized P0-0002010000 General processing error see trace for details. NonCategorized Diagnostic P0-0003010000 It is diagnostic information DiagnosticInformation NodeClass P0-0605020209 The syntax of the NodeId is not valid. NodeIdInvalidSyntax NodeClass P0-0605020210 The syntax of the ExpandedNodeId is not valid. ExpandedNodeIdInvalidSyntax DataEncoding P6-0503021400 The syntax of the QualifiedName is not valid. QualifiedNameInvalidSyntax NodeClass P3-0403040000 The reference target doesn't exist. OPC UA does not require that the TargetNode exists, thus References may point to a Node that does not exist. DanglingReferenceTarget NodeClass P3-0502020000 Nodes shall be unambiguously identified using NodeId NodeIdDuplicated NodeClass P3-0502020001 NodeId is not defined. NodeIdNotDefined NodeClass P3-0502050000 The string part of the DisplayName is restricted to 512 characters. WrongDisplayNameLength NodeClass P3-0502070000 The value must be less than 0x200000 for the UAVariable and less than 0x400000 for other node types. WrongWriteMaskValue NodeClass P3-0856000000 The value must be less than 0x7. WrongAccessRestriction NodeClass P3-0503020000 Unexpected value of the InverseName. WrongInverseName NodeClass P3-0503020001 The BrowseName of a ReferenceType shall be unique. DuplicatedReferenceType NodeClass P3-0503020002 The BrowseName of a ReferenceType is defined outside of the model. BrowseNameReferenceTypeScope Reference P3-0503030201 Wrong Reference type targeting the Property component. WrongReference2Property NodeClass P3-0505010000 Object NodeClass: EventNotifier is out of range. WrongEventNotifier NodeClass P3-0505010001 Object NodeClass: Value of the EventNotifier attribute is not supported. EventNotifierValueNotSupported NodeClass P3-0506020000 ValueRank value is out of range. WrongValueRank NodeClass P3-0506040000 AccessLevel value is out of range. WrongAccessLevel Reference P3-0707000000 Wrong Reference type targeting the DataVariable component. WrongReference2Variable Reference P3-0707000001 Wrong Reference type targeting the Method component. WrongReference2Method Reference P3-0707000002 Dangling reference - undefined target of the HasComponent reference. UndefinedHasComponentTarget Reference P3-0708000000 Dangling reference - undefined target of the HasProperty reference. UndefinedHasPropertyTarget Reference P3-0710000000 Each Node shall be the TargetNode of at most one Reference of type HasSubtype. HasSubtypeMulitarget Reference P3-0710000001 Dangling reference - undefined target of the HasSubtype reference. UndefinedHasSubtypeTarget Reference P3-0713000000 Undefined HasTypeDefinition - each Variable and each Object shall be the SourceNode of exactly one HasTypeDefinition Reference. UndefinedHasTypeDefinition Naming P3-0802020000 Undefined namespace index - The numeric values used to identify namespaces correspond to the index into the NamespaceArray. UndefinedNamespaceIndex NodeClass P6-0503011400 BrowseName cannot be null string. EmptyBrowseName NodeClass P6-0F03000000 SymbolicName contains characters that are not allowed. Only letters, digits or the underscore (‘_’) are permitted. WrongSymbolicName XML P6-0F02000000 The required model is missing. LackOfRequiredModel DataType P3-XXXXX00000 Abstract DataType of the field of a concrete structure is not permitted. FieldAbstractDataType DataType P3-XXXXX00000 All fields must be present in derived Structure DataType. MissingFieldInDerivedStructure DataType P3-XXXXX00000 Wrong DataType of field derived from Structure. WrongDerivedFieldData DataType P3-0508010000 It is not permitted for two DataTypes to point to the same DataTypeEncoding. WrongDataType2DataTypeEncodingReference DataType P3-0508010000 The DataTypeEncoding Object shall point to exactly one Variable of type DataTypeDescriptionType WrongDataTypeEncoding2DataTypeDescriptionReference DataType P3-0508010000 The DataTypeDescription Variable shall belong to a DataTypeDictionary Variable. WrongDataTypeDescription2DataTypeDictionaryReference DataType P3-0508030000 Only concrete Structured DataTypes may use HasEncoding References. Abstract, Built-in, Enumeration, and Simple DataTypes are not allowed to be the SourceNode of a HasEncoding Reference. AbstractDataType2HasEncodingReference DataType P3-0508030000 Each concrete Structured DataType shall point to at least one DataTypeEncoding Object with the BrowseName “Default Binary” or “Default XML” having the NamespaceIndex 0. ConcreteDataType2HasEncodingReference ================================================ FILE: SemanticData/BuildingErrorsHandling/XML/BuildErrorsCollection.xsd ================================================  ================================================ FILE: SemanticData/CompanionSpecificationInformationModelFforAnalyzers.md ================================================ # Companion Specification - Information Model for Analyzers In 2008 the OPC Foundation announced support for Analyzer Devices Integration into the OPC Unified Architecture and created a working group composed of end-users and vendors with the main goal of developing a common method for data exchange and an analyzer data model for process and laboratory analyzers. In 2009 the OPC Unified Architecture Companion Specification for Analyzer Devices was released [[1]][OPC.UA.ADI]. To prove the concept a reference implementation was developed containing an ADI compliant server and simple client using the Software Development Kid released by the OPC Foundation. The model described in the specification [[1]][OPC.UA.ADI] is intended to provide a unified view of analyzers irrespective of the underlying device. This Information Model is also referred to as the ADI Information Model. As it was mentioned, analyzers can be further refined into various groups, but the specification defines an Information Model that can be applied to all the groups of analyzers. The ADI Information Model is located above the DI Information Model [[2]][OPC.UA.DI]. It means that the ADI model refers to definitions provided by the DI model, but the reverse is not true. To expand the ADI Information Model, the next layers shall be provided. Analyzing in detail the whole ADI Information Model is impractical here. Hence, the discussion below will be focused only on selected types defined in this specification to illustrate the design practice of the model adoption. The object model that describes analyzers is separated into definitions of the types representing the main parts of the device, namely: `AnalyserDeviceType`, `AnalyserChannelType`, `StreamType`, `AccessoryType` and `AccessorySlotType`. In general terms `AnalyserDeviceType` represents the instrument as a whole. Each object of the `AnalyserDeviceType` has at least one component of the `AnalyserChannelType` and may have components of the `AccessorySlotType`. Similarly, each object of `AnalyserChannelType` may have `AccessorySlotType` components. `AnalyserDeviceType` is an abstract type which shall be subtyped for different types of analyzer devices. In the specification [[1]][OPC.UA.ADI] there are defined the following subtypes of the `AnalyserDeviceType`: `SpectrometerDeviceType`, `AcousticSpectrometerDeviceType`, `MassSpectrometerDeviceType`, `ParticleSizeMonitorDeviceType`, `ChromatographDeviceType`, `NMRDeviceType`. Each of these types may be further subtyped by device vendors to converge the Information Model and the underlying process. ## See also - [[1] OPC Unified Architecture for Analyzer, OPC Foundation, Rel. 1.1a, 2015-01-09][OPC.UA.ADI] - [[2] Part 100: Device Information Model, OPC Foundation, 1.02, 2019-04-19][OPC.UA.DI] [OPC.UA.DI]:https://opcfoundation.org/developer-tools/specifications-unified-architecture/part-100-device-information-model/ [OPC.UA.ADI]:https://opcfoundation.org/developer-tools/specifications-opc-ua-information-models/opc-unified-architecture-for-analyzer-devices-adi/ ================================================ FILE: SemanticData/DesignDeploymentSupport.md ================================================ # Design and Deployment Support ## Introduction Publication of process real-time data and metadata in the Address Space requires a prior model design. From the section *[Address Space Model Life-cycle]*, we can learn that design, development, deployment, and maintenance is a multi-phase engineering process. Moreover, the model deployment varies depending on the server implementation. All of that causes that configuration and process data binding of the server is a complex task and that is why a development environment is required to help architects, engineers, and developers accomplish this task following the best practice rules. This tool should support all aspects of the model deployment process including edition, validation, visualization, data binding definition, and generation of all files allowing the server to expose real-time process data in the context of metadata. The tool supports all aspects of the model designing process, e.g. easy addition and deletion of nodes from the model structure, definition of nodes relationship and types, nodes filtering, helpful search and find utility, type declaration, etc. ![Figure 1 Solution concept](../CommonResources/Media/SemanticData/StandardInformationModel.ADI.SolutionConcept.PNG) It should implement conceptual containers called solutions and projects (Figure 1 above) to apply its settings. Any solution contains one or more projects and it manages the way the designer configures, builds, and deploys sets of related projects. Any project includes source files containing the model representation and related metadata such as namespace, properties, and references to other projects. While projects are built, output files are produced to be used by the UA Server to expose the designed Address Space (Section *[Address Space and Address Space Model]*). The OPC UA information modeling (Section *[UA Information Model - Concept]*) concept is based on layers, which step by step expand the basic model provided by the specification [\[2\]][Opc.UA.Part3], [\[3\]][OPC.UA.Part5]. To follow this concept, the design tool uses projects to implement model layers. Projects are related to each other making up a layered hierarchy. Referring to the example of the ADI model and according to this concept, this model domain is one of the layers and is captured by the project OpcUaAdiModel illustrated in Figure 1 above. The ADI model is located above the DI Information Model (`OpcUaDiModel` in Figure 1 above). It means that the ADI model refers to definitions provided by the DI model, but the reverse is not true. To meet the vendor specific device requirements and further expand the ADI model, the next layers shall be provided. In Figure 1 above project FTNIRModel contains all the type definitions required in this particular example and the project FTNIRModelInstance has an object declaration representing the device. The model representation contained by the projects is a collection of definitions of types called `NodeClass` and their references, which make up a domain that defines a collection of unique names called namespace. This namespace is identified by a globally unique identifier URI (Uniform Resource Identifier) that has two roles: - to avoid ambiguity - to associate a responsible organization for designing and maintenance of that model ![Figure 2 Example of a user device object](../CommonResources/Media/SemanticData/StandardInformationModel.ExampleUserDeviceObject.PNG) The Address Space is a collection of nodes that are instances of predefined types (`NodeClass`). Each `NodeClass` is defined as an invariable set of named attributes and a collection of references that shall be assigned (given) values when the node is instantiated at run-time. The tool must allow designers to add freely definitions of any class defined by the specification to the model tree view (Figure 2 above), i.e. View, Object, Variable, Method, ObjectType, DataType, ReferenceType, and VariableType. Initial values of the attributes can be provided using the property grid pane. An object of a type derived from the `AnalyserDeviceType` representing the device as a whole is the topmost one in the ADI object model. `AnalyserDeviceType` is an abstract type and, therefore, to create an object of this type it must be subtyped to represent different kinds of analyzer devices. A tree view in Figure 2 above illustrates an example of the FT-IR spectrometer simulator object of the type SpectrometerDeviceType that is to represent an example spectrometer in the Address Space. The definition of this object causes that the UA Server instantiates it and all the mandatory instance declarations (components) while creating the Address Space instance. Figure 2 above is an example of a graphical representation where the snippet of the model definition is presented as nodes on a tree view. To facilitate organization and definition of relationship some tree items have a special role. The top-level `Domain` node is a container of all the definitions belonging to the namespace represented by the project. Namespaces collect all namespace definitions that the projects refer to. Each node added to the tree view has also a few dedicated branches being placeholders of special treatment. The main aim of the `Children` tree item is to create “part of” relationship. It is an entry to a branch that collects components, i.e. in the Address Space established by a server all nodes in this branch will have been referenced by the parent using a reference of a type derived from `HasComponent` or `HasProperty`. For example, `Channel1` (Figure 2 above) is a component of the FT-IR spectrometer simulator object and adding it to this container causes that in the established Address Space it will be referenced by the FT-IR spectrometer simulator using `HasComponent` reference. References tree item creates a branch that contains all references of the parent node except the above-mentioned ones. The automatically created `CoupledNodes` tree item is a container of all nodes coupled with the parent, e.g. type definition of the parent node (`HasTypeDefinition`), the target of a reference, etc. This node is used to improve the readability of the model and enhance navigation. Finally, having designed the model, it must be compiled to provide an `Address Space Model` (Section [Address Space Model Life-cycle]) expected by the UA Server. This operation is partially semi-automatic, but it must be accompanied by the definition of bindings between instantiated nodes in the Address Space and real-time data sources. In the case of the reference application, the underlying process data bindings are added manually by modification of the auto-generated program source code, and adding behavior necessary for getting access to the data. For generic solutions, the tool can be provided with an external dedicated component supporting the selected server configuration in the context of the model. The configuration in the context of the model means that the tool offers the possibility of selecting a real-time data source for each instantiated node independently, e.g. selecting a register of the controller or a tag from an OPC DA client subscription. ## Visualization The tool should offer diverse views, flexible filtering and simulation functionalities to create a customized image of the model most appropriate for the current task to view items and perform item management tasks. These features not only increase the designing process efficiency but also improve the robustness of the process by avoiding unexpected structural errors at the very early development stage. The model can be visualized using the following modes: Information Model (model) view (2D/3D), Address Space (browse) view (2D). In 2D - OPC UA graphical notation is used, in 3D views - the designer can use scaling, rotating and change the viewpoint to tailor the display to individual needs. A selected node, its properties, and references can be edited using the property pane or custom editors. ## Build support The building, debugging, and testing activities are the most important for developing and delivering robust UA applications. The tools enable you to identify and resolve errors efficiently and test your model in a variety of ways without the necessity of postponing it up to the UA server development. It, therefore, makes the model designing process completely independent of software development and to be successfully accomplished by real-time process information architects. This tool can be used independently of any UA application development environment, but - to utilize the model - it must be used for instantiating the content of the Address Space by a UA server. The main aim of the tool is to achieve this goal without any programming skills. ## Interoperability without programming The architecture of the tool allows vendors of the UA servers to develop plug-ins providing a configuration editor. The editor is used to modify the general settings and define model nodes data-bindings with the real-time process. Advantages of this solution are as follows: - Simple configuration - No programming skills are required - An easier way to move your old OPC server to the Unified Architecture world. ## OPC UA E-book The development environment should also be an intelligent eBook. It contains much useful information about UA specifications, Address Space concept, information model and development of the OPC UA models. What is more, a smart content positioning system of the help window can follow object selections in the GUI. The content of the book is available online so it is continuously improved to follow the specification development progress. This software takes advantage of automatic update functionality. Both those features guarantee that your development environment is always up to date. Thanks to the intelligent book idea, this tool is very useful not only for OPC UA professionals but also for the beginners who want to learn about the OPC UA address space concept. ## OPC Foundation OPC UA SDK support OPC Foundation has already released the UA Software Development Kit that is a collection of libraries, applications and source code that allow developers to build OPC UA applications. Any developer who wants to create an OPC UA server of his own has to accomplish many tasks, but one of the most important is preparing of a model. This could be a hard task; OPC Foundation UA SDK does not include any tool, which helps prepare such a model. The model must be made from scratch by editing the XML file. Therefore , the tool must be compliant with this SDK to make the preparation of the XML file much easier task. ## Conclusion Concluding the above the most important requirements of the development environment may be specified: - Allows creating, displaying and editing OPC UA models that are compatible with the OPC Unified Architecture address space concept. - All nodes are presented on a tree and can be edited in the property window. - Provides the comprehensive intelligent book, the content of which is available online so it is continuously improved and always up to date. - The whole configuration can be prepared using a user-friendly Windows-based graphical user interface. - The content smart positioning system allows for providing context-sensitive help. - No XML file editing is required. - No programming skills are required. An example of the tool meeting all this requirements is [OPC UA Address Space Model Designer][CAS.ASMD] the open source available on GitHub. ## See also - [1] [OPC UA Address Space Model Designer][CAS.ASMD] - [2] [OPC Unified Architecture Specification Part 3: Address Space Model, OPC Foundation, Rel. 1.04, 2017-11-22][Opc.UA.Part3] - [3] [OPC Unified Architecture Specification Part 5: Information Model, OPC Foundation, Rel. 1.04, 2017-11-22][OPC.UA.Part5] - [4] [Address Space Model Life-cycle][Address Space Model Life-cycle] - [5] [Address Space and Address Space Model][Address Space and Address Space Model] - [6] [UA Information Model - Concept][UA Information Model - Concept] [CAS.ASMD]: https://github.com/mpostol/ASMD [Opc.UA.Part3]:https://opcfoundation.org/developer-tools/specifications-unified-architecture/part-3-address-space-model/ [Opc.UA.Part4]:https://opcfoundation.org/developer-tools/specifications-unified-architecture/part-4-services/ [OPC.UA.Part5]:https://opcfoundation.org/developer-tools/specifications-unified-architecture/part-5-information-model/ [UA Information Model - Concept]:InformationModelConcept.md [Address Space and Address Space Model]:AddressSpaceAddressSpaceModel.md [Address Space Model Life-cycle]:InformationModelLifecycle.md ================================================ FILE: SemanticData/InformationModelConcept.md ================================================ # UA Information Model - Concept To make systems interoperable, i.e. empower common processing of information by variety of computer systems, the data transfer mechanism must be associated with a consistent information representation model. OPC UA uses an object as a fundamental notion to represent data and behavior of an underlying system. The objects are placeholders of variables, events and methods and are interconnected by references. This concept is similar to well-known object-oriented programming (OOP) that is a programming paradigm using "objects" – data structures consisting of fields, events and methods – and their interactions to design computer programs. The OPC UA Information Model [\[1\]][CAS.EBOOK], [2], [\[3\]][OPC.UA.Part5] provides features such as data abstraction, encapsulation, polymorphism, and inheritance. For the purpose of unification of the information representation the producers (servers) and consumers (clients) use the type notion. The OPC UA object model allows servers to provide type definitions for objects and their components. Type definitions may be abstract, and may be inherited by new types to reflect polymorphism. They may also be common or they may be system-specific. Object types may be defined by standardization organizations, vendors or end-users. Each type must have a globally unique identifier that can be used to provide description of the data semantics from the defining body or organization. Using the type definitions to describe the information exposed by the server allows for: - Development against type definition - Unambiguous assignment of the semantics to the data expected by the client Having defined types in advance, clients may provide dedicated functionality, for example: displaying the information in the context of specific graphics. It greatly improves reusability as a result of the possibility of designing a unique context for typical real-time processes. As an example, the section [Adopting Companion Standard Models - Analyzer Devices Integration][3] presents a case of unification of the model for chemical analyzers. The OPC UA information modeling concept is based on domains. A domain is a named self-contained collection of definitions. Any domain name must be globally unique - it is an identification string that defines a realm of administrative autonomy and authority of responsibility. Type definition from one domain may be inherited from type definitions located in other domains. To avoid circular references domains should be organized in layers, which expand step by step the basic model provided by the OPC UA Specification. Type definitions are exposed in the OPC UA Address Space using the specialized `NodeClass` i.e.: `ObjectType`, `DataType`, `ReferenceType`, `VariableType` (Section [Address Space and Address Space Model][ASASM]). The main role of the types represented by the above `NodeClass`es is to provide a description of the Address Space structure and to allow clients to use this knowledge to navigate to the desired information in the Address Space exposed by the server. In other words, this way the clients obtain the definition of the data (meta-data) using the following two concepts: 1. `NodeClass` – as a formal description of the node defining the allowed attributes and references. 2. Type – as a formal description of the node defining values of the allowed attributes and references. The OPC UA Information Model concept provides a set of predefined types and rules that must be applied to expand it. Even though the OPC UA specification contains a rich set of predefined types, the type concept allows designers to freely define types according to the application needs. New types are derived from the existing ones. The derived types inherit all features from the base types but can include modifications to make the new types more appropriate for information the designers are representing. To expand the standard model, independent domains must be defined. This new information model covered by the domain may be the subject of a companion specification or proprietary release. In any case the definitions must be uniquely named and self-contained except for external type references. All not predefined types (not belonging to the standard domain) must be exposed in the Address Space. Types are called meta-data since they describe the data structure and not the actual data values. Simplifying, we can say that a `NodeClass` plays a role similar to the shape of a puzzle piece and the represented information is similar to the picture on the piece. Both are needed to enable us to see the final picture. In the above simplification we have lost that the OPC UA Address Space is capable of displaying movies, and not just static pictures. From the above discussion we learn that before nodes making up the Address Space can be instantiated by the server, that Address Space must be designed first. Model designing is a process aimed at defining a set of types and their associations and, next, creating an Address Space representation in a format appropriate for implementation. More detailed description of this topic is captured in the section [*Address Space Model Life-cycle*][ASMLC]. The Address Space concept based on types can be a foundation for exposing any information that is required. Clients understand the Address Space concept and have a browse service to navigate the Address Space. Since browsing is based on the incremental and relative passage among nodes it is apparent that each path must have an entry point defined, so we must address the question as to “where to start". To meet this requirement, the Information Model includes definition to create a predefined structure containing well defined nodes that can be used as anchors from which a client can discover the Address Space. Thus to design an Address Space instance using predefined new types, we must derive them from the existing ones. At the very beginning the only existing types are the standard ones defined by the OPC Foundation [\[1\]][CAS.EBOOK], [\[3\]][OPC.UA.Part5]. The available standard types are briefly described in the sections [*Standard Information Model*][SIM]. ## See also - \[1\] [OPC Unified Architecture e-book, 2010][CAS.EBOOK] - \[2\] Jürgen Lange, Frank Iwanitz, Thomas J. Burke. Von Data Access bis Unified Architecture. Hüthig Fachverlag, 2009. - \[3\] [OPC Unified Architecture Specification Part 5: Information Model, OPC Foundation, Rel. 1.04, 2017-11-22][OPC.UA.Part5] - \[4\] [Address Space Model Life-cycle][ASMLC] - \[5\] [Address Space and Address Space Model][ASASM] - \[6\] [Standard Information Model][SIM] [SIM]:StandardInformationModel.md [ASASM]:AddressSpaceAddressSpaceModel.md [OPC.UA.Part5]:https://opcfoundation.org/developer-tools/specifications-unified-architecture/part-5-information-model/ [ASMLC]:InformationModelLifecycle.md [CAS.EBOOK]:https://commsvr-com.github.io/Documentation/ModelDesigner/html/a2d55988-b59a-4a87-95b9-933f6bbdf5bd.htm [3]:AdoptingCompanionStandardADI.md ================================================ FILE: SemanticData/InformationModelFactory/DataTypePurpose.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ namespace UAOOI.SemanticData.InformationModelFactory { //TODO Mantis - report error /// /// Enum DataTypePurpose /// /// /// Not defined in the specification Part 2, 5, 6 and Errata Release 1.04.2 September 25, 2018 /// public enum DataTypePurpose { /// /// The normal release purpose /// Normal, /// /// The services only release purpose /// ServicesOnly, /// /// The code generator only release purpose /// CodeGenerator, } } ================================================ FILE: SemanticData/InformationModelFactory/IDataDescriptor.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System.Xml; namespace UAOOI.SemanticData.InformationModelFactory { /// /// Interface IDataDescriptor - encapsulates the description of the value. /// public interface IDataDescriptor { /// /// Sets the type of the data. of the DataType definition for the Value. It is not required that the pointed out element is defined in the same document. /// If that is the case many documents must be combined to resolve and validate this reference. /// /// The type of the data. XmlQualifiedName DataType { set; } /// /// Sets the array dimensions. This property specifies the length of each dimension for an array value. It is intended to describe the capability of the Variable, not the current size. /// The number of elements shall be equal to the value defined by the ValueRank. It shall be null if ValueRank ≤ 0. The value of 0 for an individual dimension indicates that the dimension has /// a variable length. For example, if a Variable is defined by the following C array: /// Int32 myArray[346]; /// then the DataType would point to an Int32, the ValueRank has the value 1 and the ArrayDimensions is an array with one entry having the value 346. /// Note that the maximum length of an array transferred on the wire is 2147483647 (max Int32) and a multidimensional array is encoded as a one dimensional array. /// /// /// ArrayDimensions is ignored if ValueRank is not equal to the OneOrMoreDimensions. /// /// The array dimensions. string ArrayDimensions { set; } /// /// Sets the value rank. This property indicates whether the value is an array and how many dimensions the array has. /// It may have the following values: /// - n > 1: the Value is an array with the specified number of dimensions. /// - >OneDimension (1): The value is an array with one dimension. /// - OneOrMoreDimensions (0): The value is an array with one or more dimensions. /// - Scalar (−1): The value is not an array. /// - Any (−2): The value can be a scalar or an array with any number of dimensions. /// - ScalarOrOneDimension (−3): The value can be a scalar or a one dimensional array. /// NOTE: All build in DataTypes are considered to be scalar, even if they have array-like semantics like ByteString and String. /// /// The value rank. int? ValueRank { set; } } } ================================================ FILE: SemanticData/InformationModelFactory/IDataTypeDefinitionFactory.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System.Xml; namespace UAOOI.SemanticData.InformationModelFactory { //TODO report Mantis issues. /// /// Interface IDataTypeDefinitionFactory - This interface is used to define subtypes of the Structure or Enumeration standard DataTypes. /// It defines an abstract representation of a that can be used by design tools to automatically create /// serialization code. /// /// /// See detailed description in the Part 6 F.12. /// /// Note: /// /// IsUnion is not defined in the .xsd. This flag indicates if the data type represents a union. Only one of the Fields defined for the data type is encoded into a value. /// This field is optional.The default value is false. If this value is true, the first field is the switch value. /// public interface IDataTypeDefinitionFactory { /// /// Creates new field and provides an object of type encapsulating information about the field data type. /// It is assumed that the structure has a sequential layout.For enumerations, the fields are simply a list of values. /// /// Returns new instance of the . IDataTypeFieldFactory NewField(); /// /// Sets a unique name of the DataType. This field is only specified for nested DataTypeDefinitions. /// The BrowseName of the DataType Node is used otherwise. /// This field is only specified for nested DataTypeDefinitions. The SymbolicName of the DataType Node is used otherwise. /// /// The name represented as . XmlQualifiedName Name { set; } /// /// A symbolic name for the data type. It should only be specified if the Name cannot be used for this purpose. /// Only letters, digits or the underscore (‘_’) are permitted. /// /// The symbolic name of thi entity. string SymbolicName { set; } /// /// Sets a value indicating whether this instance is option set. This flag indicates that the data type defines the OptionSetValues Property. /// This field is optional.The default value is false. /// /// true if this instance is option set; otherwise, false. bool IsOptionSet { set; } /// /// Sets a value indicating whether this instance is union. /// Only one of the Fields defined for the data type is encoded into a value. /// This field is optional.The default value is false. If this value is true, the first field is the switch value. /// /// true if this instance is union; otherwise, false. bool IsUnion { set; } } } ================================================ FILE: SemanticData/InformationModelFactory/IDataTypeFactory.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ namespace UAOOI.SemanticData.InformationModelFactory { /// /// Interface IDataTypeFactory - it provides functionality to factory objects implementing the interface. /// public interface IDataTypeFactory : ITypeFactory { /// /// Creates new implementation dependent object implementing the interface. /// The data type model is used to define simple and complex data types. Types are used to describe the structure of the Value attribute of variables and their types. /// Therefore each Variable and VariableType node is pointing with its DataType attribute to a node of the DataType node class. /// /// Returns new object of type encapsulating DataType definition factory. IDataTypeDefinitionFactory NewDefinition(); } } ================================================ FILE: SemanticData/InformationModelFactory/IDataTypeFieldFactory.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System.Xml; namespace UAOOI.SemanticData.InformationModelFactory { /// /// Interface IDataTypeFieldFactory - This interface defines a representation of a field within a structural DataType. /// public interface IDataTypeFieldFactory { /// /// Sets the DataType name. /// /// /// This field is not specified for subtypes of Enumeration. /// /// The type of the data. XmlQualifiedName DataType { set; } /// /// Adds the description for the field in multiple locales /// /// The locale field specified as a string that is composed of a language component and a country/region component as specified by RFC 3066. /// The localized text. void AddDescription(string localeField, string valueField); /// /// Adds the display name. /// /// The locale field specified as a string that is composed of a language component and a country/region component as specified by RFC 3066. /// The localized text. void AddDisplayName(string localeField, string valueField); /// /// Sets the name for the field that is unique within the . /// /// The name for the field. string Name { set; } /// /// Sets the value rank. It shall be Scalar (-1) or a fixed rank Array (>=1). This field is not specified for subtypes of Enumeration. /// /// The value rank. int? ValueRank { set; } /// /// The value associated with the field. This field is only specified for subtypes of Enumeration. /// For OptionSets the value is the number of the bit associated with the field. /// /// The value. int Value { set; } /// /// Sets the symbolic name of the field. A symbolic name for the field that can be used in auto-generated code. It should only be /// specified if the Name cannot be used for this purpose. Only letters, digits or the underscore (‘_’) are permitted. /// This value is not exposed in the OPC UA Address Space /// /// The symbolic name to be used by the tool. string SymbolicName { set; } /// /// Gets the array dimensions. /// /// /// The maximum length of an array. This field is a comma separated list of unsigned integer values.The list has a number of elements equal to the ValueRank. /// The value is 0 if the maximum is not known for a dimension. This field is not specified if the ValueRank less or equal 0. /// This field is not specified for subtypes of Enumeration or for DataTypes /// /// The array dimensions. string ArrayDimensions { set; } /// /// Sets the maximum length of the string. /// /// The maximum length of a String or ByteString value. If not known the value is 0. The value is 0 if the DataType is not String or ByteString. /// If the ValueRank > 0 the maximum applies to each element in the array. This field is not specified for subtypes of Enumeration or for DataTypes with /// the OptionSetValues Property. /// /// The maximum length of the string. uint MaxStringLength { set; } /// /// Sets a value indicating whether this instance is optional. /// /// /// The field indicates if a data type field in a structure is optional. This field is optional.The default value is false. This field is not specified for subtypes of Enumeration and Union. /// /// true if this instance is optional; otherwise, false. bool IsOptional { set; } } } ================================================ FILE: SemanticData/InformationModelFactory/IInstanceFactory.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System.Xml; namespace UAOOI.SemanticData.InformationModelFactory { /// /// Interface IInstanceFactory - It encapsulates definition of an instance. /// public interface IInstanceFactory : INodeFactory { /// /// Sets the modeling rule, which defines whether the component of a complex type are instantiated. /// This value is defined by processing the object pointed by the HasModelingRule reference. /// /// The modeling rule. ModelingRules? ModelingRule { set; } /// /// Sets the type definition. /// /// The type definition. XmlQualifiedName TypeDefinition { set; } /// /// Sets the type of the reference if it is component of a complex definition. /// /// The type of the reference used for parent child relationship. XmlQualifiedName ReferenceType { set; } } } ================================================ FILE: SemanticData/InformationModelFactory/IMethodInstanceFactory.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System; using System.Xml; namespace UAOOI.SemanticData.InformationModelFactory { /// /// Interface IMethodInstanceFactory representing a Method in the Information Model. Methods are lightweight functions, whose scope is bounded by an owning object, /// similar to the methods of a class in object-oriented programming or an owning object type, similar to static methods of a class. /// /// /// This interface may be specified for a Method node that is a target of a HasComponent reference from a single TypeObject or Object node. /// public interface IMethodInstanceFactory : IInstanceFactory { /// /// Sets a value indicating whether the Method node is executable (“False” means not executable, “True” means executable), not taking user access rights into account. /// If the server cannot get the executable information from the underlying system, it should state that it is executable. If a Method is called, the server should transfer /// this request and return the corresponding StatusCode if such a request is rejected. /// /// true if executable; otherwise, false. Default value is true bool? Executable { set; } /// /// Sets a value indicating whether the Method is currently executable taking user access rights into account (“False” means not executable, “True” means executable). /// /// true if executable by current user; otherwise, false. Default value is true bool? UserExecutable { set; } /// /// Gets or sets the method declaration identifier defined in Part 6 F.9. May be specified for Method Nodes that are a target of a HasComponent reference from a single Object Node. /// It is the NodeId of the UAMethod with the same BrowseName contained in the TypeDefinition associated with the Object Node. /// If the TypeDefinition overrides a Method inherited from a base ObjectType then this attribute shall reference the Method Node in the subtype. /// /// The method declaration identifier. string MethodDeclarationId { set; } /// /// Adds the input arguments. The InputArgument specify the input argument of the Method. The Method contains an array of the Argument data type. /// An empty array indicates that there are no input arguments for the Method. /// /// Encapsulates a method used to convert Argument represented as . void AddInputArguments(Func argument); /// /// Adds the output argument. The OutputArgument specifies the output argument of the Method. The Method contains an array of the Argument data type. /// An empty array indicates that there are no output arguments for the Method. /// /// Encapsulates a method used to convert Argument represented as . void AddOutputArguments(Func argument); /// /// Adds the argument description. /// /// The name. /// The locale. /// The value. void AddArgumentDescription(string name, string locale, string value); } } ================================================ FILE: SemanticData/InformationModelFactory/IModelFactory.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2022, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ using System; namespace UAOOI.SemanticData.InformationModelFactory { /// /// Interface IModelFactory defines an abstract definition of the specific representation of th OPC UA Information Model. /// public interface IModelFactory : INodeContainer { /// /// Creates the namespace description for the provided . /// /// The . /// The publication - when the model was published. This value is used for comparisons if the Model is defined in multiple files. /// The of the model. This is a human readable string and not intended for programmatic comparisons. /// The set of objects that the OPC Unified Architecture server makes available to clients is referred to as its Address Space. The namespace is provided to make the BrowseName unique in the Address Space. void CreateNamespace(Uri uri, DateTime? publicationDate, Version version); } } ================================================ FILE: SemanticData/InformationModelFactory/INodeContainer.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ namespace UAOOI.SemanticData.InformationModelFactory { /// /// Interface INodeContainer - it represent container of Nodes. /// public interface INodeContainer { /// /// Creates and adds a new node instance of the . /// /// The type of the node factory must inherit from . /// Returns new object implementing . NodeFactory AddNodeFactory() where NodeFactory : INodeFactory; } } ================================================ FILE: SemanticData/InformationModelFactory/INodeFactory.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System.Xml; using UAOOI.SemanticData.InformationModelFactory.UAConstants; namespace UAOOI.SemanticData.InformationModelFactory { /// /// Interface INodeFactory - a base type that defines a set of fields representing attributes and references of any node in the Address Space. /// public interface INodeFactory : INodeContainer { /// /// It holds the value of the BrowseName attribute of modes in the Address Space. The BrowseName is the name used in the information model. /// The BrowseName is qualified by the namespace used for the SymbolicName /// /// The BrowseName of the node. string BrowseName { set; } /// /// Adds new value for the Description. The optional Description element shall explain the meaning of the node in a localized text using the same mechanisms /// for localization as described for the DisplayName. /// /// The locale field. /// The value field. void AddDescription(string localeField, string valueField); /// /// Adds new value for the DisplayName. The DisplayName attribute contains the localized name of the node. /// Clients should use this attribute if they want to display the name of the node to the user. They should not use /// the BrowseName for this purpose. The server may maintain one or more localized representations for each DisplayName. /// Clients negotiate the locale to be returned when they open a session with the server. The section DisplayName defines the structure of the DisplayName. /// The string part of the DisplayName is restricted to 512 characters. /// /// The locale field. /// The value field. void AddDisplayName(string localeField, string valueField); /// /// Add new reference to the references collection of the node. This collection represents all the references defined by the selected Information Model including /// references to the instance declarations nodes. The References list specifies references that must be created for the node during Address Space instantiation. /// The reference can be forward or inverse. /// /// IReferenceFactory. IReferenceFactory NewReference(); /// /// Sets the a symbolic name for the node that can be used as a class/field name by a design tools to enhance auto-generated code. /// It should only be specified if the BrowseName cannot be used for this purpose. This field is not used directly to instantiate /// Address Space and is intended for use by design tools. Only letters, digits or the underscore (‘_’) are permitted. /// This attribute is not exposed in the Address Space. /// /// The symbolic name for the node. XmlQualifiedName SymbolicName { set; } /// /// Sets the write mask. The optional WriteMask attribute represents the WriteMask attribute of the Basic NodeClass, which exposes the possibilities of a client /// to write the attributes of the node. The WriteMask attribute does not take any user access rights into account, that is, although an attribute is writable /// this may be restricted to a certain user/user group. /// /// Default Value "0" /// The write access. uint WriteAccess { set; } /// /// Sets the access restrictions. /// /// /// Part 6 Table F.1 – UANodeSet The default AccessRestrictions that apply to all Nodes in the model. /// /// The access restrictions. AccessRestrictions AccessRestrictions { set; } /// /// Sets the release status of the node. /// /// /// It is not exposed in the address space. /// Added in the Rel 1.04 to the specification. /// /// The release status. ReleaseStatus ReleaseStatus { set; } //TODO Mantis - report error /// /// Sets the data type purpose. /// /// /// Not defined in the specification Part 2, 5, 6 and Errata Release 1.04.2 September 25, 2018 /// This field is defined in the UADataType in the UADataType but in UA Model Design in the NodeDesign /// /// The data type purpose. DataTypePurpose DataTypePurpose { set; } /// /// Sets the category. A list of identifiers used to group related UANodes together for use by tools that create/edit UANodeSet files. /// /// The category. string[] Category { set; } } } ================================================ FILE: SemanticData/InformationModelFactory/IObjectInstanceFactory.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ namespace UAOOI.SemanticData.InformationModelFactory { /// /// Interface IObjectInstanceFactory - encapsulates definition of the Object NodeClass. /// public interface IObjectInstanceFactory : IInstanceFactory { /// /// Sets a value indicating whether the node supports events. /// /// null if supports events contains no value, true if [supports events]; otherwise, false. bool? SupportsEvents { set; } } } ================================================ FILE: SemanticData/InformationModelFactory/IObjectTypeFactory.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ namespace UAOOI.SemanticData.InformationModelFactory { /// /// Interface IObjectTypeFactory - encapsulates definition of the ObjectType NodeClass. /// /// /// The ObjectType nodes class provide definitions for objects. /// public interface IObjectTypeFactory : ITypeFactory { } } ================================================ FILE: SemanticData/InformationModelFactory/IPropertyInstanceFactory.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ namespace UAOOI.SemanticData.InformationModelFactory { /// /// Interface IPropertyInstanceFactory /// public interface IPropertyInstanceFactory : IVariableInstanceFactory { } } ================================================ FILE: SemanticData/InformationModelFactory/IReferenceFactory.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System.Xml; namespace UAOOI.SemanticData.InformationModelFactory { /// /// Interface IReferenceFactory - represents nodes reference instance. /// public interface IReferenceFactory { /// /// Sets the type of the reference. /// /// The type of the reference. XmlQualifiedName ReferenceType { set; } /// /// Sets the target identifier. /// /// The target identifier. XmlQualifiedName TargetId { set; } /// /// Sets a value indicating whether this instance is inverse. /// /// true if this instance is inverse; otherwise, false. [System.ComponentModel.DefaultValue(false)] bool IsInverse { set; } } } ================================================ FILE: SemanticData/InformationModelFactory/IReferenceTypeFactory.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ namespace UAOOI.SemanticData.InformationModelFactory { /// /// Interface IReferenceTypeFactory - encapsulates a reference type definition. /// /// /// References are defined as instances of ReferenceType nodes. ReferenceType nodes are visible in the Address Space and are defined using the ReferenceType node class. /// In contrast, a reference instance is an inherent part of a node and no node class is used to represent references. /// public interface IReferenceTypeFactory : ITypeFactory { /// /// Adds a new inverse name. /// /// The locale field. /// The value field. void AddInverseName(string localeField, string valueField); /// /// Sets a value indicating whether this is symmetric. The Symmetric attribute is used to indicate whether or not the meaning of the reference type is the same for both the source and target nodes. /// If a reference type is symmetric, the InverseName attribute shall be omitted.Examples of symmetric reference types are “Connects To” and “Communicates With”. Both imply the same semantic coming from the source node or the target node. /// If the ReferenceType is non-symmetric and not abstract, the InverseName attribute shall be set. The optional InverseName attribute of LocalizedText ia a inverse name of the reference, /// i.e.the meaning of the type as seen from the target node. Examples of non-symmetric reference types include “Contains” and “Contained In”, and “Receives From” and “Sends To”. /// /// Default Value is false /// true if symmetric; otherwise, false. bool Symmetric { set; } } } ================================================ FILE: SemanticData/InformationModelFactory/ITypeFactory.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System.Xml; namespace UAOOI.SemanticData.InformationModelFactory { /// /// Interface ITypeFactory - instances implementing this interface supports type definition factoring. /// public interface ITypeFactory : INodeFactory { /// /// Sets the base type of the node. /// /// The base type represented by the . XmlQualifiedName BaseType { set; } /// /// Sets a value indicating whether this instance is abstract. /// /// Default Value is false /// true if this instance is abstract; otherwise, false. bool IsAbstract{ set; } } } ================================================ FILE: SemanticData/InformationModelFactory/IVariableInstanceFactory.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System.Xml; namespace UAOOI.SemanticData.InformationModelFactory { /// /// Interface IVariableInstanceFactory - In the OPC UA Address Space the Variable NodeClass is used to provide a value, which may be simple or complex. This NodeClass is represented by IVariableInstanceFactory type. /// A UAVariable is a subtype of the and . The type of the Variable is defined by . /// public interface IVariableInstanceFactory : IInstanceFactory, IDataDescriptor { /// /// Sets the access level. The AccessLevel attribute indicates the accessibility of the Value of a Variable node not taking user access rights into account and /// applies only to a UAVariable element. The AccessLevel attribute is used to indicate how the Value of a Variable node can be accessed (read/write) and /// if it contains current and/or historic data. The AccessLevel does not take any user access rights into account, i.e. although the Variable is writable this /// may be restricted to a certain user / user group. /// /// The access level. uint? AccessLevel { set; } /// /// Sets the default value. The value of the Variable node that the server assigns while instantiating the node. Its data type is defined by the DataType field. /// /// The default value. XmlElement DefaultValue { set; } /// /// Sets a value indicating whether this is historizing. The Historizing attribute indicates whether the server is actively /// collecting data for the history of the Variable node. This differs from the AccessLevel which identifies if the Variable has any historical data. A value of true /// indicates that the server is actively collecting data. A value of false indicates that the server is not actively collecting data. Default value is false. /// /// true if historizing; otherwise, false. bool? Historizing { set; } /// /// Sets the minimum sampling interval. The MinimumSamplingInterval attribute indicates how “current” the Value of the Variable NodeClass will be kept. /// It specifies (in milliseconds) how fast the server can reasonably sample the value for changes. The accuracy of this value (the ability of the server to attain /// “best case” performance) can be greatly affected by the system load and other factors. A MinimumSamplingInterval of 0 indicates that the server is to monitor the /// item continuously. A MinimumSamplingInterval of -1 means indeterminate value. /// /// The minimum sampling interval. int? MinimumSamplingInterval { set; } /// /// Sets the user access level. The UserAccessLevel attribute is used to indicate how the Value attribute of a Variable NodeClass can be accessed (read/write) /// and if it contains current or historic data taking user access rights into account. It applies only to a UAVariable element. If the OPC UA Server does not /// have the ability to get any user access rights related information from the underlying system it should use the same bit mask as used in the AccessLevel attribute. /// The UserAccessLevel attribute can restrict the accessibility indicated by the AccessLevel, but not exceed it. /// /// The user access level. byte? UserAccessLevel { set; } } } ================================================ FILE: SemanticData/InformationModelFactory/IVariableTypeFactory.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System.Xml; namespace UAOOI.SemanticData.InformationModelFactory { /// /// Interface IVariableTypeFactory /// public interface IVariableTypeFactory : ITypeFactory, IDataDescriptor { /// /// Sets the default value. The value of the Variable node that the server assigns while instantiating the node. Its data type is defined by the . /// /// The default value. XmlElement DefaultValue { set; } } } ================================================ FILE: SemanticData/InformationModelFactory/IViewInstanceFactory.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ namespace UAOOI.SemanticData.InformationModelFactory { /// /// Interface IViewInstanceFactory - encapsulates definition of a View NodeClass /// public interface IViewInstanceFactory : IInstanceFactory { /// /// Sets a value indicating whether the events are supported. /// /// null if it contains no value, true if events are supported; otherwise, false. bool? SupportsEvents { set; } /// /// Sets a value indicating whether the part of the Address Space represented by View contains no loops. /// The mandatory ContainsNoLoops attribute is set to false if the server is not able to identify if the view contains loops or not. /// /// true if the part of the Address Space represented by View contains no loops; otherwise, false. bool ContainsNoLoops { set; } } } ================================================ FILE: SemanticData/InformationModelFactory/ModelingRules.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ namespace UAOOI.SemanticData.InformationModelFactory { /// /// Enum ModelingRules - represents modeling rules described in Part 3 6.4.4 ModelingRules. /// public enum ModelingRules { /// /// The mandatory - 6.4.4.5.2 Mandatory /// Mandatory, /// /// The optional - 6.4.4.5.3 Optional /// Optional, /// /// The mandatory placeholder - 6.4.4.5.6 MandatoryPlaceholder /// MandatoryPlaceholder, /// /// The optional placeholder: 6.4.4.5.5 OptionalPlaceholder /// OptionalPlaceholder, /// /// The exposes its array - 6.4.4.5.4 ExposesItsArray /// ExposesItsArray, } } ================================================ FILE: SemanticData/InformationModelFactory/Parameter.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System.Collections.Generic; using System.Xml; namespace UAOOI.SemanticData.InformationModelFactory { /// /// Class Parameter - contains information representing a method arguments. /// public class Parameter : IDataDescriptor { /// /// Struct Description - localized description. /// public struct Description { /// /// The locale /// public string Locale; /// /// The text of Description /// public string Text; } /// /// Initializes a new instance of the class. /// public Parameter() { Descriptions = new List(); } /// /// Sets the name of the parameter. /// /// The name. public string Name { set; get; } /// /// Sets the identifier. /// /// The identifier. public int? Identifier { set; get; } /// /// Sets the type of the data. of the DataType definition for the Value. It is not required that the pointed out element is defined in the same document. /// If that is the case many documents must be combined to resolve and validate this reference. /// /// The type of the data. public XmlQualifiedName DataType { set; get; } /// /// Sets the array dimensions. This PROPERTY specifies the length of each dimension for an array value. It is intended to describe the capability of the Variable, not the current size. /// The number of elements shall be equal to the value defined by the ValueRank. It shall be null if ValueRank ≤ 0. The value of 0 for an individual dimension indicates that the dimension has /// a variable length. For example, if a Variable is defined by the following C array: /// Int32 myArray[346]; /// then the DataType would point to an Int32, the ValueRank has the value 1 and the ArrayDimensions is an array with one entry having the value 346. /// Note that the maximum length of an array transferred on the wire is 2147483647 (max Int32) and a multidimensional array is encoded as a one dimensional array. /// /// The array dimensions. /// ArrayDimensions is ignored if ValueRank is not equal to the OneOrMoreDimensions. public string ArrayDimensions { set; get; } /// /// Sets the value rank. This property indicates whether the value is an array and how many dimensions the array has. /// It may have the following values: /// - n > 1: the Value is an array with the specified number of dimensions. /// - >OneDimension (1): The value is an array with one dimension. /// - OneOrMoreDimensions (0): The value is an array with one or more dimensions. /// - Scalar (−1): The value is not an array. /// - Any (−2): The value can be a scalar or an array with any number of dimensions. /// - ScalarOrOneDimension (−3): The value can be a scalar or a one dimensional array. /// NOTE: All build in DataTypes are considered to be scalar, even if they have array-like semantics like ByteString and String. /// /// The value rank. public int? ValueRank { set; get; } /// /// Gets or sets the descriptions - human readable text with an optional locale identifier. /// /// The list of descriptions. public List Descriptions { get; protected set; } /// /// Adds the localized description of the argument /// /// The locale field. /// The value field. public void AddDescription(string localeField, string valueField) { Descriptions.Add(new Description() { Locale = localeField, Text = valueField }); } } } ================================================ FILE: SemanticData/InformationModelFactory/Properties/AssemblyInfo.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System.Reflection; using System.Runtime.InteropServices; [assembly: AssemblyTrademark("Object Oriented Internet")] [assembly: AssemblyCulture("")] [assembly: Guid("b364bbfb-0608-4ed6-936c-7dca0b386305")] ================================================ FILE: SemanticData/InformationModelFactory/Properties/UAOOI.SemanticData.InformationModelFactory.5.1.0.nuspec ================================================  UAOOI.SemanticData.InformationModelFactory 5.1.0 Object-oriented Internet Semantic-data Information Model Factory Mariuisz Postol Mariuisz Postol false MIT https://licenses.nuget.org/MIT https://commsvr.gitbook.io/ooi/readme https://github.com/mpostol/OPC-UA-OOI/blob/master/CommonResources/Media/Logo64.PNG?raw=true OPC UA Information Model Factory library used as the dependency injection to produce **OPC UA Information Model** by an external importer. The abstract API must be implemented by a classes providing functionality of OPC UA Information Model creation. The root of the definitions is the `IModelFactory` interface. OPC UA Information Model Factory library used as the dependency injection to produce **OPC UA Information Model** by an external importer. Copyright (C) 2019 Mariusz Postol LODZ POLAND Object Oriented Internet, OPC UA, Information Model, IoT, M2M, DOA, ================================================ FILE: SemanticData/InformationModelFactory/README.md ================================================ # `InformationModelFactory` Library It is a library used as the dependency injection to produce OPC UA Information Model by a selected importer. The abstract API must be implemented by classes providing the functionality of Information Model creation. The root of the definitions is the `IModelFactory` interface. ## How to implement the `InformationModelFactory` ## How to install NuGet package ## See also ================================================ FILE: SemanticData/InformationModelFactory/ReleaseStatus.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ namespace UAOOI.SemanticData.InformationModelFactory { //TODO Mantis - report error /// /// Enum ReleaseStatus /// /// /// Not defined in the specification Part 2, 5, 6 and Errata Release 1.04.2 September 25, 2018 /// public enum ReleaseStatus { /// /// The model has been released. /// Released, /// /// It is draft model /// Draft, /// /// Consider the model as deprecated /// Deprecated, } } ================================================ FILE: SemanticData/InformationModelFactory/SemanticData.InformationModelFactory.csproj ================================================  netstandard2.0 UAOOI.SemanticData.InformationModelFactory UAOOI.SemanticData.InformationModelFactory 5.1.0 Mariuisz Postol commsvr.com Object Oriented Internet OPC UA Information Model Factory library used as the dependency injection to produce **OPC UA Information Model** by an external importer. The abstract API must be implemented by classes providing the functionality of OPC UA Information Model creation. The root of the definitions is the `IModelFactory` interface. Copyright (C) 2019 Mariusz Postol LODZ POLAND MIT https://commsvr.gitbook.io/ooi/readme Object Oriented Internet, OPC UA, Information Model, IoT, M2M, DOA, https://github.com/mpostol/OPC-UA-OOI GitHub UAOOI.SemanticData.InformationModelFactory true OPCUAOOIKey.snk 5.1.0 false 5.1.0 Logo.ico https://github.com/mpostol/OPC-UA-OOI/blob/master/CommonResources/Media/Logo64.PNG?raw=true bin\Debug\netstandard2.0\UAOOI.SemanticData.InformationModelFactory.xml bin\Debug\netstandard2.0\ ================================================ FILE: SemanticData/InformationModelFactory/UAConstants/AccessLevels.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ namespace UAOOI.SemanticData.InformationModelFactory.UAConstants { /// /// Flags that can be set for the AccessLevel attribute. /// /// /// Flags that can be set for the AccessLevel attribute. /// public static class AccessLevels { /// /// The Variable value cannot be accessed and has no event history. /// public const byte None = 0x0; /// /// The current value of the Variable may be read. /// public const byte CurrentRead = 0x1; /// /// The current value of the Variable may be written. /// public const byte CurrentWrite = 0x2; /// /// The current value of the Variable may be read or written. /// public const byte CurrentReadOrWrite = 0x3; /// /// The history for the Variable may be read. /// public const byte HistoryRead = 0x4; /// /// The history for the Variable may be updated. /// public const byte HistoryWrite = 0x8; /// /// The history value of the Variable may be read or updated. /// public const byte HistoryReadOrWrite = 0xC; /// /// Indicates if the Variable generates SemanticChangeEvents when its value changes. /// public const byte SemanticChange = 0x10; } } ================================================ FILE: SemanticData/InformationModelFactory/UAConstants/AccessRestrictions.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System; namespace UAOOI.SemanticData.InformationModelFactory.UAConstants { /// /// Enum AccessRestrictions - this is a subtype of the UInt16 with the OptionSetValues Property defined. It is used to define the access restrictions of a . /// Defined in Part3-8.56 /// [Flags] public enum AccessRestrictions : ushort { /// /// The client can only access the Node when using a SecureChannel which digitally signs all messages. /// SigningRequired = 0x0, /// /// The client can only access the Node when using a SecureChannel which encrypts all messages. /// EncryptionRequired = 0x1, /// /// The client cannot access the Node when using SessionlessInvoke Service invocation. /// SessionRequired = 0x2 } } ================================================ FILE: SemanticData/InformationModelFactory/UAConstants/BrowseNames.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ namespace UAOOI.SemanticData.InformationModelFactory.UAConstants { /// /// Declares all of the BrowseNames used in the Model Design. /// public static partial class BrowseNames { /// /// The BrowseName for the AccessHistoryDataCapability component. /// public const string AccessHistoryDataCapability = "AccessHistoryDataCapability"; /// /// The BrowseName for the AccessHistoryEventsCapability component. /// public const string AccessHistoryEventsCapability = "AccessHistoryEventsCapability"; /// /// The BrowseName for the AckedState component. /// public const string AckedState = "AckedState"; /// /// The BrowseName for the Acknowledge component. /// public const string Acknowledge = "Acknowledge"; /// /// The BrowseName for the AcknowledgeableConditionType component. /// public const string AcknowledgeableConditionType = "AcknowledgeableConditionType"; /// /// The BrowseName for the ActionTimeStamp component. /// public const string ActionTimeStamp = "ActionTimeStamp"; /// /// The BrowseName for the ActivateSessionRequest component. /// public const string ActivateSessionRequest = "ActivateSessionRequest"; /// /// The BrowseName for the ActivateSessionResponse component. /// public const string ActivateSessionResponse = "ActivateSessionResponse"; /// /// The BrowseName for the ActiveState component. /// public const string ActiveState = "ActiveState"; /// /// The BrowseName for the ActualSessionTimeout component. /// public const string ActualSessionTimeout = "ActualSessionTimeout"; /// /// The BrowseName for the AddComment component. /// public const string AddComment = "AddComment"; /// /// The BrowseName for the AddCommentMethodType component. /// public const string AddCommentMethodType = "AddCommentMethodType"; /// /// The BrowseName for the AddNodesCount component. /// public const string AddNodesCount = "AddNodesCount"; /// /// The BrowseName for the AddNodesItem component. /// public const string AddNodesItem = "AddNodesItem"; /// /// The BrowseName for the AddNodesRequest component. /// public const string AddNodesRequest = "AddNodesRequest"; /// /// The BrowseName for the AddNodesResponse component. /// public const string AddNodesResponse = "AddNodesResponse"; /// /// The BrowseName for the AddNodesResult component. /// public const string AddNodesResult = "AddNodesResult"; /// /// The BrowseName for the AddReferencesCount component. /// public const string AddReferencesCount = "AddReferencesCount"; /// /// The BrowseName for the AddReferencesItem component. /// public const string AddReferencesItem = "AddReferencesItem"; /// /// The BrowseName for the AddReferencesRequest component. /// public const string AddReferencesRequest = "AddReferencesRequest"; /// /// The BrowseName for the AddReferencesResponse component. /// public const string AddReferencesResponse = "AddReferencesResponse"; /// /// The BrowseName for the AddressSpaceFile component. /// public const string AddressSpaceFile = "AddressSpaceFile"; /// /// The BrowseName for the AddressSpaceFileType component. /// public const string AddressSpaceFileType = "AddressSpaceFileType"; /// /// The BrowseName for the AggregateConfiguration component. /// public const string AggregateConfiguration = "AggregateConfiguration"; /// /// The BrowseName for the AggregateConfigurationType component. /// public const string AggregateConfigurationType = "AggregateConfigurationType"; /// /// The BrowseName for the AggregateFilter component. /// public const string AggregateFilter = "AggregateFilter"; /// /// The BrowseName for the AggregateFilterResult component. /// public const string AggregateFilterResult = "AggregateFilterResult"; /// /// The BrowseName for the AggregateFunction_AnnotationCount component. /// public const string AggregateFunction_AnnotationCount = "AnnotationCount"; /// /// The BrowseName for the AggregateFunction_Average component. /// public const string AggregateFunction_Average = "Average"; /// /// The BrowseName for the AggregateFunction_Count component. /// public const string AggregateFunction_Count = "Count"; /// /// The BrowseName for the AggregateFunction_Delta component. /// public const string AggregateFunction_Delta = "Delta"; /// /// The BrowseName for the AggregateFunction_DeltaBounds component. /// public const string AggregateFunction_DeltaBounds = "DeltaBounds"; /// /// The BrowseName for the AggregateFunction_DurationBad component. /// public const string AggregateFunction_DurationBad = "DurationBad"; /// /// The BrowseName for the AggregateFunction_DurationGood component. /// public const string AggregateFunction_DurationGood = "DurationGood"; /// /// The BrowseName for the AggregateFunction_DurationInStateNonZero component. /// public const string AggregateFunction_DurationInStateNonZero = "DurationInStateNonZero"; /// /// The BrowseName for the AggregateFunction_DurationInStateZero component. /// public const string AggregateFunction_DurationInStateZero = "DurationInStateZero"; /// /// The BrowseName for the AggregateFunction_End component. /// public const string AggregateFunction_End = "End"; /// /// The BrowseName for the AggregateFunction_EndBound component. /// public const string AggregateFunction_EndBound = "EndBound"; /// /// The BrowseName for the AggregateFunction_Interpolative component. /// public const string AggregateFunction_Interpolative = "Interpolative"; /// /// The BrowseName for the AggregateFunction_Maximum component. /// public const string AggregateFunction_Maximum = "Maximum"; /// /// The BrowseName for the AggregateFunction_Maximum2 component. /// public const string AggregateFunction_Maximum2 = "Maximum2"; /// /// The BrowseName for the AggregateFunction_MaximumActualTime component. /// public const string AggregateFunction_MaximumActualTime = "MaximumActualTime"; /// /// The BrowseName for the AggregateFunction_MaximumActualTime2 component. /// public const string AggregateFunction_MaximumActualTime2 = "MaximumActualTime2"; /// /// The BrowseName for the AggregateFunction_Minimum component. /// public const string AggregateFunction_Minimum = "Minimum"; /// /// The BrowseName for the AggregateFunction_Minimum2 component. /// public const string AggregateFunction_Minimum2 = "Minimum2"; /// /// The BrowseName for the AggregateFunction_MinimumActualTime component. /// public const string AggregateFunction_MinimumActualTime = "MinimumActualTime"; /// /// The BrowseName for the AggregateFunction_MinimumActualTime2 component. /// public const string AggregateFunction_MinimumActualTime2 = "MinimumActualTime2"; /// /// The BrowseName for the AggregateFunction_NumberOfTransitions component. /// public const string AggregateFunction_NumberOfTransitions = "NumberOfTransitions"; /// /// The BrowseName for the AggregateFunction_PercentBad component. /// public const string AggregateFunction_PercentBad = "PercentBad"; /// /// The BrowseName for the AggregateFunction_PercentGood component. /// public const string AggregateFunction_PercentGood = "PercentGood"; /// /// The BrowseName for the AggregateFunction_Range component. /// public const string AggregateFunction_Range = "Range"; /// /// The BrowseName for the AggregateFunction_Range2 component. /// public const string AggregateFunction_Range2 = "Range2"; /// /// The BrowseName for the AggregateFunction_StandardDeviationPopulation component. /// public const string AggregateFunction_StandardDeviationPopulation = "StandardDeviationPopulation"; /// /// The BrowseName for the AggregateFunction_StandardDeviationSample component. /// public const string AggregateFunction_StandardDeviationSample = "StandardDeviationSample"; /// /// The BrowseName for the AggregateFunction_Start component. /// public const string AggregateFunction_Start = "Start"; /// /// The BrowseName for the AggregateFunction_StartBound component. /// public const string AggregateFunction_StartBound = "StartBound"; /// /// The BrowseName for the AggregateFunction_TimeAverage component. /// public const string AggregateFunction_TimeAverage = "TimeAverage"; /// /// The BrowseName for the AggregateFunction_TimeAverage2 component. /// public const string AggregateFunction_TimeAverage2 = "TimeAverage2"; /// /// The BrowseName for the AggregateFunction_Total component. /// public const string AggregateFunction_Total = "Total"; /// /// The BrowseName for the AggregateFunction_Total2 component. /// public const string AggregateFunction_Total2 = "Total2"; /// /// The BrowseName for the AggregateFunction_VariancePopulation component. /// public const string AggregateFunction_VariancePopulation = "VariancePopulation"; /// /// The BrowseName for the AggregateFunction_VarianceSample component. /// public const string AggregateFunction_VarianceSample = "VarianceSample"; /// /// The BrowseName for the AggregateFunction_WorstQuality component. /// public const string AggregateFunction_WorstQuality = "WorstQuality"; /// /// The BrowseName for the AggregateFunction_WorstQuality2 component. /// public const string AggregateFunction_WorstQuality2 = "WorstQuality2"; /// /// The BrowseName for the AggregateFunctions component. /// public const string AggregateFunctions = "AggregateFunctions"; /// /// The BrowseName for the AggregateFunctionType component. /// public const string AggregateFunctionType = "AggregateFunctionType"; /// /// The BrowseName for the Aggregates component. /// public const string Aggregates = "Aggregates"; /// /// The BrowseName for the AlarmConditionType component. /// public const string AlarmConditionType = "AlarmConditionType"; /// /// The BrowseName for the AllowNulls component. /// public const string AllowNulls = "AllowNulls"; /// /// The BrowseName for the AlwaysGeneratesEvent component. /// public const string AlwaysGeneratesEvent = "AlwaysGeneratesEvent"; /// /// The BrowseName for the AnalogItemType component. /// public const string AnalogItemType = "AnalogItemType"; /// /// The BrowseName for the Annotation component. /// public const string Annotation = "Annotation"; /// /// The BrowseName for the Annotations component. /// public const string Annotations = "Annotations"; /// /// The BrowseName for the AnonymousIdentityToken component. /// public const string AnonymousIdentityToken = "AnonymousIdentityToken"; /// /// The BrowseName for the ApplicationDescription component. /// public const string ApplicationDescription = "ApplicationDescription"; /// /// The BrowseName for the ApplicationInstanceCertificate component. /// public const string ApplicationInstanceCertificate = "ApplicationInstanceCertificate"; /// /// The BrowseName for the ApplicationType component. /// public const string ApplicationType = "ApplicationType"; /// /// The BrowseName for the Argument component. /// public const string Argument = "Argument"; /// /// The BrowseName for the ArrayItemType component. /// public const string ArrayItemType = "ArrayItemType"; /// /// The BrowseName for the ArrayTestType component. /// public const string ArrayTestType = "ArrayTestType"; /// /// The BrowseName for the AttributeId component. /// public const string AttributeId = "AttributeId"; /// /// The BrowseName for the AttributeOperand component. /// public const string AttributeOperand = "AttributeOperand"; /// /// The BrowseName for the AttributeWriteMask component. /// public const string AttributeWriteMask = "AttributeWriteMask"; /// /// The BrowseName for the AuditActivateSessionEventType component. /// public const string AuditActivateSessionEventType = "AuditActivateSessionEventType"; /// /// The BrowseName for the AuditAddNodesEventType component. /// public const string AuditAddNodesEventType = "AuditAddNodesEventType"; /// /// The BrowseName for the AuditAddReferencesEventType component. /// public const string AuditAddReferencesEventType = "AuditAddReferencesEventType"; /// /// The BrowseName for the AuditCancelEventType component. /// public const string AuditCancelEventType = "AuditCancelEventType"; /// /// The BrowseName for the AuditCertificateDataMismatchEventType component. /// public const string AuditCertificateDataMismatchEventType = "AuditCertificateDataMismatchEventType"; /// /// The BrowseName for the AuditCertificateEventType component. /// public const string AuditCertificateEventType = "AuditCertificateEventType"; /// /// The BrowseName for the AuditCertificateExpiredEventType component. /// public const string AuditCertificateExpiredEventType = "AuditCertificateExpiredEventType"; /// /// The BrowseName for the AuditCertificateInvalidEventType component. /// public const string AuditCertificateInvalidEventType = "AuditCertificateInvalidEventType"; /// /// The BrowseName for the AuditCertificateMismatchEventType component. /// public const string AuditCertificateMismatchEventType = "AuditCertificateMismatchEventType"; /// /// The BrowseName for the AuditCertificateRevokedEventType component. /// public const string AuditCertificateRevokedEventType = "AuditCertificateRevokedEventType"; /// /// The BrowseName for the AuditCertificateUntrustedEventType component. /// public const string AuditCertificateUntrustedEventType = "AuditCertificateUntrustedEventType"; /// /// The BrowseName for the AuditChannelEventType component. /// public const string AuditChannelEventType = "AuditChannelEventType"; /// /// The BrowseName for the AuditConditionAcknowledgeEventType component. /// public const string AuditConditionAcknowledgeEventType = "AuditConditionAcknowledgeEventType"; /// /// The BrowseName for the AuditConditionCommentEventType component. /// public const string AuditConditionCommentEventType = "AuditConditionCommentEventType"; /// /// The BrowseName for the AuditConditionConfirmEventType component. /// public const string AuditConditionConfirmEventType = "AuditConditionConfirmEventType"; /// /// The BrowseName for the AuditConditionEnableEventType component. /// public const string AuditConditionEnableEventType = "AuditConditionEnableEventType"; /// /// The BrowseName for the AuditConditionEventType component. /// public const string AuditConditionEventType = "AuditConditionEventType"; /// /// The BrowseName for the AuditConditionRespondEventType component. /// public const string AuditConditionRespondEventType = "AuditConditionRespondEventType"; /// /// The BrowseName for the AuditConditionShelvingEventType component. /// public const string AuditConditionShelvingEventType = "AuditConditionShelvingEventType"; /// /// The BrowseName for the AuditCreateSessionEventType component. /// public const string AuditCreateSessionEventType = "AuditCreateSessionEventType"; /// /// The BrowseName for the AuditDeleteNodesEventType component. /// public const string AuditDeleteNodesEventType = "AuditDeleteNodesEventType"; /// /// The BrowseName for the AuditDeleteReferencesEventType component. /// public const string AuditDeleteReferencesEventType = "AuditDeleteReferencesEventType"; /// /// The BrowseName for the AuditEventType component. /// public const string AuditEventType = "AuditEventType"; /// /// The BrowseName for the AuditHistoryAtTimeDeleteEventType component. /// public const string AuditHistoryAtTimeDeleteEventType = "AuditHistoryAtTimeDeleteEventType"; /// /// The BrowseName for the AuditHistoryDeleteEventType component. /// public const string AuditHistoryDeleteEventType = "AuditHistoryDeleteEventType"; /// /// The BrowseName for the AuditHistoryEventDeleteEventType component. /// public const string AuditHistoryEventDeleteEventType = "AuditHistoryEventDeleteEventType"; /// /// The BrowseName for the AuditHistoryEventUpdateEventType component. /// public const string AuditHistoryEventUpdateEventType = "AuditHistoryEventUpdateEventType"; /// /// The BrowseName for the AuditHistoryRawModifyDeleteEventType component. /// public const string AuditHistoryRawModifyDeleteEventType = "AuditHistoryRawModifyDeleteEventType"; /// /// The BrowseName for the AuditHistoryUpdateEventType component. /// public const string AuditHistoryUpdateEventType = "AuditHistoryUpdateEventType"; /// /// The BrowseName for the AuditHistoryValueUpdateEventType component. /// public const string AuditHistoryValueUpdateEventType = "AuditHistoryValueUpdateEventType"; /// /// The BrowseName for the Auditing component. /// public const string Auditing = "Auditing"; /// /// The BrowseName for the AuditNodeManagementEventType component. /// public const string AuditNodeManagementEventType = "AuditNodeManagementEventType"; /// /// The BrowseName for the AuditOpenSecureChannelEventType component. /// public const string AuditOpenSecureChannelEventType = "AuditOpenSecureChannelEventType"; /// /// The BrowseName for the AuditProgramTransitionEventType component. /// public const string AuditProgramTransitionEventType = "AuditProgramTransitionEventType"; /// /// The BrowseName for the AuditSecurityEventType component. /// public const string AuditSecurityEventType = "AuditSecurityEventType"; /// /// The BrowseName for the AuditSessionEventType component. /// public const string AuditSessionEventType = "AuditSessionEventType"; /// /// The BrowseName for the AuditUpdateEventType component. /// public const string AuditUpdateEventType = "AuditUpdateEventType"; /// /// The BrowseName for the AuditUpdateMethodEventType component. /// public const string AuditUpdateMethodEventType = "AuditUpdateMethodEventType"; /// /// The BrowseName for the AuditUpdateStateEventType component. /// public const string AuditUpdateStateEventType = "AuditUpdateStateEventType"; /// /// The BrowseName for the AuditUrlMismatchEventType component. /// public const string AuditUrlMismatchEventType = "AuditUrlMismatchEventType"; /// /// The BrowseName for the AuditWriteUpdateEventType component. /// public const string AuditWriteUpdateEventType = "AuditWriteUpdateEventType"; /// /// The BrowseName for the AuthenticationMechanism component. /// public const string AuthenticationMechanism = "AuthenticationMechanism"; /// /// The BrowseName for the AutoDelete component. /// public const string AutoDelete = "AutoDelete"; /// /// The BrowseName for the AxisDefinition component. /// public const string AxisDefinition = "AxisDefinition"; /// /// The BrowseName for the AxisInformation component. /// public const string AxisInformation = "AxisInformation"; /// /// The BrowseName for the AxisScaleEnumeration component. /// public const string AxisScaleEnumeration = "AxisScaleEnumeration"; /// /// The BrowseName for the AxisScaleType component. /// public const string AxisScaleType = "AxisScaleType"; /// /// The BrowseName for the BaseConditionClassType component. /// public const string BaseConditionClassType = "BaseConditionClassType"; /// /// The BrowseName for the BaseDataType component. /// public const string BaseDataType = "BaseDataType"; /// /// The BrowseName for the BaseDataVariableType component. /// public const string BaseDataVariableType = "BaseDataVariableType"; /// /// The BrowseName for the BaseEventType component. /// public const string BaseEventType = "BaseEventType"; /// /// The BrowseName for the BaseModelChangeEventType component. /// public const string BaseModelChangeEventType = "BaseModelChangeEventType"; /// /// The BrowseName for the BaseObjectType component. /// public const string BaseObjectType = "BaseObjectType"; /// /// The BrowseName for the BaseVariableType component. /// public const string BaseVariableType = "BaseVariableType"; /// /// The BrowseName for the BitFieldMaskDataType component. /// public const string BitFieldMaskDataType = "BitFieldMaskDataType"; /// /// The BrowseName for the BitMask component. /// public const string BitMask = "BitMask"; /// /// The BrowseName for the Boolean component. /// public const string Boolean = "Boolean"; /// /// The BrowseName for the BranchId component. /// public const string BranchId = "BranchId"; /// /// The BrowseName for the BrowseCount component. /// public const string BrowseCount = "BrowseCount"; /// /// The BrowseName for the BrowseDescription component. /// public const string BrowseDescription = "BrowseDescription"; /// /// The BrowseName for the BrowseDirection component. /// public const string BrowseDirection = "BrowseDirection"; /// /// The BrowseName for the BrowseNextCount component. /// public const string BrowseNextCount = "BrowseNextCount"; /// /// The BrowseName for the BrowseNextRequest component. /// public const string BrowseNextRequest = "BrowseNextRequest"; /// /// The BrowseName for the BrowseNextResponse component. /// public const string BrowseNextResponse = "BrowseNextResponse"; /// /// The BrowseName for the BrowsePath component. /// public const string BrowsePath = "BrowsePath"; /// /// The BrowseName for the BrowsePathResult component. /// public const string BrowsePathResult = "BrowsePathResult"; /// /// The BrowseName for the BrowsePathTarget component. /// public const string BrowsePathTarget = "BrowsePathTarget"; /// /// The BrowseName for the BrowseRequest component. /// public const string BrowseRequest = "BrowseRequest"; /// /// The BrowseName for the BrowseResponse component. /// public const string BrowseResponse = "BrowseResponse"; /// /// The BrowseName for the BrowseResult component. /// public const string BrowseResult = "BrowseResult"; /// /// The BrowseName for the BrowseResultMask component. /// public const string BrowseResultMask = "BrowseResultMask"; /// /// The BrowseName for the BuildDate component. /// public const string BuildDate = "BuildDate"; /// /// The BrowseName for the BuildInfo component. /// public const string BuildInfo = "BuildInfo"; /// /// The BrowseName for the BuildInfoType component. /// public const string BuildInfoType = "BuildInfoType"; /// /// The BrowseName for the BuildNumber component. /// public const string BuildNumber = "BuildNumber"; /// /// The BrowseName for the Byte component. /// public const string Byte = "Byte"; /// /// The BrowseName for the ByteString component. /// public const string ByteString = "ByteString"; /// /// The BrowseName for the CallCount component. /// public const string CallCount = "CallCount"; /// /// The BrowseName for the CallMethodRequest component. /// public const string CallMethodRequest = "CallMethodRequest"; /// /// The BrowseName for the CallMethodResult component. /// public const string CallMethodResult = "CallMethodResult"; /// /// The BrowseName for the CallRequest component. /// public const string CallRequest = "CallRequest"; /// /// The BrowseName for the CallResponse component. /// public const string CallResponse = "CallResponse"; /// /// The BrowseName for the CancelRequest component. /// public const string CancelRequest = "CancelRequest"; /// /// The BrowseName for the CancelResponse component. /// public const string CancelResponse = "CancelResponse"; /// /// The BrowseName for the Certificate component. /// public const string Certificate = "Certificate"; /// /// The BrowseName for the Changes component. /// public const string Changes = "Changes"; /// /// The BrowseName for the ChannelSecurityToken component. /// public const string ChannelSecurityToken = "ChannelSecurityToken"; /// /// The BrowseName for the ClientAuditEntryId component. /// public const string ClientAuditEntryId = "ClientAuditEntryId"; /// /// The BrowseName for the ClientCertificate component. /// public const string ClientCertificate = "ClientCertificate"; /// /// The BrowseName for the ClientCertificateThumbprint component. /// public const string ClientCertificateThumbprint = "ClientCertificateThumbprint"; /// /// The BrowseName for the ClientConnectionTime component. /// public const string ClientConnectionTime = "ClientConnectionTime"; /// /// The BrowseName for the ClientDescription component. /// public const string ClientDescription = "ClientDescription"; /// /// The BrowseName for the ClientLastContactTime component. /// public const string ClientLastContactTime = "ClientLastContactTime"; /// /// The BrowseName for the ClientSoftwareCertificates component. /// public const string ClientSoftwareCertificates = "ClientSoftwareCertificates"; /// /// The BrowseName for the ClientUserId component. /// public const string ClientUserId = "ClientUserId"; /// /// The BrowseName for the ClientUserIdHistory component. /// public const string ClientUserIdHistory = "ClientUserIdHistory"; /// /// The BrowseName for the ClientUserIdOfSession component. /// public const string ClientUserIdOfSession = "ClientUserIdOfSession"; /// /// The BrowseName for the Close component. /// public const string Close = "Close"; /// /// The BrowseName for the CloseMethodType component. /// public const string CloseMethodType = "CloseMethodType"; /// /// The BrowseName for the CloseSecureChannelRequest component. /// public const string CloseSecureChannelRequest = "CloseSecureChannelRequest"; /// /// The BrowseName for the CloseSecureChannelResponse component. /// public const string CloseSecureChannelResponse = "CloseSecureChannelResponse"; /// /// The BrowseName for the CloseSessionRequest component. /// public const string CloseSessionRequest = "CloseSessionRequest"; /// /// The BrowseName for the CloseSessionResponse component. /// public const string CloseSessionResponse = "CloseSessionResponse"; /// /// The BrowseName for the Comment component. /// public const string Comment = "Comment"; /// /// The BrowseName for the ComplexNumberType component. /// public const string ComplexNumberType = "ComplexNumberType"; /// /// The BrowseName for the ComplianceLevel component. /// public const string ComplianceLevel = "ComplianceLevel"; /// /// The BrowseName for the CompositeTestType component. /// public const string CompositeTestType = "CompositeTestType"; /// /// The BrowseName for the ConditionClassId component. /// public const string ConditionClassId = "ConditionClassId"; /// /// The BrowseName for the ConditionClassName component. /// public const string ConditionClassName = "ConditionClassName"; /// /// The BrowseName for the ConditionName component. /// public const string ConditionName = "ConditionName"; /// /// The BrowseName for the ConditionRefresh component. /// public const string ConditionRefresh = "ConditionRefresh"; /// /// The BrowseName for the ConditionRefreshMethodType component. /// public const string ConditionRefreshMethodType = "ConditionRefreshMethodType"; /// /// The BrowseName for the ConditionType component. /// public const string ConditionType = "ConditionType"; /// /// The BrowseName for the ConditionVariableType component. /// public const string ConditionVariableType = "ConditionVariableType"; /// /// The BrowseName for the Confirm component. /// public const string Confirm = "Confirm"; /// /// The BrowseName for the ConfirmedState component. /// public const string ConfirmedState = "ConfirmedState"; /// /// The BrowseName for the ContentFilter component. /// public const string ContentFilter = "ContentFilter"; /// /// The BrowseName for the ContentFilterElement component. /// public const string ContentFilterElement = "ContentFilterElement"; /// /// The BrowseName for the ContentFilterElementResult component. /// public const string ContentFilterElementResult = "ContentFilterElementResult"; /// /// The BrowseName for the ContentFilterResult component. /// public const string ContentFilterResult = "ContentFilterResult"; /// /// The BrowseName for the ContinuationPoint component. /// public const string ContinuationPoint = "ContinuationPoint"; /// /// The BrowseName for the Counter component. /// public const string Counter = "Counter"; /// /// The BrowseName for the Creatable component. /// public const string Creatable = "Creatable"; /// /// The BrowseName for the CreateClientName component. /// public const string CreateClientName = "CreateClientName"; /// /// The BrowseName for the CreateMonitoredItemsCount component. /// public const string CreateMonitoredItemsCount = "CreateMonitoredItemsCount"; /// /// The BrowseName for the CreateMonitoredItemsRequest component. /// public const string CreateMonitoredItemsRequest = "CreateMonitoredItemsRequest"; /// /// The BrowseName for the CreateMonitoredItemsResponse component. /// public const string CreateMonitoredItemsResponse = "CreateMonitoredItemsResponse"; /// /// The BrowseName for the CreateSessionId component. /// public const string CreateSessionId = "CreateSessionId"; /// /// The BrowseName for the CreateSessionRequest component. /// public const string CreateSessionRequest = "CreateSessionRequest"; /// /// The BrowseName for the CreateSessionResponse component. /// public const string CreateSessionResponse = "CreateSessionResponse"; /// /// The BrowseName for the CreateSubscriptionCount component. /// public const string CreateSubscriptionCount = "CreateSubscriptionCount"; /// /// The BrowseName for the CreateSubscriptionRequest component. /// public const string CreateSubscriptionRequest = "CreateSubscriptionRequest"; /// /// The BrowseName for the CreateSubscriptionResponse component. /// public const string CreateSubscriptionResponse = "CreateSubscriptionResponse"; /// /// The BrowseName for the CubeItemType component. /// public const string CubeItemType = "CubeItemType"; /// /// The BrowseName for the CumulatedSessionCount component. /// public const string CumulatedSessionCount = "CumulatedSessionCount"; /// /// The BrowseName for the CumulatedSubscriptionCount component. /// public const string CumulatedSubscriptionCount = "CumulatedSubscriptionCount"; /// /// The BrowseName for the CurrentKeepAliveCount component. /// public const string CurrentKeepAliveCount = "CurrentKeepAliveCount"; /// /// The BrowseName for the CurrentLifetimeCount component. /// public const string CurrentLifetimeCount = "CurrentLifetimeCount"; /// /// The BrowseName for the CurrentMonitoredItemsCount component. /// public const string CurrentMonitoredItemsCount = "CurrentMonitoredItemsCount"; /// /// The BrowseName for the CurrentPublishRequestsInQueue component. /// public const string CurrentPublishRequestsInQueue = "CurrentPublishRequestsInQueue"; /// /// The BrowseName for the CurrentServerId component. /// public const string CurrentServerId = "CurrentServerId"; /// /// The BrowseName for the CurrentSessionCount component. /// public const string CurrentSessionCount = "CurrentSessionCount"; /// /// The BrowseName for the CurrentState component. /// public const string CurrentState = "CurrentState"; /// /// The BrowseName for the CurrentSubscriptionCount component. /// public const string CurrentSubscriptionCount = "CurrentSubscriptionCount"; /// /// The BrowseName for the CurrentSubscriptionsCount component. /// public const string CurrentSubscriptionsCount = "CurrentSubscriptionsCount"; /// /// The BrowseName for the CurrentTime component. /// public const string CurrentTime = "CurrentTime"; /// /// The BrowseName for the DataChangeFilter component. /// public const string DataChangeFilter = "DataChangeFilter"; /// /// The BrowseName for the DataChangeNotification component. /// public const string DataChangeNotification = "DataChangeNotification"; /// /// The BrowseName for the DataChangeNotificationsCount component. /// public const string DataChangeNotificationsCount = "DataChangeNotificationsCount"; /// /// The BrowseName for the DataChangeTrigger component. /// public const string DataChangeTrigger = "DataChangeTrigger"; /// /// The BrowseName for the DataItemType component. /// public const string DataItemType = "DataItemType"; /// /// The BrowseName for the DataTypeAttributes component. /// public const string DataTypeAttributes = "DataTypeAttributes"; /// /// The BrowseName for the DataTypeDescriptionType component. /// public const string DataTypeDescriptionType = "DataTypeDescriptionType"; /// /// The BrowseName for the DataTypeDictionaryType component. /// public const string DataTypeDictionaryType = "DataTypeDictionaryType"; /// /// The BrowseName for the DataTypeEncodingType component. /// public const string DataTypeEncodingType = "DataTypeEncodingType"; /// /// The BrowseName for the DataTypeNode component. /// public const string DataTypeNode = "DataTypeNode"; /// /// The BrowseName for the DataTypesFolder component. /// public const string DataTypesFolder = "DataTypes"; /// /// The BrowseName for the DataTypeSystemType component. /// public const string DataTypeSystemType = "DataTypeSystemType"; /// /// The BrowseName for the DataTypeVersion component. /// public const string DataTypeVersion = "DataTypeVersion"; /// /// The BrowseName for the DataValue component. /// public const string DataValue = "DataValue"; /// /// The BrowseName for the Date component. /// public const string Date = "Date"; /// /// The BrowseName for the DateTime component. /// public const string DateTime = "DateTime"; /// /// The BrowseName for the DeadbandType component. /// public const string DeadbandType = "DeadbandType"; /// /// The BrowseName for the DefaultBinary component. /// public const string DefaultBinary = "Default Binary"; /// /// The BrowseName for the DefaultResponse component. /// public const string DefaultResponse = "DefaultResponse"; /// /// The BrowseName for the DefaultXml component. /// public const string DefaultXml = "Default XML"; /// /// The BrowseName for the Definition component. /// public const string Definition = "Definition"; /// /// The BrowseName for the Deletable component. /// public const string Deletable = "Deletable"; /// /// The BrowseName for the DeleteAtTimeCapability component. /// public const string DeleteAtTimeCapability = "DeleteAtTimeCapability"; /// /// The BrowseName for the DeleteAtTimeDetails component. /// public const string DeleteAtTimeDetails = "DeleteAtTimeDetails"; /// /// The BrowseName for the DeleteEventCapability component. /// public const string DeleteEventCapability = "DeleteEventCapability"; /// /// The BrowseName for the DeleteEventDetails component. /// public const string DeleteEventDetails = "DeleteEventDetails"; /// /// The BrowseName for the DeleteMonitoredItemsCount component. /// public const string DeleteMonitoredItemsCount = "DeleteMonitoredItemsCount"; /// /// The BrowseName for the DeleteMonitoredItemsRequest component. /// public const string DeleteMonitoredItemsRequest = "DeleteMonitoredItemsRequest"; /// /// The BrowseName for the DeleteMonitoredItemsResponse component. /// public const string DeleteMonitoredItemsResponse = "DeleteMonitoredItemsResponse"; /// /// The BrowseName for the DeleteNodesCount component. /// public const string DeleteNodesCount = "DeleteNodesCount"; /// /// The BrowseName for the DeleteNodesItem component. /// public const string DeleteNodesItem = "DeleteNodesItem"; /// /// The BrowseName for the DeleteNodesRequest component. /// public const string DeleteNodesRequest = "DeleteNodesRequest"; /// /// The BrowseName for the DeleteNodesResponse component. /// public const string DeleteNodesResponse = "DeleteNodesResponse"; /// /// The BrowseName for the DeleteRawCapability component. /// public const string DeleteRawCapability = "DeleteRawCapability"; /// /// The BrowseName for the DeleteRawModifiedDetails component. /// public const string DeleteRawModifiedDetails = "DeleteRawModifiedDetails"; /// /// The BrowseName for the DeleteReferencesCount component. /// public const string DeleteReferencesCount = "DeleteReferencesCount"; /// /// The BrowseName for the DeleteReferencesItem component. /// public const string DeleteReferencesItem = "DeleteReferencesItem"; /// /// The BrowseName for the DeleteReferencesRequest component. /// public const string DeleteReferencesRequest = "DeleteReferencesRequest"; /// /// The BrowseName for the DeleteReferencesResponse component. /// public const string DeleteReferencesResponse = "DeleteReferencesResponse"; /// /// The BrowseName for the DeleteSubscriptionsCount component. /// public const string DeleteSubscriptionsCount = "DeleteSubscriptionsCount"; /// /// The BrowseName for the DeleteSubscriptionsRequest component. /// public const string DeleteSubscriptionsRequest = "DeleteSubscriptionsRequest"; /// /// The BrowseName for the DeleteSubscriptionsResponse component. /// public const string DeleteSubscriptionsResponse = "DeleteSubscriptionsResponse"; /// /// The BrowseName for the DeviceFailureEventType component. /// public const string DeviceFailureEventType = "DeviceFailureEventType"; /// /// The BrowseName for the DiagnosticInfo component. /// public const string DiagnosticInfo = "DiagnosticInfo"; /// /// The BrowseName for the DialogConditionType component. /// public const string DialogConditionType = "DialogConditionType"; /// /// The BrowseName for the DialogResponseMethodType component. /// public const string DialogResponseMethodType = "DialogResponseMethodType"; /// /// The BrowseName for the DialogState component. /// public const string DialogState = "DialogState"; /// /// The BrowseName for the DictionaryFragment component. /// public const string DictionaryFragment = "DictionaryFragment"; /// /// The BrowseName for the Disable component. /// public const string Disable = "Disable"; /// /// The BrowseName for the DisableCount component. /// public const string DisableCount = "DisableCount"; /// /// The BrowseName for the DisabledMonitoredItemCount component. /// public const string DisabledMonitoredItemCount = "DisabledMonitoredItemCount"; /// /// The BrowseName for the DisabledMonitoredItemsSamplingCount component. /// public const string DisabledMonitoredItemsSamplingCount = "DisabledMonitoredItemsSamplingCount"; /// /// The BrowseName for the DiscardedMessageCount component. /// public const string DiscardedMessageCount = "DiscardedMessageCount"; /// /// The BrowseName for the DiscreteAlarmType component. /// public const string DiscreteAlarmType = "DiscreteAlarmType"; /// /// The BrowseName for the DiscreteItemType component. /// public const string DiscreteItemType = "DiscreteItemType"; /// /// The BrowseName for the DnsServiceRecord component. /// public const string DnsServiceRecord = "DnsServiceRecord"; /// /// The BrowseName for the Double component. /// public const string Double = "Double"; /// /// The BrowseName for the DoubleComplexNumberType component. /// public const string DoubleComplexNumberType = "DoubleComplexNumberType"; /// /// The BrowseName for the Duration component. /// public const string Duration = "Duration"; /// /// The BrowseName for the EffectiveDisplayName component. /// public const string EffectiveDisplayName = "EffectiveDisplayName"; /// /// The BrowseName for the EffectiveTransitionTime component. /// public const string EffectiveTransitionTime = "EffectiveTransitionTime"; /// /// The BrowseName for the ElementOperand component. /// public const string ElementOperand = "ElementOperand"; /// /// The BrowseName for the Enable component. /// public const string Enable = "Enable"; /// /// The BrowseName for the EnableCount component. /// public const string EnableCount = "EnableCount"; /// /// The BrowseName for the EnabledFlag component. /// public const string EnabledFlag = "EnabledFlag"; /// /// The BrowseName for the EnabledState component. /// public const string EnabledState = "EnabledState"; /// /// The BrowseName for the Encoding component. /// public const string Encoding = "Encoding"; /// /// The BrowseName for the EndpointConfiguration component. /// public const string EndpointConfiguration = "EndpointConfiguration"; /// /// The BrowseName for the EndpointDescription component. /// public const string EndpointDescription = "EndpointDescription"; /// /// The BrowseName for the EndpointUrl component. /// public const string EndpointUrl = "EndpointUrl"; /// /// The BrowseName for the EndpointUrlListDataType component. /// public const string EndpointUrlListDataType = "EndpointUrlListDataType"; /// /// The BrowseName for the EndTime component. /// public const string EndTime = "EndTime"; /// /// The BrowseName for the EngineeringUnits component. /// public const string EngineeringUnits = "EngineeringUnits"; /// /// The BrowseName for the EnumeratedTestType component. /// public const string EnumeratedTestType = "EnumeratedTestType"; /// /// The BrowseName for the Enumeration component. /// public const string Enumeration = "Enumeration"; /// /// The BrowseName for the EnumStrings component. /// public const string EnumStrings = "EnumStrings"; /// /// The BrowseName for the EnumValues component. /// public const string EnumValues = "EnumValues"; /// /// The BrowseName for the EnumValueType component. /// public const string EnumValueType = "EnumValueType"; /// /// The BrowseName for the EUInformation component. /// public const string EUInformation = "EUInformation"; /// /// The BrowseName for the EURange component. /// public const string EURange = "EURange"; /// /// The BrowseName for the EventFieldList component. /// public const string EventFieldList = "EventFieldList"; /// /// The BrowseName for the EventFilter component. /// public const string EventFilter = "EventFilter"; /// /// The BrowseName for the EventFilterResult component. /// public const string EventFilterResult = "EventFilterResult"; /// /// The BrowseName for the EventId component. /// public const string EventId = "EventId"; /// /// The BrowseName for the EventIds component. /// public const string EventIds = "EventIds"; /// /// The BrowseName for the EventNotificationList component. /// public const string EventNotificationList = "EventNotificationList"; /// /// The BrowseName for the EventNotificationsCount component. /// public const string EventNotificationsCount = "EventNotificationsCount"; /// /// The BrowseName for the EventQueueOverFlowCount component. /// public const string EventQueueOverFlowCount = "EventQueueOverFlowCount"; /// /// The BrowseName for the EventQueueOverflowEventType component. /// public const string EventQueueOverflowEventType = "EventQueueOverflowEventType"; /// /// The BrowseName for the EventType component. /// public const string EventType = "EventType"; /// /// The BrowseName for the EventTypesFolder component. /// public const string EventTypesFolder = "EventTypes"; /// /// The BrowseName for the ExceptionDeviation component. /// public const string ExceptionDeviation = "ExceptionDeviation"; /// /// The BrowseName for the ExceptionDeviationFormat component. /// public const string ExceptionDeviationFormat = "ExceptionDeviationFormat"; /// /// The BrowseName for the ExclusiveDeviationAlarmType component. /// public const string ExclusiveDeviationAlarmType = "ExclusiveDeviationAlarmType"; /// /// The BrowseName for the ExclusiveLevelAlarmType component. /// public const string ExclusiveLevelAlarmType = "ExclusiveLevelAlarmType"; /// /// The BrowseName for the ExclusiveLimitAlarmType component. /// public const string ExclusiveLimitAlarmType = "ExclusiveLimitAlarmType"; /// /// The BrowseName for the ExclusiveLimitStateMachineType component. /// public const string ExclusiveLimitStateMachineType = "ExclusiveLimitStateMachineType"; /// /// The BrowseName for the ExclusiveRateOfChangeAlarmType component. /// public const string ExclusiveRateOfChangeAlarmType = "ExclusiveRateOfChangeAlarmType"; /// /// The BrowseName for the ExpandedNodeId component. /// public const string ExpandedNodeId = "ExpandedNodeId"; /// /// The BrowseName for the ExportNamespace component. /// public const string ExportNamespace = "ExportNamespace"; /// /// The BrowseName for the FalseState component. /// public const string FalseState = "FalseState"; /// /// The BrowseName for the FileType component. /// public const string FileType = "FileType"; /// /// The BrowseName for the Filter component. /// public const string Filter = "Filter"; /// /// The BrowseName for the FilterOperand component. /// public const string FilterOperand = "FilterOperand"; /// /// The BrowseName for the FilterOperator component. /// public const string FilterOperator = "FilterOperator"; /// /// The BrowseName for the FinalResultData component. /// public const string FinalResultData = "FinalResultData"; /// /// The BrowseName for the FindDnsServicesRequest component. /// public const string FindDnsServicesRequest = "FindDnsServicesRequest"; /// /// The BrowseName for the FindDnsServicesResponse component. /// public const string FindDnsServicesResponse = "FindDnsServicesResponse"; /// /// The BrowseName for the FindServersRequest component. /// public const string FindServersRequest = "FindServersRequest"; /// /// The BrowseName for the FindServersResponse component. /// public const string FindServersResponse = "FindServersResponse"; /// /// The BrowseName for the FiniteStateMachineType component. /// public const string FiniteStateMachineType = "FiniteStateMachineType"; /// /// The BrowseName for the FiniteStateVariableType component. /// public const string FiniteStateVariableType = "FiniteStateVariableType"; /// /// The BrowseName for the FiniteTransitionVariableType component. /// public const string FiniteTransitionVariableType = "FiniteTransitionVariableType"; /// /// The BrowseName for the Float component. /// public const string Float = "Float"; /// /// The BrowseName for the FolderType component. /// public const string FolderType = "FolderType"; /// /// The BrowseName for the FromState component. /// public const string FromState = "FromState"; /// /// The BrowseName for the GeneralModelChangeEventType component. /// public const string GeneralModelChangeEventType = "GeneralModelChangeEventType"; /// /// The BrowseName for the GeneratesEvent component. /// public const string GeneratesEvent = "GeneratesEvent"; /// /// The BrowseName for the GetEndpointsRequest component. /// public const string GetEndpointsRequest = "GetEndpointsRequest"; /// /// The BrowseName for the GetEndpointsResponse component. /// public const string GetEndpointsResponse = "GetEndpointsResponse"; /// /// The BrowseName for the GetMonitoredItems component. /// public const string GetMonitoredItems = "GetMonitoredItems"; /// /// The BrowseName for the GetMonitoredItemsMethodType component. /// public const string GetMonitoredItemsMethodType = "GetMonitoredItemsMethodType"; /// /// The BrowseName for the GetPosition component. /// public const string GetPosition = "GetPosition"; /// /// The BrowseName for the GetPositionMethodType component. /// public const string GetPositionMethodType = "GetPositionMethodType"; /// /// The BrowseName for the Guid component. /// public const string Guid = "Guid"; /// /// The BrowseName for the HAConfiguration component. /// public const string HAConfiguration = "HA Configuration"; /// /// The BrowseName for the Halt component. /// public const string Halt = "Halt"; /// /// The BrowseName for the Halted component. /// public const string Halted = "Halted"; /// /// The BrowseName for the HaltedToReady component. /// public const string HaltedToReady = "HaltedToReady"; /// /// The BrowseName for the HasCause component. /// public const string HasCause = "HasCause"; /// /// The BrowseName for the HasChild component. /// public const string HasChild = "HasChild"; /// /// The BrowseName for the HasComponent component. /// public const string HasComponent = "HasComponent"; /// /// The BrowseName for the HasCondition component. /// public const string HasCondition = "HasCondition"; /// /// The BrowseName for the HasDescription component. /// public const string HasDescription = "HasDescription"; /// /// The BrowseName for the HasEffect component. /// public const string HasEffect = "HasEffect"; /// /// The BrowseName for the HasEncoding component. /// public const string HasEncoding = "HasEncoding"; /// /// The BrowseName for the HasEventSource component. /// public const string HasEventSource = "HasEventSource"; /// /// The BrowseName for the HasFalseSubState component. /// public const string HasFalseSubState = "HasFalseSubState"; /// /// The BrowseName for the HasHistoricalConfiguration component. /// public const string HasHistoricalConfiguration = "HasHistoricalConfiguration"; /// /// The BrowseName for the HasModellingRule component. /// public const string HasModellingRule = "HasModellingRule"; /// /// The BrowseName for the HasNotifier component. /// public const string HasNotifier = "HasNotifier"; /// /// The BrowseName for the HasOrderedComponent component. /// public const string HasOrderedComponent = "HasOrderedComponent"; /// /// The BrowseName for the HasProperty component. /// public const string HasProperty = "HasProperty"; /// /// The BrowseName for the HasSubStateMachine component. /// public const string HasSubStateMachine = "HasSubStateMachine"; /// /// The BrowseName for the HasSubtype component. /// public const string HasSubtype = "HasSubtype"; /// /// The BrowseName for the HasTrueSubState component. /// public const string HasTrueSubState = "HasTrueSubState"; /// /// The BrowseName for the HasTypeDefinition component. /// public const string HasTypeDefinition = "HasTypeDefinition"; /// /// The BrowseName for the HierarchicalReferences component. /// public const string HierarchicalReferences = "HierarchicalReferences"; /// /// The BrowseName for the High component. /// public const string High = "High"; /// /// The BrowseName for the HighHigh component. /// public const string HighHigh = "HighHigh"; /// /// The BrowseName for the HighHighLimit component. /// public const string HighHighLimit = "HighHighLimit"; /// /// The BrowseName for the HighHighState component. /// public const string HighHighState = "HighHighState"; /// /// The BrowseName for the HighHighToHigh component. /// public const string HighHighToHigh = "HighHighToHigh"; /// /// The BrowseName for the HighLimit component. /// public const string HighLimit = "HighLimit"; /// /// The BrowseName for the HighState component. /// public const string HighState = "HighState"; /// /// The BrowseName for the HighToHighHigh component. /// public const string HighToHighHigh = "HighToHighHigh"; /// /// The BrowseName for the HistoricalDataConfigurationType component. /// public const string HistoricalDataConfigurationType = "HistoricalDataConfigurationType"; /// /// The BrowseName for the HistoricalEventFilter component. /// public const string HistoricalEventFilter = "HistoricalEventFilter"; /// /// The BrowseName for the HistoryData component. /// public const string HistoryData = "HistoryData"; /// /// The BrowseName for the HistoryEvent component. /// public const string HistoryEvent = "HistoryEvent"; /// /// The BrowseName for the HistoryEventFieldList component. /// public const string HistoryEventFieldList = "HistoryEventFieldList"; /// /// The BrowseName for the HistoryModifiedData component. /// public const string HistoryModifiedData = "HistoryModifiedData"; /// /// The BrowseName for the HistoryReadCount component. /// public const string HistoryReadCount = "HistoryReadCount"; /// /// The BrowseName for the HistoryReadDetails component. /// public const string HistoryReadDetails = "HistoryReadDetails"; /// /// The BrowseName for the HistoryReadRequest component. /// public const string HistoryReadRequest = "HistoryReadRequest"; /// /// The BrowseName for the HistoryReadResponse component. /// public const string HistoryReadResponse = "HistoryReadResponse"; /// /// The BrowseName for the HistoryReadResult component. /// public const string HistoryReadResult = "HistoryReadResult"; /// /// The BrowseName for the HistoryReadValueId component. /// public const string HistoryReadValueId = "HistoryReadValueId"; /// /// The BrowseName for the HistoryServerCapabilities component. /// public const string HistoryServerCapabilities = "HistoryServerCapabilities"; /// /// The BrowseName for the HistoryServerCapabilitiesType component. /// public const string HistoryServerCapabilitiesType = "HistoryServerCapabilitiesType"; /// /// The BrowseName for the HistoryUpdateCount component. /// public const string HistoryUpdateCount = "HistoryUpdateCount"; /// /// The BrowseName for the HistoryUpdateDetails component. /// public const string HistoryUpdateDetails = "HistoryUpdateDetails"; /// /// The BrowseName for the HistoryUpdateEventResult component. /// public const string HistoryUpdateEventResult = "HistoryUpdateEventResult"; /// /// The BrowseName for the HistoryUpdateRequest component. /// public const string HistoryUpdateRequest = "HistoryUpdateRequest"; /// /// The BrowseName for the HistoryUpdateResponse component. /// public const string HistoryUpdateResponse = "HistoryUpdateResponse"; /// /// The BrowseName for the HistoryUpdateResult component. /// public const string HistoryUpdateResult = "HistoryUpdateResult"; /// /// The BrowseName for the HistoryUpdateType component. /// public const string HistoryUpdateType = "HistoryUpdateType"; /// /// The BrowseName for the Icon component. /// public const string Icon = "Icon"; /// /// The BrowseName for the Id component. /// public const string Id = "Id"; /// /// The BrowseName for the IdType component. /// public const string IdType = "IdType"; /// /// The BrowseName for the Image component. /// public const string Image = "Image"; /// /// The BrowseName for the ImageBMP component. /// public const string ImageBMP = "ImageBMP"; /// /// The BrowseName for the ImageGIF component. /// public const string ImageGIF = "ImageGIF"; /// /// The BrowseName for the ImageItemType component. /// public const string ImageItemType = "ImageItemType"; /// /// The BrowseName for the ImageJPG component. /// public const string ImageJPG = "ImageJPG"; /// /// The BrowseName for the ImagePNG component. /// public const string ImagePNG = "ImagePNG"; /// /// The BrowseName for the IndexRange component. /// public const string IndexRange = "IndexRange"; /// /// The BrowseName for the InitialStateType component. /// public const string InitialStateType = "InitialStateType"; /// /// The BrowseName for the InputArguments component. /// public const string InputArguments = "InputArguments"; /// /// The BrowseName for the InputNode component. /// public const string InputNode = "InputNode"; /// /// The BrowseName for the InsertAnnotationCapability component. /// public const string InsertAnnotationCapability = "InsertAnnotationCapability"; /// /// The BrowseName for the InsertDataCapability component. /// public const string InsertDataCapability = "InsertDataCapability"; /// /// The BrowseName for the InsertEventCapability component. /// public const string InsertEventCapability = "InsertEventCapability"; /// /// The BrowseName for the InstanceCount component. /// public const string InstanceCount = "InstanceCount"; /// /// The BrowseName for the InstanceNode component. /// public const string InstanceNode = "InstanceNode"; /// /// The BrowseName for the InstrumentRange component. /// public const string InstrumentRange = "InstrumentRange"; /// /// The BrowseName for the Int16 component. /// public const string Int16 = "Int16"; /// /// The BrowseName for the Int32 component. /// public const string Int32 = "Int32"; /// /// The BrowseName for the Int64 component. /// public const string Int64 = "Int64"; /// /// The BrowseName for the Integer component. /// public const string Integer = "Integer"; /// /// The BrowseName for the IntegerId component. /// public const string IntegerId = "IntegerId"; /// /// The BrowseName for the IntermediateResult component. /// public const string IntermediateResult = "IntermediateResult"; /// /// The BrowseName for the InvalidHostname component. /// public const string InvalidHostname = "InvalidHostname"; /// /// The BrowseName for the InvalidUri component. /// public const string InvalidUri = "InvalidUri"; /// /// The BrowseName for the InvocationCreationTime component. /// public const string InvocationCreationTime = "InvocationCreationTime"; /// /// The BrowseName for the IsDeleteModified component. /// public const string IsDeleteModified = "IsDeleteModified"; /// /// The BrowseName for the IsNamespaceSubset component. /// public const string IsNamespaceSubset = "IsNamespaceSubset"; /// /// The BrowseName for the IssuedIdentityToken component. /// public const string IssuedIdentityToken = "IssuedIdentityToken"; /// /// The BrowseName for the LastMethodCall component. /// public const string LastMethodCall = "LastMethodCall"; /// /// The BrowseName for the LastMethodCallTime component. /// public const string LastMethodCallTime = "LastMethodCallTime"; /// /// The BrowseName for the LastMethodInputArguments component. /// public const string LastMethodInputArguments = "LastMethodInputArguments"; /// /// The BrowseName for the LastMethodOutputArguments component. /// public const string LastMethodOutputArguments = "LastMethodOutputArguments"; /// /// The BrowseName for the LastMethodReturnStatus component. /// public const string LastMethodReturnStatus = "LastMethodReturnStatus"; /// /// The BrowseName for the LastMethodSessionId component. /// public const string LastMethodSessionId = "LastMethodSessionId"; /// /// The BrowseName for the LastResponse component. /// public const string LastResponse = "LastResponse"; /// /// The BrowseName for the LastSeverity component. /// public const string LastSeverity = "LastSeverity"; /// /// The BrowseName for the LastTransition component. /// public const string LastTransition = "LastTransition"; /// /// The BrowseName for the LastTransitionTime component. /// public const string LastTransitionTime = "LastTransitionTime"; /// /// The BrowseName for the LatePublishRequestCount component. /// public const string LatePublishRequestCount = "LatePublishRequestCount"; /// /// The BrowseName for the LimitAlarmType component. /// public const string LimitAlarmType = "LimitAlarmType"; /// /// The BrowseName for the LimitState component. /// public const string LimitState = "LimitState"; /// /// The BrowseName for the LiteralOperand component. /// public const string LiteralOperand = "LiteralOperand"; /// /// The BrowseName for the LocaleId component. /// public const string LocaleId = "LocaleId"; /// /// The BrowseName for the LocaleIdArray component. /// public const string LocaleIdArray = "LocaleIdArray"; /// /// The BrowseName for the LocaleIds component. /// public const string LocaleIds = "LocaleIds"; /// /// The BrowseName for the LocalizedText component. /// public const string LocalizedText = "LocalizedText"; /// /// The BrowseName for the LocalTime component. /// public const string LocalTime = "LocalTime"; /// /// The BrowseName for the Lock component. /// public const string Lock = "Lock"; /// /// The BrowseName for the LockType component. /// public const string LockType = "LockType"; /// /// The BrowseName for the Low component. /// public const string Low = "Low"; /// /// The BrowseName for the LowLimit component. /// public const string LowLimit = "LowLimit"; /// /// The BrowseName for the LowLow component. /// public const string LowLow = "LowLow"; /// /// The BrowseName for the LowLowLimit component. /// public const string LowLowLimit = "LowLowLimit"; /// /// The BrowseName for the LowLowState component. /// public const string LowLowState = "LowLowState"; /// /// The BrowseName for the LowLowToLow component. /// public const string LowLowToLow = "LowLowToLow"; /// /// The BrowseName for the LowState component. /// public const string LowState = "LowState"; /// /// The BrowseName for the LowToLowLow component. /// public const string LowToLowLow = "LowToLowLow"; /// /// The BrowseName for the MaintenanceConditionClassType component. /// public const string MaintenanceConditionClassType = "MaintenanceConditionClassType"; /// /// The BrowseName for the ManufacturerName component. /// public const string ManufacturerName = "ManufacturerName"; /// /// The BrowseName for the MaxArrayLength component. /// public const string MaxArrayLength = "MaxArrayLength"; /// /// The BrowseName for the MaxBrowseContinuationPoints component. /// public const string MaxBrowseContinuationPoints = "MaxBrowseContinuationPoints"; /// /// The BrowseName for the MaxHistoryContinuationPoints component. /// public const string MaxHistoryContinuationPoints = "MaxHistoryContinuationPoints"; /// /// The BrowseName for the MaxInstanceCount component. /// public const string MaxInstanceCount = "MaxInstanceCount"; /// /// The BrowseName for the MaxKeepAliveCount component. /// public const string MaxKeepAliveCount = "MaxKeepAliveCount"; /// /// The BrowseName for the MaxLifetimeCount component. /// public const string MaxLifetimeCount = "MaxLifetimeCount"; /// /// The BrowseName for the MaxMonitoredItemsPerCall component. /// public const string MaxMonitoredItemsPerCall = "MaxMonitoredItemsPerCall"; /// /// The BrowseName for the MaxNodesPerBrowse component. /// public const string MaxNodesPerBrowse = "MaxNodesPerBrowse"; /// /// The BrowseName for the MaxNodesPerHistoryReadData component. /// public const string MaxNodesPerHistoryReadData = "MaxNodesPerHistoryReadData"; /// /// The BrowseName for the MaxNodesPerHistoryReadEvents component. /// public const string MaxNodesPerHistoryReadEvents = "MaxNodesPerHistoryReadEvents"; /// /// The BrowseName for the MaxNodesPerHistoryUpdateData component. /// public const string MaxNodesPerHistoryUpdateData = "MaxNodesPerHistoryUpdateData"; /// /// The BrowseName for the MaxNodesPerHistoryUpdateEvents component. /// public const string MaxNodesPerHistoryUpdateEvents = "MaxNodesPerHistoryUpdateEvents"; /// /// The BrowseName for the MaxNodesPerMethodCall component. /// public const string MaxNodesPerMethodCall = "MaxNodesPerMethodCall"; /// /// The BrowseName for the MaxNodesPerNodeManagement component. /// public const string MaxNodesPerNodeManagement = "MaxNodesPerNodeManagement"; /// /// The BrowseName for the MaxNodesPerRead component. /// public const string MaxNodesPerRead = "MaxNodesPerRead"; /// /// The BrowseName for the MaxNodesPerRegisterNodes component. /// public const string MaxNodesPerRegisterNodes = "MaxNodesPerRegisterNodes"; /// /// The BrowseName for the MaxNodesPerTranslateBrowsePathsToNodeIds component. /// public const string MaxNodesPerTranslateBrowsePathsToNodeIds = "MaxNodesPerTranslateBrowsePathsToNodeIds"; /// /// The BrowseName for the MaxNodesPerWrite component. /// public const string MaxNodesPerWrite = "MaxNodesPerWrite"; /// /// The BrowseName for the MaxNotificationsPerPublish component. /// public const string MaxNotificationsPerPublish = "MaxNotificationsPerPublish"; /// /// The BrowseName for the MaxQueryContinuationPoints component. /// public const string MaxQueryContinuationPoints = "MaxQueryContinuationPoints"; /// /// The BrowseName for the MaxRecycleCount component. /// public const string MaxRecycleCount = "MaxRecycleCount"; /// /// The BrowseName for the MaxResponseMessageSize component. /// public const string MaxResponseMessageSize = "MaxResponseMessageSize"; /// /// The BrowseName for the MaxReturnDataValues component. /// public const string MaxReturnDataValues = "MaxReturnDataValues"; /// /// The BrowseName for the MaxReturnEventValues component. /// public const string MaxReturnEventValues = "MaxReturnEventValues"; /// /// The BrowseName for the MaxSampledMonitoredItemsCount component. /// public const string MaxSampledMonitoredItemsCount = "MaxSampledMonitoredItemsCount"; /// /// The BrowseName for the MaxStringLength component. /// public const string MaxStringLength = "MaxStringLength"; /// /// The BrowseName for the MaxTimeInterval component. /// public const string MaxTimeInterval = "MaxTimeInterval"; /// /// The BrowseName for the MaxTimeShelved component. /// public const string MaxTimeShelved = "MaxTimeShelved"; /// /// The BrowseName for the Message component. /// public const string Message = "Message"; /// /// The BrowseName for the MessageSecurityMode component. /// public const string MessageSecurityMode = "MessageSecurityMode"; /// /// The BrowseName for the MethodAttributes component. /// public const string MethodAttributes = "MethodAttributes"; /// /// The BrowseName for the MethodId component. /// public const string MethodId = "MethodId"; /// /// The BrowseName for the MethodNode component. /// public const string MethodNode = "MethodNode"; /// /// The BrowseName for the MinSupportedSampleRate component. /// public const string MinSupportedSampleRate = "MinSupportedSampleRate"; /// /// The BrowseName for the MinTimeInterval component. /// public const string MinTimeInterval = "MinTimeInterval"; /// /// The BrowseName for the ModelChangeStructureDataType component. /// public const string ModelChangeStructureDataType = "ModelChangeStructureDataType"; /// /// The BrowseName for the ModelChangeStructureVerbMask component. /// public const string ModelChangeStructureVerbMask = "ModelChangeStructureVerbMask"; /// /// The BrowseName for the ModellingRule_ExposesItsArray component. /// public const string ModellingRule_ExposesItsArray = "ExposesItsArray"; /// /// The BrowseName for the ModellingRule_Mandatory component. /// public const string ModellingRule_Mandatory = "Mandatory"; /// /// The BrowseName for the ModellingRule_MandatoryPlaceholder component. /// public const string ModellingRule_MandatoryPlaceholder = "MandatoryPlaceholder"; /// /// The BrowseName for the ModellingRule_MandatoryShared component. /// public const string ModellingRule_MandatoryShared = "MandatoryShared"; /// /// The BrowseName for the ModellingRule_Optional component. /// public const string ModellingRule_Optional = "Optional"; /// /// The BrowseName for the ModellingRule_OptionalPlaceholder component. /// public const string ModellingRule_OptionalPlaceholder = "OptionalPlaceholder"; /// /// The BrowseName for the ModellingRules component. /// public const string ModellingRules = "ModellingRules"; /// /// The BrowseName for the ModellingRuleType component. /// public const string ModellingRuleType = "ModellingRuleType"; /// /// The BrowseName for the ModificationInfo component. /// public const string ModificationInfo = "ModificationInfo"; /// /// The BrowseName for the ModifyCount component. /// public const string ModifyCount = "ModifyCount"; /// /// The BrowseName for the ModifyMonitoredItemsCount component. /// public const string ModifyMonitoredItemsCount = "ModifyMonitoredItemsCount"; /// /// The BrowseName for the ModifyMonitoredItemsRequest component. /// public const string ModifyMonitoredItemsRequest = "ModifyMonitoredItemsRequest"; /// /// The BrowseName for the ModifyMonitoredItemsResponse component. /// public const string ModifyMonitoredItemsResponse = "ModifyMonitoredItemsResponse"; /// /// The BrowseName for the ModifySubscriptionCount component. /// public const string ModifySubscriptionCount = "ModifySubscriptionCount"; /// /// The BrowseName for the ModifySubscriptionRequest component. /// public const string ModifySubscriptionRequest = "ModifySubscriptionRequest"; /// /// The BrowseName for the ModifySubscriptionResponse component. /// public const string ModifySubscriptionResponse = "ModifySubscriptionResponse"; /// /// The BrowseName for the MonitoredItemCount component. /// public const string MonitoredItemCount = "MonitoredItemCount"; /// /// The BrowseName for the MonitoredItemCreateRequest component. /// public const string MonitoredItemCreateRequest = "MonitoredItemCreateRequest"; /// /// The BrowseName for the MonitoredItemCreateResult component. /// public const string MonitoredItemCreateResult = "MonitoredItemCreateResult"; /// /// The BrowseName for the MonitoredItemModifyRequest component. /// public const string MonitoredItemModifyRequest = "MonitoredItemModifyRequest"; /// /// The BrowseName for the MonitoredItemModifyResult component. /// public const string MonitoredItemModifyResult = "MonitoredItemModifyResult"; /// /// The BrowseName for the MonitoredItemNotification component. /// public const string MonitoredItemNotification = "MonitoredItemNotification"; /// /// The BrowseName for the MonitoringFilter component. /// public const string MonitoringFilter = "MonitoringFilter"; /// /// The BrowseName for the MonitoringFilterResult component. /// public const string MonitoringFilterResult = "MonitoringFilterResult"; /// /// The BrowseName for the MonitoringMode component. /// public const string MonitoringMode = "MonitoringMode"; /// /// The BrowseName for the MonitoringParameters component. /// public const string MonitoringParameters = "MonitoringParameters"; /// /// The BrowseName for the MonitoringQueueOverflowCount component. /// public const string MonitoringQueueOverflowCount = "MonitoringQueueOverflowCount"; /// /// The BrowseName for the MultiStateDiscreteType component. /// public const string MultiStateDiscreteType = "MultiStateDiscreteType"; /// /// The BrowseName for the MultiStateValueDiscreteType component. /// public const string MultiStateValueDiscreteType = "MultiStateValueDiscreteType"; /// /// The BrowseName for the Name component. /// public const string Name = "Name"; /// /// The BrowseName for the NamespaceArray component. /// public const string NamespaceArray = "NamespaceArray"; /// /// The BrowseName for the NamespaceFile component. /// public const string NamespaceFile = "NamespaceFile"; /// /// The BrowseName for the NamespaceIdentifier component. /// public const string NamespaceIdentifier = ""; /// /// The BrowseName for the NamespaceMetadataType component. /// public const string NamespaceMetadataType = "NamespaceMetadataType"; /// /// The BrowseName for the NamespacePublicationDate component. /// public const string NamespacePublicationDate = "NamespacePublicationDate"; /// /// The BrowseName for the Namespaces component. /// public const string Namespaces = "Namespaces"; /// /// The BrowseName for the NamespacesType component. /// public const string NamespacesType = "NamespacesType"; /// /// The BrowseName for the NamespaceUri component. /// public const string NamespaceUri = "NamespaceUri"; /// /// The BrowseName for the NamespaceVersion component. /// public const string NamespaceVersion = "NamespaceVersion"; /// /// The BrowseName for the NamingRule component. /// public const string NamingRule = "NamingRule"; /// /// The BrowseName for the NamingRuleType component. /// public const string NamingRuleType = "NamingRuleType"; /// /// The BrowseName for the NDimensionArrayItemType component. /// public const string NDimensionArrayItemType = "NDimensionArrayItemType"; /// /// The BrowseName for the NetworkGroupDataType component. /// public const string NetworkGroupDataType = "NetworkGroupDataType"; /// /// The BrowseName for the NewStateId component. /// public const string NewStateId = "NewStateId"; /// /// The BrowseName for the NewValue component. /// public const string NewValue = "NewValue"; /// /// The BrowseName for the NewValues component. /// public const string NewValues = "NewValues"; /// /// The BrowseName for the NextSequenceNumber component. /// public const string NextSequenceNumber = "NextSequenceNumber"; /// /// The BrowseName for the Node component. /// public const string Node = "Node"; /// /// The BrowseName for the NodeAttributes component. /// public const string NodeAttributes = "NodeAttributes"; /// /// The BrowseName for the NodeAttributesMask component. /// public const string NodeAttributesMask = "NodeAttributesMask"; /// /// The BrowseName for the NodeClass component. /// public const string NodeClass = "NodeClass"; /// /// The BrowseName for the NodeId component. /// public const string NodeId = "NodeId"; /// /// The BrowseName for the NodeReference component. /// public const string NodeReference = "NodeReference"; /// /// The BrowseName for the NodesToAdd component. /// public const string NodesToAdd = "NodesToAdd"; /// /// The BrowseName for the NodesToDelete component. /// public const string NodesToDelete = "NodesToDelete"; /// /// The BrowseName for the NodeTypeDescription component. /// public const string NodeTypeDescription = "NodeTypeDescription"; /// /// The BrowseName for the NodeVersion component. /// public const string NodeVersion = "NodeVersion"; /// /// The BrowseName for the NonExclusiveDeviationAlarmType component. /// public const string NonExclusiveDeviationAlarmType = "NonExclusiveDeviationAlarmType"; /// /// The BrowseName for the NonExclusiveLevelAlarmType component. /// public const string NonExclusiveLevelAlarmType = "NonExclusiveLevelAlarmType"; /// /// The BrowseName for the NonExclusiveLimitAlarmType component. /// public const string NonExclusiveLimitAlarmType = "NonExclusiveLimitAlarmType"; /// /// The BrowseName for the NonExclusiveRateOfChangeAlarmType component. /// public const string NonExclusiveRateOfChangeAlarmType = "NonExclusiveRateOfChangeAlarmType"; /// /// The BrowseName for the NonHierarchicalReferences component. /// public const string NonHierarchicalReferences = "NonHierarchicalReferences"; /// /// The BrowseName for the NonTransparentNetworkRedundancyType component. /// public const string NonTransparentNetworkRedundancyType = "NonTransparentNetworkRedundancyType"; /// /// The BrowseName for the NonTransparentRedundancyType component. /// public const string NonTransparentRedundancyType = "NonTransparentRedundancyType"; /// /// The BrowseName for the NormalState component. /// public const string NormalState = "NormalState"; /// /// The BrowseName for the NotificationData component. /// public const string NotificationData = "NotificationData"; /// /// The BrowseName for the NotificationMessage component. /// public const string NotificationMessage = "NotificationMessage"; /// /// The BrowseName for the NotificationsCount component. /// public const string NotificationsCount = "NotificationsCount"; /// /// The BrowseName for the Number component. /// public const string Number = "Number"; /// /// The BrowseName for the NumericRange component. /// public const string NumericRange = "NumericRange"; /// /// The BrowseName for the ObjectAttributes component. /// public const string ObjectAttributes = "ObjectAttributes"; /// /// The BrowseName for the ObjectNode component. /// public const string ObjectNode = "ObjectNode"; /// /// The BrowseName for the ObjectsFolder component. /// public const string ObjectsFolder = "Objects"; /// /// The BrowseName for the ObjectTypeAttributes component. /// public const string ObjectTypeAttributes = "ObjectTypeAttributes"; /// /// The BrowseName for the ObjectTypeNode component. /// public const string ObjectTypeNode = "ObjectTypeNode"; /// /// The BrowseName for the ObjectTypesFolder component. /// public const string ObjectTypesFolder = "ObjectTypes"; /// /// The BrowseName for the OffNormalAlarmType component. /// public const string OffNormalAlarmType = "OffNormalAlarmType"; /// /// The BrowseName for the OkResponse component. /// public const string OkResponse = "OkResponse"; /// /// The BrowseName for the OldStateId component. /// public const string OldStateId = "OldStateId"; /// /// The BrowseName for the OldValue component. /// public const string OldValue = "OldValue"; /// /// The BrowseName for the OldValues component. /// public const string OldValues = "OldValues"; /// /// The BrowseName for the OneShotShelve component. /// public const string OneShotShelve = "OneShotShelve"; /// /// The BrowseName for the OneShotShelved component. /// public const string OneShotShelved = "OneShotShelved"; /// /// The BrowseName for the OneShotShelvedToTimedShelved component. /// public const string OneShotShelvedToTimedShelved = "OneShotShelvedToTimedShelved"; /// /// The BrowseName for the OneShotShelvedToUnshelved component. /// public const string OneShotShelvedToUnshelved = "OneShotShelvedToUnshelved"; /// /// The BrowseName for the OPCBinarySchema_TypeSystem component. /// public const string OPCBinarySchema_TypeSystem = "OPC Binary"; /// /// The BrowseName for the OpcUa_BinarySchema component. /// public const string OpcUa_BinarySchema = "Opc.Ua"; /// /// The BrowseName for the OpcUa_XmlSchema component. /// public const string OpcUa_XmlSchema = "Opc.Ua"; /// /// The BrowseName for the Open component. /// public const string Open = "Open"; /// /// The BrowseName for the OpenCount component. /// public const string OpenCount = "OpenCount"; /// /// The BrowseName for the OpenFileMode component. /// public const string OpenFileMode = "OpenFileMode"; /// /// The BrowseName for the OpenMethodType component. /// public const string OpenMethodType = "OpenMethodType"; /// /// The BrowseName for the OpenSecureChannelRequest component. /// public const string OpenSecureChannelRequest = "OpenSecureChannelRequest"; /// /// The BrowseName for the OpenSecureChannelResponse component. /// public const string OpenSecureChannelResponse = "OpenSecureChannelResponse"; /// /// The BrowseName for the OperationLimits component. /// public const string OperationLimits = "OperationLimits"; /// /// The BrowseName for the OperationLimitsType component. /// public const string OperationLimitsType = "OperationLimitsType"; /// /// The BrowseName for the OptionSetType component. /// public const string OptionSetType = "OptionSetType"; /// /// The BrowseName for the OptionSetValues component. /// public const string OptionSetValues = "OptionSetValues"; /// /// The BrowseName for the Organizes component. /// public const string Organizes = "Organizes"; /// /// The BrowseName for the OutputArguments component. /// public const string OutputArguments = "OutputArguments"; /// /// The BrowseName for the ParameterDataTypeId component. /// public const string ParameterDataTypeId = "ParameterDataTypeId"; /// /// The BrowseName for the ParsingResult component. /// public const string ParsingResult = "ParsingResult"; /// /// The BrowseName for the PercentDataBad component. /// public const string PercentDataBad = "PercentDataBad"; /// /// The BrowseName for the PercentDataGood component. /// public const string PercentDataGood = "PercentDataGood"; /// /// The BrowseName for the PerformInsertReplace component. /// public const string PerformInsertReplace = "PerformInsertReplace"; /// /// The BrowseName for the PerformUpdateType component. /// public const string PerformUpdateType = "PerformUpdateType"; /// /// The BrowseName for the Priority component. /// public const string Priority = "Priority"; /// /// The BrowseName for the ProcessConditionClassType component. /// public const string ProcessConditionClassType = "ProcessConditionClassType"; /// /// The BrowseName for the ProductName component. /// public const string ProductName = "ProductName"; /// /// The BrowseName for the ProductUri component. /// public const string ProductUri = "ProductUri"; /// /// The BrowseName for the ProgramDiagnosticDataType component. /// public const string ProgramDiagnosticDataType = "ProgramDiagnosticDataType"; /// /// The BrowseName for the ProgramDiagnostics component. /// public const string ProgramDiagnostics = "ProgramDiagnostics"; /// /// The BrowseName for the ProgramDiagnosticType component. /// public const string ProgramDiagnosticType = "ProgramDiagnosticType"; /// /// The BrowseName for the ProgramStateMachineType component. /// public const string ProgramStateMachineType = "ProgramStateMachineType"; /// /// The BrowseName for the ProgramTransitionAuditEventType component. /// public const string ProgramTransitionAuditEventType = "ProgramTransitionAuditEventType"; /// /// The BrowseName for the ProgramTransitionEventType component. /// public const string ProgramTransitionEventType = "ProgramTransitionEventType"; /// /// The BrowseName for the ProgressEventType component. /// public const string ProgressEventType = "ProgressEventType"; /// /// The BrowseName for the Prompt component. /// public const string Prompt = "Prompt"; /// /// The BrowseName for the PropertyType component. /// public const string PropertyType = "PropertyType"; /// /// The BrowseName for the PublishCount component. /// public const string PublishCount = "PublishCount"; /// /// The BrowseName for the PublishingEnabled component. /// public const string PublishingEnabled = "PublishingEnabled"; /// /// The BrowseName for the PublishingInterval component. /// public const string PublishingInterval = "PublishingInterval"; /// /// The BrowseName for the PublishingIntervalCount component. /// public const string PublishingIntervalCount = "PublishingIntervalCount"; /// /// The BrowseName for the PublishRequest component. /// public const string PublishRequest = "PublishRequest"; /// /// The BrowseName for the PublishRequestCount component. /// public const string PublishRequestCount = "PublishRequestCount"; /// /// The BrowseName for the PublishResponse component. /// public const string PublishResponse = "PublishResponse"; /// /// The BrowseName for the QualifiedName component. /// public const string QualifiedName = "QualifiedName"; /// /// The BrowseName for the Quality component. /// public const string Quality = "Quality"; /// /// The BrowseName for the QueryDataDescription component. /// public const string QueryDataDescription = "QueryDataDescription"; /// /// The BrowseName for the QueryDataSet component. /// public const string QueryDataSet = "QueryDataSet"; /// /// The BrowseName for the QueryFirstCount component. /// public const string QueryFirstCount = "QueryFirstCount"; /// /// The BrowseName for the QueryFirstRequest component. /// public const string QueryFirstRequest = "QueryFirstRequest"; /// /// The BrowseName for the QueryFirstResponse component. /// public const string QueryFirstResponse = "QueryFirstResponse"; /// /// The BrowseName for the QueryNextCount component. /// public const string QueryNextCount = "QueryNextCount"; /// /// The BrowseName for the QueryNextRequest component. /// public const string QueryNextRequest = "QueryNextRequest"; /// /// The BrowseName for the QueryNextResponse component. /// public const string QueryNextResponse = "QueryNextResponse"; /// /// The BrowseName for the Range component. /// public const string Range = "Range"; /// /// The BrowseName for the Read component. /// public const string Read = "Read"; /// /// The BrowseName for the ReadAtTimeDetails component. /// public const string ReadAtTimeDetails = "ReadAtTimeDetails"; /// /// The BrowseName for the ReadCount component. /// public const string ReadCount = "ReadCount"; /// /// The BrowseName for the ReadEventDetails component. /// public const string ReadEventDetails = "ReadEventDetails"; /// /// The BrowseName for the ReadMethodType component. /// public const string ReadMethodType = "ReadMethodType"; /// /// The BrowseName for the ReadProcessedDetails component. /// public const string ReadProcessedDetails = "ReadProcessedDetails"; /// /// The BrowseName for the ReadRawModifiedDetails component. /// public const string ReadRawModifiedDetails = "ReadRawModifiedDetails"; /// /// The BrowseName for the ReadRequest component. /// public const string ReadRequest = "ReadRequest"; /// /// The BrowseName for the ReadResponse component. /// public const string ReadResponse = "ReadResponse"; /// /// The BrowseName for the ReadValueId component. /// public const string ReadValueId = "ReadValueId"; /// /// The BrowseName for the Ready component. /// public const string Ready = "Ready"; /// /// The BrowseName for the ReadyToHalted component. /// public const string ReadyToHalted = "ReadyToHalted"; /// /// The BrowseName for the ReadyToRunning component. /// public const string ReadyToRunning = "ReadyToRunning"; /// /// The BrowseName for the ReceiveTime component. /// public const string ReceiveTime = "ReceiveTime"; /// /// The BrowseName for the RecycleCount component. /// public const string RecycleCount = "RecycleCount"; /// /// The BrowseName for the RedundancySupport component. /// public const string RedundancySupport = "RedundancySupport"; /// /// The BrowseName for the RedundantServerArray component. /// public const string RedundantServerArray = "RedundantServerArray"; /// /// The BrowseName for the RedundantServerDataType component. /// public const string RedundantServerDataType = "RedundantServerDataType"; /// /// The BrowseName for the ReferenceDescription component. /// public const string ReferenceDescription = "ReferenceDescription"; /// /// The BrowseName for the ReferenceNode component. /// public const string ReferenceNode = "ReferenceNode"; /// /// The BrowseName for the References component. /// public const string References = "References"; /// /// The BrowseName for the ReferencesToAdd component. /// public const string ReferencesToAdd = "ReferencesToAdd"; /// /// The BrowseName for the ReferencesToDelete component. /// public const string ReferencesToDelete = "ReferencesToDelete"; /// /// The BrowseName for the ReferenceTypeAttributes component. /// public const string ReferenceTypeAttributes = "ReferenceTypeAttributes"; /// /// The BrowseName for the ReferenceTypeNode component. /// public const string ReferenceTypeNode = "ReferenceTypeNode"; /// /// The BrowseName for the ReferenceTypesFolder component. /// public const string ReferenceTypesFolder = "ReferenceTypes"; /// /// The BrowseName for the RefreshEndEventType component. /// public const string RefreshEndEventType = "RefreshEndEventType"; /// /// The BrowseName for the RefreshRequiredEventType component. /// public const string RefreshRequiredEventType = "RefreshRequiredEventType"; /// /// The BrowseName for the RefreshStartEventType component. /// public const string RefreshStartEventType = "RefreshStartEventType"; /// /// The BrowseName for the RegisteredServer component. /// public const string RegisteredServer = "RegisteredServer"; /// /// The BrowseName for the RegisterNodesCount component. /// public const string RegisterNodesCount = "RegisterNodesCount"; /// /// The BrowseName for the RegisterNodesRequest component. /// public const string RegisterNodesRequest = "RegisterNodesRequest"; /// /// The BrowseName for the RegisterNodesResponse component. /// public const string RegisterNodesResponse = "RegisterNodesResponse"; /// /// The BrowseName for the RegisterServerRequest component. /// public const string RegisterServerRequest = "RegisterServerRequest"; /// /// The BrowseName for the RegisterServerResponse component. /// public const string RegisterServerResponse = "RegisterServerResponse"; /// /// The BrowseName for the RejectedRequestsCount component. /// public const string RejectedRequestsCount = "RejectedRequestsCount"; /// /// The BrowseName for the RejectedSessionCount component. /// public const string RejectedSessionCount = "RejectedSessionCount"; /// /// The BrowseName for the RelativePath component. /// public const string RelativePath = "RelativePath"; /// /// The BrowseName for the RelativePathElement component. /// public const string RelativePathElement = "RelativePathElement"; /// /// The BrowseName for the ReplaceDataCapability component. /// public const string ReplaceDataCapability = "ReplaceDataCapability"; /// /// The BrowseName for the ReplaceEventCapability component. /// public const string ReplaceEventCapability = "ReplaceEventCapability"; /// /// The BrowseName for the RepublishCount component. /// public const string RepublishCount = "RepublishCount"; /// /// The BrowseName for the RepublishMessageCount component. /// public const string RepublishMessageCount = "RepublishMessageCount"; /// /// The BrowseName for the RepublishMessageRequestCount component. /// public const string RepublishMessageRequestCount = "RepublishMessageRequestCount"; /// /// The BrowseName for the RepublishRequest component. /// public const string RepublishRequest = "RepublishRequest"; /// /// The BrowseName for the RepublishRequestCount component. /// public const string RepublishRequestCount = "RepublishRequestCount"; /// /// The BrowseName for the RepublishResponse component. /// public const string RepublishResponse = "RepublishResponse"; /// /// The BrowseName for the ReqTimes component. /// public const string ReqTimes = "ReqTimes"; /// /// The BrowseName for the RequestedLifetime component. /// public const string RequestedLifetime = "RequestedLifetime"; /// /// The BrowseName for the RequestHandle component. /// public const string RequestHandle = "RequestHandle"; /// /// The BrowseName for the RequestHeader component. /// public const string RequestHeader = "RequestHeader"; /// /// The BrowseName for the RequestType component. /// public const string RequestType = "RequestType"; /// /// The BrowseName for the Reset component. /// public const string Reset = "Reset"; /// /// The BrowseName for the Respond component. /// public const string Respond = "Respond"; /// /// The BrowseName for the ResponseHeader component. /// public const string ResponseHeader = "ResponseHeader"; /// /// The BrowseName for the ResponseOptionSet component. /// public const string ResponseOptionSet = "ResponseOptionSet"; /// /// The BrowseName for the Resume component. /// public const string Resume = "Resume"; /// /// The BrowseName for the Retain component. /// public const string Retain = "Retain"; /// /// The BrowseName for the RevisedSessionTimeout component. /// public const string RevisedSessionTimeout = "RevisedSessionTimeout"; /// /// The BrowseName for the RootFolder component. /// public const string RootFolder = "Root"; /// /// The BrowseName for the Running component. /// public const string Running = "Running"; /// /// The BrowseName for the RunningToHalted component. /// public const string RunningToHalted = "RunningToHalted"; /// /// The BrowseName for the RunningToReady component. /// public const string RunningToReady = "RunningToReady"; /// /// The BrowseName for the RunningToSuspended component. /// public const string RunningToSuspended = "RunningToSuspended"; /// /// The BrowseName for the SampledMonitoredItemsCount component. /// public const string SampledMonitoredItemsCount = "SampledMonitoredItemsCount"; /// /// The BrowseName for the SamplingInterval component. /// public const string SamplingInterval = "SamplingInterval"; /// /// The BrowseName for the SamplingIntervalDiagnosticsArray component. /// public const string SamplingIntervalDiagnosticsArray = "SamplingIntervalDiagnosticsArray"; /// /// The BrowseName for the SamplingIntervalDiagnosticsArrayType component. /// public const string SamplingIntervalDiagnosticsArrayType = "SamplingIntervalDiagnosticsArrayType"; /// /// The BrowseName for the SamplingIntervalDiagnosticsDataType component. /// public const string SamplingIntervalDiagnosticsDataType = "SamplingIntervalDiagnosticsDataType"; /// /// The BrowseName for the SamplingIntervalDiagnosticsType component. /// public const string SamplingIntervalDiagnosticsType = "SamplingIntervalDiagnosticsType"; /// /// The BrowseName for the SByte component. /// public const string SByte = "SByte"; /// /// The BrowseName for the ScalarTestType component. /// public const string ScalarTestType = "ScalarTestType"; /// /// The BrowseName for the SecondsTillShutdown component. /// public const string SecondsTillShutdown = "SecondsTillShutdown"; /// /// The BrowseName for the SecureChannelId component. /// public const string SecureChannelId = "SecureChannelId"; /// /// The BrowseName for the SecurityMode component. /// public const string SecurityMode = "SecurityMode"; /// /// The BrowseName for the SecurityPolicyUri component. /// public const string SecurityPolicyUri = "SecurityPolicyUri"; /// /// The BrowseName for the SecurityRejectedRequestsCount component. /// public const string SecurityRejectedRequestsCount = "SecurityRejectedRequestsCount"; /// /// The BrowseName for the SecurityRejectedSessionCount component. /// public const string SecurityRejectedSessionCount = "SecurityRejectedSessionCount"; /// /// The BrowseName for the SecurityTokenRequestType component. /// public const string SecurityTokenRequestType = "SecurityTokenRequestType"; /// /// The BrowseName for the SelectedResponse component. /// public const string SelectedResponse = "SelectedResponse"; /// /// The BrowseName for the SemanticChangeEventType component. /// public const string SemanticChangeEventType = "SemanticChangeEventType"; /// /// The BrowseName for the SemanticChangeStructureDataType component. /// public const string SemanticChangeStructureDataType = "SemanticChangeStructureDataType"; /// /// The BrowseName for the Server component. /// public const string Server = "Server"; /// /// The BrowseName for the ServerArray component. /// public const string ServerArray = "ServerArray"; /// /// The BrowseName for the ServerCapabilities component. /// public const string ServerCapabilities = "ServerCapabilities"; /// /// The BrowseName for the ServerCapabilitiesType component. /// public const string ServerCapabilitiesType = "ServerCapabilitiesType"; /// /// The BrowseName for the ServerDiagnostics component. /// public const string ServerDiagnostics = "ServerDiagnostics"; /// /// The BrowseName for the ServerDiagnosticsSummary component. /// public const string ServerDiagnosticsSummary = "ServerDiagnosticsSummary"; /// /// The BrowseName for the ServerDiagnosticsSummaryDataType component. /// public const string ServerDiagnosticsSummaryDataType = "ServerDiagnosticsSummaryDataType"; /// /// The BrowseName for the ServerDiagnosticsSummaryType component. /// public const string ServerDiagnosticsSummaryType = "ServerDiagnosticsSummaryType"; /// /// The BrowseName for the ServerDiagnosticsType component. /// public const string ServerDiagnosticsType = "ServerDiagnosticsType"; /// /// The BrowseName for the ServerId component. /// public const string ServerId = "ServerId"; /// /// The BrowseName for the ServerLock component. /// public const string ServerLock = "ServerLock"; /// /// The BrowseName for the ServerNetworkGroups component. /// public const string ServerNetworkGroups = "ServerNetworkGroups"; /// /// The BrowseName for the ServerProfileArray component. /// public const string ServerProfileArray = "ServerProfileArray"; /// /// The BrowseName for the ServerRedundancy component. /// public const string ServerRedundancy = "ServerRedundancy"; /// /// The BrowseName for the ServerRedundancyType component. /// public const string ServerRedundancyType = "ServerRedundancyType"; /// /// The BrowseName for the ServerState component. /// public const string ServerState = "ServerState"; /// /// The BrowseName for the ServerStatus component. /// public const string ServerStatus = "ServerStatus"; /// /// The BrowseName for the ServerStatusDataType component. /// public const string ServerStatusDataType = "ServerStatusDataType"; /// /// The BrowseName for the ServerStatusType component. /// public const string ServerStatusType = "ServerStatusType"; /// /// The BrowseName for the ServerType component. /// public const string ServerType = "ServerType"; /// /// The BrowseName for the ServerUri component. /// public const string ServerUri = "ServerUri"; /// /// The BrowseName for the ServerUriArray component. /// public const string ServerUriArray = "ServerUriArray"; /// /// The BrowseName for the ServerVendorCapabilityType component. /// public const string ServerVendorCapabilityType = "ServerVendorCapabilityType"; /// /// The BrowseName for the ServerViewCount component. /// public const string ServerViewCount = "ServerViewCount"; /// /// The BrowseName for the ServiceCounterDataType component. /// public const string ServiceCounterDataType = "ServiceCounterDataType"; /// /// The BrowseName for the ServiceFault component. /// public const string ServiceFault = "ServiceFault"; /// /// The BrowseName for the ServiceLevel component. /// public const string ServiceLevel = "ServiceLevel"; /// /// The BrowseName for the SessionAbortCount component. /// public const string SessionAbortCount = "SessionAbortCount"; /// /// The BrowseName for the SessionAuthenticationToken component. /// public const string SessionAuthenticationToken = "SessionAuthenticationToken"; /// /// The BrowseName for the SessionDiagnostics component. /// public const string SessionDiagnostics = "SessionDiagnostics"; /// /// The BrowseName for the SessionDiagnosticsArray component. /// public const string SessionDiagnosticsArray = "SessionDiagnosticsArray"; /// /// The BrowseName for the SessionDiagnosticsArrayType component. /// public const string SessionDiagnosticsArrayType = "SessionDiagnosticsArrayType"; /// /// The BrowseName for the SessionDiagnosticsDataType component. /// public const string SessionDiagnosticsDataType = "SessionDiagnosticsDataType"; /// /// The BrowseName for the SessionDiagnosticsObjectType component. /// public const string SessionDiagnosticsObjectType = "SessionDiagnosticsObjectType"; /// /// The BrowseName for the SessionDiagnosticsVariableType component. /// public const string SessionDiagnosticsVariableType = "SessionDiagnosticsVariableType"; /// /// The BrowseName for the SessionId component. /// public const string SessionId = "SessionId"; /// /// The BrowseName for the SessionName component. /// public const string SessionName = "SessionName"; /// /// The BrowseName for the SessionPlaceholder component. /// public const string SessionPlaceholder = ""; /// /// The BrowseName for the SessionsDiagnosticsSummary component. /// public const string SessionsDiagnosticsSummary = "SessionsDiagnosticsSummary"; /// /// The BrowseName for the SessionsDiagnosticsSummaryType component. /// public const string SessionsDiagnosticsSummaryType = "SessionsDiagnosticsSummaryType"; /// /// The BrowseName for the SessionSecurityDiagnostics component. /// public const string SessionSecurityDiagnostics = "SessionSecurityDiagnostics"; /// /// The BrowseName for the SessionSecurityDiagnosticsArray component. /// public const string SessionSecurityDiagnosticsArray = "SessionSecurityDiagnosticsArray"; /// /// The BrowseName for the SessionSecurityDiagnosticsArrayType component. /// public const string SessionSecurityDiagnosticsArrayType = "SessionSecurityDiagnosticsArrayType"; /// /// The BrowseName for the SessionSecurityDiagnosticsDataType component. /// public const string SessionSecurityDiagnosticsDataType = "SessionSecurityDiagnosticsDataType"; /// /// The BrowseName for the SessionSecurityDiagnosticsType component. /// public const string SessionSecurityDiagnosticsType = "SessionSecurityDiagnosticsType"; /// /// The BrowseName for the SessionTimeoutCount component. /// public const string SessionTimeoutCount = "SessionTimeoutCount"; /// /// The BrowseName for the SetMonitoringModeCount component. /// public const string SetMonitoringModeCount = "SetMonitoringModeCount"; /// /// The BrowseName for the SetMonitoringModeRequest component. /// public const string SetMonitoringModeRequest = "SetMonitoringModeRequest"; /// /// The BrowseName for the SetMonitoringModeResponse component. /// public const string SetMonitoringModeResponse = "SetMonitoringModeResponse"; /// /// The BrowseName for the SetpointNode component. /// public const string SetpointNode = "SetpointNode"; /// /// The BrowseName for the SetPosition component. /// public const string SetPosition = "SetPosition"; /// /// The BrowseName for the SetPositionMethodType component. /// public const string SetPositionMethodType = "SetPositionMethodType"; /// /// The BrowseName for the SetPublishingModeCount component. /// public const string SetPublishingModeCount = "SetPublishingModeCount"; /// /// The BrowseName for the SetPublishingModeRequest component. /// public const string SetPublishingModeRequest = "SetPublishingModeRequest"; /// /// The BrowseName for the SetPublishingModeResponse component. /// public const string SetPublishingModeResponse = "SetPublishingModeResponse"; /// /// The BrowseName for the SetTriggeringCount component. /// public const string SetTriggeringCount = "SetTriggeringCount"; /// /// The BrowseName for the SetTriggeringRequest component. /// public const string SetTriggeringRequest = "SetTriggeringRequest"; /// /// The BrowseName for the SetTriggeringResponse component. /// public const string SetTriggeringResponse = "SetTriggeringResponse"; /// /// The BrowseName for the Severity component. /// public const string Severity = "Severity"; /// /// The BrowseName for the ShelvedStateMachineType component. /// public const string ShelvedStateMachineType = "ShelvedStateMachineType"; /// /// The BrowseName for the ShelvingState component. /// public const string ShelvingState = "ShelvingState"; /// /// The BrowseName for the ShelvingTime component. /// public const string ShelvingTime = "ShelvingTime"; /// /// The BrowseName for the ShutdownReason component. /// public const string ShutdownReason = "ShutdownReason"; /// /// The BrowseName for the SignatureData component. /// public const string SignatureData = "SignatureData"; /// /// The BrowseName for the SignedSoftwareCertificate component. /// public const string SignedSoftwareCertificate = "SignedSoftwareCertificate"; /// /// The BrowseName for the SimpleAttributeOperand component. /// public const string SimpleAttributeOperand = "SimpleAttributeOperand"; /// /// The BrowseName for the Size component. /// public const string Size = "Size"; /// /// The BrowseName for the SoftwareCertificate component. /// public const string SoftwareCertificate = "SoftwareCertificate"; /// /// The BrowseName for the SoftwareCertificates component. /// public const string SoftwareCertificates = "SoftwareCertificates"; /// /// The BrowseName for the SoftwareVersion component. /// public const string SoftwareVersion = "SoftwareVersion"; /// /// The BrowseName for the SourceName component. /// public const string SourceName = "SourceName"; /// /// The BrowseName for the SourceNode component. /// public const string SourceNode = "SourceNode"; /// /// The BrowseName for the SourceTimestamp component. /// public const string SourceTimestamp = "SourceTimestamp"; /// /// The BrowseName for the Start component. /// public const string Start = "Start"; /// /// The BrowseName for the StartOfArchive component. /// public const string StartOfArchive = "StartOfArchive"; /// /// The BrowseName for the StartOfOnlineArchive component. /// public const string StartOfOnlineArchive = "StartOfOnlineArchive"; /// /// The BrowseName for the StartTime component. /// public const string StartTime = "StartTime"; /// /// The BrowseName for the State component. /// public const string State = "State"; /// /// The BrowseName for the StateMachineType component. /// public const string StateMachineType = "StateMachineType"; /// /// The BrowseName for the StateNumber component. /// public const string StateNumber = "StateNumber"; /// /// The BrowseName for the StateType component. /// public const string StateType = "StateType"; /// /// The BrowseName for the StateVariableType component. /// public const string StateVariableType = "StateVariableType"; /// /// The BrowseName for the StaticNodeIdIndentifierTypes component. /// public const string StaticNodeIdIndentifierTypes = "StaticNodeIdIndentifierTypes"; /// /// The BrowseName for the StaticNumericNodeIdRange component. /// public const string StaticNumericNodeIdRange = "StaticNumericNodeIdRange"; /// /// The BrowseName for the StaticStringNodeIdPattern component. /// public const string StaticStringNodeIdPattern = "StaticStringNodeIdPattern"; /// /// The BrowseName for the Status component. /// public const string Status = "Status"; /// /// The BrowseName for the StatusChangeNotification component. /// public const string StatusChangeNotification = "StatusChangeNotification"; /// /// The BrowseName for the StatusCode component. /// public const string StatusCode = "StatusCode"; /// /// The BrowseName for the StatusResult component. /// public const string StatusResult = "StatusResult"; /// /// The BrowseName for the Stepped component. /// public const string Stepped = "Stepped"; /// /// The BrowseName for the String component. /// public const string String = "String"; /// /// The BrowseName for the Structure component. /// public const string Structure = "Structure"; /// /// The BrowseName for the SubscriptionAcknowledgement component. /// public const string SubscriptionAcknowledgement = "SubscriptionAcknowledgement"; /// /// The BrowseName for the SubscriptionDiagnosticsArray component. /// public const string SubscriptionDiagnosticsArray = "SubscriptionDiagnosticsArray"; /// /// The BrowseName for the SubscriptionDiagnosticsArrayType component. /// public const string SubscriptionDiagnosticsArrayType = "SubscriptionDiagnosticsArrayType"; /// /// The BrowseName for the SubscriptionDiagnosticsDataType component. /// public const string SubscriptionDiagnosticsDataType = "SubscriptionDiagnosticsDataType"; /// /// The BrowseName for the SubscriptionDiagnosticsType component. /// public const string SubscriptionDiagnosticsType = "SubscriptionDiagnosticsType"; /// /// The BrowseName for the SubscriptionId component. /// public const string SubscriptionId = "SubscriptionId"; /// /// The BrowseName for the SupportedProfile component. /// public const string SupportedProfile = "SupportedProfile"; /// /// The BrowseName for the SuppressedOrShelved component. /// public const string SuppressedOrShelved = "SuppressedOrShelved"; /// /// The BrowseName for the SuppressedState component. /// public const string SuppressedState = "SuppressedState"; /// /// The BrowseName for the Suspend component. /// public const string Suspend = "Suspend"; /// /// The BrowseName for the Suspended component. /// public const string Suspended = "Suspended"; /// /// The BrowseName for the SuspendedToHalted component. /// public const string SuspendedToHalted = "SuspendedToHalted"; /// /// The BrowseName for the SuspendedToReady component. /// public const string SuspendedToReady = "SuspendedToReady"; /// /// The BrowseName for the SuspendedToRunning component. /// public const string SuspendedToRunning = "SuspendedToRunning"; /// /// The BrowseName for the SystemConditionClassType component. /// public const string SystemConditionClassType = "SystemConditionClassType"; /// /// The BrowseName for the SystemEventType component. /// public const string SystemEventType = "SystemEventType"; /// /// The BrowseName for the SystemOffNormalAlarmType component. /// public const string SystemOffNormalAlarmType = "SystemOffNormalAlarmType"; /// /// The BrowseName for the SystemState component. /// public const string SystemState = "SystemState"; /// /// The BrowseName for the SystemStatusChangeEventType component. /// public const string SystemStatusChangeEventType = "SystemStatusChangeEventType"; /// /// The BrowseName for the TestStackExRequest component. /// public const string TestStackExRequest = "TestStackExRequest"; /// /// The BrowseName for the TestStackExResponse component. /// public const string TestStackExResponse = "TestStackExResponse"; /// /// The BrowseName for the TestStackRequest component. /// public const string TestStackRequest = "TestStackRequest"; /// /// The BrowseName for the TestStackResponse component. /// public const string TestStackResponse = "TestStackResponse"; /// /// The BrowseName for the Time component. /// public const string Time = "Time"; /// /// The BrowseName for the TimedShelve component. /// public const string TimedShelve = "TimedShelve"; /// /// The BrowseName for the TimedShelved component. /// public const string TimedShelved = "TimedShelved"; /// /// The BrowseName for the TimedShelvedToOneShotShelved component. /// public const string TimedShelvedToOneShotShelved = "TimedShelvedToOneShotShelved"; /// /// The BrowseName for the TimedShelvedToUnshelved component. /// public const string TimedShelvedToUnshelved = "TimedShelvedToUnshelved"; /// /// The BrowseName for the TimedShelveMethodType component. /// public const string TimedShelveMethodType = "TimedShelveMethodType"; /// /// The BrowseName for the TimestampsToReturn component. /// public const string TimestampsToReturn = "TimestampsToReturn"; /// /// The BrowseName for the TimeZoneDataType component. /// public const string TimeZoneDataType = "TimeZoneDataType"; /// /// The BrowseName for the Title component. /// public const string Title = "Title"; /// /// The BrowseName for the ToState component. /// public const string ToState = "ToState"; /// /// The BrowseName for the TotalRequestCount component. /// public const string TotalRequestCount = "TotalRequestCount"; /// /// The BrowseName for the TransferredToAltClientCount component. /// public const string TransferredToAltClientCount = "TransferredToAltClientCount"; /// /// The BrowseName for the TransferredToSameClientCount component. /// public const string TransferredToSameClientCount = "TransferredToSameClientCount"; /// /// The BrowseName for the TransferRequestCount component. /// public const string TransferRequestCount = "TransferRequestCount"; /// /// The BrowseName for the TransferResult component. /// public const string TransferResult = "TransferResult"; /// /// The BrowseName for the TransferSubscriptionsCount component. /// public const string TransferSubscriptionsCount = "TransferSubscriptionsCount"; /// /// The BrowseName for the TransferSubscriptionsRequest component. /// public const string TransferSubscriptionsRequest = "TransferSubscriptionsRequest"; /// /// The BrowseName for the TransferSubscriptionsResponse component. /// public const string TransferSubscriptionsResponse = "TransferSubscriptionsResponse"; /// /// The BrowseName for the Transition component. /// public const string Transition = "Transition"; /// /// The BrowseName for the TransitionEventType component. /// public const string TransitionEventType = "TransitionEventType"; /// /// The BrowseName for the TransitionNumber component. /// public const string TransitionNumber = "TransitionNumber"; /// /// The BrowseName for the TransitionTime component. /// public const string TransitionTime = "TransitionTime"; /// /// The BrowseName for the TransitionType component. /// public const string TransitionType = "TransitionType"; /// /// The BrowseName for the TransitionVariableType component. /// public const string TransitionVariableType = "TransitionVariableType"; /// /// The BrowseName for the TranslateBrowsePathsToNodeIdsCount component. /// public const string TranslateBrowsePathsToNodeIdsCount = "TranslateBrowsePathsToNodeIdsCount"; /// /// The BrowseName for the TranslateBrowsePathsToNodeIdsRequest component. /// public const string TranslateBrowsePathsToNodeIdsRequest = "TranslateBrowsePathsToNodeIdsRequest"; /// /// The BrowseName for the TranslateBrowsePathsToNodeIdsResponse component. /// public const string TranslateBrowsePathsToNodeIdsResponse = "TranslateBrowsePathsToNodeIdsResponse"; /// /// The BrowseName for the TransparentRedundancyType component. /// public const string TransparentRedundancyType = "TransparentRedundancyType"; /// /// The BrowseName for the TransportProtocol component. /// public const string TransportProtocol = "TransportProtocol"; /// /// The BrowseName for the TreatUncertainAsBad component. /// public const string TreatUncertainAsBad = "TreatUncertainAsBad"; /// /// The BrowseName for the TripAlarmType component. /// public const string TripAlarmType = "TripAlarmType"; /// /// The BrowseName for the TrueState component. /// public const string TrueState = "TrueState"; /// /// The BrowseName for the TwoStateDiscreteType component. /// public const string TwoStateDiscreteType = "TwoStateDiscreteType"; /// /// The BrowseName for the TwoStateVariableType component. /// public const string TwoStateVariableType = "TwoStateVariableType"; /// /// The BrowseName for the TypeNode component. /// public const string TypeNode = "TypeNode"; /// /// The BrowseName for the TypesFolder component. /// public const string TypesFolder = "Types"; /// /// The BrowseName for the UInt16 component. /// public const string UInt16 = "UInt16"; /// /// The BrowseName for the UInt32 component. /// public const string UInt32 = "UInt32"; /// /// The BrowseName for the UInt64 component. /// public const string UInt64 = "UInt64"; /// /// The BrowseName for the UInteger component. /// public const string UInteger = "UInteger"; /// /// The BrowseName for the UnacknowledgedMessageCount component. /// public const string UnacknowledgedMessageCount = "UnacknowledgedMessageCount"; /// /// The BrowseName for the UnauthorizedRequestCount component. /// public const string UnauthorizedRequestCount = "UnauthorizedRequestCount"; /// /// The BrowseName for the Unlock component. /// public const string Unlock = "Unlock"; /// /// The BrowseName for the UnregisterNodesCount component. /// public const string UnregisterNodesCount = "UnregisterNodesCount"; /// /// The BrowseName for the UnregisterNodesRequest component. /// public const string UnregisterNodesRequest = "UnregisterNodesRequest"; /// /// The BrowseName for the UnregisterNodesResponse component. /// public const string UnregisterNodesResponse = "UnregisterNodesResponse"; /// /// The BrowseName for the Unshelve component. /// public const string Unshelve = "Unshelve"; /// /// The BrowseName for the Unshelved component. /// public const string Unshelved = "Unshelved"; /// /// The BrowseName for the UnshelvedToOneShotShelved component. /// public const string UnshelvedToOneShotShelved = "UnshelvedToOneShotShelved"; /// /// The BrowseName for the UnshelvedToTimedShelved component. /// public const string UnshelvedToTimedShelved = "UnshelvedToTimedShelved"; /// /// The BrowseName for the UnshelveTime component. /// public const string UnshelveTime = "UnshelveTime"; /// /// The BrowseName for the UpdateDataCapability component. /// public const string UpdateDataCapability = "UpdateDataCapability"; /// /// The BrowseName for the UpdateDataDetails component. /// public const string UpdateDataDetails = "UpdateDataDetails"; /// /// The BrowseName for the UpdatedNode component. /// public const string UpdatedNode = "UpdatedNode"; /// /// The BrowseName for the UpdateEventCapability component. /// public const string UpdateEventCapability = "UpdateEventCapability"; /// /// The BrowseName for the UpdateEventDetails component. /// public const string UpdateEventDetails = "UpdateEventDetails"; /// /// The BrowseName for the UpdateStructureDataDetails component. /// public const string UpdateStructureDataDetails = "UpdateStructureDataDetails"; /// /// The BrowseName for the UserIdentityToken component. /// public const string UserIdentityToken = "UserIdentityToken"; /// /// The BrowseName for the UserNameIdentityToken component. /// public const string UserNameIdentityToken = "UserNameIdentityToken"; /// /// The BrowseName for the UserTokenPolicy component. /// public const string UserTokenPolicy = "UserTokenPolicy"; /// /// The BrowseName for the UserTokenType component. /// public const string UserTokenType = "UserTokenType"; /// /// The BrowseName for the UserWriteable component. /// public const string UserWriteable = "UserWriteable"; /// /// The BrowseName for the UseSlopedExtrapolation component. /// public const string UseSlopedExtrapolation = "UseSlopedExtrapolation"; /// /// The BrowseName for the UtcTime component. /// public const string UtcTime = "UtcTime"; /// /// The BrowseName for the ValueAsText component. /// public const string ValueAsText = "ValueAsText"; /// /// The BrowseName for the ValuePrecision component. /// public const string ValuePrecision = "ValuePrecision"; /// /// The BrowseName for the VariableAttributes component. /// public const string VariableAttributes = "VariableAttributes"; /// /// The BrowseName for the VariableNode component. /// public const string VariableNode = "VariableNode"; /// /// The BrowseName for the VariableTypeAttributes component. /// public const string VariableTypeAttributes = "VariableTypeAttributes"; /// /// The BrowseName for the VariableTypeNode component. /// public const string VariableTypeNode = "VariableTypeNode"; /// /// The BrowseName for the VariableTypesFolder component. /// public const string VariableTypesFolder = "VariableTypes"; /// /// The BrowseName for the VendorCapability component. /// public const string VendorCapability = ""; /// /// The BrowseName for the VendorServerInfo component. /// public const string VendorServerInfo = "VendorServerInfo"; /// /// The BrowseName for the VendorServerInfoType component. /// public const string VendorServerInfoType = "VendorServerInfoType"; /// /// The BrowseName for the ViewAttributes component. /// public const string ViewAttributes = "ViewAttributes"; /// /// The BrowseName for the ViewDescription component. /// public const string ViewDescription = "ViewDescription"; /// /// The BrowseName for the ViewNode component. /// public const string ViewNode = "ViewNode"; /// /// The BrowseName for the ViewsFolder component. /// public const string ViewsFolder = "Views"; /// /// The BrowseName for the ViewVersion component. /// public const string ViewVersion = "ViewVersion"; /// /// The BrowseName for the Write component. /// public const string Write = "Write"; /// /// The BrowseName for the Writeable component. /// public const string Writeable = "Writeable"; /// /// The BrowseName for the WriteCount component. /// public const string WriteCount = "WriteCount"; /// /// The BrowseName for the WriteMethodType component. /// public const string WriteMethodType = "WriteMethodType"; /// /// The BrowseName for the WriteRequest component. /// public const string WriteRequest = "WriteRequest"; /// /// The BrowseName for the WriteResponse component. /// public const string WriteResponse = "WriteResponse"; /// /// The BrowseName for the WriteValue component. /// public const string WriteValue = "WriteValue"; /// /// The BrowseName for the X509IdentityToken component. /// public const string X509IdentityToken = "X509IdentityToken"; /// /// The BrowseName for the XAxisDefinition component. /// public const string XAxisDefinition = "XAxisDefinition"; /// /// The BrowseName for the XmlElement component. /// public const string XmlElement = "XmlElement"; /// /// The BrowseName for the XmlSchema_TypeSystem component. /// public const string XmlSchema_TypeSystem = "XML Schema"; /// /// The BrowseName for the XVType component. /// public const string XVType = "XVType"; /// /// The BrowseName for the XYArrayItemType component. /// public const string XYArrayItemType = "XYArrayItemType"; /// /// The BrowseName for the YArrayItemType component. /// public const string YArrayItemType = "YArrayItemType"; /// /// The BrowseName for the YAxisDefinition component. /// public const string YAxisDefinition = "YAxisDefinition"; /// /// The BrowseName for the ZAxisDefinition component. /// public const string ZAxisDefinition = "ZAxisDefinition"; } } ================================================ FILE: SemanticData/InformationModelFactory/UAConstants/Namespaces.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ namespace UAOOI.SemanticData.InformationModelFactory.UAConstants { /// /// Defines constants for all namespaces referenced by the model design. /// public static partial class Namespaces { /// /// The URI for the OpcUa namespace (.NET code namespace is 'Opc.Ua'). /// public const string OpcUa = "http://opcfoundation.org/UA/"; /// /// The URI for the OpcUaXsd namespace (.NET code namespace is 'Opc.Ua'). /// public const string OpcUaXsd = "http://opcfoundation.org/UA/2008/02/Types.xsd"; } } ================================================ FILE: SemanticData/InformationModelLifecycle.md ================================================ # Address Space Model Life-cycle The OPC Unified Architecture (UA) is a standard that allows servers to provide process data and environment metadata to clients in a unique and platform-independent way. To meet this objective, at run-time each server instantiates and maintains the address space that is a collection of data to be exposed to clients. The OPC Unified Architecture `Address Space Management` (Figure 1) embeds the address space instance that consists of nodes and references. The main role of the nodes and references is to expose the state and behavior of an underlying process as a graph of nodes. ![Figure 1 Development Architecture](../CommonResources/Media/SemanticData/DevelopmentArchitecture.png) At run-time typical implementation architecture consists of OPC UA Clients, which are connected to an OPC UA Server. The server exposes process data in the context of the address space instantiated in compliance with the selected `Address Space Model`. In a typical architecture (Figure 1), exposing the process data in the context of metadata means that information produced by the `Real-time Process` is gathered by the `Process Link` as process data and assigned to `Variable` nodes residing in the address space and maintained by the `Address Space Management`. Next, process data can be accessed and processed by a generic client using `Services`. In a production environment, the `Address Space Model` may be also used offline in clients development or configuration process to offer additional features, namely preconfigured customized control panels, dedicated data visualization panes or predefined structure of the database tables. The model knowledge also simplifies the configuration of clients, because all of the items composing the complex process information can be accessed directly without the necessity to browse the address space graph of nodes. To implement the `Address Space Management` concept, two questions must be addressed: - How to create and maintain address space? - How to bind the `Variable` nodes with the real-time process data sources? To create the address space instance the `Address Space Management` must instantiate all nodes and interconnect them by means of references. A detailed description of this process is covered by the section: [*Address Space and Address Space Model*][ASASM]. Using the nodes by means of a well-defined set of services [[6]][Opc.UA.Part4], clients get access to data representing the state and behavior of a selected part of the underlying process. In this architecture, the address space plays the role of **process replica**. In this scenario, the server must couple the exposed address space nodes with the current state and behavior of the underlying process. Therefore, to maintain this coupling, there must be established an out-of-band connection to physical devices used to transfer real-time process data in both directions. The binding technique of nodes and real-time process data are vendor specific. Nodes management functionality on the client part is standardized by the Part 4 – Services of the specification [[6]][Opc.UA.Part4]. Access to the values representing the current process state is provided by the read/write functions. The client can also be informed about changes of the process state using "data change" notifications. Invoke and event notification functionality allow clients to use the methods. Using the address space concept and using provided `Services` clients can also get access to special kind of process data, i.e. events, alarms, and historical data. To implement the functionality presented above, we need to use three coupled function classes (Figure 1): - `Services` - in-band connectivity and data transfer over the network - `Address Space Management` - address space nodes management and process data cache - `Process Link` - out-of-band process data transfer, conversion, and binding The diagram in Figure 1 shows the dependencies and associations between the function classes mentioned above. In this domain model, the `Process Link` is responsible for transferring real-time process data up and down. The embedded address space maintained by `Address Space Management` is a collection of `NodeClass` instances (nodes) (see section [*Address Space and Address Space Model*][ASASM]). Each node is a carrier of values (attributes) and collection of references used to create a nodes graph. `Variable` nodes expose the real-time process data using dedicated `Value` attribute. Other nodes are used to create meaningful context for the process data exposed to all connected clients by the `Services` (Section [*Address Space and Address Space Model*][ASASM]). Real-time process data is obtained from the underling process devices. The `Process Link` gets access to it using the out-of-band underlying communication infrastructure and vendor specific protocols. For embedded applications it may use directly internal controller registers of the device instead of transferring the data over a wire. To create the address space instance - i.e. to instantiate all nodes and interconnect them by means of references - the `Address Space Management` uses a static `Address Space Model` (Figure 1) created in advance and providing a detailed description of all the nodes, including their attributes value and interconnections by means of references. Static means that the model is predefined for the selected environment, but it does not mean that the exposed address space is static at all. In this approach, nodes can be instantiated and linked dynamically, however the process must conform to the meta model definition `Implementation Language`. Dynamic behavior of the address space can be controlled by the connected clients using services or by the current state of the process. It is worth noting that the `Address Space Model` may be implemented as a set of files created with a variety of purposes. Serialization, data binding, and server configuration are most important. Serialization is a conversion of structured complex data into a stream of bits with the goal of transferring it over the network or storing it using the file system. Data binding is responsible for coupling `Real-time Process` sources with the appropriate nodes in the address space with the result that the content depends on a deployment instance. Usually, the files necessary for the server are created as a result of the compilation process. The main goal of compilation is to apply all of the type definitions to created nodes and bind them to the `Real-time Process` data. Consequently, it is a product of a compiler and because it is intended to be consumed by the server the `Implementation Language` must have a machine-readable syntax. As it was described in the section [*UA Information Model - Concept*][IMConcept], any model is designed with the goal of formally determining the information that is to be used to describe the `Real-time Process` state and its behavior. It is human-centric process and is accomplished by the definition of types. This way we can create autonomous, deployment independent, reusable definitions. The main challenge is to obtain an appropriate level of model simplicity. At the same time, it is worth noting that simplicity is not born by simplification but is rather a result of abstraction, i.e. while designing a model the `Real-time Process` details should not be neglected but hidden if necessary. The independence and reusability means that the model must not depend on the production environment. Concluding the above discussion, the second step in the address space information model life-cycle is the `Address Space Model` generated in a format to be used as a foundation for nodes instantiation and interconnection them by references. The `Address Space Model` representation is usually generated by a compiler (`Code Generator` on Figure 1) that processes the selected `Information Model` and creates a set of documents containing all information necessary to instantiate and interconnect nodes at run-time by the `Address Space Management` of the `UA Server`. The compiler could be an independent product or it can be embedded into the `UA Server` or `Model Designer`. The main functions of the compiler are: - replace the Universal Resource Identifiers (URI) (fully qualified names) by more efficient local identifiers relative to an implementation dependent namespace table used to preserve their aliases - crate and maintain the namespace table - process the inheritance chain applying instance declarations - construct type instances by processing instance declarations and inheritance chains - validate the model against `Address Space Meta Model` rules (section [*Address Space and Address Space Model*][ASASM]) - validate the model against `Model Language` rules and [*Standard Information Model*][SIM] From the model developer point of view, the compilation process may be recognized as an obfuscation process making the result hard to read and modify. Available in the open source domain [OPC UA Information Model Compiler][OPC.UA.ModelCompiler] tool is an example of this kind of tools. As the `Information Model` - an input for compilation process - it uses a set of XML files compliant with the `ModelDesign` schema. In this case, the `Address Space Model` represents a variety of generated files including XML file compliant with the UANodeSet schema defined in [Part 6][OPC.UA.Part6] of the OPC UA specification. The main purpose of this specification is to provide a standard syntax that designers can use to formally represent their models in a form that can be read by a computer program. Unfortunately, this format is not well suited to be used directly by designers at the very beginning of the information model development and adoption stage. It is also worth stressing that `ModelDesign` schema - a foundation of the `Model Language` - is not formally defined by the OPC UA specification, so must be recognized as a proprietary solution. Because UANodeSet is standardized it must be considered as the out-of-band interchange format of the models to leverage reusability. In any case that `Informal Model` and `Information Model` must be harmonized, the design process must return to a point where it is human-centric and based on the selected `Model Language`. In case an existing model expressed using standard description compliant with UANodeSet is to be reused a recovery process must be applied. It can be accomplished using `asp.exe` tool described in the document [*Address Space Prototyping Tool (ase.exe)*][ASEEXE]. We learn from the above discussion that before nodes making up the address space can be instantiated by the server, we need an `Address Space Model`, which must be compliant with the selected `Information Model`. Additionally, from the section [*Information Models Development*][IMD] we know that the `Information Model` may be designed from scratch or adopted on the ground of companion specifications. An example of the existing model is the Analyzer Devices Integration (ADI) information model presented in the section [*Adopting Companion Standard Models - Analyzer Devices Integration*][CSMADI]. The section - [*ReferenceApplication Producer - Boilers Set Simulator*][Boiler] covers detailed description of a custom model designed from scratch for selected process. In any case, we cannot avoid the `Information Model` design phase. It is the first step in the address space information model life-cycle. This phase is illustrated in Figure 1 where `Informal Model` represents all knowledge, experience, and documents that can be collected and used to design an appropriate model according to the specification. This process is similar to writing the code of a program, and predefined `Information Model` can be recognized as libraries to promote reusability. Predefined models not only improve the performance of the design process but what is more important they make a foundation for interoperability even if it is only out-of-band interoperability. > The architecture presented in this section and the model life-cycle is simplified. In a real scenario additional processing of the results of `Model Compiler` is usually necessary to deploy the model in production environment. ## See also - [OPC Unified Architecture Specification Part 4 – Services, OPC Foundation, Rel. 1.04, 2017-11-22][Opc.UA.Part4] - [OPC Unified Architecture Specification Part 6: Mappings, OPC Foundation, Rel. 1.04, 2017-11-22][OPC.UA.Part6] - [Address Space and Address Space Model][ASASM] - [UA Information Model - Concept][IMConcept] - [Standard Information Model][SIM] - [Information Models Development][IMD] - [Adopting Companion Standard Models - Analyzer Devices Integration][CSMADI] - [ReferenceApplication` Producer - Boilers Set Simulator][Boiler] - [OPC UA Information Model Compiler][OPC.UA.ModelCompiler] - [Address Space Prototyping Tool (ase.exe)][ASEEXE] [Opc.UA.Part6]:https://opcfoundation.org/developer-tools/specifications-unified-architecture/part-6-mappings/ [OPC.UA.ModelCompiler]:https://github.com/mpostol/UA-ModelCompiler#opc-ua-information-model-compiler- [Opc.UA.Part4]:https://opcfoundation.org/developer-tools/specifications-unified-architecture/part-4-services/ [ASASM]:AddressSpaceAddressSpaceModel.md [IMConcept]:InformationModelConcept.md [IMD]:InformationModelsDevelopment.md [Boiler]:../Networking/Simulator.Boiler/README.md [CSMADI]:AdoptingCompanionStandardADI.md [SIM]:StandardInformationModel.md [ASEEXE]:AddressSpaceComplianceTestTool/README.md ================================================ FILE: SemanticData/InformationModelsDevelopment.md ================================================ # Information Models Development ## Methodology OPC UA specification provides a standard Information Model domain, which contains a set of predefined types and instances. This domain may be extended by designing a new one. Even though the standard Information Model contains a rich set of predefined types, the type concept allows designers to freely define types according to the application needs. New types are derived from the existing ones. The derived types inherit all features of the base types but can include modifications to make the new types more appropriate for information to be represented. This new information model covered by the domain may be the subject of a companion specification or proprietary solution. In any case new definitions must be uniquely named and self-contained except for external type references. All not predefined types (not belonging to the standard domain) must be exposed in the Address Space by the server. The model design engineering is an emerging discipline in which engineers develop new models with a primary emphasis on convergence between information describing the state and behavior of a selected real-time process and simplified representation of the process by process data. The data is formally described in terms of types. Generally speaking there are two approaches possible: - Design a custom model that meets requirements of a proprietary process (Section [*`ReferenceApplication` Producer - Boilers Set Simulator*][BlrsStSmultr]) - Adopt an existing model released as a companion specification to meet the requirements of a proprietary process. To improve performance of independent model developments as a result of reusability and, what is more important, to promote unification of results there are many activities aimed at designing models for selected processes. The unification enables vendors to commence independent developments of selected application aware products. In this section a case studies illustrating both approaches is presented. ## See also - [`ReferenceApplication` Producer - Boilers Set Simulator][BlrsStSmultr] [BlrsStSmultr]:../Networking/Simulator.Boiler/README.md ================================================ FILE: SemanticData/README.MD ================================================ # Semantic-Data Processing Architecture ## Domain Model ### Introduction The main challenge that must be faced up by engineering of data processing is the preservation of the data semantics at all the stages of this process to manipulate the data meaningfully. This diagram is a domain model, which presents a conceptual framework of the `Semantic-Data` supporting contextual data processing outside the *OPC UA Server* session. It presents all the major contributors processing the data in the context of `UA Information Model`. `Semantic-Data` may be directly used by the following classes of actors: * `Address Space Management` - part of the **OPC UA Server** application optionally supporting integration services. * `UA Client` - custom OPC `UA Client` supporting integration services. * `OOI Reactive Application` - an application program processing the data in the context of the OPC UA metadata without the **OPC UA Server** session. ![Domain Model](../CommonResources/Media/UADataIntegrationServices.Domain.png) ### UA Information Model The description of the *OPC UA Information Model* is captured in details in in the: * [OPC Unified Architecture e-book 2010](https://commsvr-com.github.io/Documentation/ModelDesigner/html/a2d55988-b59a-4a87-95b9-933f6bbdf5bd.htm) * [OPC UA Information Model Deployment](../SemanticData/InformationModelsDevelopment.md) ### OPC UA Sever The `Address Space Management` is a typical part of any *OPC UA Server*. It is responsible for: * *OPC UA Address Space* instantiation – the creation and management of the server address space * `Data Binding` - managing of the links to the underlying process `Raw Data` The OPC UA specification introduces a node notion as an atomic addressable entity that consists of attributes (value-holders) and references (address-holders of coupled nodes). The set of nodes that an *OPC UA Server* makes available to clients is referred to as its address space, which enables representation of both underlying processes environment description (metadata) and the process state/behavior (data). The address space exposed by the server makes up a context the `Raw Data` is made available to the clients in. Instantiation of this context depends on an application domain unique *OPC UA Information Model* and is governed by the *OPC UA Address Space Model* rules. The `UA Server Services` accesses data and metadata and makes them available to the `UA Client` using a set of non-expandable services compliant with the specification. The `Address Space Management` activity includes also the creation of data bindings with the underlying real-time process (`Raw Data`). `Data binding` is responsible for coupling raw data representing the current state/behavior of the underlying real-time process with the appropriate nodes in the address space. `Data Binding` is, therefore, the process that establishes a connection between the *Variable* node and selected data source. The *Value* attribute of the *Variable* node reflects changes when made. It can also mean that when the *Value* attribute of the *Variable* is changed, the underlying data will reflect that change. Optionally the `Address Space Management` activity may also provide systems integration services supporting the process of bringing together the component external applications (not OPC `UA Server Services` aware) into one system and ensuring that the applications function together as a whole. It includes but is not limited to linking together different software applications physically or functionally on the basis of common data and metadata compliant with the applied *OPC UA Information Models*. These services should provide the following functions: * Selection of the *Variable* nodes (integration data) that are to be made available to the external applications. * Selection of the data exchange channels, i.e. network links, databases, etc. * Data security protection services. * Data discovery support services. Optionally the `Address Space Management` could expose supplementary `UA Information Model` aimed to control remotely the data exchange channels by an `OPC UA Client` customized to be compliant with this model. The underlying process `Raw Data` may also be processed by any `Application` simultaneously. This kind of activity is outside the presented concept scope. ### OPC UA Client It is an embedded part of the *OPC UA Client* application. `OPC UA Client` shall be compliant with Part 4. It consumes all not optional services required by Part 4 of the specification and must be compliant with the selected existing profile. To maintain data on the *OPC UA Server* side it must establish the session. In this case, the applications must follow the interactive behavioral model, because the client actively selects and pulls the data source (*OPC UA Server*) for more information. The session enables the *OPC UA Server* cyclically updating the selected data on the *OPC UA Client* side. Optionally, the `OPC UA Client` activity may also provide systems integration services supporting the process of bringing together the component external applications (not OPC UA Server Services aware) into one system and ensuring that the applications function together as a whole. It includes but is not limited to linking together different software applications physically or functionally on the basis of common data and metadata compliant with the applied OPC UA Information Models. These services should provide the following functions: * Selection of the Variables (integration data) that are to be made available to the external applications. * Selection of the data exchange channels, i.e. network links, databases, etc. * Data security protection services. * Data discovery support services. Optionally the `OPC UA Client` may also support importing and exporting services of the data to external semantics (**Raw Data**). > Note: because the *OPC UA Client* selects the data for further processing over a session and in context of metadata the data semantics is preserved and can be processes meaningfully. ### OOI Reactive Application `OOI Reactive Application` is an application transferring the `Semantic-Data` over the network using message centric transport of the strong typed data standardized by the OPC UA Specification [Part 14 Pub/Sub](../Networking/SemanticData/README.PubSubMTF.md). The description of its architecture is captured in [UA SemanticData Message Centric Communication](../Networking/README.MessageCentricCommunication.md). This concept has been implemented in the project [Reactive Networking of Semantic-Data Library](../Networking/SemanticData/README.MD). This project provides an SDK library that can be used as a foundation of the communication infrastructure deployment. The [Walk-through `ReferenceApplication`](../Networking/ReferenceApplication/README.MD) contains the description of a reference WPF application. The diagram below shows how the `OOI Reactive Application` may be expanded to implement integration services in context of selected Industrial IT technologies. ![OOI Reactive Application](../CommonResources/Media/UADataIntegrationServices.UADataApplication.png) `OOI Reactive Application` is any software program designed to perform a specific function directly for the user or for other application programs. Application programs process consumes (`Consumer` role) and/or produces (`Producer` role) the `Semantic-Data` according to selected algorithm to meet the user requirements according to selected information model. The roles expands the `DataRepository` class representing ultimate source or destination of the *raw data*. Description of how to implement this roles is covered in the document [Reactive Networking of SemanticData Library](../Networking/SemanticData/README.MD) The `OOI Reactive Application` class in the domain model represents varieties of possible applications including but not limited to: * `XML Gateway` - it factories objects using the `Semantic-Data` and serializes them into XML text representation for further processing. * `JSON Gateway` - it factories objects using the `Semantic-Data` and serializes them into the JSON text representation for further processing * `Data Archival` - collects the `Semantic-Data` received over the wire and archives it in a database. * `Cloud Gateway` - it simplifies creation of a bridge to the cloud that enables data to stream from industrial equipment to a cloud messaging endpoint such as [Azure IoT](https://docs.microsoft.com/en-us/azure/iot-fundamentals/). * `HMI` - reactive visualization of the `Semantic-Data`- [OPC UA Makes Smart User Interface Possible][wordpress.HMI] * `SCADA` - supervisory control and data acquisition is a control system architecture that uses computers, networked data communications and graphical user interfaces for high-level process supervisory management. * `Fieldbus gateway` - a gateway to family of industrial computer network protocols. * `UA Server Integration` - a gateway to data exposed by the `Address Space Management` - a typical part of any *OPC UA Server*. The `Data Archival` can also be used to transfer data from the OPC UA environment to any Database Management System for further processing by Enterprise Management BI systems. The `JSON Gateway` and `XML Gateway` supports strong typed objects serialization and deserialization using JSON and XML industrial standards. Converting the OPC UA objects into text based representation is required to publish and subscribe using Enterprise Service Base concept. By design in all the cases above the destination representation, i.e. message content, object types and database schema can be prepared in advance at design time using the OPC UA Information Model. ## Semantic-Data ### Concept The OPC `Semantic-Data` represents the following triple: * *Uniform Resource Identifier* (URI). * Type as an entity of the *OPC UA Information Model*. * A set of related nodes in the context of *OPC UA Address Space* Using the URI as a standard for global identifiers allows for a worldwide reference for any data. This means that we can tell when any two applications anywhere in the world are referring to the same thing. It could answer the question when a thing in one location is the same thing as thing in another location? Using URI, we can, therefore, introduce the notion of global data identity. The data identity allows for the creation of variety of dictionaries collecting supplementary information independently and outside the server *OPC UA Address Space* context. Any data instance (value) is always just a stream of bits. To understand the binary data we must have defined a data type a description how to understand a bits pattern. Simplifying, the data type determines a set of valid values and rules needed to assign information (understand the data) to a selected bits pattern. The OPC UA specification provides an additional possibility of defining the meaning of the data, i.e. exposing the data in the context of metadata. In this case the data is made available as the *Value* attribute of the *Variable* node and is surrounded by other nodes creating a part of relationship. A well defined set of interconnected nodes can be recognized as complex data ([to learn more visit: OPC UA Makes Complex Data Processing Possible](https://mpostol.wordpress.com/2014/05/08/opc-ua-makes-complex-data-access-possible/)). Complex in this context means that the type must additionally define a relationship between the components of the binary data, i.e. how to selectively get a component of the complex data. To associate the type and the data, the URI must be defined unambiguously in the context of the selected *OPC UA Information Model* that provides type definitions. To promote data processing against type definitions we shall assume that types are stable and therefore may not be preserved in the data instance, provided that precise nodes selection rules are defined and observed. To meet this requirement, any `Semantic-Data` represents a set of nodes organized as a tree structure defined recursively as a collection of nodes (starting at a root node), where each node called parent is the root of a subtree, i.e. all nodes that have "part of" relationship called children. The collection of children may be empty and in this case the node is called a leaf. In this definition “part of” means that the parent has a `HasProperty` or `HasComponent` reference to its children. This type of references prevents loops. For any *OPC Information Model* the selection rule proposed above unambiguously yields a set of nodes that can make up the `Semantic-Data** instance. The URI of this instance is the following couple: * Selected URI for a root element that qualifies the symbolic name part. * Symbolic name of a root element. The OPC UA information modeling concept is based on domains [to learn more visit the section Information Models Development](../SemanticData/InformationModelsDevelopment.md). A domain is a named self-contained collection of definitions. Any domain name is URI and must be globally unique - it is an identification string that defines a realm of administrative autonomy and authority of responsibility. The type definition from one domain may inherit from type definitions located in other domains. To avoid circular references, domains should be organized in layers, which expand step by step the basic model provided by the *OPC UA Specification*. The URI for the information model defined by the standard is `http://opcfoundation.org/UA/`. To make URI for the nodes defined by the standard unique, the server URL shall be used instead. The symbolic name of each node is its `BrowseName`, or, when it is a part of another node, the `BrowseName` of the other node, a `"_"`, and the `BrowseName` of itself. It applies recursively. “Part of” means that the whole has a `HasProperty` or `HasComponent` reference to its part. Since all nodes not being the part of another node have a unique name, the symbolic name is unique. Any root element must not be an instance declaration. An instance declaration is an Object, Variable or Method that is the target node of a hierarchical reference from a type definition mode or another instance declaration. For example, the `ServerType` defined in the specification has the symbolic name `ServerType`. One of its instance declarations would be identified as ‘ServerType_ServerCapabilities’. Since this Object is complex, another instance declaration of the `ServerType` is `ServerType_ServerCapabilities_MinSupportedSampleRate`. The `Server` `Object` node is based on the `ServerType` and has the symbolic name `Server`. Therefore, the instance based on the instance declaration described above has the symbolic name `Server_ServerCapabilities_MinSupportedSampleRate`. The unique identifier and both methods of data meaning definition make up a concept of the `Semantic-Data**. Again, this concept can be implemented using the *OPC UA Information Model* to define types and *OPC UA Address Space Model* to expose the data in the context of metadata. > Note: The `Semantic-Data` may be implemented using any other consistent type system. The `Semantic-Data` may be used to implement the *Data Security* and *Discoverable Data* concepts described below. ### Encoding As it was defined above any `Semantic-Data` represents a well defined set of nodes organized as a tree structure. Type is responsible to define a meaning for this tree, e.g. from *BoilerType* we can learn how for this kind of objects their state is described - what values must be present in the data instance. This meaning is provided by the semantics rules of the type. To define valid bits pattern encoding must be defined by the type as well. Encoding rules depends on where the data is to be processed and it could change during the data life-cycle. Definition of the encoding is, therefore, outside of scope of `SemanticData` definition and to promote interoperability must be defined be an international standard. For this purpose [OPC Unified Architecture][wordpress.opc-ua] has been selected. Value of the data can change in time. It is worth noting that, in the presented concept, if two instances of the data have the same URI it does not mean that both have the same value, i.e. the same bits pattern. For example, if we are measuring the temperature in an output pipe of a selected boiler at 1 second intervals, we are getting a new value (creating new data instance) every second. The URI cannot be used to distinguish data instances, but still it could be used to apply a common key and sign each value and, finally, send it over the wire to a destination application. The destination application can use a recognizable key (indexed by the URI) retrieved from a dictionary and check the data against a not-repudiation security scenario. **Challenge 1**: An *OPC UA Server* exposed 123456 values representing the crude oil refinery process. To make the server maintainable its configuration has to be self-adoptable (zero-configuration, zero-device drivers required) For this scenario we can apply the following work-flow: 1. The server instantiates the OPC UA Information Model for the crude oil refinery process and starts listening for UDP messages containing the `Semantic-Data` instances. 2. The `Flow meter #A-4321` device supporting Modbus RTU is equipped with a Modbus => `Semantic-Data` gateway (lightweight plug converter - actually converting Modbus responses into the UDP/IP frame according to the [Pub/Sub specification](../Networking/SemanticData/README.PubSubMTF.md) - price is relevant!) 3. Using the *OPC UA Information Model* of the process the meter creates partial data instance containing value of the *InputFlow* *Variable*` defined somewhere in the model 4. Using local private key of the device the payload is signed and sent to the server. 5. Embedded UDP receiver of the `Address Space Management` on the server side reads the message from the network and, using the URI of the `Flow meter #A-4321`, browses a global directory to find the sender certificate and get the public key to implement payload integrity check. 6. Finally, *OPC UA Server* exposes the data (updates *Value* attributes of the relevant *Variable* nodes) related to a virtual meter for `Flow meter #A-4321` in his `Address Space Management` component (i.e. in the *UA Address Space* instantiated according to the Information Model used to configure the device) 7. *OPC UA Clients* connected to this server are updated over the sessions using the standard subscription mechanism 8. In case the `Flow meter #A-4321` device is replaced for some reasons the new one also has to update relevant properties and *OPC UA Clients* can adopt the behavior using new values (e.g. engineering units) and expose also the device identification data, e.g serial number, model, etc. The device must be equipped with a gateway supporting its field level protocol or directly supporting the `Semantic-Data` implementation. ### Data Security Some scenarios where the OPC `Semantic-Data` is used requires that the data is protected against: * Unauthorized Access. * Non-repudiation. * Integrity. Because any `Semantic-Data` instance is a uniquely named standalone object, the security can be provided in the context of the data but not in the context of the server the data is exposed by. Each node in the `Semantic-Data` is a root of a tree structure created by nodes recursively pointed out by *HierarchicalReferences* in forward direction. Because each node in this hierarchy is globally recognizable it may be protected as a resource by any independent protection system (for example any Kerberos protocol implementation) supporting authentication and authorization operation and responsible for the distribution of security tokens used to protect the data as above. A hierarchical relationship supports permissions inheritance, i.e. permissions propagation to the children nodes. **Challenge 2**: A server wants to send information out to a large number of thin `HMI` devices in a local network – the creation of simultaneous OPC UA sessions is impractical or impossible for some reasons. For this scenario we can apply the following work-flow: 1. *OPC UA Server* prepares an UDP message representing the current state of the `Boiler #1` and if needed it gets a protection security token using the URI of the data from an external dictionary. 2. *OPC UA Server* multicasts (one-to-many distribution) using UDP/IP protocol to remote consumers (e.g. thin `HMI` devices). 3. Using the *BoilerType* a `HMI` device can be prepared in advance to display the state of the boiler and configured against the URI to display information about the `Boiler #1` - no *OPC UA Server* session is required but *BoilerType* must be known (no communication) in advance from the appropriate *OPC UA Information Model* 4. Using preconfigured URI, `HMI` learns from the message that it contains information about Boiler `#1`, otherwise it neglects the message (local filtering approach) 5. `HMI` browses local dictionaries (e.g. configuration files) to get an appropriate security token to follow the selected protection scenario. Synchronization of the dictionaries is a user dependent mechanism and does not require *OPC UA Server* engagement. 6. `HMI` updates the screen using the message content and it is done. **Challenge 3**: A smart power meter - *AMQP Client* `(~123 USD)` shall expose current values related to `Consumer #1` in an *OPC UA Address Space* (also supporting embedded *AMQP Client*). Because there are ~123456 meters that must be handled, establishing so many simultaneous OPC UA session over the Internet is impractical or even impossible. For this scenario we can apply the following work-flow: 1. The meter (*AMQP client*) reads the information (related only to the AMQP connectivity) about the destination *AMQP client* (embedded part of the *OPC UA Server*) from its configuration file. 2. The meter device prepared in advance using the *SmartPowerMeterType* creates a new AMQP message adding the URI of the `Consumer #1` and signs it using a private key - no *OPC UA Server* session is required but *SmartPowerMeterType* must be known (no communication) in advance from appropriate *OPC UA Information Model* (OPC UA interoperability is required). 3. Finally, the meter sends the message using an *AMQP broker* - cloud approach. 4. Embedded *AMQP client* of the *OPC UA Server* reads the message from the *AMQP Queue* and, using the URI of the `Consumer #1`, browses a global customers directory to find the sender certificate and get the public key to implement non-repudiation security algorithm (we are talking not only about power, but also about money!). 5. Finally, *OPC UA Server* exposes the data (updates *Value* attributes of relevant *Variable* nodes) related to a virtual meter for `Consumer #1` in his **Address Space Management** component. 6. *OPC UA Clients* connected to this server are updated over the sessions using the standard subscription mechanism. ### Discoverable Data In distributed systems the `OOI Reactive Application` and `UA Client` (see the diagram above) are interested in getting access to or update the data and they may not care about which particular server provides the data. In this case the data must be discoverable over the network. The `Semantic-Data` can be used to meet this requirement. In this approach, the data URI can be used as a key to browse the *Global Data Discovery System* (GDDS – an expanded version of GDS) to find recursively the destination *OPC UA Server* exposing the requested data. In this scenario we can use a well-known two-step process: 1. discover the server using the resource (`Semantic-Data`) unique domain based identifier - URI; 2. browse or update the data. **Challenge 4**: A `HMI` prepared in advance to display the state of boilers formally described by the *BoilerType* shall display the *Boiler #1* state but the server exposing the data is unknown and may change occasionally (e.g. non transparent redundancy). For this scenario we can apply the following work-flow: 1. `HMI` (*OPC UA Client*) using URI of the `Boiler #1` browses recursively *Global Data Discovery System* starting form a local server to find a discovery server having all needed information about the *OPC UA Server* exposing `Boiler #1` `Object` node representing a physical object named `Boiler #1`. 2. `HMI` establishes *OPC UA Session* with the discovery server and gets all needed information. 3. `HMI` establishes *OPC UA Session* with the destination *OPC UA Server* to subscribe for requested data and events. 4. In case the current server has been shut down `HMI` repeats the procedure starting from 1 and connects to another server if any. The data discovery mechanism is a part of the broader concept captured in the document [Global Data Discovery](../DataDiscovery/README.MD). ## Semantic-Data Deployment Meaningful processing of the *OPC UA Data* by variety of applications is an important part of a broader concept described in the document [Object Oriented Internet](../README.md). The code illustrating networking of the `Semantic-Data` paradigm implementation can be found in the project [Reactive Networking of SemanticData Library](../Networking/SemanticData/README.MD). Description of the `OOI Reactive Application` architecture is captured in the section [Semantic-Data Message Centric Communication](../Networking/README.MessageCentricCommunication.md). ## How the code fits together Figure 1 visualizes dependencies across the code available in the `SemanticData` solution folder on the code map. This code map helps you see how the code fits together without reading through files and lines of code. ![Figure 1 Architecture](../CommonResources/Media/SemanticData/UAOOI.SemanticData.Architecture.png) > For the sake of simplicity the unit tests have been removed from the diagram. [wordpress.HMI]:https://mpostol.wordpress.com/2013/08/11/opc-ua-makes-smart-user-interface-possible/ [wordpress.opc-ua]: https://mpostol.wordpress.com/opc-ua/ ================================================ FILE: SemanticData/SemanticData.playlist ================================================ ================================================ FILE: SemanticData/SolutionConfiguration/SemanticData..SolutionConfiguration.csproj ================================================ netstandard2.0 UAOOI.SemanticData.SolutionConfiguration UAOOI.SemanticData.SolutionConfiguration ================================================ FILE: SemanticData/SolutionConfiguration/Serialization/UAModelDesignerSolution.GoCS.cmd ================================================ :: convert the scheme DomainDescriptor.xsd to cs code xsd.exe UAModelDesignerSolution.xsd /N:UAOOI.SemanticData.SolutionConfiguration.Serialization /c ================================================ FILE: SemanticData/SolutionConfiguration/Serialization/UAModelDesignerSolution.GoXSD.cmd ================================================ xsd.exe ..\bin\Debug\UAOOI.SemanticData.SolutionConfiguration.dll /t:UAOOI.SemanticData.SolutionConfiguration.Serialization.UAModelDesignerSolution ================================================ FILE: SemanticData/SolutionConfiguration/Serialization/UAModelDesignerSolution.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2021, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ using System; using System.IO; using System.Runtime.Serialization; namespace UAOOI.SemanticData.SolutionConfiguration.Serialization { /// /// Class UAModelDesignerSolution. /// public partial class UAModelDesignerSolution { /// /// Creates an empty solution model. /// /// UAModelDesignerSolution. internal static UAModelDesignerSolution CreateEmptyModel(string solutionName) { return new UAModelDesignerSolution() { Name = solutionName, Projects = new UAModelDesignerProject[] { }, ServerDetails = UAModelDesignerSolutionServerDetails.CreateEmptyInstance() }; } [OnDeserialized()] public void OnDeserialized(StreamingContext context) { ServerDetails = ServerDetails ?? UAModelDesignerSolutionServerDetails.CreateEmptyInstance(); } } /// /// Class UAModelDesignerSolutionServerDetails - encapsulates details about the associated server configuration /// public partial class UAModelDesignerSolutionServerDetails { internal static UAModelDesignerSolutionServerDetails CreateEmptyInstance() { return new UAModelDesignerSolutionServerDetails() { codebase = string.Empty, configuration = string.Empty }; } } internal enum ResourceEntries { Token_ProjectFileName, DefaultCSVFileName, Project_FileDialogDefaultExt }; public partial class UAModelDesignerProject { internal static UAModelDesignerProject CreateEmpty(string name, Func resource) { return new UAModelDesignerProject() { buildOutputDirectoryNameField = resource(ResourceEntries.Token_ProjectFileName), cSVFileNameField = resource(ResourceEntries.DefaultCSVFileName), fileNameField = Path.ChangeExtension(resource(ResourceEntries.Token_ProjectFileName), resource(ResourceEntries.Project_FileDialogDefaultExt)), nameField = name, ProjectIdentifier = Guid.NewGuid().ToString(), }; } } } ================================================ FILE: SemanticData/SolutionConfiguration/Serialization/UAModelDesignerSolution.design.cs ================================================ //------------------------------------------------------------------------------ // // This code was generated by a tool. // Runtime Version:4.0.30319.42000 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. // //------------------------------------------------------------------------------ // // This source code was auto-generated by xsd, Version=4.6.1055.0. // namespace UAOOI.SemanticData.SolutionConfiguration.Serialization { using System.Xml.Serialization; /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)] [System.Xml.Serialization.XmlRootAttribute(Namespace="", IsNullable=false)] public partial class UAModelDesignerSolution { private string nameField; private UAModelDesignerProject[] projectsField; private UAModelDesignerSolutionServerDetails serverDetailsField; /// public string Name { get { return this.nameField; } set { this.nameField = value; } } /// [System.Xml.Serialization.XmlArrayItemAttribute("UAModelDesignerProject", IsNullable=false)] public UAModelDesignerProject[] Projects { get { return this.projectsField; } set { this.projectsField = value; } } /// public UAModelDesignerSolutionServerDetails ServerDetails { get { return this.serverDetailsField; } set { this.serverDetailsField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(TypeName = "UAModelDesignerProject", AnonymousType=false)] public partial class UAModelDesignerProject { private string nameField; private string cSVFileNameField; private string buildOutputDirectoryNameField; private string fileNameField; private string projectIdentifierField; /// public string Name { get { return this.nameField; } set { this.nameField = value; } } /// public string CSVFileName { get { return this.cSVFileNameField; } set { this.cSVFileNameField = value; } } /// public string BuildOutputDirectoryName { get { return this.buildOutputDirectoryNameField; } set { this.buildOutputDirectoryNameField = value; } } /// public string FileName { get { return this.fileNameField; } set { this.fileNameField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] public string ProjectIdentifier { get { return this.projectIdentifierField; } set { this.projectIdentifierField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)] public partial class UAModelDesignerSolutionServerDetails { private string codebaseField; private string configurationField; /// [System.Xml.Serialization.XmlAttributeAttribute()] public string codebase { get { return this.codebaseField; } set { this.codebaseField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] public string configuration { get { return this.configurationField; } set { this.configurationField = value; } } } } ================================================ FILE: SemanticData/SolutionConfiguration/Serialization/UAModelDesignerSolution.xsd ================================================  ================================================ FILE: SemanticData/StandardInformationModel.md ================================================ # Standard Information Model ## Object Type The `Object` `NodeClass` is used to define objects as parts involved in the underling real-time process. Each `Object` in the Address Space has an assigned object type. The OPC UA specification has defined a `BaseObjectType` from which all other `ObjectType`s shall either inherit, directly or indirectly. The standard types derived from the `BaseObjectType` are listed in Table 1. Table 1 Standard Object Types Name | Description :-|- `ServerType` |Instances of this type provide information about the server to the clients. `ServerCapabilitiesType`| Instances of this type define the capabilities supported by the OPC UA server. `ServerDiagnosticsType`| Instances of this type define diagnostic information about the OPC UA server. `SessionsDiagnosticsSummaryType` | Instances of this type define summary diagnostic information about the client sessions to the OPC UA server. `SessionDiagnosticsObjectType` | Instances of this type define diagnostic information about the client sessions to the OPC UA server. `VendorServerInfoType` | Instances of this type are placeholders Object for vendor-specific information about the server. This `ObjectType` defines an empty `ObjectType` that has no components and vendors should derive from this type to expose application specific information. `ServerRedundancyType` | Instances of this type define the redundancy capabilities supported by the OPC UA server. `BaseEventType` | Instances of this type define all general characteristics of an Event. All other `EventTypes` derive from it. `ModellingRuleType` |Instances of this type provide information that identifies what happens when an object of a given type is instantiated. The instance of this type contains a property `NamingRule` which has the following values i.e. Optional, Mandatory, or Constraint. `FolderType`| Instances of this type are used to organize the Address Space into a hierarchy of nodes. They represent the root node of a subtree, and have no other semantics associated with them, except the `DisplayName` Attribute should imply the semantics associated with the use of it. `DataTypeEncodingType` | Objects of this type are used to define `DataType`s of `Variable`s `NodeClass`, e.g. “Default”, “UA Binary” or “XML”. `DataTypeSystemType` | Objects of this type are used to describe the serialization and deserialization process of the `Value` attributes. Many of these standard types are used for describing OPC UA Server functionality and to provide diagnostic information. The `BaseEventType` has many specialized subtypes to allow handling most common transient Events. System configuration changes, operator interaction and system errors are examples of Events. OPC UA Part 9 – Alarm and Conditions expands on this object type to define alarm and condition events. ## Variable Type Variable is dedicated to provide a value to the clients. To define a variable two types must be provided (Figure 1): - VariableType: which describes the type of a variable. A Variable node has a `HasTypeDefinition` reference to its type definition (depicted as double closed and filled arrows). - DataType: which describes the type of the variable value. It is assigned to the `DataType` attribute. ![Figure 1 Variable types relationship](../CommonResources/Media/SemanticData/StandardInformationModel.VariableType.png) In this section we focus on the available standard variable types, but in the next one we will review standard data types. The root for all `VariableType`s is `BaseVariableType` (Figure 2). This means that all other types must inherit from it. The `PropertyType` and the `BaseDataVariableType` are most important for information representation. Consequently, there are two independent inheritance sub-trees. ![Figure 2 `VariableType`s inheritance hierarchy exposed by the server](../CommonResources/Media/SemanticData/StandardInformationModel.VariableTypesInheritanceHierarchy.PNG) Both of the above-mentioned types have the same `BaseDataType`, which is abstract and defines a value that can have any valid type (Figure 3). The double closed arrows point to the source of the `HasSubtype` reference. An interesting feature of these types is that even though they have an abstract `BaseDataType` both are concrete and therefore can be instantiated. Abstract `DataType`s do not have any encoding and cannot be exchanged on the wire; therefore the instantiated variables with an abstract `DataType` must redefine it. The `DataType` attribute can only be changed to a new one if it is a subtype of the original `DataType`. ![Figure 3 BaseDataType association](../CommonResources/Media/SemanticData/StandardInformationModel.BaseDataTypeAssociation.png) Dividing the variables into properties and data variables has its source in two different information categories: data and metadata. For example, data can represent a signal, say pressure, and metadata describes the data and can be engineering units in this example. Of course we are not limited to the process control domain; it can be also a file content as the data, and last modification time as the metadata. Both may change in time, but properties are recognized as more stable. Whereas talking about stability is useful only to better understand the semantics difference, this difference has a major impact on the data source access. Usually data is obtained from smart plant-floor digital devices responsible for converting analog signals to a digital representation. Therefore, to emphasize their origin, we call them real-time process data. There are many sources of metadata including a human interface, memory of smart plug and play devices, etc. Usually any change of the metadata value exposed as a property is a result of an environment modification, e.g. a new sensor, new accessory, but also a file modification. In spite of their role, both properties and variables must have a defined type of the provided value to allow clients to interpret a stream of bits sent on the wire and obtained by a client from the server. It is worth stressing that, according to the specification, the inheritance chain is broken for the properties it means that the `PropertyType` must not have subtypes. Additionally, it is not permitted to have a Property as source of the `HierarchicalReference`s type or any type inherited from it. In other words properties cannot be complex. To prevent recursion, properties are also not allowed to have properties defined for them. Additionally, a node and all its properties shall always reside in the same server. From the inheritance tree of the standard variable types exposed by the server (Figure 2) we can discover that the `BaseDataVariableType` is a parent of two sets of types dedicated to: - describe data types, i.e. `DataTypeDictionaryType` and `DataTypeDescriptionType`, - provide diagnostic information. i.e. `ServerVendorCapabilityType`, `ServerStatusType`, etc. ![Figure 4 VariableTypes to represent items of data](../CommonResources/Media/SemanticData/StandardInformationModel.VariableTypesRepresentingDataItems.PNG) Users and other parts of OPC UA specification can expand the set of types presented above. For example, Part 8 of the specification defines `DataItemType` that derives from the `BaseDataVariableType` to represent any item of data (see Figure 4). Users can create new types from the already defined ones to meet specific requirements of the application (see example case below). A detailed description of the types derived from the `BaseDataVariableType` is beyond the scope of this chapter, but some features of this inheritance branch are worth noting. As opposed to the properties, the variables may be complex. One example of a complex `VariableType` is the `ServerStatusType` shown in Figure 5. Components of the complex variable can be accessed independently. The next very important future of the variables is that new user specific types can be freely defined by deriving them from those already defined. ## Data Types The type of data provided by the `Variable` `Value` attribute is defined by the associated `DataType`. `DataType` is pointed out by the `DataType` attribute of the `Variable` and `VariableType` nodes. The `DataType` attribute is of the `NodeId` type (Table 2). In many cases, the value of the `DataType` attribute – called `DataTypeId` – will be well-known to clients and servers. Well-known values of `DataTypeId` allow clients to use random addressing and interpret values without having to read the type description from the server. Therefore, servers may use well-known `DataTypeId` values without representing the corresponding `DataType` nodes in their Address Space. ![Figure 5 ServerStatusType structure](../CommonResources/Media/SemanticData/StandardInformationModel.ServerStatusTypeStructure.PNG) `DataType` `NodeClass` is dedicated to describe types. In this case, the represented types have a special mission, because they describe data provided by the UA Server to clients. For example, a node of the DataType can provide information to clients that the data has a numeric value and the clients reading it can use this knowledge to interpret and process the obtained value – stream of bits. The `BaseDataType` is the root of the inheritance tree. The simplified inheritance hierarchy of the standard data types is shown in Figure 6, where the whole sub-tree of built-in types are represented commonly by a single symbol. Table 2 Built-in Data Types |Name |Description | :-|- Boolean | A two-state logical value (true or false). Byte | An integer value between 0 and 256. ByteString | A sequence of octets. DataValue | A data value with an associated status code and timestamps. DateTime | An instance in time. DiagnosticInfo | A structure that contains detailed error and diagnostic information associated with a StatusCode. Double | An IEEE double precision (64 bit) floating point value. ExpandedNodeId | A NodeId that allows the namespace URI to be specified instead of an index. ExtensionObject | A structure that contains an application specific data type that may not be recognized by the receiver. Float | An IEEE single precision (32 bit) floating point value. GUID | A 16 byte value that can be used as a globally unique identifier. Int16 | An integer value between -32768 and 32767. Int32 | An integer value between – 2147483648 and 2147483647. Int64 | An integer value between – 9223372036854775808 and 9223372036854775807 LocalizedText | Human readable text with an optional locale identifier. NodeId | An identifier for a node in the Address Space of an OPC UA server. QualifiedName | A name qualified by a namespace. SByte | An integer value between -128 and 127. StatusCode | A numeric identifier for an error or condition that is associated with a value or an operation. String | A sequence of Unicode characters. UInt16 | An integer value between 0 and 65535. UInt32 | An integer value between 0 and 4294967295. UInt64 | An integer value between 0 and 18446744073709551615. Variant | A union of all of the types specified above. XmlElement | An XML element. To some standard data types – called built-in types - special rules apply. Built-in data types have no encoding visible in the UA Address Space since the encoding should be known to all OPC UA products. Examples of built-in data types are `Int32` and `Double`. The built-in data types with a short description are listed in the Table 2 ![Figure 6 Standard DataTypes inheritance hierarchy](../CommonResources/Media/SemanticData/StandardInformationModel.StandardDataTypesInheritanceHierarchy.png) Most of the built-in types are similar to those known in other IT systems, except the `NodeId` type. This type needs some comments, because it is intended to be used by the random addressing mechanism to represent information allowing clients to uniquely identify and access the nodes. This built-in data type is a structure composed of: - `namespaceIndex` : numeric values used to identify namespace - `identifierType`: identifies the type of the `NodeId`, its format and its scope - `identifier`: a unique identifier within the context of the namespace The namespace is a URI (Unique Resource Identifier) that identifies the naming authority responsible for assigning the identifier element of the `NodeId`. Namespace URIs are identified by numeric values in OPC UA Services to permit a more efficient transfer and processing (e.g. table lookups). Depending on the application requirements, the `identifierType` field may have the following values: - NUMERIC: numeric - STRING: text string - GUID: Globally Unique Identifier - OPAQUE: namespace specific format Enumeration (Figure 6) is the next standard data type derived directly from `BaseDataType`, that needs some comments. It is to be used to represent a limited set of simple information entities. Therefore it is a simple and abstract type. All enumerations, like `NodeClass`, have to inherit from it. All types inheriting from the `Enumeration` have a special processing for the encoding. Process data could be complex. `Structure` (Figure 6) is an abstract data type defined as the base for all structured types. All data types inheriting from it have a special processing for the encoding. All complex data, if not defined explicitly as primitive in the specification, are created by defining of new types derived from the `Structure`. When complex data structures should be made available to the client there are basically three different approaches: - Create several simple variables using simple data types reflecting parts of the structure and map the data structure using these variables as object or variable components - Create a complex data type and a simple variable using data type derived from `Structure` - Create a complex data type and a complex variable using this data type and also exposing the complex data structure as variables of the complex variable using simple data types An example of the first scenario is shown in Figure 5 where a variable of the `ServerStatusType` has components of a simple data type. Advantages of this approach: - the complex structure of data is visible in the Address Space - a generic client can easily access the data without any knowledge of user-defined data types - the client can access individual parts of complex data Disadvantages of the first approach are that accessing individual data does not provide any transactional context; and for a specific client the server first has to convert data and the client has to convert data, again, to get the data structure the underlying system provides. ![Figure 7 ServerStatusDataType Structure](../CommonResources/Media/SemanticData/StandardInformationModel.ServerStatusDataTypeStructure.png) An example of the second scenario is shown in Figure 7. Here, the same information as previously is available as a complex data type of the `ServerStatusDataType` that inherits from the Structure. The `ServerStatusDataType` arranges the server status data as a collection of fields. Advantages of this approach: - data is accessed in a transaction context, - the complex data type can be constructed in a way that the server does not have to convert data and can pass it directly to the specific client that can directly use it. Disadvantages are that the generic client might not be able to access and interpret the data or it has the burden to read the `DataTypeDescription` to interpret the data. The data structure is not visible in the Address Space; additional Properties describing the data structure cannot be added to the data type. Individual parts of data cannot be read without accessing the whole data structure. The third approach combines both other approaches. The specific client can, therefore, access data in its native format in a transactional context, whereas the generic client can access the simple data types of the components of the complex variable. The disadvantage is that the server has to be able to provide the native format and also interpret it to be able to provide information in simple data types. In some SDK’s support for this mapping is provided automatically; for example the OPC .NET SDK will provide this mapping as part of its code generator for user defined types. When a transactional context is needed or the client should be able to get a large amount of data instead of subscribing to several individual values, the third approach is suitable. However, the server might not always have the knowledge how to interpret complex data or be able to have predefined structures for the complex data of the underlying system and it, therefore, has to use the second approach just passing data to the specific client who is able to interpret the data. ## Reference Types Reference types are used to create interconnections between nodes. They are not instantiated, i.e. a NodeClass representing a reference is not defined. Instead of instantiating the references, they are added to a collection associated with each node. NodeClass of the node and its type decide what references are allowed to be added to this collection. The base of all references is an abstract References type (Figure 8). There is no semantics associated with it. There are two disjoint sets of standard references: - `HierarchicalReferences` - `NonHierarchicalReferences` ![Figure 8 Standard reference type hierarchy exposed by the server](../CommonResources/Media/SemanticData/StandardInformationModel.StandardReferenceTypehierarchy.PNG) This distinction reflects two fundamental relationship categories that can be generally distinguished: the association and the dependency. Associations are used to build information architecture – nodes hierarchy - that can be discovered by the clients using the browsing mechanism. An example of the association is the parent/child relationship. In this case we can say that the target belongs to the source. A dependency from a source element (called the client) to a target element (called the supplier) indicates that the source element uses or depends on the target element. An example of dependency is the variable and variable type relationship. In this case we can state that the target describes the source. `HierarchicalReferences` do not forbid loops. For example, starting from node “A” and following `HierarchicalReferences` may lead to browse to node “A” again. `HasChild` is an abstract type derived from `HierarchicalReferences` that creates a branch of types, which forbids loops. In this case, starting from node “A” and only following references, which are subtypes of `HasChild`, we shall never be able to return to “A”. But it is allowed that there may be more than one path leading to another node “B”. The `HasChild` branch contains `HasComponent` and `HasProperty`. Both are derived from the Aggregates type and used to reflect the parent – child relationship. There is also `HasSubtype` on this branch, but in this case it is used to expose the inheritance hierarchy. Table 3 `HasComponent` usage scope Source | Target -|- Object, ObjectType| Object, Variable, Method DataVariable, VariableType | Variable The `HasComponent` is derived from the `Aggregates` (Figure 8) is defined to build the part of relationship, i.e. the target node of `HasComponent` is a part of the source node. This type is used to relate objects, object types, variables and methods. Table 3 contains the allowed composite nodes (source) and allowed components as the target of this type of reference. By using this reference, the variable is defined as a `DataVariable`. The semantics of `HasProperty` derived from `Aggregates` (Figure 8) is to identify the properties of a node. The source node of this type can be of any `NodeClass`. The target node shall be a variable. By using the `HasProperty`, the variable is defined as `Property`. Since properties shall not have properties, a property shall never be the source node of a `HasProperty` reference. ![Figure 9 `ServerType` definition exposed by the server](../CommonResources/Media/SemanticData/StandardInformationModel.ServerTypeDefinition.PNG) An example of a complex object using the references described above is shown in Figure 9. The `ServerType` has `HasProperty` references pointing to the `ServerArray`, `NamespaceArray`, `ServiceLevel` and Auditing properties. The `ServerStatus` is a child variable pointed by a reference of the `HasComponent` type. Objects of this type have also components: `ServerCapabilities`, `ServerDiagnostics`, `VendorServerInfo`, `ServerRedundancy` objects pointed also by a reference of the `HasComponent` type. The `HasSubtype` is a subtype of the `HasChild` type. It is worth noting, that inheritance using HasSubtype is represented using the one-to-many (parent/child) relationship. Because new types can be freely derived from the existing ones we cannot enumerate all children in advance - the tree must be built and maintained dynamically during the life-cycle of the Address Space. This means that when a new type is created it is created with a reference to its base (parent), which results in a new subtype being added to the parent. The `Organizes` is the next subtype of `HierarchicalReferences`. The semantics of it is to organize nodes in the Address Space. It can be used to span multiple hierarchies independent of any hierarchy created with the non-looping `Aggregates` references. The source node of references of this type shall be an object or a view. If it is an object it should be an object of the `FolderType` or one of its subtypes. The target node of this type can be of any `NodeClass`. ## State machines The information model provides constructs that can be used to model discrete object behavior in terms of the states an object can reside in and the transitions that can happen between those states. State machines (see example in Figure 10) are built as objects graph using dedicated object types, variable types and reference types, whose behavior is governed by the rules that must be strictly observed. ![Figure 10 Example of a simple state machine](../CommonResources/Media/SemanticData/StandardInformationModel.ExampleOfSimpleStateMachine.png) A state is a condition in which an object can be at some point during its lifetime, for some finite amount of time. A transition is a change of an object from one state (the source state) to another (the target state). The transition is triggered ("fires") when an event of interest – cause - to a given object occurs. According to the information model concept, causes are represented in the form of methods that have to be called, but a vendor can define other items or have them be internal (i.e. nothing is listed causing the transition). There may also be an action associated with a triggered transition. This action called an effect is executed unconditionally before the object enters the target state. Effects are events that are generated. ![Figure 11 Representation of the example state machine.](../CommonResources/Media/SemanticData/StandardInformationModel.StateMachineExample.png) The simplified state machine model described above can be freely expanded to provide more complex functionality like sub-machines, parallel states, forks and joins, history states, choices and junctions, etc. State machines are represented in the Address Space as an object of a type derived from the `StateMachineType` that defines a single variable of the `StateVariableType`, which represents the current state of the machine. An instance of the `StateMachineType` shall generate an event whenever a state change occurs. Transitions are represented as objects of the `TransitionType`. Each valid transition shall have exactly one `FromState` reference and exactly one `ToState` reference, each pointing to an object of the `StateType`. Using the above terminology we can represent any state machine from Figure 10 as a diagram shown in Figure 11. For this diagram it is assumed that `MyStateMachineType` is derived directly or indirectly from the `StateMachineType`. All states, transitions and methods are components of this type. ## See also - [OPC Unified Architecture Specification Part 5: Information Model, OPC Foundation, Rel. 1.04, 2017-11-22][OPC.UA.Part5] - [UA Information Model - Concept] [UA Information Model - Concept]:InformationModelConcept.md [OPC.UA.Part5]:https://opcfoundation.org/developer-tools/specifications-unified-architecture/part-5-information-model/ ================================================ FILE: SemanticData/Tests/AddressSpaceComplianceTestToolUnitTests/App.config ================================================  ================================================ FILE: SemanticData/Tests/AddressSpaceComplianceTestToolUnitTests/CommandLineSyntaxUnitTest.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using CommandLine; using Microsoft.VisualStudio.TestTools.UnitTesting; using System.Collections.Generic; using System.Linq; using UAOOI.SemanticData.AddressSpacePrototyping.CommandLineSyntax; namespace UAOOI.SemanticData.AddressSpaceTestTool.UnitTests { [TestClass] public class CommandLineSyntaxUnitTest { [TestMethod] public void EmptyLineTest() { string[] emptyLine = new string[] {"" }; Options options = null; List errors = null; int doCount = 0; emptyLine.Parse(x => { options = x; doCount++; }, y => errors = y.ToList()); Assert.IsNull(options); Assert.IsNotNull(errors); Assert.AreEqual(1, errors.Count()); Assert.AreEqual("CommandLine.MissingRequiredOptionError", errors[0].ToString()); Assert.AreEqual(ErrorType.MissingRequiredOptionError, errors[0].Tag); Assert.AreEqual(0, doCount); } [TestMethod] public void FilenamesTest() { string[] _emptyLine = new string[] { "AssemblyInfo.cs", "myproject.csproj", "-n", "http://a.b.c" }; Options _return = null; IEnumerable _errors = null; _emptyLine.Parse(x => _return = x, y => _errors = y); Assert.IsNotNull(_return); Assert.IsNull(_errors); Assert.IsNotNull(_return.Filenames); Assert.AreEqual(2, _return.Filenames.Count()); string[] _files = _return.Filenames.ToArray(); Assert.AreEqual("AssemblyInfo.cs", _files[0]); Assert.AreEqual("myproject.csproj", _files[1]); } [TestMethod] public void AllLongSwitchesTest() { string[] _emptyLine = new string[] { "App_Data/cachefile.json", "App_Data/cachefile2.json", "--namespace=XSLTName", "--export=ModelDesign.xml", "--stylesheet=XMLstylesheet", "--nologo" }; Options _return = null; IEnumerable _errors = null; _emptyLine.Parse(x => _return = x, y => _errors = y); Assert.IsNotNull(_return); Assert.IsNull(_errors); Assert.IsNotNull(_return.Filenames); Assert.AreEqual(2, _return.Filenames.Count()); string[] _files = _return.Filenames.ToArray(); Assert.AreEqual("App_Data/cachefile.json", _files[0]); Assert.AreEqual("App_Data/cachefile2.json", _files[1]); Assert.AreEqual("XSLTName", _return.IMNamespace); Assert.AreEqual("ModelDesign.xml", _return.ModelDesignFileName); Assert.IsTrue(_return.NoLogo); Assert.AreEqual("XMLstylesheet", _return.Stylesheet); } [TestMethod] public void AllShortSwitchesTest() { string[] _emptyLine = new string[] { "App_Data/cachefile.json", "App_Data/cachefile2.json", "-n", "http://a.b.c", "-e", "ModelDesign.xml", "-s", "XMLstylesheet", "--nologo" }; Options _return = null; IEnumerable _errors = null; _emptyLine.Parse(x => _return = x, y => _errors = y); Assert.IsNotNull(_return); Assert.IsNull(_errors); Assert.IsNotNull(_return.Filenames); Assert.AreEqual(2, _return.Filenames.Count()); string[] _files = _return.Filenames.ToArray(); Assert.AreEqual("App_Data/cachefile.json", _files[0]); Assert.AreEqual("App_Data/cachefile2.json", _files[1]); Assert.AreEqual("http://a.b.c", _return.IMNamespace); Assert.AreEqual("ModelDesign.xml", _return.ModelDesignFileName); Assert.IsTrue(_return.NoLogo); Assert.AreEqual("XMLstylesheet", _return.Stylesheet); } } } ================================================ FILE: SemanticData/Tests/AddressSpaceComplianceTestToolUnitTests/DoDisplayHelp.cmd ================================================ asp --help --version ================================================ FILE: SemanticData/Tests/AddressSpaceComplianceTestToolUnitTests/DoExport Boiler.cmd ================================================ asp "XMLModels\tempuri.org.UA.Examples.BoilerType.NodeSet2.xml" "XMLModels\Commsvr.UA.Examples.BoilersSet.NodeSet2.xml" -e "XMLModels\BoilerType.ModelDesign.xml" -s XMLstylesheet -n "http://tempuri.org/UA/Examples/BoilerType" ================================================ FILE: SemanticData/Tests/AddressSpaceComplianceTestToolUnitTests/DoExport.cmd ================================================ asp "XMLModels\DataTypeTest.NodeSet2.xml" "XMLModels\ReferenceTest.NodeSet2.xml" "XMLModels\ObjectTypeTest.NodeSet2.xml" "XMLModels\VariableTypeTest.NodeSet2.xml" -e "XMLModels\DataTypeTest.ModelDesign.xml" -s XMLstylesheet -n "http://cas.eu/UA/CommServer/UnitTests/DataTypeTest" ================================================ FILE: SemanticData/Tests/AddressSpaceComplianceTestToolUnitTests/DoValidate.cmd ================================================ asp "XMLModels\DataTypeTest.NodeSet2.xml" "XMLModels\ReferenceTest.NodeSet2.xml" "XMLModels\ObjectTypeTest.NodeSet2.xml" "XMLModels\VariableTypeTest.NodeSet2.xml" ================================================ FILE: SemanticData/Tests/AddressSpaceComplianceTestToolUnitTests/DoValidateBoiler.cmd ================================================ asp "XMLModels\tempuri.org.UA.Examples.BoilerType.NodeSet2.xml" "XMLModels\Commsvr.UA.Examples.BoilersSet.NodeSet2.xml" ================================================ FILE: SemanticData/Tests/AddressSpaceComplianceTestToolUnitTests/Instrumentation/Extensions.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2021, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ using Microsoft.VisualStudio.TestTools.UnitTesting; using System.Diagnostics; using System.Reflection; namespace UAOOI.SemanticData.AddressSpacePrototyping.Instrumentation { /// /// Class Extensions to get access to non public field of the /// internal static class Extensions { internal static string GetFileName(this DelimitedListTraceListener _listener) { FieldInfo fi = typeof(TextWriterTraceListener).GetField("fileName", BindingFlags.NonPublic | BindingFlags.Instance); Assert.IsNotNull(fi); return (string)fi.GetValue(_listener); } } } ================================================ FILE: SemanticData/Tests/AddressSpaceComplianceTestToolUnitTests/ProgramUnitTest.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2022, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ using Microsoft.VisualStudio.TestTools.UnitTesting; using Moq; using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Threading.Tasks; using UAOOI.Common.Infrastructure.Diagnostic; using UAOOI.SemanticData.AddressSpace.Abstractions; using UAOOI.SemanticData.AddressSpacePrototyping.CommandLineSyntax; using UAOOI.SemanticData.UANodeSetValidation.XML; namespace UAOOI.SemanticData.AddressSpacePrototyping { [TestClass] [DeploymentItem(@"XMLModels\", @"XMLModels\")] public class ProgramUnitTest { [TestMethod] public void DeploymentItemTestMethod() { FileInfo _testDataFileInfo = new FileInfo(@"XMLModels\DataTypeTest.NodeSet2.xml"); Assert.IsTrue(_testDataFileInfo.Exists); } [TestMethod] public void ConstructorTest() { Program programInstance = new Program(); ITraceSource currentLogger = null; programInstance.GetTraceSource(x => currentLogger = x); Assert.IsNotNull(currentLogger); } [TestMethod] public async Task EmptyArgsTest() { Program programInstance = new Program(); Mock mockLogerr = new Mock(); mockLogerr.Setup(x => x.TraceData(It.IsAny(), It.IsAny(), It.IsAny())); programInstance.DebugITraceSource = mockLogerr.Object; await programInstance.Run(new string[] { }); mockLogerr.Verify(x => x.TraceData(It.IsAny(), It.IsAny(), It.IsAny()), Times.Exactly(2)); } [TestMethod] public async Task RunTheApplicationTestMethod() { Program program = new Program(); await program.Run(new string[] { @"XMLModels\DataTypeTest.NodeSet2.xml" }); } [TestMethod] public void OptionsTestMethod() { Mock asMock = new Mock(); asMock.Setup(x => x.ImportUANodeSet(It.IsAny())); Program program = new Program(); Options options = new Options() { Filenames = null, IMNamespace = "bleble", ModelDesignFileName = string.Empty, NoLogo = true, Stylesheet = string.Empty }; Assert.ThrowsException(() => program.DoValidateAndExportModel(options, asMock.Object)); asMock.Verify(x => x.ImportUANodeSet(It.IsAny()), Times.Never); options = new Options() { Filenames = new List() { "" }, IMNamespace = "bleble", ModelDesignFileName = string.Empty, NoLogo = true, Stylesheet = string.Empty }; Assert.ThrowsException(() => program.DoValidateAndExportModel(options, asMock.Object)); asMock.Verify(x => x.ImportUANodeSet(It.IsAny()), Times.Never); options = new Options() { Filenames = new List() { @"XMLModels\DataTypeTest.NodeSet2.xml" }, IMNamespace = String.Empty, ModelDesignFileName = string.Empty, NoLogo = true, Stylesheet = string.Empty }; Assert.ThrowsException(() => program.DoValidateAndExportModel(options, asMock.Object)); asMock.Verify(x => x.ImportUANodeSet(It.IsAny()), Times.Never); } [TestMethod] public void FileNotFounTest() { Mock asMock = new Mock(); asMock.Setup(x => x.ImportUANodeSet(It.IsAny())); Program program = new Program(); Options options = new Options() { Filenames = new List() { "bleble" }, IMNamespace = "http://cas.eu/UA/CommServer/UnitTests/DataTypeTest", ModelDesignFileName = string.Empty, NoLogo = true, Stylesheet = string.Empty }; Assert.ThrowsException(() => program.DoValidateAndExportModel(options, asMock.Object)); asMock.Verify(x => x.ImportUANodeSet(It.IsAny()), Times.Once); } [TestMethod] public void ValidateExistingModelTest() { Mock asMock = new Mock(); asMock.Setup(x => x.ImportUANodeSet(It.IsAny())); Program program = new Program(); Options options = new Options() { Filenames = new List() { @"XMLModels\DataTypeTest.NodeSet2.xml" }, IMNamespace = "http://cas.eu/UA/CommServer/UnitTests/DataTypeTest", ModelDesignFileName = string.Empty, NoLogo = true, Stylesheet = string.Empty }; program.DoValidateAndExportModel(options, asMock.Object); asMock.Verify(x => x.ImportUANodeSet(It.IsAny()), Times.Exactly(2)); } } } ================================================ FILE: SemanticData/Tests/AddressSpaceComplianceTestToolUnitTests/Properties/AssemblyInfo.cs ================================================ //_______________________________________________________________ // Title : Assembly info for: AddressSpaceComplianceTestToolUnitTests // System : Microsoft VisualStudio 2015 / C# // // Copyright (C) 2022 Mariusz Postol LODZ POLAND // +48 608 619 899 // mpostol@cas.eu // https://github.com/mpostol/OPC-UA-OOI //_______________________________________________________________ using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; [assembly: AssemblyTitle("AddressSpaceComplianceTestToolUnitTests")] [assembly: AssemblyDescription("Command Line OPC UA Address Space Compliance Test Tool UnitTests")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("Mariusz Postol")] [assembly: AssemblyProduct("Object Oriented Internet")] [assembly: AssemblyCopyright("Copyright (C) 2022 Mariusz Postol LODZ POLAND")] [assembly: AssemblyTrademark("Object Oriented Internet")] [assembly: AssemblyCulture("")] [assembly: ComVisible(false)] [assembly: Guid("f0e97198-9cea-4cb8-a0b2-61eeca42eeca")] [assembly: AssemblyVersion("6.5.6.*")] [assembly: AssemblyFileVersion("6.5.6")] ================================================ FILE: SemanticData/Tests/AddressSpaceComplianceTestToolUnitTests/Properties/AssemblyInfo.tt ================================================ <#@ template debug="false" hostspecific="false" language="C#" #> <#@ output extension=".cs" #> //_______________________________________________________________ // Title : Assembly info for: <#=m_AssemblyTitle#> // System : Microsoft VisualStudio 2015 / C# // // <#=AssemblyCopyright#> // <#=Phone#> // <#=Email#> // <#=Url#> //_______________________________________________________________ using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; [assembly: AssemblyTitle("<#=m_AssemblyTitle#>")] [assembly: AssemblyDescription("Command Line OPC UA Address Space Compliance Test Tool UnitTests")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("<#=AssemblyCompany#>")] [assembly: AssemblyProduct("<#=SemanticDataProduct#>")] [assembly: AssemblyCopyright("<#=AssemblyCopyright#>")] [assembly: AssemblyTrademark("<#=ProductTrademark#>")] [assembly: AssemblyCulture("")] [assembly: ComVisible(false)] [assembly: Guid("f0e97198-9cea-4cb8-a0b2-61eeca42eeca")] [assembly: AssemblyVersion("<#= SemanticDataVersion #>.*")] [assembly: AssemblyFileVersion("<#= SemanticDataVersion #>")] <#@ include file = "..\..\..\..\CommonResources\T4Definitions\Model.t4" #> <#+ string m_AssemblyTitle = "AddressSpaceComplianceTestToolUnitTests"; #> ================================================ FILE: SemanticData/Tests/AddressSpaceComplianceTestToolUnitTests/SemanticData.AddressSpaceComplianceTestTool.UnitTests.csproj ================================================  Debug AnyCPU {37D26B63-74FE-45C6-9F61-251BDF69EDF7} Library Properties UAOOI.SemanticData.AddressSpaceTestTool.UnitTests AddressSpaceComplianceTestToolUnitTests v4.7.2 512 {3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} 10.0 $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) $(ProgramFiles)\Common Files\microsoft shared\VSTT\$(VisualStudioVersion)\UITestExtensionPackages False UnitTest true full false bin\Debug\ DEBUG;TRACE prompt 4 false IDE0001,IDE0002,IDE0003;IDE0049 pdbonly true bin\Release\ TRACE prompt 4 true OPCUAOOIKey.snk ..\..\..\packages\Castle.Core.5.0.0\lib\net462\Castle.Core.dll ..\..\..\packages\CommandLineParser.2.9.1\lib\net461\CommandLine.dll ..\..\..\packages\CommonServiceLocator.2.0.6\lib\net47\CommonServiceLocator.dll ..\..\..\packages\MSTest.TestFramework.2.2.10\lib\net45\Microsoft.VisualStudio.TestPlatform.TestFramework.dll ..\..\..\packages\MSTest.TestFramework.2.2.10\lib\net45\Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions.dll ..\..\..\packages\Moq.4.18.1\lib\net462\Moq.dll ..\..\..\packages\System.Runtime.CompilerServices.Unsafe.6.0.0\lib\net461\System.Runtime.CompilerServices.Unsafe.dll ..\..\..\packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll ..\..\..\packages\UAOOI.Common.Infrastructure.6.4.7\lib\netstandard2.0\UAOOI.Common.Infrastructure.dll True True AssemblyInfo.tt {05db9e60-b12b-4aa3-8a7c-514f87cff464} SemanticData.AddressSpaceComplianceTestTool {6D20785D-0451-46A9-9AC2-EC66B7C0D18A} SemanticData.InformationModelFactory {352378A0-8B2E-4679-BB44-FD0BCC8467D9} SemanticData.UANodeSetValidation PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest TextTemplatingFileGenerator AssemblyInfo.cs PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest False False False False This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. ================================================ FILE: SemanticData/Tests/AddressSpaceComplianceTestToolUnitTests/TraceSourceBaseUnitTest.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2021, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ using Microsoft.VisualStudio.TestTools.UnitTesting; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using UAOOI.SemanticData.AddressSpacePrototyping.Instrumentation; namespace UAOOI.SemanticData.AddressSpacePrototyping { [TestClass] public class TraceSourceBaseUnitTest { [TestMethod] public void AssemblyTraceEventTestMethod() { TraceSource tracer = new TraceSource("AddressSpacePrototyping"); Assert.AreEqual("AddressSpacePrototyping", tracer.Name, $"Actual tracer name: {tracer.Name}"); //Assert.AreEqual(1, Trace.Listeners.Count); Dictionary _listeners = tracer.Listeners.Cast().ToDictionary(x => x.Name); Assert.IsNotNull(_listeners); Assert.IsTrue(_listeners.ContainsKey("LogFile")); TraceListener _listener = _listeners["LogFile"]; Assert.IsNotNull(_listener); Assert.IsInstanceOfType(_listener, typeof(DelimitedListTraceListener)); DelimitedListTraceListener _advancedListener = _listener as DelimitedListTraceListener; Assert.IsNotNull(_advancedListener.Filter); Assert.IsInstanceOfType(_advancedListener.Filter, typeof(EventTypeFilter)); EventTypeFilter _eventTypeFilter = _advancedListener.Filter as EventTypeFilter; Assert.AreEqual(SourceLevels.All, _eventTypeFilter.EventType); string _testPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); Assert.AreEqual(Path.Combine(_testPath, @"asp.log"), _advancedListener.GetFileName()); } [TestMethod] public void LogFileExistsTest() { TraceSource tracer = new TraceSource("AddressSpacePrototyping"); TraceListener _listener = tracer.Listeners.Cast().Where(x => x.Name == "LogFile").First(); DelimitedListTraceListener _advancedListener = _listener as DelimitedListTraceListener; Assert.IsNotNull(_advancedListener); Assert.IsFalse(string.IsNullOrEmpty(_advancedListener.GetFileName())); FileInfo _logFileInfo = new FileInfo(_advancedListener.GetFileName()); long _startLength = _logFileInfo.Exists ? _logFileInfo.Length : 0; tracer.TraceEvent(TraceEventType.Information, 0, "LogFileExistsTest is executed"); Assert.IsFalse(string.IsNullOrEmpty(_advancedListener.GetFileName())); _logFileInfo.Refresh(); Assert.IsTrue(_logFileInfo.Exists); Assert.IsTrue(_logFileInfo.Length > _startLength); } } } ================================================ FILE: SemanticData/Tests/AddressSpaceComplianceTestToolUnitTests/XMLModels/Commsvr.UA.Examples.BoilersSet.NodeSet2.xml ================================================  http://commsvr.com/UA/Examples/BoilersSet http://tempuri.org/UA/Examples/BoilerType i=1 i=2 i=3 i=4 i=5 i=6 i=7 i=8 i=9 i=10 i=11 i=13 i=12 i=15 i=14 i=16 i=17 i=18 i=20 i=21 i=19 i=22 i=26 i=27 i=28 i=47 i=46 i=35 i=36 i=48 i=45 i=40 i=37 i=38 i=39 BoilersArea ns=1;i=81 ns=1;i=160 ns=1;i=239 ns=1;i=318 i=85 i=2253 ns=1;i=81 i=61 Boiler #1 ns=1;i=82 ns=1;i=97 ns=1;i=105 ns=1;i=113 ns=1;i=117 ns=1;i=121 ns=1;i=127 ns=1;i=1 ns=1;i=82 ns=1;i=97 ns=1;i=105 ns=1;i=127 ns=2;i=151 ns=1;i=1 Boiler #1: Pipe1001 ns=1;i=83 ns=1;i=90 ns=1;i=81 ns=1;i=83 ns=1;i=97 ns=2;i=120 ns=1;i=81 FlowTransmitter1 ns=1;i=84 ns=1;i=82 ns=2;i=50 ns=1;i=82 Output ns=1;i=88 ns=1;i=114 ns=1;i=123 i=2368 ns=1;i=83 EURange i=68 ns=1;i=84 Valve ns=1;i=91 ns=2;i=28 ns=1;i=82 Input ns=1;i=95 ns=1;i=116 i=2368 ns=1;i=90 EURange i=68 ns=1;i=91 Boiler #1: Drum1001 ns=1;i=98 ns=1;i=81 ns=1;i=82 ns=1;i=98 ns=1;i=105 ns=2;i=135 ns=1;i=81 LIX001 ns=1;i=99 ns=1;i=97 ns=2;i=43 ns=1;i=97 Output ns=1;i=103 ns=1;i=118 i=2368 ns=1;i=98 EURange i=68 ns=1;i=99 Boiler #1: Pipe1002 ns=1;i=106 ns=1;i=81 ns=1;i=97 ns=1;i=106 ns=2;i=143 ns=1;i=81 FTX002 ns=1;i=107 ns=1;i=105 ns=2;i=50 ns=1;i=105 Output ns=1;i=111 ns=1;i=124 i=2368 ns=1;i=106 EURange i=68 ns=1;i=107 Boiler #1: FC1001 ns=1;i=114 ns=1;i=115 ns=1;i=116 ns=2;i=39 ns=1;i=81 Measurement ns=1;i=84 i=68 ns=1;i=113 SetPoint ns=1;i=125 i=68 ns=1;i=113 ControlOut ns=1;i=91 i=68 ns=1;i=113 Boiler #1: LC1001 ns=1;i=118 ns=1;i=119 ns=1;i=120 ns=2;i=35 ns=1;i=81 Measurement ns=1;i=99 i=68 ns=1;i=117 SetPoint i=68 ns=1;i=117 ControlOut ns=1;i=122 i=68 ns=1;i=117 Boiler #1: CC1001 ns=1;i=122 ns=1;i=123 ns=1;i=124 ns=1;i=125 ns=1;i=126 ns=2;i=22 ns=1;i=81 Input1 ns=1;i=120 i=68 ns=1;i=121 Input2 ns=1;i=84 i=68 ns=1;i=121 Input3 ns=1;i=107 i=68 ns=1;i=121 ControlOut ns=1;i=115 i=68 ns=1;i=121 Description i=68 ns=1;i=121 Simulation ns=1;i=128 ns=1;i=133 ns=1;i=139 ns=1;i=141 ns=1;i=154 ns=1;i=155 ns=1;i=156 ns=1;i=157 ns=1;i=158 ns=1;i=159 ns=1;i=81 ns=2;i=57 ns=1;i=81 CurrentState ns=1;i=129 ns=1;i=131 i=2760 ns=1;i=127 Id i=68 ns=1;i=128 Number i=68 ns=1;i=128 LastTransition ns=1;i=134 ns=1;i=136 ns=1;i=137 i=2767 ns=1;i=127 Id i=68 ns=1;i=133 Number i=68 ns=1;i=133 TransitionTime i=68 ns=1;i=133 Deletable i=68 ns=1;i=127 RecycleCount i=68 ns=1;i=127 Start Causes the Program to transition from the Ready state to the Running state. ns=1;i=127 Suspend Causes the Program to transition from the Running state to the Suspended state. ns=1;i=127 Resume Causes the Program to transition from the Suspended state to the Running state. ns=1;i=127 Halt Causes the Program to transition from the Ready, Running or Suspended state to the Halted state. ns=1;i=127 Reset Causes the Program to transition from the Halted state to the Ready state. ns=1;i=127 UpdateRate The rate at which the simulation runs. i=68 ns=1;i=127 Boilers Second ns=1;i=161 ns=1;i=176 ns=1;i=184 ns=1;i=192 ns=1;i=196 ns=1;i=200 ns=1;i=206 ns=1;i=161 ns=1;i=176 ns=1;i=184 ns=1;i=206 ns=2;i=151 ns=1;i=1 Boiler #2: Pipe1001 ns=1;i=162 ns=1;i=169 ns=1;i=160 ns=1;i=162 ns=1;i=176 ns=2;i=120 ns=1;i=160 FlowTransmitter1 ns=1;i=163 ns=1;i=161 ns=2;i=50 ns=1;i=161 Output ns=1;i=167 ns=1;i=193 ns=1;i=202 i=2368 ns=1;i=162 EURange i=68 ns=1;i=163 Valve ns=1;i=170 ns=2;i=28 ns=1;i=161 Input ns=1;i=174 ns=1;i=195 i=2368 ns=1;i=169 EURange i=68 ns=1;i=170 Boiler #2: Drum1001 ns=1;i=177 ns=1;i=160 ns=1;i=161 ns=1;i=177 ns=1;i=184 ns=2;i=135 ns=1;i=160 LIX001 ns=1;i=178 ns=1;i=176 ns=2;i=43 ns=1;i=176 Output ns=1;i=182 ns=1;i=197 i=2368 ns=1;i=177 EURange i=68 ns=1;i=178 Boiler #2: Pipe1002 ns=1;i=185 ns=1;i=160 ns=1;i=176 ns=1;i=185 ns=2;i=143 ns=1;i=160 FTX002 ns=1;i=186 ns=1;i=184 ns=2;i=50 ns=1;i=184 Output ns=1;i=190 ns=1;i=203 i=2368 ns=1;i=185 EURange i=68 ns=1;i=186 Boiler #2: FC1001 ns=1;i=193 ns=1;i=194 ns=1;i=195 ns=2;i=39 ns=1;i=160 Measurement ns=1;i=163 i=68 ns=1;i=192 SetPoint ns=1;i=204 i=68 ns=1;i=192 ControlOut ns=1;i=170 i=68 ns=1;i=192 Boiler #2: LC1001 ns=1;i=197 ns=1;i=198 ns=1;i=199 ns=2;i=35 ns=1;i=160 Measurement ns=1;i=178 i=68 ns=1;i=196 SetPoint i=68 ns=1;i=196 ControlOut ns=1;i=201 i=68 ns=1;i=196 Boiler #2: CC1001 ns=1;i=201 ns=1;i=202 ns=1;i=203 ns=1;i=204 ns=1;i=205 ns=2;i=22 ns=1;i=160 Input1 ns=1;i=199 i=68 ns=1;i=200 Input2 ns=1;i=163 i=68 ns=1;i=200 Input3 ns=1;i=186 i=68 ns=1;i=200 ControlOut ns=1;i=194 i=68 ns=1;i=200 Description i=68 ns=1;i=200 Simulation ns=1;i=207 ns=1;i=212 ns=1;i=218 ns=1;i=220 ns=1;i=233 ns=1;i=234 ns=1;i=235 ns=1;i=236 ns=1;i=237 ns=1;i=238 ns=1;i=160 ns=2;i=57 ns=1;i=160 CurrentState ns=1;i=208 ns=1;i=210 i=2760 ns=1;i=206 Id i=68 ns=1;i=207 Number i=68 ns=1;i=207 LastTransition ns=1;i=213 ns=1;i=215 ns=1;i=216 i=2767 ns=1;i=206 Id i=68 ns=1;i=212 Number i=68 ns=1;i=212 TransitionTime i=68 ns=1;i=212 Deletable i=68 ns=1;i=206 RecycleCount i=68 ns=1;i=206 Start Causes the Program to transition from the Ready state to the Running state. ns=1;i=206 Suspend Causes the Program to transition from the Running state to the Suspended state. ns=1;i=206 Resume Causes the Program to transition from the Suspended state to the Running state. ns=1;i=206 Halt Causes the Program to transition from the Ready, Running or Suspended state to the Halted state. ns=1;i=206 Reset Causes the Program to transition from the Halted state to the Ready state. ns=1;i=206 UpdateRate The rate at which the simulation runs. i=68 ns=1;i=206 Boiler #3 ns=1;i=240 ns=1;i=255 ns=1;i=263 ns=1;i=271 ns=1;i=275 ns=1;i=279 ns=1;i=285 ns=1;i=240 ns=1;i=255 ns=1;i=263 ns=1;i=285 ns=2;i=151 ns=1;i=1 Boiler #3: Pipe1001 ns=1;i=241 ns=1;i=248 ns=1;i=239 ns=1;i=241 ns=1;i=255 ns=2;i=120 ns=1;i=239 FlowTransmitter1 ns=1;i=242 ns=1;i=240 ns=2;i=50 ns=1;i=240 Output ns=1;i=246 ns=1;i=272 ns=1;i=281 i=2368 ns=1;i=241 EURange i=68 ns=1;i=242 Valve ns=1;i=249 ns=2;i=28 ns=1;i=240 Input ns=1;i=253 ns=1;i=274 i=2368 ns=1;i=248 EURange i=68 ns=1;i=249 Boiler #3: Drum1001 ns=1;i=256 ns=1;i=239 ns=1;i=240 ns=1;i=256 ns=1;i=263 ns=2;i=135 ns=1;i=239 LIX001 ns=1;i=257 ns=1;i=255 ns=2;i=43 ns=1;i=255 Output ns=1;i=261 ns=1;i=276 i=2368 ns=1;i=256 EURange i=68 ns=1;i=257 Boiler #3: Pipe1002 ns=1;i=264 ns=1;i=239 ns=1;i=255 ns=1;i=264 ns=2;i=143 ns=1;i=239 FTX002 ns=1;i=265 ns=1;i=263 ns=2;i=50 ns=1;i=263 Output ns=1;i=269 ns=1;i=282 i=2368 ns=1;i=264 EURange i=68 ns=1;i=265 Boiler #3: FC1001 ns=1;i=272 ns=1;i=273 ns=1;i=274 ns=2;i=39 ns=1;i=239 Measurement ns=1;i=242 i=68 ns=1;i=271 SetPoint ns=1;i=283 i=68 ns=1;i=271 ControlOut ns=1;i=249 i=68 ns=1;i=271 Boiler #3: LC1001 ns=1;i=276 ns=1;i=277 ns=1;i=278 ns=2;i=35 ns=1;i=239 Measurement ns=1;i=257 i=68 ns=1;i=275 SetPoint i=68 ns=1;i=275 ControlOut ns=1;i=280 i=68 ns=1;i=275 Boiler #3: CC1001 ns=1;i=280 ns=1;i=281 ns=1;i=282 ns=1;i=283 ns=1;i=284 ns=2;i=22 ns=1;i=239 Input1 ns=1;i=278 i=68 ns=1;i=279 Input2 ns=1;i=242 i=68 ns=1;i=279 Input3 ns=1;i=265 i=68 ns=1;i=279 ControlOut ns=1;i=273 i=68 ns=1;i=279 Description i=68 ns=1;i=279 Simulation ns=1;i=286 ns=1;i=291 ns=1;i=297 ns=1;i=299 ns=1;i=312 ns=1;i=313 ns=1;i=314 ns=1;i=315 ns=1;i=316 ns=1;i=317 ns=1;i=239 ns=2;i=57 ns=1;i=239 CurrentState ns=1;i=287 ns=1;i=289 i=2760 ns=1;i=285 Id i=68 ns=1;i=286 Number i=68 ns=1;i=286 LastTransition ns=1;i=292 ns=1;i=294 ns=1;i=295 i=2767 ns=1;i=285 Id i=68 ns=1;i=291 Number i=68 ns=1;i=291 TransitionTime i=68 ns=1;i=291 Deletable i=68 ns=1;i=285 RecycleCount i=68 ns=1;i=285 Start Causes the Program to transition from the Ready state to the Running state. ns=1;i=285 Suspend Causes the Program to transition from the Running state to the Suspended state. ns=1;i=285 Resume Causes the Program to transition from the Suspended state to the Running state. ns=1;i=285 Halt Causes the Program to transition from the Ready, Running or Suspended state to the Halted state. ns=1;i=285 Reset Causes the Program to transition from the Halted state to the Ready state. ns=1;i=285 UpdateRate The rate at which the simulation runs. i=68 ns=1;i=285 Boiler #4 ns=1;i=319 ns=1;i=334 ns=1;i=342 ns=1;i=350 ns=1;i=354 ns=1;i=358 ns=1;i=364 ns=1;i=319 ns=1;i=334 ns=1;i=342 ns=1;i=364 ns=2;i=151 ns=1;i=1 Boiler #4: Pipe1001 ns=1;i=320 ns=1;i=327 ns=1;i=318 ns=1;i=320 ns=1;i=334 ns=2;i=120 ns=1;i=318 FlowTransmitter1 ns=1;i=321 ns=1;i=319 ns=2;i=50 ns=1;i=319 Output ns=1;i=325 ns=1;i=351 ns=1;i=360 i=2368 ns=1;i=320 EURange i=68 ns=1;i=321 Valve ns=1;i=328 ns=2;i=28 ns=1;i=319 Input ns=1;i=332 ns=1;i=353 i=2368 ns=1;i=327 EURange i=68 ns=1;i=328 Boiler #4: Drum1001 ns=1;i=335 ns=1;i=318 ns=1;i=319 ns=1;i=335 ns=1;i=342 ns=2;i=135 ns=1;i=318 LIX001 ns=1;i=336 ns=1;i=334 ns=2;i=43 ns=1;i=334 Output ns=1;i=340 ns=1;i=355 i=2368 ns=1;i=335 EURange i=68 ns=1;i=336 Boiler #4: Pipe1002 ns=1;i=343 ns=1;i=318 ns=1;i=334 ns=1;i=343 ns=2;i=143 ns=1;i=318 FTX002 ns=1;i=344 ns=1;i=342 ns=2;i=50 ns=1;i=342 Output ns=1;i=348 ns=1;i=361 i=2368 ns=1;i=343 EURange i=68 ns=1;i=344 Boiler #4: FC1001 ns=1;i=351 ns=1;i=352 ns=1;i=353 ns=2;i=39 ns=1;i=318 Measurement ns=1;i=321 i=68 ns=1;i=350 SetPoint ns=1;i=362 i=68 ns=1;i=350 ControlOut ns=1;i=328 i=68 ns=1;i=350 Boiler #4: LC1001 ns=1;i=355 ns=1;i=356 ns=1;i=357 ns=2;i=35 ns=1;i=318 Measurement ns=1;i=336 i=68 ns=1;i=354 SetPoint i=68 ns=1;i=354 ControlOut ns=1;i=359 i=68 ns=1;i=354 Boiler #4: CC1001 ns=1;i=359 ns=1;i=360 ns=1;i=361 ns=1;i=362 ns=1;i=363 ns=2;i=22 ns=1;i=318 Input1 ns=1;i=357 i=68 ns=1;i=358 Input2 ns=1;i=321 i=68 ns=1;i=358 Input3 ns=1;i=344 i=68 ns=1;i=358 ControlOut ns=1;i=352 i=68 ns=1;i=358 Description i=68 ns=1;i=358 Simulation ns=1;i=365 ns=1;i=370 ns=1;i=376 ns=1;i=378 ns=1;i=391 ns=1;i=392 ns=1;i=393 ns=1;i=394 ns=1;i=395 ns=1;i=396 ns=1;i=318 ns=2;i=57 ns=1;i=318 CurrentState ns=1;i=366 ns=1;i=368 i=2760 ns=1;i=364 Id i=68 ns=1;i=365 Number i=68 ns=1;i=365 LastTransition ns=1;i=371 ns=1;i=373 ns=1;i=374 i=2767 ns=1;i=364 Id i=68 ns=1;i=370 Number i=68 ns=1;i=370 TransitionTime i=68 ns=1;i=370 Deletable i=68 ns=1;i=364 RecycleCount i=68 ns=1;i=364 Start Causes the Program to transition from the Ready state to the Running state. ns=1;i=364 Suspend Causes the Program to transition from the Running state to the Suspended state. ns=1;i=364 Resume Causes the Program to transition from the Suspended state to the Running state. ns=1;i=364 Halt Causes the Program to transition from the Ready, Running or Suspended state to the Halted state. ns=1;i=364 Reset Causes the Program to transition from the Halted state to the Ready state. ns=1;i=364 UpdateRate The rate at which the simulation runs. i=68 ns=1;i=364 Drums i=85 ns=1;i=97 i=58 Pipes i=85 ns=1;i=82 ns=1;i=105 ns=1;i=161 ns=1;i=184 ns=1;i=240 ns=1;i=263 ns=1;i=319 ns=1;i=342 i=58 ================================================ FILE: SemanticData/Tests/AddressSpaceComplianceTestToolUnitTests/XMLModels/DataTypeTest.ModelDesign.xml ================================================  http://opcfoundation.org/UA/ http://cas.eu/UA/CommServer/UnitTests/DataTypeTest http://cas.eu/UA/CommServer/UnitTests/ReferenceTest Enumeration DataType derived from abstract type i=7616 1 Field3 Abstract structure Derived from Number ================================================ FILE: SemanticData/Tests/AddressSpaceComplianceTestToolUnitTests/XMLModels/DataTypeTest.NodeSet2.xml ================================================  http://cas.eu/UA/CommServer/UnitTests/DataTypeTest i=1 i=2 i=3 i=4 i=5 i=6 i=7 i=8 i=9 i=10 i=11 i=13 i=12 i=15 i=14 i=16 i=17 i=18 i=20 i=21 i=19 i=22 i=26 i=27 i=28 i=47 i=46 i=35 i=36 i=48 i=45 i=40 i=37 i=38 i=39 AbstractEnumerationDataType ns=1;i=10 i=29 EnumStrings i=68 i=78 ns=1;i=9 Field1 Field2 EnumerationDataType Enumeration DataType derived from abstract type ns=1;i=12 ns=1;i=9 EnumValues i=68 i=78 ns=1;i=11 i=7616 1 Field3 AbstractStructure Abstract structure i=22 DerivedStructure ns=1;i=13 Derived from Number Default XML ns=1;i=13 ns=1;i=15 i=76 Default XML ns=1;i=22 ns=1;i=24 i=76 DataTypeTest ns=1;i=4 ns=1;i=15 ns=1;i=24 i=92 i=72 PHhzOnNjaGVtYQ0KICB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEi DQogIHhtbG5zOnVhPSJodHRwOi8vb3BjZm91bmRhdGlvbi5vcmcvVUEvMjAwOC8wMi9UeXBlcy54 c2QiDQogIHhtbG5zOnRucz0iaHR0cDovL2Nhcy5ldS9VQS9Db21tU2VydmVyL1VuaXRUZXN0cy9E YXRhVHlwZVRlc3QiDQogIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2Nhcy5ldS9VQS9Db21tU2Vy dmVyL1VuaXRUZXN0cy9EYXRhVHlwZVRlc3QiDQogIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlm aWVkIg0KPg0KICA8eHM6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL29wY2ZvdW5kYXRpb24ub3Jn L1VBLyIgLz4NCg0KICA8eHM6c2ltcGxlVHlwZSAgbmFtZT0iQWJzdHJhY3RFbnVtZXJhdGlvbkRh dGFUeXBlIj4NCiAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIj4NCiAgICAgIDx4 czplbnVtZXJhdGlvbiB2YWx1ZT0iRmllbGQxXzAiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24g dmFsdWU9IkZpZWxkMl8xIiAvPg0KICAgIDwveHM6cmVzdHJpY3Rpb24+DQogIDwveHM6c2ltcGxl VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iQWJzdHJhY3RFbnVtZXJhdGlvbkRhdGFUeXBlIiB0 eXBlPSJ0bnM6QWJzdHJhY3RFbnVtZXJhdGlvbkRhdGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4 VHlwZSBuYW1lPSJMaXN0T2ZBYnN0cmFjdEVudW1lcmF0aW9uRGF0YVR5cGUiPg0KICAgIDx4czpz ZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkFic3RyYWN0RW51bWVyYXRpb25EYXRh VHlwZSIgdHlwZT0idG5zOkFic3RyYWN0RW51bWVyYXRpb25EYXRhVHlwZSIgbWluT2NjdXJzPSIw IiBtYXhPY2N1cnM9InVuYm91bmRlZCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNv bXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZBYnN0cmFjdEVudW1lcmF0aW9u RGF0YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZBYnN0cmFjdEVudW1lcmF0aW9uRGF0YVR5cGUiIG5p bGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOnNpbXBsZVR5cGUgIG5hbWU9IkVu dW1lcmF0aW9uRGF0YVR5cGUiPg0KICAgIDx4czphbm5vdGF0aW9uPg0KICAgICAgPHhzOmRvY3Vt ZW50YXRpb24+RW51bWVyYXRpb24gRGF0YVR5cGUgZGVyaXZlZCBmcm9tIGFic3RyYWN0IHR5cGU8 L3hzOmRvY3VtZW50YXRpb24+DQogICAgPC94czphbm5vdGF0aW9uPg0KICAgIDx4czpyZXN0cmlj dGlvbiBiYXNlPSJ4czpzdHJpbmciPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJGaWVs ZDNfMSIgLz4NCiAgICA8L3hzOnJlc3RyaWN0aW9uPg0KICA8L3hzOnNpbXBsZVR5cGU+DQogIDx4 czplbGVtZW50IG5hbWU9IkVudW1lcmF0aW9uRGF0YVR5cGUiIHR5cGU9InRuczpFbnVtZXJhdGlv bkRhdGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZFbnVtZXJhdGlv bkRhdGFUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJF bnVtZXJhdGlvbkRhdGFUeXBlIiB0eXBlPSJ0bnM6RW51bWVyYXRpb25EYXRhVHlwZSIgbWluT2Nj dXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8 L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZFbnVtZXJhdGlvbkRh dGFUeXBlIiB0eXBlPSJ0bnM6TGlzdE9mRW51bWVyYXRpb25EYXRhVHlwZSIgbmlsbGFibGU9InRy dWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iQWJzdHJhY3RTdHJ1 Y3R1cmUiPg0KICAgIDx4czphbm5vdGF0aW9uPg0KICAgICAgPHhzOmRvY3VtZW50YXRpb24+QWJz dHJhY3Qgc3RydWN0dXJlPC94czpkb2N1bWVudGF0aW9uPg0KICAgIDwveHM6YW5ub3RhdGlvbj4N CiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJOdW1iZXIiIHR5cGU9 InVhOlZhcmlhbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hz OmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJBYnN0cmFjdFN0cnVjdHVyZSIgdHlw ZT0idG5zOkFic3RyYWN0U3RydWN0dXJlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJM aXN0T2ZBYnN0cmFjdFN0cnVjdHVyZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVs ZW1lbnQgbmFtZT0iQWJzdHJhY3RTdHJ1Y3R1cmUiIHR5cGU9InRuczpBYnN0cmFjdFN0cnVjdHVy ZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+ DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQg bmFtZT0iTGlzdE9mQWJzdHJhY3RTdHJ1Y3R1cmUiIHR5cGU9InRuczpMaXN0T2ZBYnN0cmFjdFN0 cnVjdHVyZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5 cGUgbmFtZT0iRGVyaXZlZFN0cnVjdHVyZSI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVk PSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpBYnN0cmFjdFN0cnVjdHVy ZSI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJO dW1iZXIiIHR5cGU9InhzOmludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICA8L3hzOnNlcXVl bmNlPg0KICAgICAgPC94czpleHRlbnNpb24+DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAg PC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iRGVyaXZlZFN0cnVjdHVyZSIg dHlwZT0idG5zOkRlcml2ZWRTdHJ1Y3R1cmUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9 Ikxpc3RPZkRlcml2ZWRTdHJ1Y3R1cmUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czpl bGVtZW50IG5hbWU9IkRlcml2ZWRTdHJ1Y3R1cmUiIHR5cGU9InRuczpEZXJpdmVkU3RydWN0dXJl IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4N CiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBu YW1lPSJMaXN0T2ZEZXJpdmVkU3RydWN0dXJlIiB0eXBlPSJ0bnM6TGlzdE9mRGVyaXZlZFN0cnVj dHVyZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KPC94czpzY2hlbWE+ NamespaceUri A URI that uniquely identifies the dictionary. i=68 ns=1;i=2 http://cas.eu/UA/CommServer/UnitTests/DataTypeTest AbstractStructure i=69 ns=1;i=2 //xs:element[@name='AbstractStructure'] DerivedStructure i=69 ns=1;i=2 //xs:element[@name='DerivedStructure'] Default Binary ns=1;i=13 ns=1;i=19 i=76 Default Binary ns=1;i=22 ns=1;i=28 i=76 DataTypeTest ns=1;i=7 ns=1;i=19 ns=1;i=28 i=93 i=72 PG9wYzpUeXBlRGljdGlvbmFyeQ0KICB4bWxuczpvcGM9Imh0dHA6Ly9vcGNmb3VuZGF0aW9uLm9y Zy9CaW5hcnlTY2hlbWEvIg0KICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1M U2NoZW1hLWluc3RhbmNlIg0KICB4bWxuczp1YT0iaHR0cDovL29wY2ZvdW5kYXRpb24ub3JnL1VB LyINCiAgeG1sbnM6dG5zPSJodHRwOi8vY2FzLmV1L1VBL0NvbW1TZXJ2ZXIvVW5pdFRlc3RzL0Rh dGFUeXBlVGVzdCINCiAgRGVmYXVsdEJ5dGVPcmRlcj0iTGl0dGxlRW5kaWFuIg0KICBUYXJnZXRO YW1lc3BhY2U9Imh0dHA6Ly9jYXMuZXUvVUEvQ29tbVNlcnZlci9Vbml0VGVzdHMvRGF0YVR5cGVU ZXN0Ig0KPg0KICA8IS0tIFRoaXMgRmlsZSB3YXMgZ2VuZXJhdGVkIG9uIDIwMTUtMDQtMDMgYW5k IHN1cHBvcnRzIHRoZSBzcGVjaWZpY2F0aW9ucyBzdXBwb3J0ZWQgYnkgdmVyc2lvbiAxLjIuMjYu MjgxNDYgb2YgdGhlIE9QQyBVQSBkZWxpdmVyYWJsZXMuIC0tPg0KICA8b3BjOkltcG9ydCBOYW1l c3BhY2U9Imh0dHA6Ly9vcGNmb3VuZGF0aW9uLm9yZy9VQS8iIExvY2F0aW9uPSIuQmluYXJ5U2No ZW1hLmJzZCIvPg0KDQogIDxvcGM6RW51bWVyYXRlZFR5cGUgTmFtZT0iQWJzdHJhY3RFbnVtZXJh dGlvbkRhdGFUeXBlIiBMZW5ndGhJbkJpdHM9IjMyIj4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1 ZSBOYW1lPSJGaWVsZDEiIFZhbHVlPSIwIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5h bWU9IkZpZWxkMiIgVmFsdWU9IjEiIC8+DQogIDwvb3BjOkVudW1lcmF0ZWRUeXBlPg0KDQogIDxv cGM6RW51bWVyYXRlZFR5cGUgTmFtZT0iRW51bWVyYXRpb25EYXRhVHlwZSIgTGVuZ3RoSW5CaXRz PSIzMiI+DQogICAgPG9wYzpEb2N1bWVudGF0aW9uPkVudW1lcmF0aW9uIERhdGFUeXBlIGRlcml2 ZWQgZnJvbSBhYnN0cmFjdCB0eXBlPC9vcGM6RG9jdW1lbnRhdGlvbj4NCiAgICA8b3BjOkVudW1l cmF0ZWRWYWx1ZSBOYW1lPSJGaWVsZDEiIFZhbHVlPSIwIiAvPg0KICAgIDxvcGM6RW51bWVyYXRl ZFZhbHVlIE5hbWU9IkZpZWxkMiIgVmFsdWU9IjEiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFs dWUgTmFtZT0iRmllbGQzIiBWYWx1ZT0iMSIgLz4NCiAgPC9vcGM6RW51bWVyYXRlZFR5cGU+DQoN CiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJBYnN0cmFjdFN0cnVjdHVyZSIgQmFzZVR5cGU9 InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpEb2N1bWVudGF0aW9uPkFic3RyYWN0IHN0 cnVjdHVyZTwvb3BjOkRvY3VtZW50YXRpb24+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOdW1iZXIi IFR5cGVOYW1lPSJ1YTpWYXJpYW50IiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8 b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkRlcml2ZWRTdHJ1Y3R1cmUiIEJhc2VUeXBlPSJ0bnM6 QWJzdHJhY3RTdHJ1Y3R1cmUiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTnVtYmVyIiBUeXBlTmFt ZT0idWE6VmFyaWFudCIgU291cmNlVHlwZT0idG5zOkFic3RyYWN0U3RydWN0dXJlIiAvPg0KICAg IDxvcGM6RmllbGQgTmFtZT0iTnVtYmVyIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICA8L29w YzpTdHJ1Y3R1cmVkVHlwZT4NCg0KPC9vcGM6VHlwZURpY3Rpb25hcnk+ NamespaceUri A URI that uniquely identifies the dictionary. i=68 ns=1;i=5 http://cas.eu/UA/CommServer/UnitTests/DataTypeTest AbstractStructure i=69 ns=1;i=5 AbstractStructure DerivedStructure i=69 ns=1;i=5 DerivedStructure ================================================ FILE: SemanticData/Tests/AddressSpaceComplianceTestToolUnitTests/XMLModels/ObjectTypeTest.NodeSet2.xml ================================================  http://cas.eu/UA/CommServer/UnitTests/ObjectTypeTest i=1 i=2 i=3 i=4 i=5 i=6 i=7 i=8 i=9 i=10 i=11 i=13 i=12 i=15 i=14 i=16 i=17 i=18 i=20 i=21 i=19 i=22 i=26 i=27 i=28 i=47 i=46 i=35 i=36 i=48 i=45 i=40 i=37 i=38 i=39 ComplexObjectType ns=1;i=308 ns=1;i=309 ns=1;i=289 ns=1;i=295 ns=1;i=306 i=2004 ChildObject i=58 i=11510 ns=1;i=196 ChildProperty ns=1;i=289 i=68 i=78 ns=1;i=196 BrowseName4node1109 ns=1;i=293 ns=1;i=309 i=2368 i=78 ns=1;i=196 EURange i=68 i=78 ns=1;i=289 ChildMethod ns=1;i=299 ns=1;i=300 i=78 ns=1;i=196 InputArguments i=68 i=78 ns=1;i=295 i=297 Input1 i=6 -1 i=297 Input2 i=6 -1 OutputArguments i=68 i=78 ns=1;i=295 i=297 Output1 i=6 -1 NonExecutableMethod i=78 ns=1;i=196 Flow to type It is test ReferenceType i=32 FlowFrom ChildMethodComplexObjectType ns=1;i=304 ns=1;i=305 InputArguments i=68 ns=1;i=303 i=297 Input1 i=6 -1 i=297 Input2 i=6 -1 OutputArguments i=68 ns=1;i=303 i=297 Output1 i=6 -1 NonExecutableMethodComplexObjectType ================================================ FILE: SemanticData/Tests/AddressSpaceComplianceTestToolUnitTests/XMLModels/ReferenceTest.NodeSet2.xml ================================================  http://cas.eu/UA/CommServer/UnitTests/ReferenceTest i=1 i=2 i=3 i=4 i=5 i=6 i=7 i=8 i=9 i=10 i=11 i=13 i=12 i=15 i=14 i=16 i=17 i=18 i=20 i=21 i=19 i=22 i=26 i=27 i=28 i=47 i=46 i=35 i=36 i=48 i=45 i=40 i=37 i=38 i=39 ReferenceTypeTest i=46 FromSomwhere ================================================ FILE: SemanticData/Tests/AddressSpaceComplianceTestToolUnitTests/XMLModels/VariableTypeTest.NodeSet2.xml ================================================  http://cas.eu/UA/CommServer/UnitTests/VariableTypeTest i=1 i=2 i=3 i=4 i=5 i=6 i=7 i=8 i=9 i=10 i=11 i=13 i=12 i=15 i=14 i=16 i=17 i=18 i=20 i=21 i=19 i=22 i=26 i=27 i=28 i=47 i=46 i=35 i=36 i=48 i=45 i=40 i=37 i=38 i=39 ComplexVariableType ns=1;i=14 i=2368 VariableChild i=68 i=78 ns=1;i=8 ArrayVariableType i=63 SimpleVariableWithValueType i=63 1 ================================================ FILE: SemanticData/Tests/AddressSpaceComplianceTestToolUnitTests/XMLModels/tempuri.org.UA.Examples.BoilerType.NodeSet2.xml ================================================  http://tempuri.org/UA/Examples/BoilerType i=1 i=2 i=3 i=4 i=5 i=6 i=7 i=8 i=9 i=10 i=11 i=13 i=12 i=15 i=14 i=16 i=17 i=18 i=20 i=21 i=19 i=22 i=26 i=27 i=28 i=47 i=46 i=35 i=36 i=48 i=45 i=40 i=37 i=38 i=39 FlowTo A reference that indicates a flow between two objects. i=32 FlowFrom HotFlowTo A reference that indicates a high temperature flow between two objects. ns=1;i=1 HotFlowFrom SignalTo A reference that indicates an electrical signal between two variables. i=32 SignalFrom GenericControllerType A generic PID controller ns=1;i=5 ns=1;i=6 ns=1;i=7 i=58 Measurement i=68 i=78 ns=1;i=4 SetPoint i=68 i=78 ns=1;i=4 ControlOut i=68 i=78 ns=1;i=4 GenericSensorType A generic sensor that read a process value. ns=1;i=9 i=58 Output ns=1;i=13 i=2368 i=78 ns=1;i=8 EURange i=68 i=78 ns=1;i=9 GenericActuatorType Represents a piece of equipment that causes some action to occur. ns=1;i=16 i=58 Input ns=1;i=20 i=2368 i=78 ns=1;i=15 EURange i=68 i=78 ns=1;i=16 CustomControllerType A custom PID controller with 3 inputs ns=1;i=23 ns=1;i=24 ns=1;i=25 ns=1;i=26 ns=1;i=27 i=58 Input1 i=68 i=78 ns=1;i=22 Input2 i=68 i=78 ns=1;i=22 Input3 i=68 i=78 ns=1;i=22 ControlOut i=68 i=78 ns=1;i=22 Description i=68 i=78 ns=1;i=22 ValveType An actuator that controls the flow through a pipe. ns=1;i=15 LevelControllerType A controller for the level of a fluid in a drum. ns=1;i=4 FlowControllerType A controller for the flow of a fluid through a pipe. ns=1;i=4 LevelIndicatorType A sensor that reports the level of a liquid in a tank. ns=1;i=8 FlowTransmitterType A sensor that reports the flow of a liquid through a pipe. ns=1;i=8 BoilerStateMachineType A program that produces simulated values for a running boiler. ns=1;i=119 i=2391 UpdateRate The rate at which the simulation runs. i=68 i=78 ns=1;i=57 BoilerInputPipeType ns=1;i=121 ns=1;i=128 ns=1;i=121 i=61 FlowTransmitter1 ns=1;i=122 ns=1;i=50 i=78 ns=1;i=120 Output ns=1;i=126 i=2368 i=78 ns=1;i=121 EURange i=68 i=78 ns=1;i=122 Valve ns=1;i=129 ns=1;i=28 i=78 ns=1;i=120 Input ns=1;i=133 i=2368 i=78 ns=1;i=128 EURange i=68 i=78 ns=1;i=129 BoilerDrumType ns=1;i=136 ns=1;i=136 i=61 LIX001 ns=1;i=137 ns=1;i=43 i=78 ns=1;i=135 Output ns=1;i=141 i=2368 i=78 ns=1;i=136 EURange i=68 i=78 ns=1;i=137 BoilerOutputPipeType ns=1;i=144 ns=1;i=144 i=61 FTX002 ns=1;i=145 ns=1;i=50 i=78 ns=1;i=143 Output ns=1;i=149 i=2368 i=78 ns=1;i=144 EURange i=68 i=78 ns=1;i=145 BoilerType A boiler used to produce steam for a turbine. ns=1;i=152 ns=1;i=167 ns=1;i=175 ns=1;i=183 ns=1;i=187 ns=1;i=191 ns=1;i=197 ns=1;i=152 ns=1;i=167 ns=1;i=175 ns=1;i=197 i=58 InputPipe ns=1;i=153 ns=1;i=160 ns=1;i=153 ns=1;i=167 ns=1;i=120 i=78 ns=1;i=151 FlowTransmitter1 ns=1;i=154 ns=1;i=152 ns=1;i=50 i=78 ns=1;i=152 Output ns=1;i=158 ns=1;i=184 ns=1;i=193 i=2368 i=78 ns=1;i=153 EURange i=68 i=78 ns=1;i=154 Valve ns=1;i=161 ns=1;i=28 i=78 ns=1;i=152 Input ns=1;i=165 ns=1;i=186 i=2368 i=78 ns=1;i=160 EURange i=68 i=78 ns=1;i=161 Drum ns=1;i=168 ns=1;i=152 ns=1;i=168 ns=1;i=175 ns=1;i=135 i=78 ns=1;i=151 LIX001 ns=1;i=169 ns=1;i=167 ns=1;i=43 i=78 ns=1;i=167 Output ns=1;i=173 ns=1;i=188 i=2368 i=78 ns=1;i=168 EURange i=68 i=78 ns=1;i=169 OutputPipe ns=1;i=176 ns=1;i=167 ns=1;i=176 ns=1;i=143 i=78 ns=1;i=151 FTX002 ns=1;i=177 ns=1;i=175 ns=1;i=50 i=78 ns=1;i=175 Output ns=1;i=181 ns=1;i=194 i=2368 i=78 ns=1;i=176 EURange i=68 i=78 ns=1;i=177 FlowController ns=1;i=184 ns=1;i=185 ns=1;i=186 ns=1;i=39 i=78 ns=1;i=151 Measurement ns=1;i=154 i=68 i=78 ns=1;i=183 SetPoint ns=1;i=195 i=68 i=78 ns=1;i=183 ControlOut ns=1;i=161 i=68 i=78 ns=1;i=183 LevelController ns=1;i=188 ns=1;i=189 ns=1;i=190 ns=1;i=35 i=78 ns=1;i=151 Measurement ns=1;i=169 i=68 i=78 ns=1;i=187 SetPoint i=68 i=78 ns=1;i=187 ControlOut ns=1;i=192 i=68 i=78 ns=1;i=187 CustomController ns=1;i=192 ns=1;i=193 ns=1;i=194 ns=1;i=195 ns=1;i=196 ns=1;i=22 i=78 ns=1;i=151 Input1 ns=1;i=190 i=68 i=78 ns=1;i=191 Input2 ns=1;i=154 i=68 i=78 ns=1;i=191 Input3 ns=1;i=177 i=68 i=78 ns=1;i=191 ControlOut ns=1;i=185 i=68 i=78 ns=1;i=191 Description i=68 i=78 ns=1;i=191 Simulation ns=1;i=198 ns=1;i=203 ns=1;i=209 ns=1;i=211 ns=1;i=224 ns=1;i=225 ns=1;i=226 ns=1;i=227 ns=1;i=228 ns=1;i=229 ns=1;i=57 i=78 ns=1;i=151 CurrentState ns=1;i=199 ns=1;i=201 i=2760 i=78 ns=1;i=197 Id i=68 i=78 ns=1;i=198 Number i=68 i=78 ns=1;i=198 LastTransition ns=1;i=204 ns=1;i=206 ns=1;i=207 i=2767 i=78 ns=1;i=197 Id i=68 i=78 ns=1;i=203 Number i=68 i=78 ns=1;i=203 TransitionTime i=68 i=78 ns=1;i=203 Deletable i=68 i=78 ns=1;i=197 RecycleCount i=68 i=78 ns=1;i=197 Start Causes the Program to transition from the Ready state to the Running state. i=78 ns=1;i=197 Suspend Causes the Program to transition from the Running state to the Suspended state. i=78 ns=1;i=197 Resume Causes the Program to transition from the Suspended state to the Running state. i=78 ns=1;i=197 Halt Causes the Program to transition from the Ready, Running or Suspended state to the Halted state. i=78 ns=1;i=197 Reset Causes the Program to transition from the Halted state to the Ready state. i=78 ns=1;i=197 UpdateRate The rate at which the simulation runs. i=68 i=78 ns=1;i=197 ================================================ FILE: SemanticData/Tests/AddressSpaceComplianceTestToolUnitTests/packages.config ================================================  ================================================ FILE: SemanticData/Tests/DataMangement.playlist ================================================ ================================================ FILE: SemanticData/Tests/README.MD ================================================ # Tests folder description This folder contains unit tests used to validate the code and the validation engine. ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/AddressSpaceContextUnitTest.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2022, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ using Microsoft.VisualStudio.TestTools.UnitTesting; using Moq; using System; using System.Collections.Generic; using System.IO; using System.Linq; using UAOOI.SemanticData.AddressSpace.Abstractions; using UAOOI.SemanticData.UANodeSetValidation.DataSerialization; using UAOOI.SemanticData.UANodeSetValidation.Diagnostic; using UAOOI.SemanticData.UANodeSetValidation.Helpers; using UAOOI.SemanticData.UANodeSetValidation.UAInformationModel; using UAOOI.SemanticData.UANodeSetValidation.UnitTest.Helpers; using UAOOI.SemanticData.UANodeSetValidation.XML; namespace UAOOI.SemanticData.UANodeSetValidation { [TestClass] public class AddressSpaceContextUnitTest { [TestMethod] [TestCategory("AddressSpaceContext")] public void AddressSpaceContextConstructorTest() { List _invalidNodes = new List(); TracedAddressSpaceContext _asp = new TracedAddressSpaceContext(); _asp.UTAddressSpaceCheckConsistency(x => _invalidNodes.Add(x)); _asp.TestConsistency(0); _asp.UTReferencesCheckConsistency((x, y, z, v) => Assert.Fail()); _asp.TestConsistency(0); } [TestMethod] [TestCategory("AddressSpaceContext")] public void AddressSpaceContextContentCheck() { TracedAddressSpaceContext _asp = new TracedAddressSpaceContext(); List _content = new List(); _asp.UTTryGetUANodeContext(VariableTypes.PropertyType, x => _content.Add(x)); Assert.AreEqual(1, _content.Count); _content.Clear(); _asp.UTTryGetUANodeContext(Objects.RootFolder, x => _content.Add(x)); Assert.AreEqual(1, _content.Count); Assert.IsTrue(new NodeId(Objects.RootFolder) == _content[0].NodeIdContext); _content.Clear(); _asp.UTTryGetUANodeContext(Objects.ObjectsFolder, x => _content.Add(x)); Assert.AreEqual(1, _content.Count); Assert.IsTrue(new NodeId(Objects.ObjectsFolder) == _content[0].NodeIdContext); _content.Clear(); _asp.UTTryGetUANodeContext(ObjectTypes.FolderType, x => _content.Add(x)); Assert.AreEqual(1, _content.Count); Assert.IsTrue(new NodeId(ObjectTypes.FolderType) == _content[0].NodeIdContext); _asp.TestConsistency(0); } [TestMethod] [TestCategory("AddressSpaceContext")] public void AddressSpaceReferencesContentCheck() { TracedAddressSpaceContext _asp = new TracedAddressSpaceContext(); List _content = new List(); _content.Clear(); _asp.UTGetReferences(ObjectIds.RootFolder, x => _content.Add(x)); Assert.AreEqual(4, _content.Count); //RootFolder _content.Clear(); _asp.UTGetReferences(ObjectIds.ObjectsFolder, x => _content.Add(x)); Assert.AreEqual(3, _content.Count); _asp.TestConsistency(0); } [TestMethod] [TestCategory("AddressSpaceContext")] public void AddressSpaceContextImportUANodeSetNull() { Mock mock = new Mock(); IAddressSpaceContext _as = new AddressSpaceContext(mock.Object); UANodeSet _ns = null; Assert.ThrowsException(() => _as.ImportUANodeSet(_ns)); FileInfo _fi = null; Assert.ThrowsException(() => UANodeSet.ReadModelFile(_fi)); _fi = new FileInfo("NotExistingFileName.xml"); Assert.IsFalse(_fi.Exists); Assert.ThrowsException(() => UANodeSet.ReadModelFile(_fi)); } [TestMethod] public void ImportUANodeSetTest() { UANodeSet newNodeSet = TestData.CreateNodeSetModel(); newNodeSet.Items = new UANode[] { new UAObjectType() { NodeId = "ns=1;i=12", BrowseName = "1:VehicleType", References = new Reference[] { new Reference() { ReferenceType = ReferenceTypeIds.HasSubtype.ToString(), IsForward = false, Value = "i=58" } }, }, new UAVariable() { NodeId = "ns=1;i=13", BrowseName = "buildDate", ParentNodeId="ns=1;i=12", DataType="DateTime", References = new Reference[] { new Reference() { ReferenceType=ReferenceTypeIds.HasProperty.ToString(), IsForward=false, Value = "ns=1;i=12" }, new Reference() { ReferenceType =ReferenceTypeIds.HasTypeDefinition.ToString(), Value = "i=63" }, new Reference() { ReferenceType = ReferenceTypeIds.HasModellingRule.ToString(), Value = "i=78" } } } }; TracedAddressSpaceContext tracedAddressSpace = new TracedAddressSpaceContext(newNodeSet); List references = new List(); tracedAddressSpace.UTGetReferences(NodeId.Parse(newNodeSet.Items[0].NodeId), x => references.Add(x)); Assert.AreEqual(1, references.Count); Assert.AreEqual(ReferenceKindEnum.HasProperty, references[0].ReferenceKind); references.Clear(); tracedAddressSpace.UTGetReferences(NodeId.Parse(newNodeSet.Items[1].NodeId), x => references.Add(x)); Assert.AreEqual(2, references.Count); Assert.AreEqual(ReferenceKindEnum.HasTypeDefinition, references[0].ReferenceKind); Assert.AreEqual(ReferenceKindEnum.HasModellingRule, references[1].ReferenceKind); } [TestMethod] [TestCategory("AddressSpaceContext")] public void AddressSpaceContextValidateAndExportModelOpcUa() { TracedAddressSpaceContext _asp = new TracedAddressSpaceContext(); _asp.ValidateAndExportModel(new Uri(UAInformationModel.Namespaces.OpcUa)); _asp.TestConsistency(0); } [TestMethod] [TestCategory("AddressSpaceContext")] [ExpectedException(typeof(ArgumentOutOfRangeException))] public void AddressSpaceContextValidateAndExportModelWrongNamespace() { TracedAddressSpaceContext _asp = new TracedAddressSpaceContext(); _asp.ValidateAndExportModel(new Uri("http://www.example.com/afterthought/box")); } [TestMethod] [TestCategory("AddressSpaceContext")] public void AddressSpaceContextValidateAndExportIndex0() { TracedAddressSpaceContext _asp = new TracedAddressSpaceContext(); IEnumerable _returnValue = null; _asp.UTValidateAndExportModel(0, x => _returnValue = x); Assert.AreEqual(4071, (_returnValue.Count())); _asp.TestConsistency(0); _asp.UTValidateAndExportModel(1, x => _returnValue = x); Assert.AreEqual(0, _returnValue.Count()); _asp.TestConsistency(0); } [TestMethod] [TestCategory("AddressSpaceContext")] public void ImportObjectTest() { UANodeSet _newNodeSet = TestData.CreateNodeSetModel(); TracedAddressSpaceContext _asp = new TracedAddressSpaceContext(_newNodeSet); _asp.UTAddressSpaceCheckConsistency(x => { Assert.Fail(); }); _asp.TestConsistency(1); List _content = new List(); _asp.UTGetReferences(ObjectIds.RootFolder, x => _content.Add(x)); Assert.AreEqual(4, _content.Count); //RootFolder _content.Clear(); _asp.UTGetReferences(ObjectIds.ObjectsFolder, x => _content.Add(x)); Assert.AreEqual(4, _content.Count); IEnumerable _toExport = _content.Where(x => x.TargetNode.NodeIdContext.NamespaceIndex == 1).Select(x => x.TargetNode); Assert.AreEqual(1, _toExport.Count()); _asp.TestConsistency(1); } [TestMethod] public void GetMyReferencesTest() { UANodeSet newNodeSet = TestData.CreateNodeSetModel(); newNodeSet.Items = new UANode[] { new UAObjectType() { NodeId = "ns=1;i=12", BrowseName = "1:VehicleType", References = new Reference[] { new Reference() { ReferenceType = ReferenceTypeIds.HasSubtype.ToString(), IsForward = false, Value = "i=58" } }, }, new UAVariable() { NodeId = "ns=1;i=13", BrowseName = "buildDate", ParentNodeId="ns=1;i=12", DataType="DateTime", References = new Reference[] { new Reference() { ReferenceType=ReferenceTypeIds.HasProperty.ToString(), IsForward=false, Value = "ns=1;i=12" }, new Reference() { ReferenceType =ReferenceTypeIds.HasTypeDefinition.ToString(), Value = "i=63" }, new Reference() { ReferenceType = ReferenceTypeIds.HasModellingRule.ToString(), Value = "i=78" } } } }; TracedAddressSpaceContext asp = new TracedAddressSpaceContext(newNodeSet); IUANodeContext uaObjectType = asp.GetOrCreateNodeContext(NodeId.Parse(newNodeSet.Items[0].NodeId), x => { Assert.Fail(); return null; }); Assert.IsNotNull(uaObjectType); IEnumerable myReferences = ((IAddressSpaceBuildContext)asp.AddressSpace).GetMyReferences(uaObjectType); Assert.AreEqual(1, myReferences.Count()); List _listOfMyReferences = myReferences.ToList(); Assert.AreEqual("buildDate", _listOfMyReferences[0].TargetNode.UANode.BrowseName.Name); Assert.AreEqual("buildDate", _listOfMyReferences[0].ParentNode.UANode.BrowseName.Name); Assert.AreEqual("VehicleType", _listOfMyReferences[0].SourceNode.UANode.BrowseName.Name); Assert.AreEqual(ReferenceKindEnum.HasProperty, _listOfMyReferences[0].ReferenceKind); } [TestMethod] public void GetBaseTypesTest() { TracedAddressSpaceContext tasp = new TracedAddressSpaceContext(); List inheritanceChain = new List(); IUANodeContext hasPropertyNode = tasp.GetOrCreateNodeContext(ReferenceTypeIds.HasProperty, x => { Assert.Fail(); return null; }); tasp.GetBaseTypes(hasPropertyNode, inheritanceChain); Assert.AreEqual(5, inheritanceChain.Count); Assert.AreEqual(ReferenceTypeIds.HasProperty.ToString(), inheritanceChain[0].NodeIdContext.ToString()); Assert.AreEqual(ReferenceTypeIds.References.ToString(), inheritanceChain[4].NodeIdContext.ToString()); } } } ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/DataSerialization/ExtensionsUnitTest.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2021, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using Microsoft.VisualStudio.TestTools.UnitTesting; using System; using System.Collections.Generic; using System.Diagnostics; using UAOOI.SemanticData.BuildingErrorsHandling; using UAOOI.SemanticData.UANodeSetValidation.Helpers; namespace UAOOI.SemanticData.UANodeSetValidation.DataSerialization { [TestClass] public class ExtensionsUnitTest { [TestMethod] public void ParseBrowseNameNodeIdNullTest() { Assert.ThrowsException(() => "".ParseBrowseName(null, x => Assert.Fail())); Assert.ThrowsException(() => "".ParseBrowseName(NodeId.Null, x => Assert.Fail())); } [TestMethod] public void ParseBrowseNameBrowseNameEmptyTest() { List traceLog = new List(); QualifiedName name = "".ParseBrowseName(new NodeId("i=105"), x => traceLog.Add(x)); Assert.IsNotNull(name); Assert.IsFalse(String.IsNullOrEmpty(name.Name)); Assert.IsTrue(name.Name.StartsWith("EmptyBrowseName_")); Assert.IsTrue(name.NamespaceIndexSpecified); Assert.AreEqual(1, traceLog.Count); Debug.WriteLine(traceLog[0].ToString()); Assert.AreEqual(Focus.NodeClass, traceLog[0].BuildError.Focus); Assert.AreEqual(BuildError.EmptyBrowseName.Identifier, traceLog[0].BuildError.Identifier); } [TestMethod] public void ParseBrowseNameBrowseNameSyntaxErrorTest() { List traceLog = new List(); QualifiedName name = "@^#^#^".ParseBrowseName(new NodeId("i=105"), x => traceLog.Add(x)); Assert.IsNotNull(name); Assert.IsFalse(String.IsNullOrEmpty(name.Name)); Assert.IsTrue(name.Name.StartsWith("EmptyBrowseName_")); Assert.IsTrue(name.NamespaceIndexSpecified); Assert.AreEqual(1, traceLog.Count); Debug.WriteLine(traceLog[0].ToString()); Assert.AreEqual(Focus.DataEncoding, traceLog[0].BuildError.Focus); Assert.AreEqual(BuildError.QualifiedNameInvalidSyntax.Identifier, traceLog[0].BuildError.Identifier); } [TestMethod] public void ParseBrowseNameMyNamespaceIndex0TestMethod() { List traceLog = new List(); QualifiedName name = "Id".ParseBrowseName(new NodeId("ns=1;i=28"), x => traceLog.Add(x)); Assert.IsNotNull(name); Assert.IsFalse(String.IsNullOrEmpty(name.Name)); Assert.AreEqual("Id", name.Name); Assert.IsTrue(name.NamespaceIndexSpecified); Assert.AreEqual(0, name.NamespaceIndex); Assert.AreEqual(0, traceLog.Count); } [TestMethod] public void ParseBrowseNameTest() { List traceLog = new List(); QualifiedName name = " 123:Id".ParseBrowseName(new NodeId("ns=1;i=28"), x => traceLog.Add(x)); Assert.IsNotNull(name); Assert.IsFalse(String.IsNullOrEmpty(name.Name)); Assert.AreEqual("Id", name.Name); Assert.IsTrue(name.NamespaceIndexSpecified); Assert.AreEqual(123, name.NamespaceIndex); Assert.AreEqual(0, traceLog.Count); } [TestMethod] public void ParseNodeIdValidTest() { //Numeric NodeId _ni = "i=13".ParseNodeId(x => Assert.Fail()); Assert.IsNotNull(_ni); _ni = "i=0".ParseNodeId(x => Assert.Fail()); Assert.IsNotNull(_ni); //STRING _ni = "ns=10;s=Hello:World".ParseNodeId(x => Assert.Fail()); Assert.IsNotNull(_ni); //GUID _ni = "g=09087e75-8e5e-499b-954f-f2a9603db28a".ParseNodeId(x => Assert.Fail()); Assert.IsNotNull(_ni); //OPAQUE _ni = "ns=1;b=M/RbKBsRVkePCePcx24oRA==".ParseNodeId(x => Assert.Fail()); Assert.IsNotNull(_ni); //?? Default string - should be not valid ? _ni = "M/RbKBsRVkePCePcx24oRA==".ParseNodeId(x => Assert.Fail()); Assert.IsNotNull(_ni); } [TestMethod] public void NodeIdNonValidNumericTest1() { TraceDiagnosticFixture inMemoryTrace = new Helpers.TraceDiagnosticFixture(); NodeId _ni = "ns=10;i=-1".ParseNodeId(inMemoryTrace.TraceDiagnostic); //this example is in the specification as valid Assert.AreEqual(1, inMemoryTrace.DiagnosticCounter); Assert.AreEqual(1, inMemoryTrace.TraceList.Count); Assert.AreEqual(BuildError.NodeIdInvalidSyntax.Identifier, inMemoryTrace.TraceList[0].BuildError.Identifier); } [TestMethod] public void NodeIdNonValidNumericTest2() { TraceDiagnosticFixture inMemoryTrace = new Helpers.TraceDiagnosticFixture(); NodeId _ni = "ns=-10;i=01".ParseNodeId(inMemoryTrace.TraceDiagnostic); //this example is in the specification as valid Assert.AreEqual(1, inMemoryTrace.DiagnosticCounter); Assert.AreEqual(1, inMemoryTrace.TraceList.Count); Assert.AreEqual(BuildError.NodeIdInvalidSyntax.Identifier, inMemoryTrace.TraceList[0].BuildError.Identifier); } } } ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/DataSerialization/NodeIdUnitTest.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using Microsoft.VisualStudio.TestTools.UnitTesting; using System; using System.Collections.Generic; using System.Linq; using UAOOI.SemanticData.UANodeSetValidation.UAInformationModel; namespace UAOOI.SemanticData.UANodeSetValidation.DataSerialization { [TestClass] public class NodeIdUnitTest { [TestMethod] [TestCategory("Serialization")] public void NodeIdValidTestMethod1() { //Numeric NodeId _ni = NodeId.Parse("i=13"); Assert.IsNotNull(_ni); _ni = NodeId.Parse("i=0"); Assert.IsNotNull(_ni); //STRING _ni = NodeId.Parse("ns=10;s=Hello:World"); Assert.IsNotNull(_ni); //GUID _ni = NodeId.Parse("g=09087e75-8e5e-499b-954f-f2a9603db28a"); Assert.IsNotNull(_ni); //OPAQUE _ni = NodeId.Parse("ns=1;b=M/RbKBsRVkePCePcx24oRA=="); Assert.IsNotNull(_ni); //?? Default string - should be not valid ? _ni = NodeId.Parse("M/RbKBsRVkePCePcx24oRA=="); Assert.IsNotNull(_ni); } [TestMethod] [TestCategory("Serialization")] [ExpectedException(typeof(ServiceResultException))] public void NodeIdNonValidNumericTestMethod1() { NodeId _ni; _ni = NodeId.Parse("ns=10;i=-1"); //this example is in the specification as valid } [TestMethod] [TestCategory("Serialization")] [ExpectedException(typeof(ServiceResultException))] public void NodeIdNonValidNumericTestMethod2() { NodeId _ni; _ni = NodeId.Parse("ns=-10;i=01"); } [TestMethod] [TestCategory("Serialization")] public void NodeIdOperatorTestMethod1() { NodeId _property = new NodeId(VariableTypes.PropertyType); Assert.AreNotSame(_property, VariableTypeIds.PropertyType); Assert.IsTrue(_property == VariableTypeIds.PropertyType); Assert.IsTrue(_property.Equals(VariableTypeIds.PropertyType)); } [TestMethod] [TestCategory("Serialization")] public void NodeIdCompareToTestMethod() { NodeId _property = new NodeId(VariableTypes.PropertyType); Assert.AreNotSame(_property, VariableTypeIds.PropertyType); int _res = _property.CompareTo(VariableTypeIds.PropertyType); Assert.AreEqual(0, _res); } [TestMethod] [TestCategory("Serialization")] public void NodeIdToStringTestMethod() { NodeId _property = new NodeId(VariableTypes.PropertyType); Assert.AreNotSame(_property, VariableTypeIds.PropertyType); string _res = _property.ToString(); Assert.AreEqual("i=68", _res); } [TestMethod] [TestCategory("Serialization")] public void NodeIdToStringTestMethod2() { NodeId _property = new NodeId(68, 1); Assert.AreNotSame(_property, VariableTypeIds.PropertyType); string _res = _property.ToString(); Assert.AreEqual("ns=1;i=68", _res); } [TestMethod] [TestCategory("Serialization")] public void NodeIdToStringTestMethod3() { System.Guid _gd = new System.Guid("e08edc80-e771-43ff-b8f6-1fbb62ae5cda"); NodeId _property = new NodeId(_gd, 1); string _res = _property.ToString(); Assert.AreEqual("ns=1;g=e08edc80-e771-43ff-b8f6-1fbb62ae5cda", _res); } [TestMethod] [TestCategory("Serialization")] public void NodeIdDictionaryTestMethod() { Dictionary _dc = new Dictionary(); _dc.Add(VariableTypeIds.PropertyType, VariableTypeIds.PropertyType.ToString()); Assert.IsTrue(_dc.ContainsKey(VariableTypeIds.PropertyType)); } [TestMethod] [TestCategory("Serialization")] public void NodeIdDictionaryTestMethod2() { Dictionary _dc = new Dictionary(); _dc.Add(VariableTypeIds.PropertyType.ToString(), VariableTypeIds.PropertyType); _dc.Add(VariableTypeIds.AnalogItemType.ToString(), VariableTypeIds.AnalogItemType); _dc.Add(VariableTypeIds.ArrayItemType.ToString(), VariableTypeIds.ArrayItemType); _dc.Add(VariableTypeIds.BaseDataVariableType.ToString(), VariableTypeIds.BaseDataVariableType); _dc.Add(VariableTypeIds.BaseVariableType.ToString(), VariableTypeIds.BaseVariableType); NodeId _id = NodeId.Null; string _ni = "g=09087e75-8e5e-499b-954f-f2a9603db28a"; Assert.IsTrue(_dc.TryGetValue(VariableTypeIds.PropertyType.ToString(), out _id)); Assert.IsFalse(_dc.TryGetValue(NodeId.Parse(_ni).ToString(), out _id)); _id = NodeId.Parse(_ni); Assert.IsNotNull(_id); _dc.Add(_id.ToString(), _id); Assert.IsTrue(_dc.TryGetValue(VariableTypeIds.PropertyType.ToString(), out _id)); NodeId _nid = NodeId.Parse(_ni); Assert.IsNotNull(_nid); Assert.AreEqual(1, _dc.Where>(x => x.Key == _nid.ToString()).Count>()); Assert.IsTrue(_dc.TryGetValue(_nid.ToString(), out _id)); Assert.IsTrue(_dc.ContainsKey(_nid.ToString())); } [TestMethod] [TestCategory("Serialization")] [ExpectedException(typeof(ArgumentException))] public void NodeIdDictionaryTestMethod3() { Dictionary _dc = new Dictionary(); _dc.Add(VariableTypeIds.PropertyType, VariableTypeIds.PropertyType.ToString()); _dc.Add(VariableTypeIds.AnalogItemType, VariableTypeIds.AnalogItemType.ToString()); _dc.Add(VariableTypeIds.ArrayItemType, VariableTypeIds.ArrayItemType.ToString()); _dc.Add(VariableTypeIds.BaseDataVariableType, VariableTypeIds.BaseDataVariableType.ToString()); _dc.Add(VariableTypeIds.BaseVariableType, VariableTypeIds.BaseVariableType.ToString()); _dc.Add(VariableTypeIds.PropertyType, VariableTypeIds.PropertyType.ToString()); } } } ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/DataSerialization/QualifiedNameUnitTest.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using Microsoft.VisualStudio.TestTools.UnitTesting; namespace UAOOI.SemanticData.UANodeSetValidation.DataSerialization { [TestClass] public class QualifiedNameUnitTest { [TestMethod] public void NotEqualOperatorTest() { QualifiedName _qualifiedName = null; Assert.IsFalse(_qualifiedName != null); _qualifiedName = new QualifiedName("name", 1); Assert.IsTrue(_qualifiedName != null); } [TestMethod] public void EqualOperatorTest() { QualifiedName _qualifiedName = null; Assert.IsTrue(_qualifiedName == null); _qualifiedName = new QualifiedName("name", 1); Assert.IsFalse(_qualifiedName == null); } [TestMethod] public void EqualsTest() { QualifiedName _qualifiedName = new QualifiedName("name", 1); Assert.IsTrue(_qualifiedName.NamespaceIndexSpecified); Assert.IsFalse(_qualifiedName.Equals(null)); Assert.IsTrue(_qualifiedName.Equals(_qualifiedName)); QualifiedName _qualifiedNameSecond = new QualifiedName("name", 1); Assert.IsTrue(_qualifiedName.Equals(_qualifiedNameSecond)); _qualifiedNameSecond = new QualifiedName("NAME", 1); Assert.IsFalse(_qualifiedName.Equals(_qualifiedNameSecond)); _qualifiedNameSecond = new QualifiedName("name", 0); Assert.IsFalse(_qualifiedName.Equals(_qualifiedNameSecond)); } [TestMethod] public void ToStringTest() { QualifiedName _qualifiedName = new QualifiedName("name", 1); Assert.AreEqual($"1:name", _qualifiedName.ToString()); _qualifiedName = new QualifiedName("name"); Assert.AreEqual("name", _qualifiedName.ToString()); _qualifiedName = new QualifiedName(); Assert.AreEqual("", _qualifiedName.ToString()); } [TestMethod] public void QualifiedNameConstructorTest() { string name = "Default Binary"; QualifiedName _qn = new QualifiedName("Default Binary"); Assert.IsNotNull(_qn); //Assert.AreEqual(_qn.NamespaceIndex, 0); Assert.IsFalse(_qn.NamespaceIndexSpecified); Assert.AreEqual(_qn.Name, name); } [TestMethod] public void OperatorsTest() { QualifiedName _qn1 = new QualifiedName("Default Binary"); QualifiedName _qn2 = new QualifiedName("Default Binary"); Assert.IsTrue(_qn1 != null); Assert.IsTrue(null != _qn1); Assert.IsTrue(_qn1 == _qn2); Assert.IsTrue(_qn2 == _qn1); _qn2 = new QualifiedName("Something else"); Assert.IsTrue(_qn1 != _qn2); _qn2 = new QualifiedName("1:Default Binary"); Assert.IsTrue(_qn1 != _qn2); } [TestMethod] public void QualifiedNameParseTest() { QualifiedName _qn = QualifiedName.Parse("Name"); Assert.IsNotNull(_qn); Assert.AreEqual(_qn.NamespaceIndex, 0); Assert.IsTrue(_qn.NamespaceIndexSpecified); Assert.AreEqual(_qn.Name, "Name"); } [TestMethod] public void QualifiedNameParse0NamespaceIndexTest() { QualifiedName _qn = QualifiedName.Parse("0:Name"); Assert.IsNotNull(_qn); Assert.IsTrue(_qn.NamespaceIndexSpecified); Assert.AreEqual(_qn.NamespaceIndex, 0); Assert.AreEqual(_qn.Name, "Name"); } [TestMethod] public void QualifiedNameParseDefaultNamespaceTestMethod() { AssertQualifiedNameParse("0:http://opcfoundation.org/UA/", @"http://opcfoundation.org/UA/", 0); AssertQualifiedNameParse("Byte", "Byte", 0); AssertQualifiedNameParse("1:Default Binary", "Default Binary", 1); AssertQualifiedNameParse(":Default Binary", "Default Binary", 0); AssertQualifiedNameParse("1:Default Binary", "Default Binary", 1); AssertQualifiedNameParse("Default Binary", "Default Binary", 0); AssertQualifiedNameParse(" 1:Default Binary ", "Default Binary ", 1); AssertQualifiedNameParse(" Default Binary ", "Default Binary ", 0); AssertQualifiedNameParse(" Default Binary ", "Default Binary ", 0); AssertQualifiedNameParse(" 1:", "", 1); AssertQualifiedNameParse(" 1:[Default Binary]", "[Default Binary]", 1); AssertQualifiedNameParse(" 1:{Default Binary}", "{Default Binary}", 1); AssertQualifiedNameParse(" 1:Default Binary {n}", "Default Binary {n}", 1); } private void AssertQualifiedNameParse(string text, string expectedName, ushort expectedNamespaceIndex) { QualifiedName newQualifiedName = QualifiedName.Parse(text); Assert.IsNotNull(newQualifiedName); Assert.IsTrue(newQualifiedName.NamespaceIndexSpecified); Assert.AreEqual(expectedNamespaceIndex, newQualifiedName.NamespaceIndex); Assert.AreEqual(expectedName, newQualifiedName.Name); } } } ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/ExtensionsUnitTest.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using Microsoft.VisualStudio.TestTools.UnitTesting; using UAOOI.SemanticData.UANodeSetValidation.DataSerialization; namespace UAOOI.SemanticData.UANodeSetValidation { [TestClass] public class ExtensionsUnitTest { [TestMethod] public void ArrayDimensionsToStringTestMethod() { uint[] _testingData = new uint[] { 1, 2, 3, 4, 5 }; string _result = _testingData.ArrayDimensionsToString(); Assert.AreEqual("1, 2, 3, 4, 5", _result); } [TestMethod] public void LocalizedTextArraysEqualTest() { LocalizedText[] _first = null; Assert.IsTrue(_first.LocalizedTextArraysEqual(_first)); Assert.IsFalse(_first.LocalizedTextArraysEqual(new LocalizedText[] { })); Assert.IsFalse((new LocalizedText[] { }).LocalizedTextArraysEqual(null)); _first = new LocalizedText[] { }; Assert.IsTrue(_first.LocalizedTextArraysEqual(new LocalizedText[] { })); _first = new LocalizedText[] { new LocalizedText() { Locale = "Locale1", Text = "Value1" }, new LocalizedText() { Locale = "Locale2", Text = "Value2" } }; Assert.IsTrue(_first.LocalizedTextArraysEqual(new LocalizedText[] { new LocalizedText() { Locale = "Locale2", Text = "Value2" }, new LocalizedText() { Locale = "Locale1", Text = "Value1" } })); } [TestMethod] public void RolePermissionsEqualsTest() { XML.RolePermission[] _first = null; Assert.IsTrue(_first.RolePermissionsEquals(_first)); Assert.IsFalse(_first.RolePermissionsEquals(new XML.RolePermission[] { })); _first = new XML.RolePermission[] { }; Assert.IsTrue(_first.RolePermissionsEquals(new XML.RolePermission[] { })); _first = new XML.RolePermission[] { new XML.RolePermission() { Permissions = 1234, Value = "Value1" }, new XML.RolePermission() { Permissions = 4321, Value = "Value2" } }; Assert.IsTrue(_first.RolePermissionsEquals(new XML.RolePermission[] { new XML.RolePermission() { Permissions = 4321, Value = "Value2" }, new XML.RolePermission() { Permissions = 1234, Value = "Value1" } })); } } } ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/Helpers/TestData.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2021, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using Microsoft.VisualStudio.TestTools.UnitTesting; using Moq; using System; using UAOOI.SemanticData.BuildingErrorsHandling; using UAOOI.SemanticData.UANodeSetValidation.DataSerialization; using UAOOI.SemanticData.UANodeSetValidation.UAInformationModel; using UAOOI.SemanticData.UANodeSetValidation.XML; namespace UAOOI.SemanticData.UANodeSetValidation.UnitTest.Helpers { internal static class TestData { public static UANodeSet CreateNodeSetModel() { UANodeSet _ns = new UANodeSet() { NamespaceUris = new string[] { @"http://cas.eu/UA/Demo/" }, Aliases = new NodeIdAlias[] { new NodeIdAlias() { Alias = "Boolean", Value = "i=1" }, new NodeIdAlias() { Alias = "HasSubtype", Value = "i=45" } }, Items = new UANode[] { CreateUAObject() } }; return _ns; } public static UAObject CreateUAObject() { return new UAObject() { NodeId = "ns=1;i=1", BrowseName = "1:NewUAObject", DisplayName = new XML.LocalizedText[] { new XML.LocalizedText() { Value = "New UA Object" } }, References = new Reference[] { new Reference() { ReferenceType = ReferenceTypeIds.HasTypeDefinition.ToString(), IsForward = true, Value = ObjectTypeIds.BaseObjectType.ToString() }, new Reference() { ReferenceType = ReferenceTypeIds.Organizes.ToString(), IsForward= false, Value = "i=85" } }, // UAInstance ParentNodeId = string.Empty, // UAObject EventNotifier = 0x01, }; } public static UAReferenceType CreateUAReferenceType() { return new UAReferenceType() { NodeId = "ns=1;i=985", BrowseName = "1:FlowTo", DisplayName = new XML.LocalizedText[] { new XML.LocalizedText() { Value = "FlowTo" } }, Symmetric = true, References = new Reference[] { new Reference() { ReferenceType = "HasSubtype", IsForward = false, Value = "i=32" } } }; } internal static UANodeType Recalculate(this UANodeType node) where UANodeType : UANode { Mock modelMock = new Mock(); modelMock.Setup(x => x.ImportNodeId(It.IsAny(), It.IsAny>())).Returns>((q, w) => NodeId.Parse(q)); modelMock.Setup(x => x.ImportBrowseName(It.IsAny(), It.IsAny(), It.IsAny>())).Returns>((a, b, c) => (QualifiedName.Parse(a), NodeId.Parse(b))); node.RecalculateNodeIds(modelMock.Object, message => Assert.Fail()); return node; } } } ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/Helpers/TraceDiagnosticFixture.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2021, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System.Collections.Generic; using System.Diagnostics; using UAOOI.SemanticData.BuildingErrorsHandling; namespace UAOOI.SemanticData.UANodeSetValidation.Helpers { internal class TraceDiagnosticFixture { internal readonly List TraceList = new List(); internal int DiagnosticCounter = 0; internal void Clear() { DiagnosticCounter = 0; TraceList.Clear(); } internal void TraceDiagnostic(TraceMessage msg) { Debug.WriteLine(msg.ToString()); if (msg.BuildError.Focus == Focus.Diagnostic) DiagnosticCounter++; else TraceList.Add(msg); } } } ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/Helpers/TracedAddressSpaceContext.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2022, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ using Microsoft.VisualStudio.TestTools.UnitTesting; using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using UAOOI.SemanticData.AddressSpace.Abstractions; using UAOOI.SemanticData.BuildingErrorsHandling; using UAOOI.SemanticData.InformationModelFactory; using UAOOI.SemanticData.UANodeSetValidation.DataSerialization; using UAOOI.SemanticData.UANodeSetValidation.Diagnostic; using UAOOI.SemanticData.UANodeSetValidation.XML; namespace UAOOI.SemanticData.UANodeSetValidation.Helpers { /// /// Traced Address Space /// Implements the interface /// /// internal class TracedAddressSpaceContext { /// /// Setup new instance /// - creates /// - reads standard model /// - reads custom model /// /// Custom model for testing purpose internal TracedAddressSpaceContext(IUANodeSet iUANodeSet) : this() { Assert.IsNotNull(iUANodeSet); AddressSpace.ImportUANodeSet(iUANodeSet); } /// /// Setup new instance /// - creates /// - reads standard model /// - reads custom model /// /// Custom model for testing purpose internal TracedAddressSpaceContext(string path) : this() { FileInfo testDataFileInfo = new FileInfo(path); Assert.IsTrue(testDataFileInfo.Exists); IUANodeSet iUANodeSet = UANodeSet.ReadModelFile(testDataFileInfo); Assert.IsNotNull(iUANodeSet); AddressSpace.ImportUANodeSet(iUANodeSet); } /// /// Setup new instance /// - creates /// - reads standard model /// internal TracedAddressSpaceContext() { AddressSpace = AddressSpaceFactory.AddressSpace(Log); AddressSpace.ImportUANodeSet(UANodeSet.ReadUADefinedTypes()); } internal TraceMessage this[int i] => Log.TraceList[i]; internal IAddressSpaceContext AddressSpace { get; private set; } internal void UTAddressSpaceCheckConsistency(Action action) { ((AddressSpaceContext)AddressSpace).UTAddressSpaceCheckConsistency(action); } internal void UTTryGetUANodeContext(DataSerialization.NodeId nodeId, Action returnValue) { ((AddressSpaceContext)AddressSpace).UTTryGetUANodeContext(nodeId, returnValue); } internal void ValidateAndExportModel(Uri targetNamespace, IModelFactory factory = null) { AddressSpace.ValidateAndExportModel(targetNamespace, factory); } internal void UTReferencesCheckConsistency(Action action) { ((AddressSpaceContext)AddressSpace).UTReferencesCheckConsistency(action); } internal void UTGetReferences(NodeId rootFolder, Action value) { ((AddressSpaceContext)AddressSpace).UTGetReferences(rootFolder, value); } internal void UTValidateAndExportModel(int nameSpaceIndex, Action> value) { ((AddressSpaceContext)AddressSpace).UTValidateAndExportModel(nameSpaceIndex, value); } internal IUANodeContext GetOrCreateNodeContext(NodeId nodeId, Func createUAModelContext) { return ((AddressSpaceContext)AddressSpace).GetOrCreateNodeContext(nodeId, createUAModelContext); } internal void GetBaseTypes(IUANodeContext hasPropertyNode, List inheritanceChain) { ((AddressSpaceContext)AddressSpace).GetBaseTypes(hasPropertyNode, inheritanceChain); } internal int Where(Func predicate) { return Log.TraceList.Where(predicate).Count(); } internal void TestConsistency(int errorsCounter) { Assert.AreEqual(errorsCounter, Log.TraceList.Count); } internal void Clear() { Log.Clear(); } #region private instrumentation private class BuildErrorsHandling : IBuildErrorsHandling { internal void Clear() { Errors = 0; TraceList.Clear(); } internal List TraceList = new List(); #region IBuildErrorsHandling public int Errors { get; set; } = 0; public void TraceData(TraceEventType eventType, int id, object data) { throw new NotImplementedException($"{nameof(TraceData)} must not be used"); } public void WriteTraceMessage(TraceMessage traceMessage) { Console.WriteLine(traceMessage.ToString()); if (traceMessage.BuildError.Focus == Focus.Diagnostic) return; Errors++; TraceList.Add(traceMessage); } #endregion IBuildErrorsHandling } private BuildErrorsHandling Log = new BuildErrorsHandling(); #endregion private instrumentation } } ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/InformationModelFactoryUnitTest.cs ================================================  using Microsoft.VisualStudio.TestTools.UnitTesting; using UAOOI.SemanticData.InformationModelFactory; using UAOOI.SemanticData.UANodeSetValidation.InformationModelFactory; namespace UAOOI.SemanticData.UANodeSetValidation { [TestClass] public class InformationModelFactoryUnitTest { [ClassInitialize] public static void InformationModelFactoryClassInitialize(TestContext context) { m_FactoryBase = new InformationModelFactoryBase(); Assert.IsNotNull(m_FactoryBase); } [TestMethod] [TestCategory("Code")] public void InformationModelFactoryIExportReferenceTypeFactoryTestMethod() { IReferenceTypeFactory _new = m_FactoryBase.AddNodeFactory(); Assert.IsNotNull(_new); } [TestMethod] [TestCategory("Code")] public void InformationModelFactoryIExportObjectTypeFactoryTestMethod2() { IObjectTypeFactory _new = m_FactoryBase.AddNodeFactory(); Assert.IsNotNull(_new); } [TestMethod] [TestCategory("Code")] public void InformationModelFactoryIExportVariableTypeFactoryTestMethod2() { IVariableTypeFactory _new = m_FactoryBase.AddNodeFactory(); Assert.IsNotNull(_new); } [TestMethod] [TestCategory("Code")] public void InformationModelIExportDataTypeFactoryFactoryTestMethod2() { IDataTypeFactory _new = m_FactoryBase.AddNodeFactory(); Assert.IsNotNull(_new); } [TestMethod] [TestCategory("Code")] public void InformationModelFactoryIExportObjectInstanceFactoryTestMethod2() { IObjectInstanceFactory _new = m_FactoryBase.AddNodeFactory(); Assert.IsNotNull(_new); } [TestMethod] [TestCategory("Code")] public void InformationModelFactoryIExportPropertyInstanceFactoryTestMethod2() { IPropertyInstanceFactory _new = m_FactoryBase.AddNodeFactory(); Assert.IsNotNull(_new); } [TestMethod] [TestCategory("Code")] public void InformationModelFactoryIExportVariableInstanceFactoryTestMethod2() { IVariableInstanceFactory _new = m_FactoryBase.AddNodeFactory(); Assert.IsNotNull(_new); } [TestMethod] [TestCategory("Code")] public void InformationModelFactoryIExportMethodInstanceFactoryTestMethod2() { IMethodInstanceFactory _new = m_FactoryBase.AddNodeFactory(); Assert.IsNotNull(_new); } [TestMethod] [TestCategory("Code")] public void InformationModelFactoryIExportViewInstanceFactoryTestMethod2() { IViewInstanceFactory _new = m_FactoryBase.AddNodeFactory(); Assert.IsNotNull(_new); } private static InformationModelFactoryBase m_FactoryBase = null; } } ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/ModelFactoryTestingFixture/DataTypeDefinitionFactoryBase.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2021, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System.Xml; using UAOOI.SemanticData.InformationModelFactory; namespace UAOOI.SemanticData.UANodeSetValidation.ModelFactoryTestingFixture { /// /// Class DataTypeDefinitionFactoryBase. /// Implements the /// /// internal class DataTypeDefinitionFactoryBase : IDataTypeDefinitionFactory { /// /// Creates new field and provides an object of type encapsulating information about the field data type. /// /// Returns . public IDataTypeFieldFactory NewField() { return new DataTypeFieldFactoryBase(); } /// /// Sets the name of the DataType. /// /// The name represented as . public XmlQualifiedName Name { set { } } /// /// A symbolic name for the data type. It should only be specified if the Name cannot be used for this purpose. /// Only letters, digits or the underscore (‘_’) are permitted. /// /// The symbolic name of ti entity. public string SymbolicName { set { } } /// /// Sets a value indicating whether this instance is option set. This flag indicates that the data type defines the OptionSetValues Property. /// This field is optional.The default value is false. /// /// true if this instance is option set; otherwise, false. public bool IsOptionSet { set { } } /// /// Sets a value indicating whether this instance is union. /// Only one of the Fields defined for the data type is encoded into a value. /// This field is optional.The default value is false. If this value is true, the first field is the switch value. /// /// true if this instance is union; otherwise, false. public bool IsUnion { set { } } } } ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/ModelFactoryTestingFixture/DataTypeFactoryBase.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2021, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using UAOOI.SemanticData.InformationModelFactory; namespace UAOOI.SemanticData.UANodeSetValidation.ModelFactoryTestingFixture { /// /// Class DataTypeFactoryBase. /// Implements the /// Implements the /// /// /// internal class DataTypeFactoryBase : TypeFactoryBase, IDataTypeFactory { /// /// Sets a value indicating whether this instance is option set. This flag indicates that the data type defines the OptionSetValues Property. /// This field is optional.The default value is false. /// /// true if this instance is option set; otherwise, false. public bool IsOptionSet { set; private get; } /// /// Creates new implementation dependent object implementing the interface. /// The data type model is used to define simple and complex data types. Types are used to describe the structure of the Value attribute of variables and their types. /// Therefore each Variable and VariableType node is pointing with its DataType attribute to a node of the DataType node class. /// /// IDataTypeDefinitionFactory. /// Returns new object of type encapsulating DataType definition factory. public IDataTypeDefinitionFactory NewDefinition() { return new DataTypeDefinitionFactoryBase(); } } } ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/ModelFactoryTestingFixture/DataTypeFieldFactoryBase.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2021, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System.Xml; using UAOOI.SemanticData.InformationModelFactory; namespace UAOOI.SemanticData.UANodeSetValidation.ModelFactoryTestingFixture { /// /// Class DataTypeFieldFactoryBase. /// Implements the /// /// internal class DataTypeFieldFactoryBase : IDataTypeFieldFactory { /// /// Sets the DataType name. /// /// The type of the data. public XmlQualifiedName DataType { set { } } /// /// Sets the identifier the value associated with the field. /// /// The identifier. public int? Identifier { set { } } /// /// Sets the name for the field that is unique within the . /// /// The name for the field. public string Name { set { } } /// /// Sets the value rank. It shall be Scalar (-1) or a fixed rank Array (>=1). This field is not specified for subtypes of Enumeration. /// /// The value rank. public int? ValueRank { set { } } /// /// Creates new object of for anonymous definition of the DatType. /// The field is a structure with a layout specified by the . /// This field is optional. /// This field allows designers to create nested structures without defining a new DataType Node for each structure. /// This field is not specified for subtypes of Enumeration. /// /// IDataTypeDefinitionFactory. /// A new instance of encapsulating the DatType definition. public IDataTypeDefinitionFactory NewDefinition() { return new DataTypeDefinitionFactoryBase(); } /// /// The value associated with the field. This field is only specified for subtypes of Enumeration. /// For OptionSets the value is the number of the bit associated with the field. /// /// The value. public int Value { set { } } /// /// Sets the symbolic name of the field. A symbolic name for the field that can be used in auto-generated code. It should only be /// specified if the Name cannot be used for this purpose. Only letters, digits or the underscore (‘_’) are permitted. /// This value is not exposed in the OPC UA Address Space /// /// The symbolic name to be used by the tool. public string SymbolicName { set { } } /// /// Adds the description for the field in multiple locales /// /// The locale field specified as a string that is composed of a language component and a country/region component as specified by RFC 3066. /// The localized text. public void AddDescription(string localeField, string valueField) { } /// /// Adds the display name. /// /// The locale field specified as a string that is composed of a language component and a country/region component as specified by RFC 3066. /// The localized text. public void AddDisplayName(string localeField, string valueField) { } /// /// Creates new instance of . /// /// IDataTypeDefinitionFactory. public IDataTypeDefinitionFactory NewDataTypeDefinitionFactory() { return new DataTypeDefinitionFactoryBase(); } /// /// Gets the array dimensions. /// /// The array dimensions. /// The maximum length of an array. This field is a comma separated list of unsigned integer values.The list has a number of elements equal to the ValueRank. /// The value is 0 if the maximum is not known for a dimension. This field is not specified if the ValueRank less or equal 0. /// This field is not specified for subtypes of Enumeration or for DataTypes public string ArrayDimensions { set { } } /// /// Sets the maximum length of the string. /// /// The maximum length of the string. /// The maximum length of a String or ByteString value. If not known the value is 0. The value is 0 if the DataType is not String or ByteString. /// If the ValueRank > 0 the maximum applies to each element in the array. This field is not specified for subtypes of Enumeration or for DataTypes with /// the OptionSetValues Property. public uint MaxStringLength { set { } } /// /// Sets a value indicating whether this instance is optional. /// /// true if this instance is optional; otherwise, false. /// The field indicates if a data type field in a structure is optional. This field is optional.The default value is false. This field is not specified for subtypes of Enumeration and Union. public bool IsOptional { set { } } } } ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/ModelFactoryTestingFixture/InformationModelFactoryBase.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2022, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ using System; using System.Collections.Generic; using UAOOI.SemanticData.InformationModelFactory; namespace UAOOI.SemanticData.UANodeSetValidation.ModelFactoryTestingFixture { /// /// Class InformationModelFactoryBase. /// Implements the /// Implements the /// /// /// internal class InformationModelFactoryBase : NodesContainer, IModelFactory { /// /// Creates the namespace description for the provided . /// /// The . /// The publication - when the model was published. This value is used for comparisons if the Model is defined in multiple files. /// The of the model. This is a human readable string and not intended for programmatic comparisons. /// The set of objects that the OPC Unified Architecture server makes available to clients is referred to as its Address Space. The namespace is provided to make the BrowseName unique in the Address Space. public void CreateNamespace(Uri uri, DateTime? publicationDate, Version version) { } internal IEnumerable Export() { List nodes = new List(); base.Export(x => nodes.Add(x)); return nodes; } } } ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/ModelFactoryTestingFixture/InstanceFactoryBase.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2021, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using UAOOI.SemanticData.InformationModelFactory; namespace UAOOI.SemanticData.UANodeSetValidation.ModelFactoryTestingFixture { /// /// Class InstanceFactoryBase. /// Implements the /// Implements the /// /// /// internal class InstanceFactoryBase : NodeFactoryBase, IInstanceFactory { /// /// Sets the modeling rule, which defines whether the component of a complex type are instantiated. /// This value is defined by processing the object pointed by the HasModelingRule reference. /// /// The modeling rule. public ModelingRules? ModelingRule { set { } } /// /// Sets the type definition. /// /// The type definition. public System.Xml.XmlQualifiedName TypeDefinition { set { } } /// /// Sets the type of the reference if it is component of a complex definition. /// /// The type of the reference used for parent child relationship. public System.Xml.XmlQualifiedName ReferenceType { set { } } } } ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/ModelFactoryTestingFixture/MethodInstanceFactoryBase.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2021, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System; using System.Collections.Generic; using System.Xml; using UAOOI.SemanticData.InformationModelFactory; using UAOOI.SemanticData.UANodeSetValidation.UAInformationModel; namespace UAOOI.SemanticData.UANodeSetValidation.ModelFactoryTestingFixture { /// /// Class MethodInstanceFactoryBase - basic implementation of the . /// internal class MethodInstanceFactoryBase : InstanceFactoryBase, IMethodInstanceFactory { #region IMethodInstanceFactory /// /// Sets a value indicating whether the Method node is executable (“False” means not executable, “True” means executable), not taking user access rights into account. /// If the server cannot get the executable information from the underlying system, it should state that it is executable. If a Method is called, the server should transfer /// this request and return the corresponding StatusCode if such a request is rejected. /// /// true if executable; otherwise, false. Default value is true public bool? Executable { set { } } /// /// Sets a value indicating whether the Method is currently executable taking user access rights into account (“False” means not executable, “True” means executable). /// /// true if executable by current user; otherwise, false. Default value is true public bool? UserExecutable { set { } } /// /// Gets or sets the method declaration identifier defined in Part 6 F.9. May be specified for Method Nodes that are a target of a HasComponent reference from a single Object Node. /// It is the NodeId of the UAMethod with the same BrowseName contained in the TypeDefinition associated with the Object Node. /// If the TypeDefinition overrides a Method inherited from a base ObjectType then this attribute shall reference the Method Node in the subtype. /// /// The method declaration identifier. public string MethodDeclarationId { set { } } /// /// Adds the input arguments. The InputArgument specify the input argument of the Method. The Method contains an array of the Argument data type. /// An empty array indicates that there are no input arguments for the Method. /// /// Encapsulates a method used to convert Argument represented as . public void AddInputArguments(System.Func argument) { RemoveArguments(BrowseNames.InputArguments, argument); } /// /// Adds the output argument. The OutputArgument specifies the output argument of the Method. The Method contains an array of the Argument data type. /// An empty array indicates that there are no output arguments for the Method. /// /// Encapsulates a method used to convert Argument represented as . public void AddOutputArguments(System.Func argument) { RemoveArguments(BrowseNames.OutputArguments, argument); } /// /// Adds the argument description. /// /// The name. /// The locale. /// The value. public void AddArgumentDescription(string name, string locale, string value) { } #endregion IMethodInstanceFactory private Parameter[] RemoveArguments(string parameterKind, Func getParameters) { Parameter[] _parameters = null; List _newChildrenCollection = new List(); foreach (NodeFactoryBase _item in m_Nodes) { if (_item.SymbolicName.Equals(new XmlQualifiedName(parameterKind, Namespaces.OpcUa))) { PropertyInstanceFactoryBase _arg = (PropertyInstanceFactoryBase)_item; _parameters = getParameters(_arg.DefaultValue); } else _newChildrenCollection.Add(_item); } m_Nodes = _newChildrenCollection; return _parameters; } } } ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/ModelFactoryTestingFixture/NodeFactoryBase.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2021, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System.Collections.Generic; using System.Xml; using UAOOI.SemanticData.InformationModelFactory; using UAOOI.SemanticData.InformationModelFactory.UAConstants; namespace UAOOI.SemanticData.UANodeSetValidation.ModelFactoryTestingFixture { /// /// Class NodeFactoryBase. /// Implements the /// Implements the /// /// /// internal class NodeFactoryBase : NodesContainer, INodeFactory { /// /// It holds the value of the BrowseName attribute of modes in the Address Space. /// /// The BrowseName of the node. public string BrowseName { set; get; } /// /// Add new reference to the references collection of the node. This collection represents all the references defined by the selected Information Model including /// references to the instance declarations nodes. The References list specifies references that must be created for the node during Address Space instantiation. /// The reference can be forward or inverse. /// /// IReferenceFactory. public IReferenceFactory NewReference() { ReferenceFactoryBase _ret = new ReferenceFactoryBase(); m_References.Add(_ret); return _ret; } /// /// Sets the a symbolic name for the node that can be used as a class/field name by a design tools to enhance auto-generated code. /// It should only be specified if the BrowseName cannot be used for this purpose. This field is not used directly to instantiate /// Address Space and is intended for use by design tools. Only letters, digits or the underscore (‘_’) are permitted. /// This attribute is not exposed in the Address Space. /// /// The symbolic name for the node. public XmlQualifiedName SymbolicName { set; internal get; } /// /// Sets the write mask. The optional WriteMask attribute represents the WriteMask attribute of the Basic NodeClass, which exposes the possibilities of a client /// to write the attributes of the node. The WriteMask attribute does not take any user access rights into account, that is, although an attribute is writable /// this may be restricted to a certain user/user group. /// /// The write access. /// Default Value "0" public uint WriteAccess { set { } } /// /// Sets the access restrictions. /// /// The access restrictions. /// The AccessRestrictions that apply to the Node. public AccessRestrictions AccessRestrictions { set { } } /// /// Sets the release status of the node. /// /// The release status. /// It is not exposed in the address space. /// Added in the Rel 1.04 to the specification. public ReleaseStatus ReleaseStatus { set { } } /// /// Sets the data type purpose. /// /// The data type purpose. /// Not defined in the specification Part 2, 5, 6 and Errata Release 1.04.2 September 25, 2018 public DataTypePurpose DataTypePurpose { set { } } /// /// Sets the category. A list of identifiers used to group related UANodes together for use by tools that create/edit UANodeSet files. /// /// The category. /// public string[] Category { set { } } /// /// Adds new value for the Description. The optional Description element shall explain the meaning of the node in a localized text using the same mechanisms /// for localization as described for the DisplayName. /// /// The locale field. /// The value field. public void AddDescription(string localeField, string valueField) { } /// /// Adds new value for the DisplayName. The DisplayName attribute contains the localized name of the node. /// Clients should use this attribute if they want to display the name of the node to the user. They should not use /// the BrowseName for this purpose. The server may maintain one or more localized representations for each DisplayName. /// Clients negotiate the locale to be returned when they open a session with the server. The section DisplayName defines the structure of the DisplayName. /// The string part of the DisplayName is restricted to 512 characters. /// /// The locale field. /// The value field. public void AddDisplayName(string localeField, string valueField) { } protected List m_References = new List(); } } ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/ModelFactoryTestingFixture/NodesContainer.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2021, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System; using System.Collections.Generic; using UAOOI.SemanticData.InformationModelFactory; namespace UAOOI.SemanticData.UANodeSetValidation.ModelFactoryTestingFixture { /// /// Class NodesContainer. /// Implements the /// /// internal abstract class NodesContainer : INodeContainer { /// /// Creates and adds a new node instance of the . /// /// The type of the node factory must inherit from . /// Returns new object implementing . /// public TNodeFactory AddNodeFactory() where TNodeFactory : INodeFactory { NodeFactoryBase _df = null; if (typeof(TNodeFactory) == typeof(IReferenceTypeFactory)) _df = new ReferenceTypeFactoryBase(); else if (typeof(TNodeFactory) == typeof(IObjectTypeFactory)) _df = new ObjectTypeFactoryBase(); else if (typeof(TNodeFactory) == typeof(IVariableTypeFactory)) _df = new VariableTypeFactoryBase(); else if (typeof(TNodeFactory) == typeof(IDataTypeFactory)) _df = new DataTypeFactoryBase(); else if (typeof(TNodeFactory) == typeof(IObjectInstanceFactory)) _df = new ObjectInstanceFactoryBase(); else if (typeof(TNodeFactory) == typeof(IPropertyInstanceFactory)) _df = new PropertyInstanceFactoryBase(); else if (typeof(TNodeFactory) == typeof(IVariableInstanceFactory)) _df = new VariableInstanceFactoryBase(); else if (typeof(TNodeFactory) == typeof(IMethodInstanceFactory)) _df = new MethodInstanceFactoryBase(); else if (typeof(TNodeFactory) == typeof(IViewInstanceFactory)) _df = new ViewInstanceFactoryBase(); else throw new NotImplementedException(); m_Nodes.Add(_df); return (TNodeFactory)(INodeFactory)_df; } protected void Export (Action callBack) { foreach (NodeFactoryBase item in m_Nodes) { callBack(item); item.Export(callBack); } } protected List m_Nodes = new List(); } } ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/ModelFactoryTestingFixture/ObjectInstanceFactoryBase.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2021, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using UAOOI.SemanticData.InformationModelFactory; namespace UAOOI.SemanticData.UANodeSetValidation.ModelFactoryTestingFixture { /// /// Class ObjectInstanceFactoryBase. /// Implements the /// Implements the /// /// /// internal class ObjectInstanceFactoryBase : InstanceFactoryBase, IObjectInstanceFactory { /// /// Sets a value indicating whether the node supports events. /// /// null if supports events contains no value, true if [supports events]; otherwise, false. public bool? SupportsEvents { set { } } } } ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/ModelFactoryTestingFixture/ObjectTypeFactoryBase.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2021, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using UAOOI.SemanticData.InformationModelFactory; namespace UAOOI.SemanticData.UANodeSetValidation.ModelFactoryTestingFixture { /// /// Class ObjectTypeFactoryBase. /// Implements the /// Implements the /// /// /// internal class ObjectTypeFactoryBase : TypeFactoryBase, IObjectTypeFactory { } } ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/ModelFactoryTestingFixture/PropertyInstanceFactoryBase.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2021, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using UAOOI.SemanticData.InformationModelFactory; namespace UAOOI.SemanticData.UANodeSetValidation.ModelFactoryTestingFixture { /// /// Class PropertyInstanceFactoryBase. /// Implements the /// Implements the /// /// /// internal class PropertyInstanceFactoryBase : VariableInstanceFactoryBase, IPropertyInstanceFactory { } } ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/ModelFactoryTestingFixture/ReferenceFactoryBase.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2021, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System.Xml; using UAOOI.SemanticData.InformationModelFactory; namespace UAOOI.SemanticData.UANodeSetValidation.ModelFactoryTestingFixture { /// /// Class ReferenceFactoryBase. /// Implements the /// /// internal class ReferenceFactoryBase : IReferenceFactory { /// /// Sets the type of the reference. /// /// The type of the reference. public XmlQualifiedName ReferenceType { set { } } /// /// Sets the target identifier. /// /// The target identifier. public XmlQualifiedName TargetId { set { } } /// /// Sets a value indicating whether this instance is inverse. /// /// true if this instance is inverse; otherwise, false. public bool IsInverse { set { } } } } ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/ModelFactoryTestingFixture/ReferenceTypeFactoryBase.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2021, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using UAOOI.SemanticData.InformationModelFactory; namespace UAOOI.SemanticData.UANodeSetValidation.ModelFactoryTestingFixture { /// /// Class ReferenceTypeFactoryBase. /// Implements the /// Implements the /// /// /// internal class ReferenceTypeFactoryBase : TypeFactoryBase, IReferenceTypeFactory { /// /// Sets a value indicating whether this is symmetric. The Symmetric attribute is used to indicate whether or not the meaning of the reference type is the same for both the source and target nodes. /// If a reference type is symmetric, the InverseName attribute shall be omitted.Examples of symmetric reference types are “Connects To” and “Communicates With”. Both imply the same semantic coming from the source node or the target node. /// If the ReferenceType is non-symmetric and not abstract, the InverseName attribute shall be set. The optional InverseName attribute of LocalizedText ia a inverse name of the reference, /// i.e.the meaning of the type as seen from the target node. Examples of non-symmetric reference types include “Contains” and “Contained In”, and “Receives From” and “Sends To”. /// /// true if symmetric; otherwise, false. /// Default Value is false public bool Symmetric { set { } } /// /// Adds a new inverse name. /// /// The locale field. /// The value field. public void AddInverseName(string localeField, string valueField) { } } } ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/ModelFactoryTestingFixture/TypeFactoryBase.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2021, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System.Xml; using UAOOI.SemanticData.InformationModelFactory; namespace UAOOI.SemanticData.UANodeSetValidation.ModelFactoryTestingFixture { /// /// Class TypeFactoryBase. /// Implements the /// Implements the /// /// /// internal class TypeFactoryBase : NodeFactoryBase, ITypeFactory { /// /// Sets the base type of the node. /// /// The base type represented by the . public XmlQualifiedName BaseType { set { } } /// /// Sets a value indicating whether this instance is abstract. /// /// true if this instance is abstract; otherwise, false. /// Default Value is false public bool IsAbstract { set { } } } } ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/ModelFactoryTestingFixture/VariableInstanceFactoryBase.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2021, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System.Xml; using UAOOI.SemanticData.InformationModelFactory; namespace UAOOI.SemanticData.UANodeSetValidation.ModelFactoryTestingFixture { /// /// Class VariableInstanceFactoryBase. /// Implements the /// Implements the /// /// /// internal class VariableInstanceFactoryBase : InstanceFactoryBase, IVariableInstanceFactory { /// /// Sets the access level. The AccessLevel attribute indicates the accessibility of the Value of a Variable node not taking user access rights into account and /// applies only to a UAVariable element. The AccessLevel attribute is used to indicate how the Value of a Variable node can be accessed (read/write) and /// if it contains current and/or historic data. The AccessLevel does not take any user access rights into account, i.e. although the Variable is writable this /// may be restricted to a certain user / user group. /// /// The access level. public uint? AccessLevel { set { } } /// /// Sets the array dimensions. This property specifies the length of each dimension for an array value. It is intended to describe the capability of the Variable, not the current size. /// The number of elements shall be equal to the value defined by the ValueRank. It shall be null if ValueRank ≤ 0. The value of 0 for an individual dimension indicates that the dimension has /// a variable length. For example, if a Variable is defined by the following C array: /// Int32 myArray[346]; /// then the DataType would point to an Int32, the ValueRank has the value 1 and the ArrayDimensions is an array with one entry having the value 346. /// Note that the maximum length of an array transferred on the wire is 2147483647 (max Int32) and a multidimensional array is encoded as a one dimensional array. /// /// The array dimensions. /// ArrayDimensions is ignored if ValueRank is not equal to the OneOrMoreDimensions. public string ArrayDimensions { set { } } /// /// Sets the type of the data. of the DataType definition for the Value. It is not required that the pointed out element is defined in the same document. /// If that is the case many documents must be combined to resolve and validate this reference. /// /// The type of the data. public XmlQualifiedName DataType { set { } } /// /// Sets the default value. The value of the Variable node that the server assigns while instantiating the node. Its data type is defined by the DataType field. /// /// The default value. public XmlElement DefaultValue { set; internal get; } /// /// Sets a value indicating whether this is historizing. The Historizing attribute indicates whether the server is actively /// collecting data for the history of the Variable node. This differs from the AccessLevel which identifies if the Variable has any historical data. A value of true /// indicates that the server is actively collecting data. A value of false indicates that the server is not actively collecting data. Default value is false. /// /// true if historizing; otherwise, false. public bool? Historizing { set { } } /// /// Sets the minimum sampling interval. The MinimumSamplingInterval attribute indicates how “current” the Value of the Variable NodeClass will be kept. /// It specifies (in milliseconds) how fast the server can reasonably sample the value for changes. The accuracy of this value (the ability of the server to attain /// “best case” performance) can be greatly affected by the system load and other factors. A MinimumSamplingInterval of 0 indicates that the server is to monitor the /// item continuously. A MinimumSamplingInterval of -1 means indeterminate value. /// /// The minimum sampling interval. public int? MinimumSamplingInterval { set { } } /// /// Sets the user access level. The UserAccessLevel attribute is used to indicate how the Value attribute of a Variable NodeClass can be accessed (read/write) /// and if it contains current or historic data taking user access rights into account. It applies only to a UAVariable element. If the OPC UA Server does not /// have the ability to get any user access rights related information from the underlying system it should use the same bit mask as used in the AccessLevel attribute. /// The UserAccessLevel attribute can restrict the accessibility indicated by the AccessLevel, but not exceed it. /// /// The user access level. public byte? UserAccessLevel { set { } } /// /// Sets the value rank. This property indicates whether the value is an array and how many dimensions the array has. /// It may have the following values: /// - n > 1: the Value is an array with the specified number of dimensions. /// - >OneDimension (1): The value is an array with one dimension. /// - OneOrMoreDimensions (0): The value is an array with one or more dimensions. /// - Scalar (−1): The value is not an array. /// - Any (−2): The value can be a scalar or an array with any number of dimensions. /// - ScalarOrOneDimension (−3): The value can be a scalar or a one dimensional array. /// NOTE: All build in DataTypes are considered to be scalar, even if they have array-like semantics like ByteString and String. /// /// The value rank. public int? ValueRank { set { } } } } ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/ModelFactoryTestingFixture/VariableTypeFactoryBase.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2021, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using UAOOI.SemanticData.InformationModelFactory; namespace UAOOI.SemanticData.UANodeSetValidation.ModelFactoryTestingFixture { /// /// Class VariableTypeFactoryBase. /// Implements the /// Implements the /// /// /// internal class VariableTypeFactoryBase : TypeFactoryBase, IVariableTypeFactory { /// /// Sets the default value. The value of the Variable node that the server assigns while instantiating the node. Its data type is defined by the . /// /// The default value. public System.Xml.XmlElement DefaultValue { set { } } /// /// Sets the type of the data. of the DataType definition for the Value. It is not required that the pointed out element is defined in the same document. /// If that is the case many documents must be combined to resolve and validate this reference. /// /// The type of the data. public System.Xml.XmlQualifiedName DataType { set { } } /// /// Sets the value rank. This property indicates whether the value is an array and how many dimensions the array has. /// It may have the following values: /// - n > 1: the Value is an array with the specified number of dimensions. /// - >OneDimension (1): The value is an array with one dimension. /// - OneOrMoreDimensions (0): The value is an array with one or more dimensions. /// - Scalar (−1): The value is not an array. /// - Any (−2): The value can be a scalar or an array with any number of dimensions. /// - ScalarOrOneDimension (−3): The value can be a scalar or a one dimensional array. /// NOTE: All build in DataTypes are considered to be scalar, even if they have array-like semantics like ByteString and String. /// /// The value rank. public int? ValueRank { set { } } /// /// Sets the array dimensions. This property specifies the length of each dimension for an array value. It is intended to describe the capability of the Variable, not the current size. /// The number of elements shall be equal to the value defined by the ValueRank. It shall be null if ValueRank ≤ 0. The value of 0 for an individual dimension indicates that the dimension has /// a variable length. For example, if a Variable is defined by the following C array: /// Int32 myArray[346]; /// then the DataType would point to an Int32, the ValueRank has the value 1 and the ArrayDimensions is an array with one entry having the value 346. /// Note that the maximum length of an array transferred on the wire is 2147483647 (max Int32) and a multidimensional array is encoded as a one dimensional array. /// /// The array dimensions. /// ArrayDimensions is ignored if ValueRank is not equal to the OneOrMoreDimensions. public string ArrayDimensions { set { } } } } ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/ModelFactoryTestingFixture/ViewInstanceFactoryBase.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2021, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using UAOOI.SemanticData.InformationModelFactory; namespace UAOOI.SemanticData.UANodeSetValidation.ModelFactoryTestingFixture { /// /// TODO Class ViewInstanceFactoryBase. /// internal class ViewInstanceFactoryBase : InstanceFactoryBase, IViewInstanceFactory { /// /// Sets a value indicating whether the View NodeClass supports events. /// /// null if supports events contains no value, true if the view supports events; otherwise, false. Default value is false public bool? SupportsEvents { set { } } /// /// Sets a value indicating whether the Address Space represented by the View NodeClass contains no loops. /// /// true if the partial Address Space contains no loops; otherwise, false. Default value is false public bool ContainsNoLoops { set { } } } } ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/NamespaceTableUnitTest.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2021, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ using Microsoft.VisualStudio.TestTools.UnitTesting; using System; using System.Collections.Generic; using System.Linq; using UAOOI.SemanticData.AddressSpace.Abstractions; using UAOOI.SemanticData.InformationModelFactory.UAConstants; using UAOOI.SemanticData.UANodeSetValidation.XML; namespace UAOOI.SemanticData.UANodeSetValidation { [TestClass] public class NamespaceTableUnitTest { [TestMethod] public void ConstructorTest() { NamespaceTable _instance = new NamespaceTable(); IEnumerable models = _instance.Models; Assert.IsNotNull(models); List listOfExportedNamespaceTable = models.ToList(); Assert.AreEqual(0xC, listOfExportedNamespaceTable[0].AccessRestrictions); Assert.AreEqual(1, listOfExportedNamespaceTable.Count); Assert.AreEqual(new Uri("http://opcfoundation.org/UA/"), listOfExportedNamespaceTable[0].ModelUri); Assert.IsTrue(listOfExportedNamespaceTable[0].PublicationDate.HasValue); Assert.IsNotNull(listOfExportedNamespaceTable[0].RolePermissions); Assert.AreEqual(1, listOfExportedNamespaceTable[0].RolePermissions.Length); Assert.AreEqual(0, listOfExportedNamespaceTable[0].Version.CompareTo(new Version())); } [TestMethod] public void GetURIatIndexTest() { NamespaceTable instance = new NamespaceTable(); Assert.AreEqual(new Uri(Namespaces.OpcUa), instance.GetModelTableEntry(0)); Assert.IsNull(instance.GetModelTableEntry(1)); Assert.AreEqual(1, ((INamespaceTable)instance).GetURIIndexOrAppend(new Uri("http://opcfoundation.org/UA/GetURIatIndexTest1"))); Assert.AreEqual(2, ((INamespaceTable)instance).GetURIIndexOrAppend(new Uri("http://opcfoundation.org/UA/GetURIatIndexTest2"))); Assert.AreEqual(new Uri("http://opcfoundation.org/UA/GetURIatIndexTest2"), instance.GetModelTableEntry(2)); Assert.AreEqual(new Uri("http://opcfoundation.org/UA/GetURIatIndexTest1"), instance.GetModelTableEntry(1)); } [TestMethod] public void GetURIIndexIndexTest() { NamespaceTable instance = new NamespaceTable(); Assert.AreEqual(0, instance.GetURIIndex(new Uri(Namespaces.OpcUa))); Assert.AreEqual(-1, instance.GetURIIndex(new Uri("http://opcfoundation.org/UA/GetURIatIndexTest1/NonExistingNamespace"))); Assert.AreEqual(1, ((INamespaceTable)instance).GetURIIndexOrAppend(new Uri("http://opcfoundation.org/UA/GetURIatIndexTest1"))); Assert.AreEqual(2, ((INamespaceTable)instance).GetURIIndexOrAppend(new Uri("http://opcfoundation.org/UA/GetURIatIndexTest2"))); Assert.AreEqual(1, ((INamespaceTable)instance).GetURIIndexOrAppend(new Uri("http://opcfoundation.org/UA/GetURIatIndexTest1"))); Assert.AreEqual(2, ((INamespaceTable)instance).GetURIIndexOrAppend(new Uri("http://opcfoundation.org/UA/GetURIatIndexTest2"))); Assert.AreEqual(2, ((INamespaceTable)instance).GetURIIndexOrAppend(new Uri("http://opcfoundation.org/UA/GetURIatIndexTest2"))); Assert.AreEqual(2, instance.GetURIIndex(new Uri("http://opcfoundation.org/UA/GetURIatIndexTest2"))); Assert.AreEqual(1, instance.GetURIIndex(new Uri("http://opcfoundation.org/UA/GetURIatIndexTest1"))); } [TestMethod] public void UpadateModelOrAppendTest() { NamespaceTable instance = new NamespaceTable(); IModelTableEntry model1 = GetDefaultModelTableEntry("http://opcfoundation.org/UA/GetURIatIndexTest1"); ((INamespaceTable)instance).RegisterModel(model1); IModelTableEntry model2 = GetDefaultModelTableEntry("http://opcfoundation.org/UA/GetURIatIndexTest1"); ((INamespaceTable)instance).RegisterModel(model2); Assert.IsNotNull(instance.GetModelTableEntry(1)); Assert.IsNull(instance.GetModelTableEntry(2)); Assert.IsNull(instance.GetModelTableEntry(3)); } [TestMethod] public void ModelsTest() { NamespaceTable instance = new NamespaceTable(); ((INamespaceTable)instance).RegisterModel(GetDefaultModelTableEntry("http://opcfoundation.org/UA/GetURIatIndexTest1")); ((INamespaceTable)instance).RegisterModel(GetDefaultModelTableEntry("http://opcfoundation.org/UA/GetURIatIndexTest3")); ((INamespaceTable)instance).RegisterModel(GetDefaultModelTableEntry("http://opcfoundation.org/UA/GetURIatIndexTest2")); ((INamespaceTable)instance).RegisterModel(GetDefaultModelTableEntry("http://opcfoundation.org/UA/GetURIatIndexTest1")); Assert.AreEqual(4, instance.Models.Count()); } [TestMethod] public void ValidateNamesapceTableTestMethod() { NamespaceTable instance = new NamespaceTable(); Assert.IsFalse(instance.ValidateNamesapceTable(y => Assert.AreEqual(new Uri("http://opcfoundation.org/UA/"), y))); instance.RegisterModel(GetDefaultModelTableEntry("http://opcfoundation.org/UA/")); Assert.IsTrue(instance.ValidateNamesapceTable(y => Assert.Fail())); instance.RegisterDependency(GetDefaultModelTableEntry("http://opcfoundation.org/UA/RandomName")); Assert.IsFalse(instance.ValidateNamesapceTable(y => Assert.AreEqual(new Uri("http://opcfoundation.org/UA/RandomName"), y))); } #region fixtures /// /// Gets a default model table entry. /// /// The model URI. /// IModelTableEntry. private static IModelTableEntry GetDefaultModelTableEntry(string modelUri) { return new ModelTableEntry { AccessRestrictions = 0xC, ModelUri = modelUri, PublicationDate = DateTime.UtcNow.Date, PublicationDateSpecified = true, RequiredModel = null, RolePermissions = new XML.RolePermission[] { new XML.RolePermission() }, Version = new Version(1, 0).ToString() }; } #endregion fixtures } } ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/Properties/AssemblyInfo.cs ================================================ //_______________________________________________________________ // Title : Assembly info for: UAOOI.SemanticData.UANodeSetValidation // System : Microsoft VisualStudio 2017 / C# // // Copyright (C) 2022 Mariusz Postol LODZ POLAND // +48 608 619 899 // mpostol@cas.eu // https://github.com/mpostol/OPC-UA-OOI //_______________________________________________________________ using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; [assembly: AssemblyTitle("UAOOI.SemanticData.UANodeSetValidation")] [assembly: AssemblyDescription("OPC UA NodeSet Validation UnitTests")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("Mariusz Postol")] [assembly: AssemblyProduct("Object Oriented Internet")] [assembly: AssemblyCopyright("Copyright (C) 2022 Mariusz Postol LODZ POLAND")] [assembly: AssemblyTrademark("Object Oriented Internet")] [assembly: AssemblyCulture("")] [assembly: ComVisible(false)] [assembly: Guid("deea592b-285a-47db-afbc-b1e2efac8ab3")] [assembly: AssemblyVersion("6.5.6.*")] [assembly: AssemblyFileVersion("6.5.6")] [assembly: InternalsVisibleTo("DynamicProxyGenAssembly2, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c547cac37abd99c8db225ef2f6c8a3602f3b3606cc9891605d02baa56104f4cfc0734aa39b93bf7852f7d9266654753cc297e7d2edfe0bac1cdcf9f717241550e0a7b191195b7667bb4f64bcb8e2121380fd1d9d46ad2d92d2d15605093924cceaf74c4861eff62abf69b9291ed0a340e113be11e6a7d3113e92484cf7045cc7")] ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/Properties/AssemblyInfo.tt ================================================ <#@ template debug="false" hostspecific="false" language="C#" #> <#@ output extension=".cs" #> //_______________________________________________________________ // Title : Assembly info for: <#=m_AssemblyTitle#> // System : Microsoft VisualStudio 2017 / C# // // <#=AssemblyCopyright#> // <#=Phone#> // <#=Email#> // <#=Url#> //_______________________________________________________________ using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; [assembly: AssemblyTitle("<#=m_AssemblyTitle#>")] [assembly: AssemblyDescription("OPC UA NodeSet Validation UnitTests")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("<#=AssemblyCompany#>")] [assembly: AssemblyProduct("<#=SemanticDataProduct#>")] [assembly: AssemblyCopyright("<#=AssemblyCopyright#>")] [assembly: AssemblyTrademark("<#=ProductTrademark#>")] [assembly: AssemblyCulture("")] [assembly: ComVisible(false)] [assembly: Guid("deea592b-285a-47db-afbc-b1e2efac8ab3")] [assembly: AssemblyVersion("<#= SemanticDataVersion #>.*")] [assembly: AssemblyFileVersion("<#= SemanticDataVersion #>")] [assembly: InternalsVisibleTo("DynamicProxyGenAssembly2, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c547cac37abd99c8db225ef2f6c8a3602f3b3606cc9891605d02baa56104f4cfc0734aa39b93bf7852f7d9266654753cc297e7d2edfe0bac1cdcf9f717241550e0a7b191195b7667bb4f64bcb8e2121380fd1d9d46ad2d92d2d15605093924cceaf74c4861eff62abf69b9291ed0a340e113be11e6a7d3113e92484cf7045cc7")] <#@ include file = "..\..\..\..\CommonResources\T4Definitions\Model.t4" #> <#+ string m_AssemblyTitle = "UAOOI.SemanticData.UANodeSetValidation"; #> ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/README.md ================================================ # UANodeSet Validation Unit Test To validate a new model add the code to the project and XML file to the XMLModels in this project. If the validation test does not recognize an error the code in the UANodeSetValidation must be improved. In this case add issue or modify the code on your fork and add purge request after finishing. ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/SemanticData.UANodeSetValidation.UnitTest.csproj ================================================  Debug AnyCPU {2DC898B5-AFD9-47B2-A962-C4002C1AE8FF} Library Properties UAOOI.SemanticData.UANodeSetValidation UAOOI.SemanticData.UANodeSetValidation.UnitTests v4.7.2 512 {3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} 10.0 $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) $(ProgramFiles)\Common Files\microsoft shared\VSTT\$(VisualStudioVersion)\UITestExtensionPackages False UnitTest true full false bin\Debug\ DEBUG;TRACE prompt 4 false IDE0001,IDE0002,IDE0003,IDE0049 pdbonly true bin\Release\ TRACE prompt 4 true OPCUAOOIKey.snk ..\..\..\packages\Castle.Core.5.0.0\lib\net462\Castle.Core.dll ..\..\..\packages\MSTest.TestFramework.2.2.10\lib\net45\Microsoft.VisualStudio.TestPlatform.TestFramework.dll ..\..\..\packages\MSTest.TestFramework.2.2.10\lib\net45\Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions.dll ..\..\..\packages\Moq.4.18.1\lib\net462\Moq.dll ..\..\..\packages\System.Runtime.CompilerServices.Unsafe.6.0.0\lib\net461\System.Runtime.CompilerServices.Unsafe.dll ..\..\..\packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll ..\..\..\packages\UAOOI.Common.Infrastructure.6.4.7\lib\netstandard2.0\UAOOI.Common.Infrastructure.dll True True AssemblyInfo.tt TextTemplatingFileGenerator AssemblyInfo.cs PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest Always PreserveNewest Designer PreserveNewest Always Designer PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest Designer Designer Designer Designer {9ca2f05b-fb18-49ad-8520-1bcc838f748c} SemanticData.BuildingErrorsHandling {6d20785d-0451-46a9-9ac2-ec66b7c0d18a} SemanticData.InformationModelFactory {352378a0-8b2e-4679-bb44-fd0bcc8467d9} SemanticData.UANodeSetValidation False False False False This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/ServiceResultExceptionUnitTest.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2021, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using Microsoft.VisualStudio.TestTools.UnitTesting; using System; using System.Diagnostics; using UAOOI.SemanticData.BuildingErrorsHandling; namespace UAOOI.SemanticData.UANodeSetValidation.DataSerialization { [TestClass] public class ServiceResultExceptionUnitTest { [TestMethod] public void ServiceResultExceptionCreateTestMethod() { ServiceResultException _ex = new ServiceResultException(); Assert.IsNotNull(_ex); Assert.IsNull(_ex.InnerException); Assert.IsNull(_ex.TraceMessage); Assert.IsFalse(String.IsNullOrEmpty(_ex.Message), _ex.Message); Assert.IsTrue(_ex.Message.Contains("UAOOI.SemanticData.UANodeSetValidation.DataSerialization")); } [TestMethod] public void ServiceResultExceptionCreateWithMessageTestMethod() { TraceMessage traceMessage = TraceMessage.BuildErrorTraceMessage(BuildError.NodeIdInvalidSyntax, "BuildError_BadNodeIdInvalid"); ServiceResultException _ex = new ServiceResultException(traceMessage, "test message"); Assert.IsNotNull(_ex); Assert.IsNotNull(_ex.TraceMessage); Assert.IsNull(_ex.InnerException); Assert.AreEqual("test message", _ex.Message); Assert.IsNotNull(_ex.TraceMessage); Assert.AreEqual(BuildError.NodeIdInvalidSyntax.Focus, _ex.TraceMessage.BuildError.Focus); Assert.AreEqual(TraceEventType.Warning, _ex.TraceMessage.TraceLevel); } } } ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/UANodeContextUnitTest.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2022, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ using Microsoft.VisualStudio.TestTools.UnitTesting; using Moq; using System; using System.Collections.Generic; using System.Linq; using System.Xml; using UAOOI.SemanticData.AddressSpace.Abstractions; using UAOOI.SemanticData.BuildingErrorsHandling; using UAOOI.SemanticData.InformationModelFactory; using UAOOI.SemanticData.UANodeSetValidation.DataSerialization; using UAOOI.SemanticData.UANodeSetValidation.UAInformationModel; using UAOOI.SemanticData.UANodeSetValidation.XML; namespace UAOOI.SemanticData.UANodeSetValidation { //TODO Remove UT bugs of UANodeContextUnitTest #675 [TestClass] public class UANodeContextUnitTest { [TestMethod] public void ConstructorTest() { Mock _addressSpaceMock = new Mock(); UANodeContext _toTest = new UANodeContext(NodeId.Parse("ns=1;i=11"), _addressSpaceMock.Object, x => { }); Assert.IsFalse(_toTest.InRecursionChain); Assert.IsFalse(_toTest.IsProperty); Assert.IsFalse(((IUANodeBase)_toTest).IsPropertyVariableType); Assert.IsFalse(_toTest.ModelingRule.HasValue); Assert.IsNotNull(_toTest.NodeIdContext); Assert.AreEqual("ns=1;i=11", _toTest.NodeIdContext.ToString()); Assert.IsNull(_toTest.UANode); Assert.AreEqual("NodeId=\"ns=1;i=11\", BrowseName=\" ???? \", ModellingRule=\"\"", _toTest.ToString()); } [TestMethod] public void UpdateTest() { Mock _addressSpaceMock = new Mock(); UANodeContext _toTest = new UANodeContext(NodeId.Parse("ns=1;i=11"), _addressSpaceMock.Object, x => { }); Assert.IsFalse(_toTest.InRecursionChain); Assert.IsFalse(_toTest.IsProperty); Assert.IsFalse(((IUANodeBase)_toTest).IsPropertyVariableType); Assert.IsFalse(_toTest.ModelingRule.HasValue); Assert.IsNotNull(_toTest.NodeIdContext); Assert.AreEqual("ns=1;i=11", _toTest.NodeIdContext.ToString()); Assert.IsNull(_toTest.UANode); XML.UANode _node = UnitTest.Helpers.TestData.CreateUAObject(); _node.Deserialize(); QualifiedName browseName = QualifiedName.Parse(_node.BrowseName); NodeId nodeId = NodeId.Parse(_node.NodeId); int _registerReferenceCounter = 0; _toTest.Update(_node, x => _registerReferenceCounter++); Assert.AreEqual(2, _registerReferenceCounter); Assert.IsNotNull(_toTest.UANode); Assert.AreEqual(browseName, _toTest.UANode.BrowseName); Assert.IsFalse(_toTest.InRecursionChain); Assert.IsFalse(_toTest.IsProperty); Assert.IsFalse(((IUANodeBase)_toTest).IsPropertyVariableType); Assert.IsFalse(_toTest.ModelingRule.HasValue); Assert.IsNotNull(_toTest.NodeIdContext); Assert.AreEqual(_toTest.NodeIdContext.ToString(), "ns=1;i=11"); } [TestMethod] public void UpdateDuplicatedNodeIdTest() { Mock _asMock = new Mock(); List _traceBuffer = new List(); UANodeContext _newNode = new UANodeContext(NodeId.Parse("ns=1;i=11"), _asMock.Object, x => _traceBuffer.Add(x)); UAVariable _nodeFactory = new UAVariable() { NodeId = "ns=1;i=47", BrowseName = "EURange", ParentNodeId = "ns=1;i=43", DataType = "i=884", DisplayName = new XML.LocalizedText[] { new XML.LocalizedText() { Value = "EURange" } } }; _nodeFactory.Deserialize(); _newNode.Update(_nodeFactory, x => Assert.Fail()); _newNode.Update(_nodeFactory, x => Assert.Fail()); Assert.AreEqual(1, _traceBuffer.Count); Assert.AreEqual(_traceBuffer[0].BuildError.Identifier, BuildError.NodeIdDuplicated.Identifier); } //[TestMethod] //public void UpdateBrowseNameIndex0Test() //{ // Mock _asMock = new Mock(); // List _traceBuffer = new List(); // UANodeContext _newNode = new UANodeContext(NodeId.Parse("ns=1;i=11"), _asMock.Object, x => _traceBuffer.Add(x)); // UAVariable _nodeFactory = new UAVariable() // { // NodeId = "ns=1;i=47", // BrowseName = "0:BrowseName", // ParentNodeId = "ns=1;i=43", // DataType = "i=884", // DisplayName = new XML.LocalizedText[] { new XML.LocalizedText() { Value = "EURange" } }, // }; // _newNode.Update(_nodeFactory, x => Assert.Fail()); // Assert.AreEqual(0, _traceBuffer.Count); // Assert.AreEqual("0:BrowseName", _newNode.UANode.BrowseName.ToString()); //} [TestMethod] public void UpdateBrowseNameIndex1Test() { Mock _asMock = new Mock(); List _traceBuffer = new List(); UANodeContext _newNode = new UANodeContext(NodeId.Parse("ns=1;i=11"), _asMock.Object, x => _traceBuffer.Add(x)); UAVariable _nodeFactory = new UAVariable() { NodeId = "ns=1;i=47", BrowseName = "1:BrowseName", ParentNodeId = "ns=1;i=43", DataType = "i=884", DisplayName = new XML.LocalizedText[] { new XML.LocalizedText() { Value = "EURange" } } }; _newNode.Update(_nodeFactory, x => Assert.Fail()); Assert.AreEqual(0, _traceBuffer.Count); Assert.IsNull(_newNode.UANode.BrowseName); } [TestMethod] public void UpdateReferencesTest() { Mock addressSpaceMock = new Mock(); addressSpaceMock.Setup(x => x.GetOrCreateNodeContext(It.IsAny(), It.IsAny>())); List traceBuffer = new List(); UANodeContext toTest = new UANodeContext(NodeId.Parse("ns=1;i=11"), addressSpaceMock.Object, x => traceBuffer.Add(x)); XML.UANode _node = new UAObject() { NodeId = "ns=1;i=1", BrowseName = "1:NewUAObject", DisplayName = new XML.LocalizedText[] { new XML.LocalizedText() { Value = "New UA Object" } }, References = new Reference[] { new Reference() { ReferenceType = ReferenceTypeIds.HasTypeDefinition.ToString(), IsForward= true, Value = ObjectTypeIds.BaseObjectType.ToString() }, new Reference() { ReferenceType = ReferenceTypeIds.Organizes.ToString(), IsForward= false, Value = "i=85" } }, // UAInstance ParentNodeId = string.Empty, // UAObject EventNotifier = 0x01, }; _node.Deserialize(); List _registerReference = new List(); toTest.Update(_node, x => _registerReference.Add(x)); addressSpaceMock.Verify(x => x.GetOrCreateNodeContext(It.IsAny(), It.IsAny>()), Times.Never); Assert.AreEqual(2, _registerReference.Count); Assert.AreSame(toTest, _registerReference[0].ParentNode); Assert.AreSame(toTest, _registerReference[0].SourceNode); Assert.IsNull(_registerReference[0].TargetNode); Assert.IsNull(_registerReference[1].SourceNode); Assert.AreSame(toTest, _registerReference[1].ParentNode); Assert.AreSame(toTest, _registerReference[1].TargetNode); Assert.IsFalse(toTest.InRecursionChain); Assert.IsFalse(toTest.IsProperty); Assert.IsFalse(((IUANodeBase)toTest).IsPropertyVariableType); Assert.IsFalse(toTest.ModelingRule.HasValue); Assert.IsNotNull(toTest.NodeIdContext); Assert.AreEqual(toTest.NodeIdContext.ToString(), "ns=1;i=11"); Assert.IsNotNull(toTest.UANode); } [TestMethod] public void UpdateWithDifferentNodeIdTest() { Mock _asMock = new Mock(); List _traceBuffer = new List(); IUANodeContext _newNode = new UANodeContext(NodeId.Parse("ns=1;i=11"), _asMock.Object, x => _traceBuffer.Add(x)); Assert.AreEqual("ns=1;i=11", _newNode.NodeIdContext.ToString()); UANode _nodeFactory = new UAVariable() { NodeId = "ns=1;i=47", BrowseName = "EURange", ParentNodeId = "ns=1;i=43", DataType = "i=884", DisplayName = new XML.LocalizedText[] { new XML.LocalizedText() { Value = "EURange" } } }; _nodeFactory.Deserialize(); _newNode.Update(_nodeFactory, x => Assert.Fail()); // Update has different NodeId - no change is expected. Assert.AreEqual("ns=1;i=11", _newNode.NodeIdContext.ToString()); Assert.AreEqual("ns=1;i=47", _newNode.UANode.NodeId.ToString()); Assert.AreEqual(0, _traceBuffer.Count); } [TestMethod] public void CalculateNodeReferencesNullArguments() { Mock _addressSpaceMock = new Mock(); Mock _mockNodeFactory = new Mock(); Mock _validatorMoc = new Mock(); List _traceBuffer = new List(); IUANodeBase _first = new UANodeContext(NodeId.Parse("ns=1;i=11"), _addressSpaceMock.Object, x => _traceBuffer.Add(x)); Assert.ThrowsException(() => _first.CalculateNodeReferences(null, null, _validatorMoc.Object, y => { })); Assert.ThrowsException(() => _first.CalculateNodeReferences(_mockNodeFactory.Object, null, null, y => { })); Assert.ThrowsException(() => _first.CalculateNodeReferences(_mockNodeFactory.Object, null, _validatorMoc.Object, null)); } [TestMethod] public void CalculateNodeReferencesNullUANodeTest() { //TODO The exported model doesn't contain all nodes #653 //Assert.Inconclusive("The exported model doesn't contain all nodes #653"); Reference reference = new Reference() { IsForward = true, ReferenceType = ReferenceTypeIds.Organizes.ToString(), Value = ObjectTypeIds.BaseObjectType.ToString() }; reference.RecalculateNodeIds(x => NodeId.Parse(x)); Mock typeMock = new Mock(); typeMock.Setup(x => x.NodeIdContext).Returns(ReferenceTypeIds.Organizes); Mock targetMock = new Mock(); targetMock.Setup(x => x.NodeIdContext).Returns(new NodeId("ns=1;i=12")); targetMock.Setup(x => x.UANode).Returns( new UAObject() { NodeId = "ns=1;i=6599", BrowseName = "1:", SymbolicName = "NetworkIdentifier", ParentNodeId = "ns=1;i=6308", DisplayName = new XML.LocalizedText[] { new XML.LocalizedText() { Value = "" } } }); Mock addressSpaceMock = new Mock(); addressSpaceMock.Setup(x => x.GetOrCreateNodeContext(It.IsAny(), It.IsAny>())).Returns(typeMock.Object); addressSpaceMock.Setup(x => x.GetOrCreateNodeContext(It.Is(z => z == reference.ValueNodeId), It.IsAny>())).Returns(targetMock.Object); List _traceBuffer = new List(); UANodeContext node2Test = new UANodeContext(NodeId.Parse("ns=1;i=11"), addressSpaceMock.Object, x => _traceBuffer.Add(x)); List listOfReferences = new List() { new UAReferenceContext(reference, addressSpaceMock.Object, node2Test) }; addressSpaceMock.Setup(x => x.GetMyReferences(It.IsAny())).Returns(listOfReferences); addressSpaceMock.Setup(x => x.ExportBrowseName(It.IsAny(), It.IsAny())).Returns(new XmlQualifiedName("name", "ns")); Mock referenceFactoryMock = new Mock(); Mock _mockNodeFactory = new Mock(); _mockNodeFactory.Setup(x => x.NewReference()).Returns(referenceFactoryMock.Object); Mock _validatorMoc = new Mock(); _validatorMoc.Setup(x => x.ValidateExportNode(It.IsAny(), null, _mockNodeFactory.Object, It.IsAny>(), It.IsAny())); //testing int counter = 0; ((IUANodeBase)node2Test).CalculateNodeReferences(_mockNodeFactory.Object, null, _validatorMoc.Object, y => counter++); //validation Assert.AreEqual(1, counter); addressSpaceMock.Verify(x => x.GetMyReferences(It.IsAny()), Times.Once); addressSpaceMock.Verify(x => x.ExportBrowseName(It.IsAny(), It.IsAny()), Times.Once); _validatorMoc.Verify(x => x.ValidateExportNode(It.Is(z => z == targetMock.Object), null, _mockNodeFactory.Object, It.IsAny>(), It.Is(y => y == listOfReferences[0])), Times.Never); Assert.AreEqual(0, _traceBuffer.Count, _traceBuffer.Count == 0 ? "" : _traceBuffer[0].Message); } [TestMethod] public void EqualsTest() { AddressSpaceBuildContext _as = new AddressSpaceBuildContext(x => { }); UANodeContext _first = _as.InstanceToTest; UANodeContext _second = _as.InstanceToTest; Assert.IsTrue(_first.Equals(_second)); } [TestMethod] public void GetDerivedInstances4ObjectTest() { AddressSpaceBuildContext _as = new AddressSpaceBuildContext(x => { }); UANodeContext _testInstance = _as.InstanceToTest; Assert.IsTrue(_testInstance.UANode.GetType() == typeof(UAObject)); Assert.AreEqual("1:InstanceOfDerivedFromComplexObjectType", _testInstance.UANode.BrowseName.ToString()); Dictionary _result = _testInstance.GetDerivedInstances(); Assert.IsNotNull(_result); Assert.AreEqual(4, _result.Count); } [TestMethod] public void GetDerivedInstances4TypeDefinition() { AddressSpaceBuildContext _as = new AddressSpaceBuildContext(x => { }); UANodeContext _testType = _as.TypeToTest; Assert.IsNotNull(_testType); Assert.IsInstanceOfType(_testType.UANode, typeof(UAObjectType)); Assert.AreEqual("1:DerivedFromComplexObjectType", _testType.UANode.BrowseName.ToString()); Dictionary _result = _testType.GetDerivedInstances(); Assert.IsNotNull(_result); Assert.AreEqual(4, _result.Count); } [TestMethod] public void BuildSymbolicIdTest() { NodeId _nodeId = NodeId.Parse("ns=1;i=11"); Mock _asMock = new Mock(); List _traceBuffer = new List(); UANodeContext _toTest = new UANodeContext(NodeId.Parse("ns=1;i=11"), _asMock.Object, x => _traceBuffer.Add(x)); List path = new List(); _toTest.BuildSymbolicId(path); Assert.AreEqual(1, _traceBuffer.Count); Assert.AreEqual("P3-0403040000", _traceBuffer[0].BuildError.Identifier); Assert.AreEqual("The target node NodeId=ns=1;i=11, current path ", _traceBuffer[0].Message); Assert.AreEqual(0, path.Count); } [TestMethod] public void ExportBrowseNameTest() { Mock _asMock = new Mock(); _asMock.Setup(x => x.GetNamespace(0)).Returns(x => Namespaces.OpcUa); _asMock.Setup(x => x.GetNamespace(1)).Returns(x => "tempuri.org"); UANode _nodeFactory = new UAVariable() { NodeId = "ns=1;i=47", BrowseName = "EURange", ParentNodeId = "ns=1;i=43", DataType = "i=884", DisplayName = new XML.LocalizedText[] { new XML.LocalizedText() { Value = "EURange" } } }; _nodeFactory.Deserialize(); List _traceBuffer = new List(); UANodeContext _node = new UANodeContext(NodeId.Parse("ns=1;i=47"), _asMock.Object, x => _traceBuffer.Add(x)); _node.Update(_nodeFactory, x => Assert.Fail()); XmlQualifiedName _resolvedName = _node.ExportNodeBrowseName(); _asMock.Verify(x => x.GetNamespace(0), Times.Once); _asMock.Verify(x => x.GetNamespace(1), Times.Never); Assert.IsNotNull(_resolvedName); Assert.AreEqual("http://opcfoundation.org/UA/:EURange", _resolvedName.ToString()); Assert.AreEqual(0, _traceBuffer.Count); } [TestMethod] public void EqualsUAVariableTestMethod() { UAVariable _derivedNode = new UAVariable() { NodeId = "ns=1;i=47", BrowseName = "0:BrowseName", ParentNodeId = "ns=1;i=43", DataType = "i=884", DisplayName = new XML.LocalizedText[] { new XML.LocalizedText() { Value = "EURange" } } }; _derivedNode.Deserialize(); //_derivedNode.RecalculateNodeIds(modelMock, x => Assert.Fail()); Assert.IsNotNull(_derivedNode.BrowseName); UANode _baseNode = new UAVariable() { NodeId = "i=17568", BrowseName = "BrowseName", ParentNodeId = "i=15318", DataType = "i=884", DisplayName = new XML.LocalizedText[] { new XML.LocalizedText() { Value = "EURange" } } }; _baseNode.Deserialize(); //_baseNode.RecalculateNodeIds(modelMock, x => Assert.Fail()); Assert.IsNotNull(_baseNode.BrowseName); Mock _asMock = new Mock(); IUANodeContext _derivedNodeContext = new UANodeContext(NodeId.Parse("ns=1;i=47"), _asMock.Object, x => { }); _derivedNodeContext.Update(_derivedNode, x => Assert.Fail()); UANodeContext _baseNodeContext = new UANodeContext(NodeId.Parse("i=17568"), _asMock.Object, x => { }); _baseNodeContext.Update(_baseNode, x => Assert.Fail()); Assert.IsTrue(_derivedNode.Equals(_baseNode)); Assert.IsTrue(_derivedNodeContext.Equals(_baseNodeContext)); } [TestMethod] public void RemoveInheritedValuesTest() { UAVariable _derivedNode = new UAVariable() { NodeId = "ns=1;i=47", BrowseName = "EURange", ParentNodeId = "ns=1;i=43", DataType = "i=884", //Range DisplayName = new XML.LocalizedText[] { new XML.LocalizedText() { Value = "EURange" } } }; UANode _baseNode = new UAVariable() { NodeId = "i=17568", BrowseName = "EURange", ParentNodeId = "i=15318", DataType = "i=884", //Range DisplayName = new XML.LocalizedText[] { new XML.LocalizedText() { Value = "EURange" } } }; Mock _asMock = new Mock(); IUANodeContext _derivedNodeContext = new UANodeContext(NodeId.Parse("ns=1;i=47"), _asMock.Object, x => { }); _derivedNodeContext.Update(_derivedNode, x => Assert.Fail()); UANodeContext _baseNodeContext = new UANodeContext(NodeId.Parse("i=17568"), _asMock.Object, x => { }); _baseNodeContext.Update(_baseNode, x => Assert.Fail()); _derivedNodeContext.RemoveInheritedValues(_baseNodeContext); Assert.AreEqual("EURange", _derivedNode.BrowseName); Assert.IsNull(_derivedNode.DataType); Assert.IsNull(_derivedNode.Description); } #region instrumentation private class ModelContextFixture : IUAModelContext { public Uri ModelUri => throw new NotImplementedException(); public (QualifiedName browseName, NodeId nodeId) ImportBrowseName(string browseNameText, string nodeIdText, Action trace) { return (QualifiedName.Parse(browseNameText), NodeId.Parse(nodeIdText)); } public NodeId ImportNodeId(string nodeId, Action trace) { return NodeId.Parse(nodeId); } public void RegisterUAReferenceType(QualifiedName browseName) { } } private class AddressSpaceBuildContext : IAddressSpaceBuildContext { #region constructor public AddressSpaceBuildContext(Action traceMessageCallback) { CreateAddressSpace(traceMessageCallback); } #endregion constructor #region IAddressSpaceBuildContext public Parameter ExportArgument(Argument argument, XmlQualifiedName dataType) { throw new NotImplementedException(); } public XmlQualifiedName ExportBrowseName(NodeId id, NodeId defaultValue) { throw new NotImplementedException(); } public IUANodeBase GetBaseTypeNode(NodeClassEnum nodeClass) { return null; } public IEnumerable GetChildren(IUANodeBase node) { return m_References.Values.Where(x => Object.ReferenceEquals(x.SourceNode, node)). Where(x => x.ChildConnector). Select(x => x.TargetNode); } public ushort GetIndexOrAppend(string identifier) { throw new NotImplementedException(); } public IEnumerable GetMyReferences(IUANodeBase index) { List contexts = new List(); return contexts; } public string GetNamespace(ushort namespaceIndex) { throw new NotImplementedException(); } public IUANodeContext GetOrCreateNodeContext(NodeId nodeId, Func createUAModelContext) { return m_NodesDictionary[nodeId.ToString()]; } public IEnumerable GetReferences2Me(IUANodeBase node) { throw new NotImplementedException(); } public Parameter ExportArgument(Argument argument) { throw new NotImplementedException(); } public void GetBaseTypes(IUANodeContext rootNode, List inheritanceChain) { if (rootNode == null) throw new ArgumentNullException("rootNode"); inheritanceChain.Add(rootNode); if (rootNode.InRecursionChain) throw new ArgumentOutOfRangeException("Circular reference"); rootNode.InRecursionChain = true; IEnumerable _derived = m_References.Values.Where(x => (x.TypeNode.NodeIdContext == ReferenceTypeIds.HasSubtype) && (x.TargetNode == rootNode)). Select(x => x.SourceNode); if (_derived.Count() > 1) throw new ArgumentOutOfRangeException("To many subtypes"); else if (_derived.Count() == 1) GetBaseTypes(_derived.First(), inheritanceChain); rootNode.InRecursionChain = false; } #endregion IAddressSpaceBuildContext #region private instrumentation internal UANodeContext InstanceToTest { get; private set; } internal UANodeContext TypeToTest { get; private set; } private readonly Dictionary m_References = new Dictionary(); private readonly Dictionary m_NodesDictionary = new Dictionary(); private void Add2mNodesDictionary(UANodeContext node) { m_NodesDictionary.Add(node.NodeIdContext.ToString(), node); } private UANodeContext NewNode(UANode newNode, Action traceMessageCallback) { //newNode.Deserialize(); newNode.RecalculateNodeIds(new ModelContextFixture(), traceMessageCallback); UANodeContext _newNode = new UANodeContext(NodeId.Parse(newNode.NodeId), this, traceMessageCallback); _newNode.Update(newNode, x => { m_References.Add(x.Key, x); }); Add2mNodesDictionary(_newNode); return _newNode; } private void CreateAddressSpace(Action traceMessageCallback) { NewNode(new UAReferenceType() { NodeId = ReferenceTypeIds.HasProperty.ToString(), BrowseName = "HasProperty" }, traceMessageCallback); NewNode(new UAReferenceType() { NodeId = ReferenceTypeIds.HasTypeDefinition.ToString(), BrowseName = "HasTypeDefinition" }, traceMessageCallback); NewNode(new UAVariable() { NodeId = "i=112", BrowseName = "NamingRule", ParentNodeId = "i=78", DataType = "i=120", DisplayName = new XML.LocalizedText[] { new XML.LocalizedText() { Value = "NamingRule" } } }, traceMessageCallback); NewNode(new UAObjectType() { NodeId = "i=77", BrowseName = "ModellingRuleType", DisplayName = new XML.LocalizedText[] { new XML.LocalizedText() { Value = "ModellingRuleType" } } }, traceMessageCallback); NewNode(new UAObject() { NodeId = "i=78", BrowseName = "Mandatory", SymbolicName = "ModellingRule_Mandatory", DisplayName = new XML.LocalizedText[] { new XML.LocalizedText() { Value = "Mandatory" } }, References = new Reference[] { new Reference(){ IsForward = true, ReferenceType = ReferenceTypeIds.HasProperty.ToString(), Value="i=112" }, new Reference(){ IsForward = true, ReferenceType = ReferenceTypeIds.HasTypeDefinition.ToString(), Value="i=77" } } }, traceMessageCallback); NewNode(new UAReferenceType() { NodeId = "i=37", BrowseName = "HasModellingRule", DisplayName = new XML.LocalizedText[] { new XML.LocalizedText() { Value = "HasModellingRule" } } }, traceMessageCallback); NewNode(new UAMethod() { NodeId = "ns=1;i=25", BrowseName = "1:ChildMethod", ParentNodeId = "ns=1;i=16", MethodDeclarationId = "ns=1;i=10", DisplayName = new XML.LocalizedText[] { new XML.LocalizedText() { Value = "ChildMethodNewName" } }, References = new Reference[] { new Reference() { ReferenceType = ReferenceTypeIds.HasModellingRule.ToString(), IsForward = true, Value = "i=78" } } }, traceMessageCallback); NewNode(new UAReferenceType() { NodeId = "i=47", BrowseName = "HasComponent", DisplayName = new XML.LocalizedText[] { new XML.LocalizedText() { Value = "ChildVariable" } } }, traceMessageCallback); NewNode(new UAVariable() { NodeId = "ns=1;i=47", BrowseName = "EURange", ParentNodeId = "ns=1;i=43", DataType = "i=884", DisplayName = new XML.LocalizedText[] { new XML.LocalizedText() { Value = "EURange" } } }, traceMessageCallback); NewNode(new UAVariable() { NodeId = "i=2369", BrowseName = "EURange", ParentNodeId = "i=2368", DataType = "i=884", DisplayName = new XML.LocalizedText[] { new XML.LocalizedText() { Value = "EURange" } } }, traceMessageCallback); NewNode(new UAVariableType() { NodeId = "i=2368", BrowseName = "AnalogItemType", DataType = "Number", ValueRank = -2, DisplayName = new XML.LocalizedText[] { new XML.LocalizedText() { Value = "AnalogItemType" } }, References = new Reference[] { new Reference() { IsForward = true, ReferenceType = ReferenceTypeIds.HasProperty.ToString(), Value = "i=2369" } } }, traceMessageCallback); NewNode(new UAVariable() { NodeId = "ns=1;i=43", BrowseName = "1:ChildVariable", ParentNodeId = "ns=1;i=1", DataType = "Number", DisplayName = new XML.LocalizedText[] { new XML.LocalizedText() { Value = "ChildVariable" } }, References = new Reference[] { new Reference() { IsForward=true, ReferenceType = ReferenceTypeIds.HasProperty.ToString(), Value="ns=1;i=47"}, new Reference(){ IsForward=true, ReferenceType = ReferenceTypeIds.HasTypeDefinition.ToString(), Value="i=2368"}, new Reference() {IsForward=true, ReferenceType = ReferenceTypeIds.HasModellingRule.ToString(), Value="i=78" } } }, traceMessageCallback); NewNode(new UAObjectType() { NodeId = "i=58", BrowseName = "BaseObjectType", DisplayName = new XML.LocalizedText[] { new XML.LocalizedText() { Value = "BaseObjectType" } } }, traceMessageCallback); NewNode(new UAVariableType() { NodeId = "i=68", BrowseName = "PropertyType", ValueRank = -2, DisplayName = new XML.LocalizedText[] { new XML.LocalizedText() { Value = "PropertyType" } } }, traceMessageCallback); NewNode(new UAVariable() { NodeId = "i=11511", BrowseName = "NamingRule", ParentNodeId = "i=11510", DataType = "i=120", DisplayName = new XML.LocalizedText[] { new XML.LocalizedText() { Value = "NamingRule" } }, References = new Reference[] { new Reference() { ReferenceType = ReferenceTypeIds.HasTypeDefinition.ToString(), Value = "i=68", IsForward = true } } }, traceMessageCallback); NewNode(new UAObject() { NodeId = "i=11510", BrowseName = "MandatoryPlaceholder", SymbolicName = "ModellingRule_MandatoryPlaceholder", DisplayName = new XML.LocalizedText[] { new XML.LocalizedText() { Value = "MandatoryPlaceholder" } }, References = new Reference[] { new Reference(){ ReferenceType = ReferenceTypeIds.HasProperty.ToString(), Value="i=11511", IsForward= true }, new Reference() { ReferenceType = ReferenceTypeIds.HasTypeDefinition.ToString(), Value = "i=77", IsForward= true } } }, traceMessageCallback); NewNode(new UAObject() { NodeId = "ns=1;i=2", BrowseName = "1:ChildObject", ParentNodeId = "ns=1;i=1", EventNotifier = 1, DisplayName = new XML.LocalizedText[] { new XML.LocalizedText() { Value = "ChildObject" } }, References = new Reference[] { new Reference() { IsForward= true, ReferenceType = ReferenceTypeIds.HasTypeDefinition.ToString(), Value="i=58" }, new Reference() { IsForward= true, ReferenceType = ReferenceTypeIds.HasModellingRule.ToString(), Value="i=11510" } } }, traceMessageCallback); NewNode(new UAVariable() { NodeId = "ns=1;i=3", BrowseName = "1:ChildProperty", SymbolicName = "BrowseName4node66", ParentNodeId = "ns=1;i=1", DataType = "LocalizedText", DisplayName = new XML.LocalizedText[] { new XML.LocalizedText() { Value = "ChildProperty" } }, References = new Reference[] { new Reference() { ReferenceType = ReferenceTypeIds.HasTypeDefinition.ToString(), Value="i=68", IsForward=true }, new Reference() { ReferenceType = ReferenceTypeIds.HasModellingRule.ToString(), Value="i=78", IsForward=true } } }, traceMessageCallback); NewNode(new UAMethod() { NodeId = "ns=1;i=10", BrowseName = "1:ChildMethod", ParentNodeId = "ns=1;i=1", DisplayName = new XML.LocalizedText[] { new XML.LocalizedText() { Value = "ChildMethod" } }, References = new Reference[] { new Reference() { ReferenceType = ReferenceTypeIds.HasModellingRule.ToString(), Value = "i=78", IsForward = true } } }, traceMessageCallback); NewNode(new UAObjectType() { NodeId = "ns=1;i=1", BrowseName = "1:ComplexObjectType", DisplayName = new XML.LocalizedText[] { new XML.LocalizedText() { Value = "ComplexObjectType" } }, References = new Reference[] { new Reference() { IsForward = true, ReferenceType = ReferenceTypeIds.HasComponent.ToString(), Value="ns=1;i=2" }, new Reference() { IsForward = true, ReferenceType = ReferenceTypeIds.HasProperty.ToString(), Value="ns=1;i=3" }, new Reference() { IsForward = true, ReferenceType = ReferenceTypeIds.HasComponent.ToString(), Value="ns=1;i=43" }, new Reference() { IsForward = true, ReferenceType = ReferenceTypeIds.HasComponent.ToString(), Value="ns=1;i=10" } } }, traceMessageCallback); NewNode(new UAReferenceType() { NodeId = "i=45", BrowseName = "HasSubtype", DisplayName = new XML.LocalizedText[] { new XML.LocalizedText() { Value = "HasSubtype" } }, }, traceMessageCallback); TypeToTest = NewNode(new UAObjectType() { NodeId = "ns=1;i=16", BrowseName = "1:DerivedFromComplexObjectType", DisplayName = new XML.LocalizedText[] { new XML.LocalizedText() { Value = "DerivedFromComplexObjectType" } }, References = new Reference[] { new Reference(){ ReferenceType = ReferenceTypeIds.HasComponent.ToString(), IsForward=true, Value= "ns=1;i=25" }, new Reference() { ReferenceType = ReferenceTypeIds.HasSubtype.ToString(), IsForward = false, Value= "ns=1;i=1" } } }, traceMessageCallback); NewNode(new UAVariable() { NodeId = "ns=1;i=32", BrowseName = "1:ChildProperty", SymbolicName = "BrowseName4node66", ParentNodeId = "ns=1;i=30", DataType = "LocalizedText", DisplayName = new XML.LocalizedText[] { new XML.LocalizedText() { Value = "ChildProperty" } } }, traceMessageCallback); NewNode(new UAVariable() { NodeId = "ns=1;i=59", BrowseName = "EURange", ParentNodeId = "ns=1;i=55", DataType = "i=884", DisplayName = new XML.LocalizedText[] { new XML.LocalizedText() { Value = "EURange" } }, }, traceMessageCallback); NewNode(new UAVariable() { NodeId = "ns=1;i=55", BrowseName = "1:ChildVariable", ParentNodeId = "ns=1;i=30", DataType = "Number", DisplayName = new XML.LocalizedText[] { new XML.LocalizedText() { Value = "ChildVariable" } }, References = new Reference[] { new Reference(){ IsForward=true, ReferenceType = ReferenceTypeIds.HasProperty.ToString(), Value="ns=1;i=59"}, new Reference(){ IsForward=true, ReferenceType = ReferenceTypeIds.HasTypeDefinition.ToString(), Value = "i=2368" }, } }, traceMessageCallback); NewNode(new UAMethod() { NodeId = "ns=1;i=39", BrowseName = "1:ChildMethod", ParentNodeId = "ns=1;i=30", MethodDeclarationId = "ns=1;i=10", DisplayName = new XML.LocalizedText[] { new XML.LocalizedText() { Value = "ChildMethodNewName" } } }, traceMessageCallback); InstanceToTest = NewNode(new UAObject() { BrowseName = "1:InstanceOfDerivedFromComplexObjectType", NodeId = "ns=1;i=30", DisplayName = new XML.LocalizedText[] { new XML.LocalizedText() { Value = "InstanceOfDerivedFromComplexObjectType" } }, References = new Reference[] { new Reference() { IsForward = true, ReferenceType = ReferenceTypeIds.HasProperty.ToString(), Value = "ns=1;i=32" }, new Reference() { IsForward = true, ReferenceType = ReferenceTypeIds.HasComponent.ToString(), Value = "ns=1;i=55" }, new Reference() { IsForward = true, ReferenceType = ReferenceTypeIds.HasComponent.ToString(), Value = "ns=1;i=39" }, new Reference() { IsForward = true, ReferenceType = ReferenceTypeIds.HasTypeDefinition.ToString(), Value = "ns=1;i=16" } } }, traceMessageCallback); } #endregion private instrumentation } #endregion instrumentation } } ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/UAReferenceContextTestClass.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2021, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using Microsoft.VisualStudio.TestTools.UnitTesting; using Moq; using System; using System.Collections.Generic; using System.Xml; using UAOOI.SemanticData.UANodeSetValidation.DataSerialization; using UAOOI.SemanticData.UANodeSetValidation.UAInformationModel; namespace UAOOI.SemanticData.UANodeSetValidation { [TestClass] public class UAReferenceContextTestClass { [TestMethod] public void NullArgumentConstructorTest() { Mock asMock = new Mock(); Mock nodeMock = new Mock(); Assert.ThrowsException(() => new UAReferenceContext(null, asMock.Object, nodeMock.Object)); Assert.ThrowsException(() => new UAReferenceContext(new XML.Reference(), null, nodeMock.Object)); Assert.ThrowsException(() => new UAReferenceContext(new XML.Reference(), asMock.Object, null)); } [TestMethod] public void ConstructorTest() { XML.Reference reference = new XML.Reference() { IsForward = true, ReferenceType = ReferenceTypeIds.HasOrderedComponent.ToString(), Value = "ns=1;i=11" }; reference.RecalculateNodeIds(x => NodeId.Parse(x)); Mock typeMock = new Mock(); typeMock.Setup(x => x.NodeIdContext).Returns(new NodeId("i=10")); Mock targetMock = new Mock(); targetMock.Setup(x => x.NodeIdContext).Returns(new NodeId("ns=1;i=12")); Mock asMock = new Mock(); asMock.Setup(x => x.GetOrCreateNodeContext(It.IsAny(), It.IsAny>())).Returns(typeMock.Object); asMock.Setup(x => x.GetOrCreateNodeContext(It.Is(z => z == reference.ValueNodeId), It.IsAny>())).Returns(targetMock.Object); Mock sourceMock = new Mock(); sourceMock.Setup(x => x.NodeIdContext).Returns(NodeId.Parse("ns=1;i=1")); UAReferenceContext instance2Test = new UAReferenceContext(reference, asMock.Object, sourceMock.Object); Assert.IsTrue(instance2Test.IsForward); Assert.AreEqual("ns=1;i=1:i=10:ns=1;i=12", instance2Test.Key); Assert.AreSame(typeMock.Object, instance2Test.TypeNode); Assert.AreSame(sourceMock.Object, instance2Test.ParentNode); Assert.AreSame(sourceMock.Object, instance2Test.SourceNode); Assert.AreSame(targetMock.Object, instance2Test.TargetNode); asMock.Verify(z => z.GetOrCreateNodeContext(It.IsAny(), It.IsAny>()), Times.Exactly(2)); reference.IsForward = false; instance2Test = new UAReferenceContext(reference, asMock.Object, sourceMock.Object); Assert.IsFalse(instance2Test.IsForward); Assert.AreEqual("ns=1;i=12:i=10:ns=1;i=1", instance2Test.Key); Assert.AreSame(typeMock.Object, instance2Test.TypeNode); Assert.AreSame(sourceMock.Object, instance2Test.ParentNode); Assert.AreSame(sourceMock.Object, instance2Test.TargetNode); Assert.AreSame(targetMock.Object, instance2Test.SourceNode); } [TestMethod] public void GetReferenceTypeNameTest() { XML.Reference reference = new XML.Reference() { IsForward = true, ReferenceType = ReferenceTypeIds.HasOrderedComponent.ToString(), Value = "ns=1;i=11" }; reference.RecalculateNodeIds(x => NodeId.Parse(x)); Mock typeMock = new Mock(); typeMock.Setup(x => x.NodeIdContext).Returns(new NodeId("i=10")); Mock targetMock = new Mock(); targetMock.Setup(x => x.NodeIdContext).Returns(new NodeId("ns=1;i=12")); Mock asMock = new Mock(); asMock.Setup(x => x.GetOrCreateNodeContext(It.IsAny(), It.IsAny>())).Returns(typeMock.Object); asMock.Setup(x => x.GetOrCreateNodeContext(It.Is(z => z == reference.ValueNodeId), It.IsAny>())).Returns(targetMock.Object); Mock sourceMock = new Mock(); sourceMock.Setup(x => x.NodeIdContext).Returns(NodeId.Parse("ns=1;i=1")); UAReferenceContext instance2Test = new UAReferenceContext(reference, asMock.Object, sourceMock.Object); asMock.Setup(x => x.ExportBrowseName(It.Is(z => z == new NodeId("i=10")), It.IsAny())).Returns(new XmlQualifiedName("2P8ZkTA2Ccahvs", "943IbIVI6ivpBj")); XmlQualifiedName typeName = instance2Test.GetReferenceTypeName(); asMock.Verify(x => x.ExportBrowseName(It.Is(z => z == new NodeId("i=10")), It.IsAny()), Times.Once); Assert.IsNotNull(typeName); Assert.AreEqual("943IbIVI6ivpBj", typeName.Namespace); Assert.AreEqual("2P8ZkTA2Ccahvs", typeName.Name); } [TestMethod] public void BrowsePathNameIsForwardTest() { XML.Reference reference = new XML.Reference() { IsForward = true, ReferenceType = ReferenceTypeIds.HasOrderedComponent.ToString(), Value = "ns=1;i=11" }; reference.RecalculateNodeIds(x => NodeId.Parse(x)); Mock typeMock = new Mock(); typeMock.Setup(x => x.NodeIdContext).Returns(new NodeId("i=10")); Mock targetMock = new Mock(); targetMock.Setup(x => x.NodeIdContext).Returns(new NodeId("ns=1;i=12")); Mock asMock = new Mock(); asMock.Setup(x => x.GetOrCreateNodeContext(It.IsAny(), It.IsAny>())).Returns(typeMock.Object); asMock.Setup(x => x.GetOrCreateNodeContext(It.Is(z => z == reference.ValueNodeId), It.IsAny>())).Returns(targetMock.Object); Mock sourceMock = new Mock(); sourceMock.Setup(x => x.NodeIdContext).Returns(NodeId.Parse("ns=1;i=1")); UAReferenceContext instance2Test = new UAReferenceContext(reference, asMock.Object, sourceMock.Object); targetMock.Setup(z => z.BuildSymbolicId(It.Is>(x => CreatePathFixture(x)))); XmlQualifiedName typeName = instance2Test.BrowsePath(); targetMock.Verify(z => z.BuildSymbolicId(It.IsAny>()), Times.Once); sourceMock.Verify(z => z.BuildSymbolicId(It.IsAny>()), Times.Never); typeMock.Verify(z => z.BuildSymbolicId(It.IsAny>()), Times.Never); Assert.IsNotNull(typeName); Assert.AreEqual("", typeName.Namespace); Assert.AreEqual("2P8ZkTA2Ccahvs_bLAsL6DSp1Ow5d", typeName.Name); } [TestMethod] public void BrowsePathNameTest() { XML.Reference reference = new XML.Reference() { IsForward = false, ReferenceType = ReferenceTypeIds.HasOrderedComponent.ToString(), Value = "ns=1;i=11" }; reference.RecalculateNodeIds(x => NodeId.Parse(x)); Mock typeMock = new Mock(); typeMock.Setup(x => x.NodeIdContext).Returns(new NodeId("i=10")); Mock targetMock = new Mock(); targetMock.Setup(x => x.NodeIdContext).Returns(new NodeId("ns=1;i=12")); Mock asMock = new Mock(); asMock.Setup(x => x.GetOrCreateNodeContext(It.IsAny(), It.IsAny>())).Returns(typeMock.Object); asMock.Setup(x => x.GetOrCreateNodeContext(It.Is(z => z == reference.ValueNodeId), It.IsAny>())).Returns(targetMock.Object); Mock sourceMock = new Mock(); sourceMock.Setup(x => x.NodeIdContext).Returns(NodeId.Parse("ns=1;i=1")); UAReferenceContext instance2Test = new UAReferenceContext(reference, asMock.Object, sourceMock.Object); Assert.IsFalse(instance2Test.IsForward); targetMock.Setup(z => z.BuildSymbolicId(It.Is>(x => CreatePathFixture(x)))); XmlQualifiedName typeName = instance2Test.BrowsePath(); targetMock.Verify(z => z.BuildSymbolicId(It.IsAny>()), Times.Once); sourceMock.Verify(z => z.BuildSymbolicId(It.IsAny>()), Times.Never); typeMock.Verify(z => z.BuildSymbolicId(It.IsAny>()), Times.Never); Assert.IsNotNull(typeName); Assert.AreEqual("", typeName.Namespace); Assert.AreEqual("2P8ZkTA2Ccahvs_bLAsL6DSp1Ow5d", typeName.Name); } [TestMethod] public void BuildSymbolicIdTest() { XML.Reference reference = new XML.Reference() { IsForward = false, ReferenceType = ReferenceTypeIds.HasOrderedComponent.ToString(), Value = "ns=1;i=11" }; reference.RecalculateNodeIds(x => NodeId.Parse(x)); Mock typeMock = new Mock(); Mock targetMock = new Mock(); targetMock.Setup(x => x.NodeIdContext).Returns(new NodeId("ns=1;i=12")); Mock asMock = new Mock(); asMock.Setup(x => x.GetOrCreateNodeContext(It.IsAny(), It.IsAny>())).Returns(typeMock.Object); asMock.Setup(x => x.GetOrCreateNodeContext(It.Is(z => z == reference.ValueNodeId), It.IsAny>())).Returns(targetMock.Object); Mock sourceMock = new Mock(); sourceMock.Setup(x => x.NodeIdContext).Returns(NodeId.Parse("ns=1;i=1")); UAReferenceContext instance2Test = new UAReferenceContext(reference, asMock.Object, sourceMock.Object); Assert.IsFalse(instance2Test.IsForward); targetMock.Setup(z => z.BuildSymbolicId(It.Is>(x => CreatePathFixture(x)))); List path = new List(); instance2Test.BuildSymbolicId(path); targetMock.Verify(z => z.BuildSymbolicId(It.IsAny>()), Times.Once); sourceMock.Verify(z => z.BuildSymbolicId(It.IsAny>()), Times.Never); typeMock.Verify(z => z.BuildSymbolicId(It.IsAny>()), Times.Never); Assert.AreEqual(2, path.Count); } [TestMethod] public void ChildConnector() { XML.Reference reference = new XML.Reference() { IsForward = false, ReferenceType = ReferenceTypeIds.HasOrderedComponent.ToString(), Value = "ns=1;i=11" }; reference.RecalculateNodeIds(x => NodeId.Parse(x)); Mock typeMock = new Mock(); typeMock.Setup(x => x.NodeIdContext).Returns(ReferenceTypeIds.HasOrderedComponent); Mock sourceMock = new Mock(); Mock asMock = new Mock(); asMock.Setup(x => x.GetBaseTypes(It.IsAny(), It.Is>(z => ListContainingAggregatesTypesFixture(z)))); asMock.Setup(x => x.GetOrCreateNodeContext(It.Is(v => v == reference.ReferenceTypeNodeid), It.IsAny>())).Returns(typeMock.Object); UAReferenceContext instance2Test = new UAReferenceContext(reference, asMock.Object, sourceMock.Object); Assert.IsTrue(instance2Test.ChildConnector); //asMock.Verify(x => x.GetBaseTypes(It.IsAny(), It.Is>(z => ListContainingAggregatesTypesFixture(z))), Times.Once); } private bool ListContainingAggregatesTypesFixture(List references) { Assert.AreEqual(0, references.Count); Mock node1 = new Mock(); references.Add(node1.Object); references.Add(node1.Object); references.Add(node1.Object); Mock node2 = new Mock(); node2.Setup(x => x.NodeIdContext).Returns(ReferenceTypeIds.HasComponent); references.Add(node2.Object); Mock node3 = new Mock(); references.Add(node3.Object); references.Add(node3.Object); references.Add(node3.Object); references.Add(node1.Object); references.Add(node1.Object); return true; } private bool CreatePathFixture(List z) { z.Add("2P8ZkTA2Ccahvs"); z.Add("bLAsL6DSp1Ow5d"); return true; } } } ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/ValidatorUnitTest.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2022, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ using Microsoft.VisualStudio.TestTools.UnitTesting; using Moq; using System.Collections.Generic; using UAOOI.SemanticData.BuildingErrorsHandling; using UAOOI.SemanticData.InformationModelFactory; using UAOOI.SemanticData.UANodeSetValidation.Diagnostic; using UAOOI.SemanticData.UANodeSetValidation.XML; namespace UAOOI.SemanticData.UANodeSetValidation { [TestClass] public class ValidatorUnitTest { [TestMethod] public void ConstructorTest() { Mock addressSpaceBuildContextMock = new Mock(); Mock buildErrorsHandlingNock = new Mock(); Validator _i2t = new Validator(addressSpaceBuildContextMock.Object, buildErrorsHandlingNock.Object); } [TestMethod] public void UAMethodTest() { //TODO The exported model doesn't contain all nodes #653 //Assert.Inconclusive("The exported model doesn't contain all nodes #653"); Mock addressSpaceBuildContextMock = new Mock(); Mock buildErrorsHandlingNock = new Mock(); Validator _i2t = new Validator(addressSpaceBuildContextMock.Object, buildErrorsHandlingNock.Object); UAVariable inputParameter = new UAVariable() { NodeId = "ns=2;i=1031", BrowseName = "InputArguments", ParentNodeId = "ns=2;i=7001", DataType = "i=296", ValueRank = 1, ArrayDimensions = "0", DisplayName = new LocalizedText[] { new LocalizedText() { Value = "InputArguments" } }, Description = new LocalizedText[] { new LocalizedText() { Value = "the definition of the input argument of method 1:MethodSet.2:Start" } }, References = new Reference[] { new Reference() { ReferenceType= "i=46", IsForward=false, Value = "ns=2;i=7001" } } }; UAMethod method = new UAMethod() { NodeId = "ns=2;i=7001", BrowseName = "2:Start", ParentNodeId = "ns=2;i=5002", DisplayName = new LocalizedText[] { new LocalizedText() { Value = "Start" } }, References = new Reference[] { } }; List traceBuffer = new List(); UANodeContext nodeContext = new UANodeContext(DataSerialization.NodeId.Parse(method.NodeId), addressSpaceBuildContextMock.Object, x => traceBuffer.Add(x)); nodeContext.Update(method, x => { }); Mock nodeContainerMock = new Mock(); Mock methodInstanceFactory = new Mock(); nodeContainerMock.Setup(x => x.AddNodeFactory()).Returns(methodInstanceFactory.Object); //TODO UANodeSetValidation.Extensions.GetObject - object reference not set #624 Assert.Inconclusive("UANodeSetValidation.Extensions.GetObject - object reference not set #624"); _i2t.ValidateExportNode(nodeContext, null, nodeContainerMock.Object, z => { }); Assert.AreEqual(0, traceBuffer.Count); } } } ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/XML/UAModelContextUnitTest.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2022, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ using Microsoft.VisualStudio.TestTools.UnitTesting; using Moq; using System; using System.Collections.Generic; using System.Diagnostics; using UAOOI.SemanticData.AddressSpace.Abstractions; using UAOOI.SemanticData.BuildingErrorsHandling; using UAOOI.SemanticData.UANodeSetValidation.DataSerialization; using UAOOI.SemanticData.UANodeSetValidation.UAInformationModel; using UAOOI.SemanticData.UANodeSetValidation.UnitTest.Helpers; namespace UAOOI.SemanticData.UANodeSetValidation.XML { [TestClass] public class UAModelContextUnitTest { [TestMethod] public void ParseUANodeSetModelHeaderTest() { UANodeSet nodeSet = TestData.CreateNodeSetModel(); Assert.IsNotNull(nodeSet); Mock nsMock = new Mock(); List trace = new List(); Action logMock = z => trace.Add(z); Assert.ThrowsException(() => UAModelContext.ParseUANodeSetModelHeader(null, nsMock.Object, logMock)); Assert.AreEqual(0, trace.Count); Assert.ThrowsException(() => UAModelContext.ParseUANodeSetModelHeader(nodeSet, null, logMock)); Assert.AreEqual(0, trace.Count); Assert.ThrowsException(() => UAModelContext.ParseUANodeSetModelHeader(nodeSet, nsMock.Object, null)); Assert.AreEqual(0, trace.Count); UAModelContext modelContext = UAModelContext.ParseUANodeSetModelHeader(nodeSet, nsMock.Object, logMock); Assert.IsNotNull(modelContext); Assert.AreEqual(1, trace.Count); Assert.AreEqual("P0-0001030000", trace[0].BuildError.Identifier); } [TestMethod] public void ImportNodeIdTest() { IUANodeSetModelHeader nodeSet = new UANodeSet { Aliases = new NodeIdAlias[] { new NodeIdAlias() { Alias = "HasSubtype", Value = "i=45" }, new NodeIdAlias() { Alias = "Boolean", Value = "ns=1;i=1" } }, NamespaceUris = new string[] { "http://cas.eu/UA/CommServer/UnitTests/ObjectTypeTest" }, }; Mock asMock = new Mock(); asMock.Setup(x => x.GetURIIndexOrAppend(new Uri("http://cas.eu/UA/CommServer/UnitTests/ObjectTypeTest"))).Returns(10); Uri randomURI = null; asMock.Setup(x => x.GetURIIndexOrAppend(It.Is(z => z.ToString().Contains("github.com/mpostol/OPC-UA-OOI/NameUnknown")))).Returns(x => { randomURI = x; return 20; }); asMock.Setup(x => x.RegisterModel(It.IsAny())); List trace = new List(); Action logMock = z => trace.Add(z); UAModelContext _modelContext = UAModelContext.ParseUANodeSetModelHeader(nodeSet, asMock.Object, logMock); //start testing asMock.Verify(x => x.RegisterModel(It.IsAny()), Times.Once); Assert.AreEqual("ns=10;i=1", _modelContext.ImportNodeId("Boolean", x => Assert.Fail()).ToString()); Assert.AreEqual("i=45", _modelContext.ImportNodeId("HasSubtype", x => Assert.Fail()).ToString()); Assert.AreEqual("ns=20;i=2", _modelContext.ImportNodeId("ns=2;i=2", x => Assert.Fail()).ToString()); asMock.Verify(x => x.GetURIIndexOrAppend(new Uri("http://cas.eu/UA/CommServer/UnitTests/ObjectTypeTest")), Times.Once); asMock.Verify(x => x.GetURIIndexOrAppend(randomURI), Times.Once); asMock.Verify(x => x.RegisterModel(It.IsAny()), Times.Once); Assert.AreEqual("ns=20;i=3", _modelContext.ImportNodeId("ns=2;i=3", x => Assert.Fail()).ToString()); asMock.Verify(x => x.GetURIIndexOrAppend(randomURI), Times.Exactly(2)); Assert.AreEqual("ns=20;i=4", _modelContext.ImportNodeId("ns=2;i=4", x => Assert.Fail()).ToString()); asMock.Verify(x => x.GetURIIndexOrAppend(randomURI), Times.Exactly(3)); asMock.Verify(x => x.GetURIIndexOrAppend(new Uri("http://cas.eu/UA/CommServer/UnitTests/ObjectTypeTest")), Times.Once); Assert.AreEqual(2, trace.Count); Assert.IsTrue(trace[0].Message.Contains("http://cas.eu/UA/CommServer/UnitTests/ObjectTypeTest")); Assert.AreEqual("P0-0001030000", trace[0].BuildError.Identifier); Assert.AreEqual(TraceEventType.Warning, trace[0].TraceLevel); Assert.IsTrue(trace[1].Message.Contains(randomURI.ToString())); Assert.AreEqual("P3-0802020000", trace[1].BuildError.Identifier); Assert.AreEqual(TraceEventType.Warning, trace[1].TraceLevel); } [TestMethod] public void ImportQualifiedNameTest() { IUANodeSetModelHeader nodeSet = new UANodeSet { Aliases = new NodeIdAlias[] { new NodeIdAlias() { Alias = "HasSubtype", Value = "i=45" }, new NodeIdAlias() { Alias = "Boolean", Value = "ns=1;i=1" } }, NamespaceUris = new string[] { "http://cas.eu/UA/CommServer/UnitTests/ObjectTypeTest" }, Models = new ModelTableEntry[] { new ModelTableEntry() { ModelUri = "http://cas.eu/UA/CommServer/UnitTests/ObjectTypeTest" } } }; Mock asMock = new Mock(); asMock.Setup(x => x.GetURIIndexOrAppend(new Uri("http://cas.eu/UA/CommServer/UnitTests/ObjectTypeTest"))).Returns(10); asMock.Setup(x => x.RegisterModel(It.IsAny())); Action logMock = z => Assert.Fail(); UAModelContext modelContext = UAModelContext.ParseUANodeSetModelHeader(nodeSet, asMock.Object, logMock); Assert.AreEqual("(10:Boolean, ns=10;i=1)", modelContext.ImportBrowseName("1:Boolean", "ns=1;i=1", x => Assert.Fail()).ToString()); Assert.AreEqual("(10:AnyText, ns=10;i=1)", modelContext.ImportBrowseName("1:AnyText", "ns=1;i=1", x => Assert.Fail()).ToString()); Assert.AreEqual("(10:HasSubtype, ns=10;i=1)", modelContext.ImportBrowseName("1:HasSubtype", "ns=1;i=1", x => Assert.Fail()).ToString()); Assert.AreEqual("ns=10;i=232323", modelContext.ImportNodeId("ns=1;i=232323", x => Assert.Fail()).ToString()); asMock.Verify(x => x.GetURIIndexOrAppend(new Uri("http://cas.eu/UA/CommServer/UnitTests/ObjectTypeTest")), Times.Exactly(7)); asMock.Verify(x => x.RegisterModel(It.IsAny()), Times.Once); } [TestMethod] public void ImportQualifiedNameWrongNamespaceIndexTest() { IUANodeSetModelHeader nodeSet = new UANodeSet { Aliases = new NodeIdAlias[] { new NodeIdAlias() { Alias = "HasSubtype", Value = "i=45" }, new NodeIdAlias() { Alias = "Boolean", Value = "ns=1;i=1" } }, NamespaceUris = new string[] { "http://cas.eu/UA/CommServer/UnitTests/ObjectTypeTest" }, Models = new ModelTableEntry[] { new ModelTableEntry() { ModelUri = "http://cas.eu/UA/CommServer/UnitTests/ObjectTypeTest" } } }; Mock asMock = new Mock(); asMock.Setup(x => x.GetURIIndexOrAppend(new Uri("http://cas.eu/UA/CommServer/UnitTests/ObjectTypeTest"))).Returns(10); Uri randomURI = null; asMock.Setup(x => x.GetURIIndexOrAppend(It.Is(z => z.ToString().Contains("github.com/mpostol/OPC-UA-OOI/NameUnknown")))).Returns(x => { randomURI = x; return 20; }); List trace = new List(); Action logMock = z => trace.Add(z); UAModelContext _modelContext = UAModelContext.ParseUANodeSetModelHeader(nodeSet, asMock.Object, logMock); Assert.AreEqual("ns=20;i=232323", _modelContext.ImportNodeId("ns=2;i=232323", y => Assert.Fail()).ToString()); asMock.Verify(x => x.GetURIIndexOrAppend(new Uri("http://cas.eu/UA/CommServer/UnitTests/ObjectTypeTest")), Times.Never); asMock.Verify(x => x.GetURIIndexOrAppend(randomURI), Times.Once); Assert.AreEqual(1, trace.Count); Assert.IsTrue(trace[0].Message.Contains(randomURI.ToString())); Assert.AreEqual("P3-0802020000", trace[0].BuildError.Identifier); Assert.AreEqual(TraceEventType.Warning, trace[0].TraceLevel); } [TestMethod] public void DefaultUriUriTest() { IUANodeSetModelHeader nodeSet = new UANodeSet { Aliases = new NodeIdAlias[] { new NodeIdAlias() { Alias = "HasSubtype", Value = "i=45" }, new NodeIdAlias() { Alias = "Boolean", Value = "ns=1;i=1" } }, NamespaceUris = new string[] { "http://cas.eu/UA/CommServer/UnitTests/ObjectTypeTest" }, Models = new ModelTableEntry[] { new ModelTableEntry() { ModelUri = "http://cas.eu/UA/CommServer/UnitTests/ObjectTypeTest" } } }; Mock asMock = new Mock(); asMock.Setup(x => x.GetURIIndexOrAppend(It.IsAny())).Returns(10); Action logMock = z => Assert.Fail(); UAModelContext _modelContext = UAModelContext.ParseUANodeSetModelHeader(nodeSet, asMock.Object, logMock); Assert.AreEqual(nodeSet.NamespaceUris[0], _modelContext.DefaultUri.ToString()); } [TestMethod] public void ModelUriModelsIsEmptyTest() { IUANodeSetModelHeader nodeSet = new UANodeSet { Aliases = new NodeIdAlias[] { new NodeIdAlias() { Alias = "HasSubtype", Value = "i=45" }, new NodeIdAlias() { Alias = "Boolean", Value = "ns=1;i=1" } }, NamespaceUris = new string[] { "http://opcfoundation.org/UA/ADI/", "http://opcfoundation.org/UA/DI/" }, }; Mock asMock = new Mock(); asMock.Setup(x => x.GetURIIndexOrAppend(It.IsAny())).Returns(10); asMock.Setup(x => x.RegisterModel(It.IsAny())); List trace = new List(); Action logMock = z => trace.Add(z); UAModelContext _modelContext = UAModelContext.ParseUANodeSetModelHeader(nodeSet, asMock.Object, logMock); Assert.IsNull(nodeSet.Models); //Assert.AreEqual("http://opcfoundation.org/UA/ADI/", _modelContext.ModelUri.ToString()); Assert.AreEqual(1, trace.Count); Assert.AreEqual("P0-0001030000", trace[0].BuildError.Identifier); Assert.AreEqual(TraceEventType.Warning, trace[0].TraceLevel); asMock.Verify(x => x.RegisterModel(It.IsAny()), Times.Once); } [TestMethod] public void RecalculateNodeIdsUANodeSetTest() { UANodeSet nodeSet = new UANodeSet() { NamespaceUris = new string[] { @"http://cas.eu/UA/Demo/" }, Aliases = new NodeIdAlias[] { new NodeIdAlias() { Alias = "Alias name", Value = "ns=1;i=24" } }, Items = new UANode[] { new UAObject() { NodeId = "Alias name", BrowseName = "1:NewUAObject", DisplayName = new XML.LocalizedText[] { new XML.LocalizedText() { Value = "New UA Object" } }, References = new Reference[] { new Reference() { ReferenceType = ReferenceTypeIds.HasTypeDefinition.ToString(), Value = ObjectTypeIds.BaseObjectType.ToString() }, new Reference() { ReferenceType = ReferenceTypeIds.Organizes.ToString(), IsForward= false, Value = "i=85" } }, // UAInstance ParentNodeId = string.Empty, // UAObject EventNotifier = 0x01, }, new UAVariableType() { NodeId = "ns=1;i=1", BrowseName = "1:NewUAObject", DisplayName = new XML.LocalizedText[] { new XML.LocalizedText() { Value = "New UA Object" } }, References = new Reference[]{}, // UAObject DataType = "ns=1;i=2", } } }; Mock addressSpaceMock = new Mock(); addressSpaceMock.Setup(x => x.GetURIIndexOrAppend(new Uri(@"http://cas.eu/UA/Demo/"))).Returns(x => 2); List _logsCache = new List(); Action _logMock = z => _logsCache.Add(z); Uri model = nodeSet.ParseUAModelContext(addressSpaceMock.Object, _logMock); Assert.IsNotNull(model); Assert.AreEqual(nodeSet.NamespaceUris[0], model.ToString()); addressSpaceMock.Verify(x => x.GetURIIndexOrAppend(new Uri(@"http://cas.eu/UA/Demo/")), Times.AtLeastOnce()); Assert.AreEqual("ns=2;i=24", nodeSet.Aliases[0].ValueNodeId.ToString()); Assert.AreEqual("Alias name", nodeSet.Aliases[0].Alias); Assert.AreEqual("ns=2;i=24", nodeSet.Items[0].GetIUANode().NodeId.ToString()); Assert.AreEqual("2:NewUAObject", nodeSet.Items[0].GetIUANode().BrowseName.ToString()); Assert.AreEqual("ns=2;i=2", ((IUAVariableType)nodeSet.Items[1]).DataType.ToString()); Assert.AreEqual("2:NewUAObject", ((IUAVariableType)nodeSet.Items[1]).BrowseName.ToString()); } [TestMethod] public void RecalculateNodeIdsTest() { IUANodeSetModelHeader nodeSet = new UANodeSet { Aliases = new NodeIdAlias[] { new NodeIdAlias() { Alias = "HasSubtype", Value = "i=45" }, new NodeIdAlias() { Alias = "Boolean", Value = "ns=1;i=1" } }, NamespaceUris = new string[] { "http://cas.eu/UA/CommServer/UnitTests/ObjectTypeTest" }, Models = new ModelTableEntry[] { new ModelTableEntry() { ModelUri = "http://cas.eu/UA/CommServer/UnitTests/ObjectTypeTest", RequiredModel = null } } }; Mock asMock = new Mock(); asMock.Setup(x => x.GetURIIndexOrAppend(new Uri("http://cas.eu/UA/CommServer/UnitTests/ObjectTypeTest"))).Returns(10); Uri randomURI = null; asMock.Setup(x => x.GetURIIndexOrAppend(It.Is(z => z.ToString().Contains("github.com/mpostol/OPC-UA-OOI/NameUnknown")))).Returns(x => { randomURI = x; return 20; }); asMock.Setup(x => x.RegisterModel(It.IsAny())); List trace = new List(); Action logMock = z => trace.Add(z); UAModelContext _modelContext = UAModelContext.ParseUANodeSetModelHeader(nodeSet, asMock.Object, logMock); _modelContext.RegisterUAReferenceType(new QualifiedName("QualifiedName", 10)); Assert.AreEqual(0, trace.Count); asMock.Verify(x => x.RegisterModel(It.IsAny()), Times.Once); asMock.Verify(x => x.GetURIIndexOrAppend(new Uri("http://cas.eu/UA/CommServer/UnitTests/ObjectTypeTest")), Times.Never); asMock.Verify(x => x.GetURIIndexOrAppend(It.Is(z => z.ToString().Contains("github.com/mpostol/OPC-UA-OOI/NameUnknown"))), Times.Never); _modelContext.RegisterUAReferenceType(new QualifiedName("QualifiedName", 10)); Assert.AreEqual(1, trace.Count); Assert.AreEqual(BuildError.DuplicatedReferenceType.Identifier, trace[0].BuildError.Identifier); Assert.AreEqual("The BrowseName of a ReferenceType shall be unique.", trace[0].BuildError.Descriptor); Assert.AreEqual("The UAReferenceType duplicated BrowseName=10:QualifiedName. It is not allowed that two different ReferenceTypes have the same BrowseName", trace[0].Message); Debug.WriteLine(trace[0].ToString()); } [TestMethod] public void ParseUANodeSetModelHeaderCallBack() { IUANodeSetModelHeader nodeSet = new UANodeSet { Aliases = new NodeIdAlias[] { new NodeIdAlias() { Alias = "HasSubtype", Value = "i=45" }, new NodeIdAlias() { Alias = "Boolean", Value = "ns=1;i=1" } }, NamespaceUris = new string[] { "http://cas.eu/UA/CommServer/UnitTests/ObjectTypeTest" }, Models = new ModelTableEntry[] { new ModelTableEntry() { ModelUri = "http://cas.eu/UA/CommServer/UnitTests/ObjectTypeTest", RequiredModel = new ModelTableEntry[]{ new ModelTableEntry(){ ModelUri = "http://a.b.c.com" } } } } }; Mock asMock = new Mock(); asMock.Setup(x => x.RegisterModel(It.IsAny())); List trace = new List(); Action logMock = z => trace.Add(z); UAModelContext _modelContext = UAModelContext.ParseUANodeSetModelHeader(nodeSet, asMock.Object, logMock); asMock.Verify(x => x.RegisterModel(It.IsAny()), Times.Once); Assert.AreEqual(0, trace.Count); } /// /// Gets the default model table entry. /// /// The model URI. /// IModelTableEntry. private static IModelTableEntry GetDefaultModelTableEntry(string modelUri) { return new ModelTableEntry { AccessRestrictions = 0xC, ModelUri = modelUri, PublicationDate = DateTime.UtcNow.Date, PublicationDateSpecified = true, RequiredModel = null, RolePermissions = new XML.RolePermission[] { new XML.RolePermission() }, Version = new Version(1, 0).ToString() }; } } internal static class Conversions { internal static IUANode GetIUANode(this UANode node) { return node; } } } ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/XML/UANodeSetUnitTest.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2022, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ using Microsoft.VisualStudio.TestTools.UnitTesting; using Moq; using System; using System.Collections.Generic; using System.IO; using UAOOI.SemanticData.AddressSpace.Abstractions; using UAOOI.SemanticData.BuildingErrorsHandling; using UAOOI.SemanticData.UANodeSetValidation.DataSerialization; using UAOOI.SemanticData.UANodeSetValidation.UAInformationModel; namespace UAOOI.SemanticData.UANodeSetValidation.XML { [TestClass] [DeploymentItem(@"XMLModels\", @"XMLModels\")] public class UANodeSetUnitTest { #region tests [TestMethod] public void OpcUaNodeSet2TestMethod() { FileInfo _testDataFileInfo = new FileInfo(@"XMLModels\CorrectModels\ReferenceTest\ReferenceTest.NodeSet2.xml"); Assert.IsTrue(_testDataFileInfo.Exists); UANodeSet instance = UANodeSet.ReadModelFile(_testDataFileInfo); Assert.IsNotNull(instance); Assert.IsNotNull(instance.NamespaceUris); Assert.IsNotNull(instance.Models); Mock asbcMock = new Mock(); asbcMock.Setup(x => x.GetURIIndexOrAppend(new Uri(@"http://cas.eu/UA/CommServer/UnitTests/ReferenceTest"))).Returns(1); List trace = new List(); Uri model = instance.ParseUAModelContext(asbcMock.Object, x => trace.Add(x)); Assert.IsNotNull(model); Assert.AreEqual("http://cas.eu/UA/CommServer/UnitTests/ReferenceTest", model.ToString()); Assert.AreEqual(0, trace.Count); asbcMock.Verify(x => x.GetURIIndexOrAppend(It.IsAny()), Times.Exactly(2)); } [TestMethod] public void ReadUADefinedTypesTest() { UANodeSet instance = UANodeSet.ReadUADefinedTypes(); Assert.IsNotNull(instance); Assert.IsNotNull(instance.NamespaceUris); Assert.IsNotNull(instance.Models); Mock asbcMock = new Mock(); asbcMock.Setup(x => x.GetURIIndexOrAppend(It.IsAny())); List trace = new List(); Uri model = instance.ParseUAModelContext(asbcMock.Object, x => trace.Add(x)); Assert.IsNotNull(model); Assert.AreEqual("http://opcfoundation.org/UA/", model.ToString()); Assert.AreEqual(0, trace.Count); asbcMock.Verify(x => x.GetURIIndexOrAppend(It.IsAny()), Times.Never); } [TestMethod] public void NodeClassEnumTest() { UANode _toTest = new UADataType(); Assert.AreEqual(NodeClassEnum.UADataType, _toTest.NodeClass); _toTest = new UAObject(); Assert.AreEqual(NodeClassEnum.UAObject, _toTest.NodeClass); _toTest = new UAObjectType(); Assert.AreEqual(NodeClassEnum.UAObjectType, _toTest.NodeClass); _toTest = new UAReferenceType(); Assert.AreEqual(NodeClassEnum.UAReferenceType, _toTest.NodeClass); _toTest = new UAVariable(); Assert.AreEqual(NodeClassEnum.UAVariable, _toTest.NodeClass); _toTest = new UAVariableType(); Assert.AreEqual(NodeClassEnum.UAVariableType, _toTest.NodeClass); _toTest = new UAView(); Assert.AreEqual(NodeClassEnum.UAView, _toTest.NodeClass); _toTest = new UAMethod(); Assert.AreEqual(NodeClassEnum.UAMethod, _toTest.NodeClass); } [TestMethod] public void RemoveInheritedKeepDifferentValuesTest() { UAObjectType _derived = GetDerivedFromComplexObjectType(); UAObjectType _base = GetComplexObjectType(); _derived.RemoveInheritedValues(_base); Assert.AreEqual(1, _derived.DisplayName.Length); Assert.AreEqual("DerivedFromComplexObjectType", _derived.DisplayName[0].Value); } [TestMethod] public void RemoveInheritedRemoveSameValuesTest() { UAObjectType _derived = GetDerivedFromComplexObjectType(); UAObjectType _base = GetDerivedFromComplexObjectType(); _derived.RemoveInheritedValues(_base); Assert.IsNull(_derived.DisplayName); } [TestMethod] [ExpectedException(typeof(NotImplementedException))] public void EqualsTypesTest() { UANode _derived = GetDerivedFromComplexObjectType(); UANode _base = GetDerivedFromComplexObjectType(); Assert.IsTrue(_derived.Equals(_base)); } [TestMethod] public void EqualsInstancesTest() { UAObject _derived = GetInstanceOfDerivedFromComplexObjectType(); UAObject _base = GetInstanceOfDerivedFromComplexObjectType(); _derived.RecalculateNodeIds(new ModelContextMock(), x => Assert.Fail()); _base.RecalculateNodeIds(new ModelContextMock(), x => Assert.Fail()); Assert.IsTrue(_derived.Equals(_base)); } [TestMethod] public void EqualsUAVariableTest() { UAVariable firsNode = new UAVariable() { NodeId = "ns=1;i=47", BrowseName = "EURange", ParentNodeId = "ns=1;i=43", DataType = "i=884", DisplayName = new XML.LocalizedText[] { new XML.LocalizedText() { Value = "EURange" } } }; UAVariable secondNode = new UAVariable() { NodeId = "i=17568", BrowseName = "EURange", ParentNodeId = "i=15318", DataType = "i=884", DisplayName = new XML.LocalizedText[] { new XML.LocalizedText() { Value = "EURange" } } }; firsNode.RecalculateNodeIds(new ModelContextMock(), x => Assert.Fail()); secondNode.RecalculateNodeIds(new ModelContextMock(), x => Assert.Fail()); Assert.IsTrue(firsNode.Equals(secondNode)); } [TestMethod] public void NotEqualsInstancesTest() { UAObject firsNode = GetInstanceOfDerivedFromComplexObjectType(); UAObject secondNode = GetInstanceOfDerivedFromComplexObjectType2(); firsNode.RecalculateNodeIds(new ModelContextMock(), x => Assert.Fail()); secondNode.RecalculateNodeIds(new ModelContextMock(), x => Assert.Fail()); Assert.IsFalse(firsNode.Equals(secondNode)); } [TestMethod] public void RecalculateNodeIdsUADataTypeTest() { UADataType _enumeration = new UADataType() { NodeId = "ns=1;i=11", BrowseName = "1:EnumerationDataType", DisplayName = new LocalizedText[] { new LocalizedText() { Value = "EnumerationDataType" } }, References = new Reference[] { new Reference() {ReferenceType = ReferenceTypeIds.HasProperty.ToString(), Value="ns=1;i=12", IsForward = true }, new Reference() {ReferenceType = ReferenceTypeIds.HasSubtype.ToString(), Value="ns=1;i=9", IsForward = false } }, Definition = new DataTypeDefinition() { Name = "EnumerationDataType", Field = new DataTypeField[] { new DataTypeField() { Name = "Field3", Value = 1 } , new DataTypeField() { Name = "Field4", DataType = "ns=1;i=24" } } } }; _enumeration.RecalculateNodeIds(new ModelContextMock(), x => Assert.Fail()); Assert.AreEqual("1:EnumerationDataType", _enumeration.BrowseName); Assert.AreEqual("ns=1;i=11", _enumeration.NodeId); Assert.IsNotNull(_enumeration.BrowseName); Assert.IsNotNull(_enumeration.GetIUANode().NodeId); Assert.AreEqual(1, _enumeration.GetIUANode().NodeId.NamespaceIndex); Assert.IsTrue(((IUANode)_enumeration).BrowseName.NamespaceIndexSpecified); Assert.AreEqual(1, _enumeration.References[0].ValueNodeId.NamespaceIndex); Assert.AreEqual(0, _enumeration.References[0].ReferenceTypeNodeid.NamespaceIndex); Assert.AreEqual(1, _enumeration.References[1].ValueNodeId.NamespaceIndex); Assert.AreEqual(0, _enumeration.References[1].ReferenceTypeNodeid.NamespaceIndex); Assert.AreEqual("i=24", ((IUADataType)_enumeration).Definition.Field[0].DataTypeNodeId.ToString()); Assert.AreEqual("ns=1;i=24", ((IUADataType)_enumeration).Definition.Field[1].DataTypeNodeId.ToString()); } #endregion tests #region test instrumentation private class ModelContextMock : IUAModelContext { public Uri ModelUri => throw new NotImplementedException(); public (QualifiedName browseName, NodeId nodeId) ImportBrowseName(string browseNameText, string nodeIdText, Action trace) { return (QualifiedName.Parse(browseNameText), NodeId.Parse(nodeIdText)); } public NodeId ImportNodeId(string nodeId, Action trace) { return NodeId.Parse(nodeId); } public void RegisterUAReferenceType(QualifiedName browseName) { throw new NotImplementedException(); } } private static UAObject GetInstanceOfDerivedFromComplexObjectType() { return new UAObject() { BrowseName = "1:InstanceOfDerivedFromComplexObjectType", NodeId = "ns=1;i=30", DisplayName = new XML.LocalizedText[] { new XML.LocalizedText() { Value = "InstanceOfDerivedFromComplexObjectType" } }, References = new XML.Reference[] { new XML.Reference(){ IsForward = true, ReferenceType = "HasProperty", Value = "ns=1;i=32" } } }; } private static UAObject GetInstanceOfDerivedFromComplexObjectType2() { return new UAObject() { BrowseName = "1:InstanceOfDerivedFromComplexObjectType", NodeId = "ns=1;i=30", DisplayName = new XML.LocalizedText[] { new XML.LocalizedText() { Value = "NewDisplayName" } }, References = new XML.Reference[] { new XML.Reference(){ IsForward = true, ReferenceType = "HasProperty", Value = "ns=1;i=32" } } }; } private static UAObjectType GetDerivedFromComplexObjectType() { return new UAObjectType() { NodeId = "ns=1;i=16", BrowseName = "1:DerivedFromComplexObjectType", DisplayName = new XML.LocalizedText[] { new XML.LocalizedText() { Value = "DerivedFromComplexObjectType" } }, References = new XML.Reference[] { new XML.Reference(){ IsForward = true, ReferenceType = "HasSubtype", Value = "ns=1;i=25" } } }; } private static UAObjectType GetComplexObjectType() { return new UAObjectType() { NodeId = "ns=1;i=1", BrowseName = "1:ComplexObjectType", DisplayName = new XML.LocalizedText[] { new XML.LocalizedText() { Value = "ComplexObjectType" } }, }; } #endregion test instrumentation } } ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/XML/UANodeUnitTest.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2022, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ using Microsoft.VisualStudio.TestTools.UnitTesting; using Moq; using System; using UAOOI.SemanticData.AddressSpace.Abstractions; using UAOOI.SemanticData.BuildingErrorsHandling; using UAOOI.SemanticData.UANodeSetValidation.DataSerialization; using UAOOI.SemanticData.UANodeSetValidation.UnitTest.Helpers; namespace UAOOI.SemanticData.UANodeSetValidation.XML { [TestClass] public class UANodeUnitTest { [TestMethod] public void ModelTableEntryTest() { ModelTableEntry item2Test = new ModelTableEntry() { AccessRestrictions = 0xC, ModelUri = "http://www.commsvr.com/", PublicationDate = DateTime.UtcNow.Date, PublicationDateSpecified = false, RequiredModel = null, RolePermissions = null, Version = "1.04" }; IModelTableEntry itemToCheck = item2Test; Assert.AreEqual(0xC, itemToCheck.AccessRestrictions); Assert.IsTrue(itemToCheck.ModelUri == new Uri("http://www.commsvr.com/")); Assert.IsFalse(itemToCheck.PublicationDate.HasValue); Assert.ThrowsException(() => itemToCheck.PublicationDate.Value); Assert.IsNull(itemToCheck.RequiredModel); itemToCheck.Version.CompareTo(new Version(1, 4)); } [TestMethod] [ExpectedException(typeof(NotImplementedException))] public void UAReferenceTypeEqualsTest() { UAReferenceType _first = TestData.CreateUAReferenceType(); UAReferenceType _second = TestData.CreateUAReferenceType(); Assert.IsTrue(_first == _second); } [TestMethod] public void RecalculateNodeIdsTest() { Mock modelMock = new Mock(); modelMock.Setup(x => x.ImportNodeId(It.IsAny(), It.IsAny>())).Returns>((q, w) => NodeId.Parse(q)); modelMock.Setup(x => x.ImportBrowseName(It.IsAny(), It.IsAny(), It.IsAny>())).Returns>((a, b, c) => (QualifiedName.Parse(a), NodeId.Parse(b))); //modelMock.Setup(x => x.ModelUri); UAObject toTest = TestData.CreateUAObject(); toTest.RecalculateNodeIds(modelMock.Object, XML => Assert.Fail()); Assert.IsNotNull(toTest.GetIUANode().NodeId); Assert.AreEqual("ns=1;i=1", toTest.GetIUANode().NodeId.ToString()); Assert.IsNotNull(((IUANode)toTest).BrowseName); Assert.AreEqual("1:NewUAObject", ((IUANode)toTest).BrowseName.ToString()); modelMock.Verify(x => x.ImportBrowseName(It.IsAny(), It.IsAny(), It.IsAny>()), Times.Once); modelMock.Verify(x => x.ImportNodeId(It.IsAny(), It.IsAny>()), Times.Exactly(5)); //modelMock.Verify(x => x.ModelUri, Times.Never); Assert.IsNotNull(toTest.References[0].ReferenceTypeNodeid); Assert.IsNotNull(toTest.References[1].ReferenceTypeNodeid); Assert.IsNotNull(toTest.References[0].ValueNodeId); Assert.IsNotNull(toTest.References[1].ValueNodeId); Assert.IsNotNull(toTest.ParentNodeIdNodeId); } [TestMethod] public void UANodeEquals() { UANode _first = TestData.CreateUAObject().Recalculate(); UANode _second = TestData.CreateUAObject().Recalculate(); Assert.AreNotSame(_first, _second); //to make sure we have two objects Assert.IsTrue(_first != null); Assert.IsTrue(null != _first); Assert.IsTrue(_first == _second); Assert.IsTrue(_second == _first); } [TestMethod] public void UAInstanceEqualsTest() { UAInstance _first = TestData.CreateUAObject().Recalculate(); UAInstance _second = TestData.CreateUAObject().Recalculate(); _second.ParentNodeId = System.Guid.NewGuid().ToString(); _second.NodeId = System.Guid.NewGuid().ToString(); _second.BrowseName = System.Guid.NewGuid().ToString(); Assert.IsTrue(_first == _second); } [TestMethod] public void UAObjectEqualsTest() { UAObject _first = TestData.CreateUAObject().Recalculate(); UAObject _second = TestData.CreateUAObject().Recalculate(); _second.EventNotifier ^= _second.EventNotifier; Assert.IsTrue(_first != _second); } } } ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/XMLModels/CorrectModels/DataTypeTest/DataTypeTest.Classes.cs ================================================ /* ======================================================================== * Copyright (c) 2005-2021 The OPC Foundation, Inc. All rights reserved. * * OPC Foundation MIT License 1.00 * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, * copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following * conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. * * The complete license agreement can be found here: * http://opcfoundation.org/License/MIT/1.00/ * ======================================================================*/ using System; using System.Collections.Generic; using System.Text; using System.Xml; using System.Runtime.Serialization; using ; namespace DataTypeTest { } ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/XMLModels/CorrectModels/DataTypeTest/DataTypeTest.Constants.cs ================================================ /* ======================================================================== * Copyright (c) 2005-2021 The OPC Foundation, Inc. All rights reserved. * * OPC Foundation MIT License 1.00 * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, * copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following * conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. * * The complete license agreement can be found here: * http://opcfoundation.org/License/MIT/1.00/ * ======================================================================*/ using System; using System.Collections.Generic; using System.Text; using System.Reflection; using System.Xml; using System.Runtime.Serialization; using ; namespace DataTypeTest { #region DataType Identifiers /// /// A class that declares constants for all DataTypes in the Model Design. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class DataTypes { /// /// The identifier for the AbstractEnumerationDataType DataType. /// public const uint AbstractEnumerationDataType = 9; /// /// The identifier for the EnumerationDataType DataType. /// public const uint EnumerationDataType = 11; /// /// The identifier for the AbstractStructure DataType. /// public const uint AbstractStructure = 13; /// /// The identifier for the DerivedStructure DataType. /// public const uint DerivedStructure = 22; } #endregion #region Object Identifiers /// /// A class that declares constants for all Objects in the Model Design. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class Objects { /// /// The identifier for the AbstractStructure_Encoding_DefaultBinary Object. /// public const uint AbstractStructure_Encoding_DefaultBinary = 18; /// /// The identifier for the DerivedStructure_Encoding_DefaultBinary Object. /// public const uint DerivedStructure_Encoding_DefaultBinary = 27; /// /// The identifier for the AbstractStructure_Encoding_DefaultXml Object. /// public const uint AbstractStructure_Encoding_DefaultXml = 14; /// /// The identifier for the DerivedStructure_Encoding_DefaultXml Object. /// public const uint DerivedStructure_Encoding_DefaultXml = 23; /// /// The identifier for the AbstractStructure_Encoding_DefaultJson Object. /// public const uint AbstractStructure_Encoding_DefaultJson = 31; /// /// The identifier for the DerivedStructure_Encoding_DefaultJson Object. /// public const uint DerivedStructure_Encoding_DefaultJson = 32; } #endregion #region Variable Identifiers /// /// A class that declares constants for all Variables in the Model Design. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class Variables { /// /// The identifier for the AbstractEnumerationDataType_EnumStrings Variable. /// public const uint AbstractEnumerationDataType_EnumStrings = 10; /// /// The identifier for the EnumerationDataType_EnumValues Variable. /// public const uint EnumerationDataType_EnumValues = 12; /// /// The identifier for the cas_BinarySchema Variable. /// public const uint cas_BinarySchema = 5; /// /// The identifier for the cas_BinarySchema_NamespaceUri Variable. /// public const uint cas_BinarySchema_NamespaceUri = 7; /// /// The identifier for the cas_BinarySchema_Deprecated Variable. /// public const uint cas_BinarySchema_Deprecated = 1; /// /// The identifier for the cas_BinarySchema_AbstractStructure Variable. /// public const uint cas_BinarySchema_AbstractStructure = 19; /// /// The identifier for the cas_BinarySchema_DerivedStructure Variable. /// public const uint cas_BinarySchema_DerivedStructure = 28; /// /// The identifier for the cas_XmlSchema Variable. /// public const uint cas_XmlSchema = 2; /// /// The identifier for the cas_XmlSchema_NamespaceUri Variable. /// public const uint cas_XmlSchema_NamespaceUri = 4; /// /// The identifier for the cas_XmlSchema_Deprecated Variable. /// public const uint cas_XmlSchema_Deprecated = 8; /// /// The identifier for the cas_XmlSchema_AbstractStructure Variable. /// public const uint cas_XmlSchema_AbstractStructure = 15; /// /// The identifier for the cas_XmlSchema_DerivedStructure Variable. /// public const uint cas_XmlSchema_DerivedStructure = 24; } #endregion #region DataType Node Identifiers /// /// A class that declares constants for all DataTypes in the Model Design. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class DataTypeIds { /// /// The identifier for the AbstractEnumerationDataType DataType. /// public static readonly ExpandedNodeId AbstractEnumerationDataType = new ExpandedNodeId(DataTypeTest.DataTypes.AbstractEnumerationDataType, DataTypeTest.Namespaces.cas); /// /// The identifier for the EnumerationDataType DataType. /// public static readonly ExpandedNodeId EnumerationDataType = new ExpandedNodeId(DataTypeTest.DataTypes.EnumerationDataType, DataTypeTest.Namespaces.cas); /// /// The identifier for the AbstractStructure DataType. /// public static readonly ExpandedNodeId AbstractStructure = new ExpandedNodeId(DataTypeTest.DataTypes.AbstractStructure, DataTypeTest.Namespaces.cas); /// /// The identifier for the DerivedStructure DataType. /// public static readonly ExpandedNodeId DerivedStructure = new ExpandedNodeId(DataTypeTest.DataTypes.DerivedStructure, DataTypeTest.Namespaces.cas); } #endregion #region Object Node Identifiers /// /// A class that declares constants for all Objects in the Model Design. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class ObjectIds { /// /// The identifier for the AbstractStructure_Encoding_DefaultBinary Object. /// public static readonly ExpandedNodeId AbstractStructure_Encoding_DefaultBinary = new ExpandedNodeId(DataTypeTest.Objects.AbstractStructure_Encoding_DefaultBinary, DataTypeTest.Namespaces.cas); /// /// The identifier for the DerivedStructure_Encoding_DefaultBinary Object. /// public static readonly ExpandedNodeId DerivedStructure_Encoding_DefaultBinary = new ExpandedNodeId(DataTypeTest.Objects.DerivedStructure_Encoding_DefaultBinary, DataTypeTest.Namespaces.cas); /// /// The identifier for the AbstractStructure_Encoding_DefaultXml Object. /// public static readonly ExpandedNodeId AbstractStructure_Encoding_DefaultXml = new ExpandedNodeId(DataTypeTest.Objects.AbstractStructure_Encoding_DefaultXml, DataTypeTest.Namespaces.cas); /// /// The identifier for the DerivedStructure_Encoding_DefaultXml Object. /// public static readonly ExpandedNodeId DerivedStructure_Encoding_DefaultXml = new ExpandedNodeId(DataTypeTest.Objects.DerivedStructure_Encoding_DefaultXml, DataTypeTest.Namespaces.cas); /// /// The identifier for the AbstractStructure_Encoding_DefaultJson Object. /// public static readonly ExpandedNodeId AbstractStructure_Encoding_DefaultJson = new ExpandedNodeId(DataTypeTest.Objects.AbstractStructure_Encoding_DefaultJson, DataTypeTest.Namespaces.cas); /// /// The identifier for the DerivedStructure_Encoding_DefaultJson Object. /// public static readonly ExpandedNodeId DerivedStructure_Encoding_DefaultJson = new ExpandedNodeId(DataTypeTest.Objects.DerivedStructure_Encoding_DefaultJson, DataTypeTest.Namespaces.cas); } #endregion #region Variable Node Identifiers /// /// A class that declares constants for all Variables in the Model Design. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class VariableIds { /// /// The identifier for the AbstractEnumerationDataType_EnumStrings Variable. /// public static readonly ExpandedNodeId AbstractEnumerationDataType_EnumStrings = new ExpandedNodeId(DataTypeTest.Variables.AbstractEnumerationDataType_EnumStrings, DataTypeTest.Namespaces.cas); /// /// The identifier for the EnumerationDataType_EnumValues Variable. /// public static readonly ExpandedNodeId EnumerationDataType_EnumValues = new ExpandedNodeId(DataTypeTest.Variables.EnumerationDataType_EnumValues, DataTypeTest.Namespaces.cas); /// /// The identifier for the cas_BinarySchema Variable. /// public static readonly ExpandedNodeId cas_BinarySchema = new ExpandedNodeId(DataTypeTest.Variables.cas_BinarySchema, DataTypeTest.Namespaces.cas); /// /// The identifier for the cas_BinarySchema_NamespaceUri Variable. /// public static readonly ExpandedNodeId cas_BinarySchema_NamespaceUri = new ExpandedNodeId(DataTypeTest.Variables.cas_BinarySchema_NamespaceUri, DataTypeTest.Namespaces.cas); /// /// The identifier for the cas_BinarySchema_Deprecated Variable. /// public static readonly ExpandedNodeId cas_BinarySchema_Deprecated = new ExpandedNodeId(DataTypeTest.Variables.cas_BinarySchema_Deprecated, DataTypeTest.Namespaces.cas); /// /// The identifier for the cas_BinarySchema_AbstractStructure Variable. /// public static readonly ExpandedNodeId cas_BinarySchema_AbstractStructure = new ExpandedNodeId(DataTypeTest.Variables.cas_BinarySchema_AbstractStructure, DataTypeTest.Namespaces.cas); /// /// The identifier for the cas_BinarySchema_DerivedStructure Variable. /// public static readonly ExpandedNodeId cas_BinarySchema_DerivedStructure = new ExpandedNodeId(DataTypeTest.Variables.cas_BinarySchema_DerivedStructure, DataTypeTest.Namespaces.cas); /// /// The identifier for the cas_XmlSchema Variable. /// public static readonly ExpandedNodeId cas_XmlSchema = new ExpandedNodeId(DataTypeTest.Variables.cas_XmlSchema, DataTypeTest.Namespaces.cas); /// /// The identifier for the cas_XmlSchema_NamespaceUri Variable. /// public static readonly ExpandedNodeId cas_XmlSchema_NamespaceUri = new ExpandedNodeId(DataTypeTest.Variables.cas_XmlSchema_NamespaceUri, DataTypeTest.Namespaces.cas); /// /// The identifier for the cas_XmlSchema_Deprecated Variable. /// public static readonly ExpandedNodeId cas_XmlSchema_Deprecated = new ExpandedNodeId(DataTypeTest.Variables.cas_XmlSchema_Deprecated, DataTypeTest.Namespaces.cas); /// /// The identifier for the cas_XmlSchema_AbstractStructure Variable. /// public static readonly ExpandedNodeId cas_XmlSchema_AbstractStructure = new ExpandedNodeId(DataTypeTest.Variables.cas_XmlSchema_AbstractStructure, DataTypeTest.Namespaces.cas); /// /// The identifier for the cas_XmlSchema_DerivedStructure Variable. /// public static readonly ExpandedNodeId cas_XmlSchema_DerivedStructure = new ExpandedNodeId(DataTypeTest.Variables.cas_XmlSchema_DerivedStructure, DataTypeTest.Namespaces.cas); } #endregion #region BrowseName Declarations /// /// Declares all of the BrowseNames used in the Model Design. /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class BrowseNames { /// /// The BrowseName for the AbstractEnumerationDataType component. /// public const string AbstractEnumerationDataType = "AbstractEnumerationDataType"; /// /// The BrowseName for the AbstractStructure component. /// public const string AbstractStructure = "AbstractStructure"; /// /// The BrowseName for the cas_BinarySchema component. /// public const string cas_BinarySchema = "DataTypeTest"; /// /// The BrowseName for the cas_XmlSchema component. /// public const string cas_XmlSchema = "DataTypeTest"; /// /// The BrowseName for the DerivedStructure component. /// public const string DerivedStructure = "DerivedStructure"; /// /// The BrowseName for the EnumerationDataType component. /// public const string EnumerationDataType = "EnumerationDataType"; } #endregion #region Namespace Declarations /// /// Defines constants for all namespaces referenced by the model design. /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class Namespaces { /// /// The URI for the cas namespace (.NET code namespace is 'DataTypeTest'). /// public const string cas = "http://cas.eu/UA/CommServer/UnitTests/DataTypeTest"; /// /// The URI for the ua namespace (.NET code namespace is ''). /// public const string ua = "http://opcfoundation.org/UA/"; } #endregion } ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/XMLModels/CorrectModels/DataTypeTest/DataTypeTest.DataTypes.cs ================================================ /* ======================================================================== * Copyright (c) 2005-2021 The OPC Foundation, Inc. All rights reserved. * * OPC Foundation MIT License 1.00 * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, * copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following * conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. * * The complete license agreement can be found here: * http://opcfoundation.org/License/MIT/1.00/ * ======================================================================*/ using System; using System.Collections.Generic; using System.Text; using System.Xml; using System.Runtime.Serialization; using ; namespace DataTypeTest { #region AbstractEnumerationDataType Enumeration #if (!OPCUA_EXCLUDE_AbstractEnumerationDataType) /// /// /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] [DataContract(Namespace = DataTypeTest.Namespaces.cas)] public enum AbstractEnumerationDataType { /// [EnumMember(Value = "Field1_0")] Field1 = 0, /// [EnumMember(Value = "Field2_1")] Field2 = 1, } #region AbstractEnumerationDataTypeCollection Class /// /// A collection of AbstractEnumerationDataType objects. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] [CollectionDataContract(Name = "ListOfAbstractEnumerationDataType", Namespace = DataTypeTest.Namespaces.cas, ItemName = "AbstractEnumerationDataType")] #if !NET_STANDARD public partial class AbstractEnumerationDataTypeCollection : List, ICloneable #else public partial class AbstractEnumerationDataTypeCollection : List #endif { #region Constructors /// /// Initializes the collection with default values. /// public AbstractEnumerationDataTypeCollection() {} /// /// Initializes the collection with an initial capacity. /// public AbstractEnumerationDataTypeCollection(int capacity) : base(capacity) {} /// /// Initializes the collection with another collection. /// public AbstractEnumerationDataTypeCollection(IEnumerable collection) : base(collection) {} #endregion #region Static Operators /// /// Converts an array to a collection. /// public static implicit operator AbstractEnumerationDataTypeCollection(AbstractEnumerationDataType[] values) { if (values != null) { return new AbstractEnumerationDataTypeCollection(values); } return new AbstractEnumerationDataTypeCollection(); } /// /// Converts a collection to an array. /// public static explicit operator AbstractEnumerationDataType[](AbstractEnumerationDataTypeCollection values) { if (values != null) { return values.ToArray(); } return null; } #endregion #if !NET_STANDARD #region ICloneable Methods /// /// Creates a deep copy of the collection. /// public object Clone() { return (AbstractEnumerationDataTypeCollection)this.MemberwiseClone(); } #endregion #endif /// public new object MemberwiseClone() { AbstractEnumerationDataTypeCollection clone = new AbstractEnumerationDataTypeCollection(this.Count); for (int ii = 0; ii < this.Count; ii++) { clone.Add((AbstractEnumerationDataType)Utils.Clone(this[ii])); } return clone; } } #endregion #endif #endregion #region EnumerationDataType Enumeration #if (!OPCUA_EXCLUDE_EnumerationDataType) /// /// Enumeration DataType derived from abstract type /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] [DataContract(Namespace = DataTypeTest.Namespaces.cas)] public enum EnumerationDataType { /// [EnumMember(Value = "Field3_1")] Field3 = 1, } #region EnumerationDataTypeCollection Class /// /// A collection of EnumerationDataType objects. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] [CollectionDataContract(Name = "ListOfEnumerationDataType", Namespace = DataTypeTest.Namespaces.cas, ItemName = "EnumerationDataType")] #if !NET_STANDARD public partial class EnumerationDataTypeCollection : List, ICloneable #else public partial class EnumerationDataTypeCollection : List #endif { #region Constructors /// /// Initializes the collection with default values. /// public EnumerationDataTypeCollection() {} /// /// Initializes the collection with an initial capacity. /// public EnumerationDataTypeCollection(int capacity) : base(capacity) {} /// /// Initializes the collection with another collection. /// public EnumerationDataTypeCollection(IEnumerable collection) : base(collection) {} #endregion #region Static Operators /// /// Converts an array to a collection. /// public static implicit operator EnumerationDataTypeCollection(EnumerationDataType[] values) { if (values != null) { return new EnumerationDataTypeCollection(values); } return new EnumerationDataTypeCollection(); } /// /// Converts a collection to an array. /// public static explicit operator EnumerationDataType[](EnumerationDataTypeCollection values) { if (values != null) { return values.ToArray(); } return null; } #endregion #if !NET_STANDARD #region ICloneable Methods /// /// Creates a deep copy of the collection. /// public object Clone() { return (EnumerationDataTypeCollection)this.MemberwiseClone(); } #endregion #endif /// public new object MemberwiseClone() { EnumerationDataTypeCollection clone = new EnumerationDataTypeCollection(this.Count); for (int ii = 0; ii < this.Count; ii++) { clone.Add((EnumerationDataType)Utils.Clone(this[ii])); } return clone; } } #endregion #endif #endregion #region AbstractStructure Class #if (!OPCUA_EXCLUDE_AbstractStructure) /// /// Abstract structure /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] [DataContract(Namespace = DataTypeTest.Namespaces.cas)] public partial class AbstractStructure : IEncodeable { #region Constructors /// /// The default constructor. /// public AbstractStructure() { Initialize(); } /// /// Called by the .NET framework during deserialization. /// [OnDeserializing] private void Initialize(StreamingContext context) { Initialize(); } /// /// Sets private members to default values. /// private void Initialize() { m_number = (double)0; } #endregion #region Public Properties /// [DataMember(Name = "Number", IsRequired = false, Order = 1)] public Variant Number { get { return m_number; } set { m_number = value; } } #endregion #region IEncodeable Members /// public virtual ExpandedNodeId TypeId { get { return DataTypeIds.AbstractStructure; } } /// public virtual ExpandedNodeId BinaryEncodingId { get { return ObjectIds.AbstractStructure_Encoding_DefaultBinary; } } /// public virtual ExpandedNodeId XmlEncodingId { get { return ObjectIds.AbstractStructure_Encoding_DefaultXml; } } /// public virtual void Encode(IEncoder encoder) { encoder.PushNamespace(DataTypeTest.Namespaces.cas); encoder.WriteVariant("Number", Number); encoder.PopNamespace(); } /// public virtual void Decode(IDecoder decoder) { decoder.PushNamespace(DataTypeTest.Namespaces.cas); Number = decoder.ReadVariant("Number"); decoder.PopNamespace(); } /// public virtual bool IsEqual(IEncodeable encodeable) { if (Object.ReferenceEquals(this, encodeable)) { return true; } AbstractStructure value = encodeable as AbstractStructure; if (value == null) { return false; } if (!Utils.IsEqual(m_number, value.m_number)) return false; return true; } #if !NET_STANDARD /// public virtual object Clone() { return (AbstractStructure)this.MemberwiseClone(); } #endif /// public new object MemberwiseClone() { AbstractStructure clone = (AbstractStructure)base.MemberwiseClone(); clone.m_number = (Variant)Utils.Clone(this.m_number); return clone; } #endregion #region Private Fields private Variant m_number; #endregion } #region AbstractStructureCollection Class /// /// A collection of AbstractStructure objects. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] [CollectionDataContract(Name = "ListOfAbstractStructure", Namespace = DataTypeTest.Namespaces.cas, ItemName = "AbstractStructure")] #if !NET_STANDARD public partial class AbstractStructureCollection : List, ICloneable #else public partial class AbstractStructureCollection : List #endif { #region Constructors /// /// Initializes the collection with default values. /// public AbstractStructureCollection() {} /// /// Initializes the collection with an initial capacity. /// public AbstractStructureCollection(int capacity) : base(capacity) {} /// /// Initializes the collection with another collection. /// public AbstractStructureCollection(IEnumerable collection) : base(collection) {} #endregion #region Static Operators /// /// Converts an array to a collection. /// public static implicit operator AbstractStructureCollection(AbstractStructure[] values) { if (values != null) { return new AbstractStructureCollection(values); } return new AbstractStructureCollection(); } /// /// Converts a collection to an array. /// public static explicit operator AbstractStructure[](AbstractStructureCollection values) { if (values != null) { return values.ToArray(); } return null; } #endregion #if !NET_STANDARD #region ICloneable Methods /// /// Creates a deep copy of the collection. /// public object Clone() { return (AbstractStructureCollection)this.MemberwiseClone(); } #endregion #endif /// public new object MemberwiseClone() { AbstractStructureCollection clone = new AbstractStructureCollection(this.Count); for (int ii = 0; ii < this.Count; ii++) { clone.Add((AbstractStructure)Utils.Clone(this[ii])); } return clone; } } #endregion #endif #endregion #region DerivedStructure Class #if (!OPCUA_EXCLUDE_DerivedStructure) /// /// /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] [DataContract(Namespace = DataTypeTest.Namespaces.cas)] public partial class DerivedStructure : AbstractStructure { #region Constructors /// /// The default constructor. /// public DerivedStructure() { Initialize(); } /// /// Called by the .NET framework during deserialization. /// [OnDeserializing] private void Initialize(StreamingContext context) { Initialize(); } /// /// Sets private members to default values. /// private void Initialize() { m_number = (int)0; } #endregion #region Public Properties /// [DataMember(Name = "Number", IsRequired = false, Order = 1)] public int Number { get { return m_number; } set { m_number = value; } } #endregion #region IEncodeable Members /// public override ExpandedNodeId TypeId { get { return DataTypeIds.DerivedStructure; } } /// public override ExpandedNodeId BinaryEncodingId { get { return ObjectIds.DerivedStructure_Encoding_DefaultBinary; } } /// public override ExpandedNodeId XmlEncodingId { get { return ObjectIds.DerivedStructure_Encoding_DefaultXml; } } /// public override void Encode(IEncoder encoder) { base.Encode(encoder); encoder.PushNamespace(DataTypeTest.Namespaces.cas); encoder.WriteInt32("Number", Number); encoder.PopNamespace(); } /// public override void Decode(IDecoder decoder) { base.Decode(decoder); decoder.PushNamespace(DataTypeTest.Namespaces.cas); Number = decoder.ReadInt32("Number"); decoder.PopNamespace(); } /// public override bool IsEqual(IEncodeable encodeable) { if (Object.ReferenceEquals(this, encodeable)) { return true; } DerivedStructure value = encodeable as DerivedStructure; if (value == null) { return false; } if (!base.IsEqual(encodeable)) return false; if (!Utils.IsEqual(m_number, value.m_number)) return false; return true; } #if !NET_STANDARD /// public override object Clone() { return (DerivedStructure)this.MemberwiseClone(); } #endif /// public new object MemberwiseClone() { DerivedStructure clone = (DerivedStructure)base.MemberwiseClone(); clone.m_number = (int)Utils.Clone(this.m_number); return clone; } #endregion #region Private Fields private int m_number; #endregion } #region DerivedStructureCollection Class /// /// A collection of DerivedStructure objects. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] [CollectionDataContract(Name = "ListOfDerivedStructure", Namespace = DataTypeTest.Namespaces.cas, ItemName = "DerivedStructure")] #if !NET_STANDARD public partial class DerivedStructureCollection : List, ICloneable #else public partial class DerivedStructureCollection : List #endif { #region Constructors /// /// Initializes the collection with default values. /// public DerivedStructureCollection() {} /// /// Initializes the collection with an initial capacity. /// public DerivedStructureCollection(int capacity) : base(capacity) {} /// /// Initializes the collection with another collection. /// public DerivedStructureCollection(IEnumerable collection) : base(collection) {} #endregion #region Static Operators /// /// Converts an array to a collection. /// public static implicit operator DerivedStructureCollection(DerivedStructure[] values) { if (values != null) { return new DerivedStructureCollection(values); } return new DerivedStructureCollection(); } /// /// Converts a collection to an array. /// public static explicit operator DerivedStructure[](DerivedStructureCollection values) { if (values != null) { return values.ToArray(); } return null; } #endregion #if !NET_STANDARD #region ICloneable Methods /// /// Creates a deep copy of the collection. /// public object Clone() { return (DerivedStructureCollection)this.MemberwiseClone(); } #endregion #endif /// public new object MemberwiseClone() { DerivedStructureCollection clone = new DerivedStructureCollection(this.Count); for (int ii = 0; ii < this.Count; ii++) { clone.Add((DerivedStructure)Utils.Clone(this[ii])); } return clone; } } #endregion #endif #endregion } ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/XMLModels/CorrectModels/DataTypeTest/DataTypeTest.NodeIds.csv ================================================ AbstractEnumerationDataType,9,DataType AbstractStructure,13,DataType AbstractStructure_Encoding_DefaultBinary,18,Object AbstractStructure_Encoding_DefaultJson,31,Object AbstractStructure_Encoding_DefaultXml,14,Object cas_BinarySchema,5,Variable cas_XmlSchema,2,Variable DerivedStructure,22,DataType DerivedStructure_Encoding_DefaultBinary,27,Object DerivedStructure_Encoding_DefaultJson,32,Object DerivedStructure_Encoding_DefaultXml,23,Object EnumerationDataType,11,DataType ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/XMLModels/CorrectModels/DataTypeTest/DataTypeTest.NodeSet.xml ================================================  http://opcfoundation.org/UA/ http://cas.eu/UA/CommServer/UnitTests/DataTypeTest ns=1;i=1 Variable_2 0 Deprecated Deprecated 0 0 0 i=46 true ns=1;i=5 i=40 false i=68 true i=1 -1 1 1 0 false 0 ns=1;i=2 Variable_2 1 DataTypeTest DataTypeTest 0 0 0 i=40 false i=72 i=47 true i=92 i=46 false ns=1;i=4 i=46 false ns=1;i=8 i=47 false ns=1;i=15 i=47 false ns=1;i=24 PHhzOnNjaGVtYQ0KICB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEi DQogIHhtbG5zOnVhPSJodHRwOi8vb3BjZm91bmRhdGlvbi5vcmcvVUEvMjAwOC8wMi9UeXBlcy54 c2QiDQogIHhtbG5zOnRucz0iaHR0cDovL2Nhcy5ldS9VQS9Db21tU2VydmVyL1VuaXRUZXN0cy9E YXRhVHlwZVRlc3QiDQogIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2Nhcy5ldS9VQS9Db21tU2Vy dmVyL1VuaXRUZXN0cy9EYXRhVHlwZVRlc3QiDQogIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlm aWVkIg0KPg0KICA8eHM6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL29wY2ZvdW5kYXRpb24ub3Jn L1VBLyIgLz4NCg0KICA8eHM6c2ltcGxlVHlwZSAgbmFtZT0iQWJzdHJhY3RFbnVtZXJhdGlvbkRh dGFUeXBlIj4NCiAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIj4NCiAgICAgIDx4 czplbnVtZXJhdGlvbiB2YWx1ZT0iRmllbGQxXzAiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24g dmFsdWU9IkZpZWxkMl8xIiAvPg0KICAgIDwveHM6cmVzdHJpY3Rpb24+DQogIDwveHM6c2ltcGxl VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iQWJzdHJhY3RFbnVtZXJhdGlvbkRhdGFUeXBlIiB0 eXBlPSJ0bnM6QWJzdHJhY3RFbnVtZXJhdGlvbkRhdGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4 VHlwZSBuYW1lPSJMaXN0T2ZBYnN0cmFjdEVudW1lcmF0aW9uRGF0YVR5cGUiPg0KICAgIDx4czpz ZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkFic3RyYWN0RW51bWVyYXRpb25EYXRh VHlwZSIgdHlwZT0idG5zOkFic3RyYWN0RW51bWVyYXRpb25EYXRhVHlwZSIgbWluT2NjdXJzPSIw IiBtYXhPY2N1cnM9InVuYm91bmRlZCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNv bXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZBYnN0cmFjdEVudW1lcmF0aW9u RGF0YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZBYnN0cmFjdEVudW1lcmF0aW9uRGF0YVR5cGUiIG5p bGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOnNpbXBsZVR5cGUgIG5hbWU9IkVu dW1lcmF0aW9uRGF0YVR5cGUiPg0KICAgIDx4czphbm5vdGF0aW9uPg0KICAgICAgPHhzOmRvY3Vt ZW50YXRpb24+RW51bWVyYXRpb24gRGF0YVR5cGUgZGVyaXZlZCBmcm9tIGFic3RyYWN0IHR5cGU8 L3hzOmRvY3VtZW50YXRpb24+DQogICAgPC94czphbm5vdGF0aW9uPg0KICAgIDx4czpyZXN0cmlj dGlvbiBiYXNlPSJ4czpzdHJpbmciPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJGaWVs ZDNfMSIgLz4NCiAgICA8L3hzOnJlc3RyaWN0aW9uPg0KICA8L3hzOnNpbXBsZVR5cGU+DQogIDx4 czplbGVtZW50IG5hbWU9IkVudW1lcmF0aW9uRGF0YVR5cGUiIHR5cGU9InRuczpFbnVtZXJhdGlv bkRhdGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZFbnVtZXJhdGlv bkRhdGFUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJF bnVtZXJhdGlvbkRhdGFUeXBlIiB0eXBlPSJ0bnM6RW51bWVyYXRpb25EYXRhVHlwZSIgbWluT2Nj dXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8 L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZFbnVtZXJhdGlvbkRh dGFUeXBlIiB0eXBlPSJ0bnM6TGlzdE9mRW51bWVyYXRpb25EYXRhVHlwZSIgbmlsbGFibGU9InRy dWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iQWJzdHJhY3RTdHJ1 Y3R1cmUiPg0KICAgIDx4czphbm5vdGF0aW9uPg0KICAgICAgPHhzOmRvY3VtZW50YXRpb24+QWJz dHJhY3Qgc3RydWN0dXJlPC94czpkb2N1bWVudGF0aW9uPg0KICAgIDwveHM6YW5ub3RhdGlvbj4N CiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJOdW1iZXIiIHR5cGU9 InVhOlZhcmlhbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hz OmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJBYnN0cmFjdFN0cnVjdHVyZSIgdHlw ZT0idG5zOkFic3RyYWN0U3RydWN0dXJlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJM aXN0T2ZBYnN0cmFjdFN0cnVjdHVyZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVs ZW1lbnQgbmFtZT0iQWJzdHJhY3RTdHJ1Y3R1cmUiIHR5cGU9InRuczpBYnN0cmFjdFN0cnVjdHVy ZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+ DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQg bmFtZT0iTGlzdE9mQWJzdHJhY3RTdHJ1Y3R1cmUiIHR5cGU9InRuczpMaXN0T2ZBYnN0cmFjdFN0 cnVjdHVyZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5 cGUgbmFtZT0iRGVyaXZlZFN0cnVjdHVyZSI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVk PSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpBYnN0cmFjdFN0cnVjdHVy ZSI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJO dW1iZXIiIHR5cGU9InhzOmludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICA8L3hzOnNlcXVl bmNlPg0KICAgICAgPC94czpleHRlbnNpb24+DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAg PC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iRGVyaXZlZFN0cnVjdHVyZSIg dHlwZT0idG5zOkRlcml2ZWRTdHJ1Y3R1cmUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9 Ikxpc3RPZkRlcml2ZWRTdHJ1Y3R1cmUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czpl bGVtZW50IG5hbWU9IkRlcml2ZWRTdHJ1Y3R1cmUiIHR5cGU9InRuczpEZXJpdmVkU3RydWN0dXJl IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4N CiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBu YW1lPSJMaXN0T2ZEZXJpdmVkU3RydWN0dXJlIiB0eXBlPSJ0bnM6TGlzdE9mRGVyaXZlZFN0cnVj dHVyZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KPC94czpzY2hlbWE+ i=15 -1 1 1 0 false 0 ns=1;i=4 Variable_2 0 NamespaceUri NamespaceUri 0 0 0 i=46 true ns=1;i=2 i=40 false i=68 http://cas.eu/UA/CommServer/UnitTests/DataTypeTest i=12 -1 1 1 0 false 0 ns=1;i=5 Variable_2 1 DataTypeTest DataTypeTest 0 0 0 i=40 false i=72 i=47 true i=93 i=46 false ns=1;i=7 i=46 false ns=1;i=1 i=47 false ns=1;i=19 i=47 false ns=1;i=28 PG9wYzpUeXBlRGljdGlvbmFyeQ0KICB4bWxuczpvcGM9Imh0dHA6Ly9vcGNmb3VuZGF0aW9uLm9y Zy9CaW5hcnlTY2hlbWEvIg0KICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1M U2NoZW1hLWluc3RhbmNlIg0KICB4bWxuczp1YT0iaHR0cDovL29wY2ZvdW5kYXRpb24ub3JnL1VB LyINCiAgeG1sbnM6dG5zPSJodHRwOi8vY2FzLmV1L1VBL0NvbW1TZXJ2ZXIvVW5pdFRlc3RzL0Rh dGFUeXBlVGVzdCINCiAgRGVmYXVsdEJ5dGVPcmRlcj0iTGl0dGxlRW5kaWFuIg0KICBUYXJnZXRO YW1lc3BhY2U9Imh0dHA6Ly9jYXMuZXUvVUEvQ29tbVNlcnZlci9Vbml0VGVzdHMvRGF0YVR5cGVU ZXN0Ig0KPg0KICA8b3BjOkltcG9ydCBOYW1lc3BhY2U9Imh0dHA6Ly9vcGNmb3VuZGF0aW9uLm9y Zy9VQS8iIExvY2F0aW9uPSIuQmluYXJ5U2NoZW1hLmJzZCIvPg0KDQogIDxvcGM6RW51bWVyYXRl ZFR5cGUgTmFtZT0iQWJzdHJhY3RFbnVtZXJhdGlvbkRhdGFUeXBlIiBMZW5ndGhJbkJpdHM9IjMy Ij4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJGaWVsZDEiIFZhbHVlPSIwIiAvPg0K ICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkZpZWxkMiIgVmFsdWU9IjEiIC8+DQogIDwv b3BjOkVudW1lcmF0ZWRUeXBlPg0KDQogIDxvcGM6RW51bWVyYXRlZFR5cGUgTmFtZT0iRW51bWVy YXRpb25EYXRhVHlwZSIgTGVuZ3RoSW5CaXRzPSIzMiI+DQogICAgPG9wYzpEb2N1bWVudGF0aW9u PkVudW1lcmF0aW9uIERhdGFUeXBlIGRlcml2ZWQgZnJvbSBhYnN0cmFjdCB0eXBlPC9vcGM6RG9j dW1lbnRhdGlvbj4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJGaWVsZDEiIFZhbHVl PSIwIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkZpZWxkMiIgVmFsdWU9IjEi IC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iRmllbGQzIiBWYWx1ZT0iMSIgLz4N CiAgPC9vcGM6RW51bWVyYXRlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJB YnN0cmFjdFN0cnVjdHVyZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9w YzpEb2N1bWVudGF0aW9uPkFic3RyYWN0IHN0cnVjdHVyZTwvb3BjOkRvY3VtZW50YXRpb24+DQog ICAgPG9wYzpGaWVsZCBOYW1lPSJOdW1iZXIiIFR5cGVOYW1lPSJ1YTpWYXJpYW50IiAvPg0KICA8 L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkRlcml2 ZWRTdHJ1Y3R1cmUiIEJhc2VUeXBlPSJ0bnM6QWJzdHJhY3RTdHJ1Y3R1cmUiPg0KICAgIDxvcGM6 RmllbGQgTmFtZT0iTnVtYmVyIiBUeXBlTmFtZT0idWE6VmFyaWFudCIgU291cmNlVHlwZT0idG5z OkFic3RyYWN0U3RydWN0dXJlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTnVtYmVyIiBUeXBl TmFtZT0ib3BjOkludDMyIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KPC9vcGM6VHlw ZURpY3Rpb25hcnk+ i=15 -1 1 1 0 false 0 ns=1;i=7 Variable_2 0 NamespaceUri NamespaceUri 0 0 0 i=46 true ns=1;i=5 i=40 false i=68 http://cas.eu/UA/CommServer/UnitTests/DataTypeTest i=12 -1 1 1 0 false 0 ns=1;i=8 Variable_2 0 Deprecated Deprecated 0 0 0 i=46 true ns=1;i=2 i=40 false i=68 true i=1 -1 1 1 0 false 0 ns=1;i=9 DataType_64 1 AbstractEnumerationDataType AbstractEnumerationDataType 0 0 0 i=45 true i=29 i=46 false ns=1;i=10 i=45 false ns=1;i=11 true ns=1;i=10 Variable_2 0 EnumStrings EnumStrings 0 0 0 i=46 true ns=1;i=9 i=40 false i=68 Field1 Field2 i=21 1 0 1 1 0 false 0 ns=1;i=11 DataType_64 1 EnumerationDataType EnumerationDataType Enumeration DataType derived from abstract type 0 0 0 i=45 true ns=1;i=9 i=46 false ns=1;i=12 false ns=1;i=12 Variable_2 0 EnumValues EnumValues 0 0 0 i=46 true ns=1;i=11 i=40 false i=68 i=7616 1 Field3 i=7594 1 0 1 1 0 false 0 ns=1;i=13 DataType_64 1 AbstractStructure AbstractStructure Abstract structure 0 0 0 i=45 true i=22 i=45 false ns=1;i=22 i=38 false ns=1;i=18 i=38 false ns=1;i=14 i=38 false ns=1;i=31 true ns=1;i=14 Object_1 0 Default XML Default XML 0 0 0 i=40 false i=76 i=38 true ns=1;i=13 i=39 false ns=1;i=15 0 ns=1;i=15 Variable_2 1 AbstractStructure AbstractStructure 0 0 0 i=47 true ns=1;i=2 i=40 false i=69 //xs:element[@name='AbstractStructure'] i=12 -1 1 1 0 false 0 ns=1;i=18 Object_1 0 Default Binary Default Binary 0 0 0 i=40 false i=76 i=38 true ns=1;i=13 i=39 false ns=1;i=19 0 ns=1;i=19 Variable_2 1 AbstractStructure AbstractStructure 0 0 0 i=47 true ns=1;i=5 i=40 false i=69 AbstractStructure i=12 -1 1 1 0 false 0 ns=1;i=22 DataType_64 1 DerivedStructure DerivedStructure 0 0 0 i=45 true ns=1;i=13 i=38 false ns=1;i=27 i=38 false ns=1;i=23 i=38 false ns=1;i=32 false ns=1;i=23 Object_1 0 Default XML Default XML 0 0 0 i=40 false i=76 i=38 true ns=1;i=22 i=39 false ns=1;i=24 0 ns=1;i=24 Variable_2 1 DerivedStructure DerivedStructure 0 0 0 i=47 true ns=1;i=2 i=40 false i=69 //xs:element[@name='DerivedStructure'] i=12 -1 1 1 0 false 0 ns=1;i=27 Object_1 0 Default Binary Default Binary 0 0 0 i=40 false i=76 i=38 true ns=1;i=22 i=39 false ns=1;i=28 0 ns=1;i=28 Variable_2 1 DerivedStructure DerivedStructure 0 0 0 i=47 true ns=1;i=5 i=40 false i=69 DerivedStructure i=12 -1 1 1 0 false 0 ns=1;i=31 Object_1 0 Default JSON Default JSON 0 0 0 i=40 false i=76 i=38 true ns=1;i=13 0 ns=1;i=32 Object_1 0 Default JSON Default JSON 0 0 0 i=40 false i=76 i=38 true ns=1;i=22 0 ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/XMLModels/CorrectModels/DataTypeTest/DataTypeTest.NodeSet2.xml ================================================  http://cas.eu/UA/CommServer/UnitTests/DataTypeTest i=1 i=2 i=3 i=4 i=5 i=6 i=7 i=8 i=9 i=10 i=11 i=13 i=12 i=15 i=14 i=16 i=17 i=18 i=20 i=21 i=19 i=22 i=26 i=27 i=28 i=47 i=46 i=35 i=36 i=48 i=45 i=40 i=37 i=38 i=39 i=53 i=52 i=51 i=54 i=9004 i=9005 i=17597 i=9006 i=15112 i=17604 i=17603 AbstractEnumerationDataType ns=1;i=10 i=29 EnumStrings i=68 ns=1;i=9 Field1 Field2 EnumerationDataType Enumeration DataType derived from abstract type ns=1;i=12 ns=1;i=9 EnumValues i=68 ns=1;i=11 i=7616 1 Field3 AbstractStructure Abstract structure i=22 DerivedStructure ns=1;i=13 Derived from Number Default Binary ns=1;i=13 ns=1;i=19 i=76 Default Binary ns=1;i=22 ns=1;i=28 i=76 DataTypeTest ns=1;i=7 ns=1;i=1 ns=1;i=19 ns=1;i=28 i=93 i=72 PG9wYzpUeXBlRGljdGlvbmFyeQ0KICB4bWxuczpvcGM9Imh0dHA6Ly9vcGNmb3VuZGF0aW9uLm9y Zy9CaW5hcnlTY2hlbWEvIg0KICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1M U2NoZW1hLWluc3RhbmNlIg0KICB4bWxuczp1YT0iaHR0cDovL29wY2ZvdW5kYXRpb24ub3JnL1VB LyINCiAgeG1sbnM6dG5zPSJodHRwOi8vY2FzLmV1L1VBL0NvbW1TZXJ2ZXIvVW5pdFRlc3RzL0Rh dGFUeXBlVGVzdCINCiAgRGVmYXVsdEJ5dGVPcmRlcj0iTGl0dGxlRW5kaWFuIg0KICBUYXJnZXRO YW1lc3BhY2U9Imh0dHA6Ly9jYXMuZXUvVUEvQ29tbVNlcnZlci9Vbml0VGVzdHMvRGF0YVR5cGVU ZXN0Ig0KPg0KICA8b3BjOkltcG9ydCBOYW1lc3BhY2U9Imh0dHA6Ly9vcGNmb3VuZGF0aW9uLm9y Zy9VQS8iIExvY2F0aW9uPSIuQmluYXJ5U2NoZW1hLmJzZCIvPg0KDQogIDxvcGM6RW51bWVyYXRl ZFR5cGUgTmFtZT0iQWJzdHJhY3RFbnVtZXJhdGlvbkRhdGFUeXBlIiBMZW5ndGhJbkJpdHM9IjMy Ij4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJGaWVsZDEiIFZhbHVlPSIwIiAvPg0K ICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkZpZWxkMiIgVmFsdWU9IjEiIC8+DQogIDwv b3BjOkVudW1lcmF0ZWRUeXBlPg0KDQogIDxvcGM6RW51bWVyYXRlZFR5cGUgTmFtZT0iRW51bWVy YXRpb25EYXRhVHlwZSIgTGVuZ3RoSW5CaXRzPSIzMiI+DQogICAgPG9wYzpEb2N1bWVudGF0aW9u PkVudW1lcmF0aW9uIERhdGFUeXBlIGRlcml2ZWQgZnJvbSBhYnN0cmFjdCB0eXBlPC9vcGM6RG9j dW1lbnRhdGlvbj4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJGaWVsZDEiIFZhbHVl PSIwIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkZpZWxkMiIgVmFsdWU9IjEi IC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iRmllbGQzIiBWYWx1ZT0iMSIgLz4N CiAgPC9vcGM6RW51bWVyYXRlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJB YnN0cmFjdFN0cnVjdHVyZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9w YzpEb2N1bWVudGF0aW9uPkFic3RyYWN0IHN0cnVjdHVyZTwvb3BjOkRvY3VtZW50YXRpb24+DQog ICAgPG9wYzpGaWVsZCBOYW1lPSJOdW1iZXIiIFR5cGVOYW1lPSJ1YTpWYXJpYW50IiAvPg0KICA8 L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkRlcml2 ZWRTdHJ1Y3R1cmUiIEJhc2VUeXBlPSJ0bnM6QWJzdHJhY3RTdHJ1Y3R1cmUiPg0KICAgIDxvcGM6 RmllbGQgTmFtZT0iTnVtYmVyIiBUeXBlTmFtZT0idWE6VmFyaWFudCIgU291cmNlVHlwZT0idG5z OkFic3RyYWN0U3RydWN0dXJlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTnVtYmVyIiBUeXBl TmFtZT0ib3BjOkludDMyIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KPC9vcGM6VHlw ZURpY3Rpb25hcnk+ NamespaceUri i=68 ns=1;i=5 http://cas.eu/UA/CommServer/UnitTests/DataTypeTest Deprecated i=68 ns=1;i=5 true AbstractStructure i=69 ns=1;i=5 AbstractStructure DerivedStructure i=69 ns=1;i=5 DerivedStructure Default XML ns=1;i=13 ns=1;i=15 i=76 Default XML ns=1;i=22 ns=1;i=24 i=76 DataTypeTest ns=1;i=4 ns=1;i=8 ns=1;i=15 ns=1;i=24 i=92 i=72 PHhzOnNjaGVtYQ0KICB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEi DQogIHhtbG5zOnVhPSJodHRwOi8vb3BjZm91bmRhdGlvbi5vcmcvVUEvMjAwOC8wMi9UeXBlcy54 c2QiDQogIHhtbG5zOnRucz0iaHR0cDovL2Nhcy5ldS9VQS9Db21tU2VydmVyL1VuaXRUZXN0cy9E YXRhVHlwZVRlc3QiDQogIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2Nhcy5ldS9VQS9Db21tU2Vy dmVyL1VuaXRUZXN0cy9EYXRhVHlwZVRlc3QiDQogIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlm aWVkIg0KPg0KICA8eHM6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL29wY2ZvdW5kYXRpb24ub3Jn L1VBLyIgLz4NCg0KICA8eHM6c2ltcGxlVHlwZSAgbmFtZT0iQWJzdHJhY3RFbnVtZXJhdGlvbkRh dGFUeXBlIj4NCiAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIj4NCiAgICAgIDx4 czplbnVtZXJhdGlvbiB2YWx1ZT0iRmllbGQxXzAiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24g dmFsdWU9IkZpZWxkMl8xIiAvPg0KICAgIDwveHM6cmVzdHJpY3Rpb24+DQogIDwveHM6c2ltcGxl VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iQWJzdHJhY3RFbnVtZXJhdGlvbkRhdGFUeXBlIiB0 eXBlPSJ0bnM6QWJzdHJhY3RFbnVtZXJhdGlvbkRhdGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4 VHlwZSBuYW1lPSJMaXN0T2ZBYnN0cmFjdEVudW1lcmF0aW9uRGF0YVR5cGUiPg0KICAgIDx4czpz ZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkFic3RyYWN0RW51bWVyYXRpb25EYXRh VHlwZSIgdHlwZT0idG5zOkFic3RyYWN0RW51bWVyYXRpb25EYXRhVHlwZSIgbWluT2NjdXJzPSIw IiBtYXhPY2N1cnM9InVuYm91bmRlZCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNv bXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZBYnN0cmFjdEVudW1lcmF0aW9u RGF0YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZBYnN0cmFjdEVudW1lcmF0aW9uRGF0YVR5cGUiIG5p bGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOnNpbXBsZVR5cGUgIG5hbWU9IkVu dW1lcmF0aW9uRGF0YVR5cGUiPg0KICAgIDx4czphbm5vdGF0aW9uPg0KICAgICAgPHhzOmRvY3Vt ZW50YXRpb24+RW51bWVyYXRpb24gRGF0YVR5cGUgZGVyaXZlZCBmcm9tIGFic3RyYWN0IHR5cGU8 L3hzOmRvY3VtZW50YXRpb24+DQogICAgPC94czphbm5vdGF0aW9uPg0KICAgIDx4czpyZXN0cmlj dGlvbiBiYXNlPSJ4czpzdHJpbmciPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJGaWVs ZDNfMSIgLz4NCiAgICA8L3hzOnJlc3RyaWN0aW9uPg0KICA8L3hzOnNpbXBsZVR5cGU+DQogIDx4 czplbGVtZW50IG5hbWU9IkVudW1lcmF0aW9uRGF0YVR5cGUiIHR5cGU9InRuczpFbnVtZXJhdGlv bkRhdGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZFbnVtZXJhdGlv bkRhdGFUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJF bnVtZXJhdGlvbkRhdGFUeXBlIiB0eXBlPSJ0bnM6RW51bWVyYXRpb25EYXRhVHlwZSIgbWluT2Nj dXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8 L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZFbnVtZXJhdGlvbkRh dGFUeXBlIiB0eXBlPSJ0bnM6TGlzdE9mRW51bWVyYXRpb25EYXRhVHlwZSIgbmlsbGFibGU9InRy dWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iQWJzdHJhY3RTdHJ1 Y3R1cmUiPg0KICAgIDx4czphbm5vdGF0aW9uPg0KICAgICAgPHhzOmRvY3VtZW50YXRpb24+QWJz dHJhY3Qgc3RydWN0dXJlPC94czpkb2N1bWVudGF0aW9uPg0KICAgIDwveHM6YW5ub3RhdGlvbj4N CiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJOdW1iZXIiIHR5cGU9 InVhOlZhcmlhbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hz OmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJBYnN0cmFjdFN0cnVjdHVyZSIgdHlw ZT0idG5zOkFic3RyYWN0U3RydWN0dXJlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJM aXN0T2ZBYnN0cmFjdFN0cnVjdHVyZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVs ZW1lbnQgbmFtZT0iQWJzdHJhY3RTdHJ1Y3R1cmUiIHR5cGU9InRuczpBYnN0cmFjdFN0cnVjdHVy ZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+ DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQg bmFtZT0iTGlzdE9mQWJzdHJhY3RTdHJ1Y3R1cmUiIHR5cGU9InRuczpMaXN0T2ZBYnN0cmFjdFN0 cnVjdHVyZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5 cGUgbmFtZT0iRGVyaXZlZFN0cnVjdHVyZSI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVk PSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpBYnN0cmFjdFN0cnVjdHVy ZSI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJO dW1iZXIiIHR5cGU9InhzOmludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICA8L3hzOnNlcXVl bmNlPg0KICAgICAgPC94czpleHRlbnNpb24+DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAg PC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iRGVyaXZlZFN0cnVjdHVyZSIg dHlwZT0idG5zOkRlcml2ZWRTdHJ1Y3R1cmUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9 Ikxpc3RPZkRlcml2ZWRTdHJ1Y3R1cmUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czpl bGVtZW50IG5hbWU9IkRlcml2ZWRTdHJ1Y3R1cmUiIHR5cGU9InRuczpEZXJpdmVkU3RydWN0dXJl IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4N CiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBu YW1lPSJMaXN0T2ZEZXJpdmVkU3RydWN0dXJlIiB0eXBlPSJ0bnM6TGlzdE9mRGVyaXZlZFN0cnVj dHVyZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KPC94czpzY2hlbWE+ NamespaceUri i=68 ns=1;i=2 http://cas.eu/UA/CommServer/UnitTests/DataTypeTest Deprecated i=68 ns=1;i=2 true AbstractStructure i=69 ns=1;i=2 //xs:element[@name='AbstractStructure'] DerivedStructure i=69 ns=1;i=2 //xs:element[@name='DerivedStructure'] Default JSON ns=1;i=13 i=76 Default JSON ns=1;i=22 i=76 ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/XMLModels/CorrectModels/DataTypeTest/DataTypeTest.PredefinedNodes.xml ================================================  http://cas.eu/UA/CommServer/UnitTests/DataTypeTest DataType_64 ns=1;i=9 1 AbstractEnumerationDataType i=29 true i=14799 0 Field1 Field1 1 Field2 Field2 Variable_2 ns=1;i=10 0 EnumStrings i=46 i=68 10 Field1 Field2 i=21 1 0 1 1 DataType_64 ns=1;i=11 1 EnumerationDataType Enumeration DataType derived from abstract type ns=1;i=9 i=14799 1 Field3 Field3 Variable_2 ns=1;i=12 0 EnumValues i=46 i=68 12 i=7616 1 Field3 i=7594 1 0 1 1 DataType_64 ns=1;i=13 1 AbstractStructure Abstract structure i=22 true i=14798 i=22 Structure_0 Number i=26 -1 0 false DataType_64 ns=1;i=22 1 DerivedStructure ns=1;i=13 i=14798 ns=1;i=13 Structure_0 Number i=26 -1 0 false Number Derived from Number i=6 -1 0 false Object_1 ns=1;i=18 0 Default Binary i=76 18 i=38 true ns=1;i=13 i=39 ns=1;i=19 Object_1 ns=1;i=27 0 Default Binary i=76 27 i=38 true ns=1;i=22 i=39 ns=1;i=28 Variable_2 ns=1;i=5 1 DataTypeTest i=72 5 PG9wYzpUeXBlRGljdGlvbmFyeQ0KICB4bWxuczpvcGM9Imh0dHA6Ly9vcGNmb3VuZGF0aW9uLm9y Zy9CaW5hcnlTY2hlbWEvIg0KICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1M U2NoZW1hLWluc3RhbmNlIg0KICB4bWxuczp1YT0iaHR0cDovL29wY2ZvdW5kYXRpb24ub3JnL1VB LyINCiAgeG1sbnM6dG5zPSJodHRwOi8vY2FzLmV1L1VBL0NvbW1TZXJ2ZXIvVW5pdFRlc3RzL0Rh dGFUeXBlVGVzdCINCiAgRGVmYXVsdEJ5dGVPcmRlcj0iTGl0dGxlRW5kaWFuIg0KICBUYXJnZXRO YW1lc3BhY2U9Imh0dHA6Ly9jYXMuZXUvVUEvQ29tbVNlcnZlci9Vbml0VGVzdHMvRGF0YVR5cGVU ZXN0Ig0KPg0KICA8b3BjOkltcG9ydCBOYW1lc3BhY2U9Imh0dHA6Ly9vcGNmb3VuZGF0aW9uLm9y Zy9VQS8iIExvY2F0aW9uPSIuQmluYXJ5U2NoZW1hLmJzZCIvPg0KDQogIDxvcGM6RW51bWVyYXRl ZFR5cGUgTmFtZT0iQWJzdHJhY3RFbnVtZXJhdGlvbkRhdGFUeXBlIiBMZW5ndGhJbkJpdHM9IjMy Ij4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJGaWVsZDEiIFZhbHVlPSIwIiAvPg0K ICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkZpZWxkMiIgVmFsdWU9IjEiIC8+DQogIDwv b3BjOkVudW1lcmF0ZWRUeXBlPg0KDQogIDxvcGM6RW51bWVyYXRlZFR5cGUgTmFtZT0iRW51bWVy YXRpb25EYXRhVHlwZSIgTGVuZ3RoSW5CaXRzPSIzMiI+DQogICAgPG9wYzpEb2N1bWVudGF0aW9u PkVudW1lcmF0aW9uIERhdGFUeXBlIGRlcml2ZWQgZnJvbSBhYnN0cmFjdCB0eXBlPC9vcGM6RG9j dW1lbnRhdGlvbj4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJGaWVsZDEiIFZhbHVl PSIwIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkZpZWxkMiIgVmFsdWU9IjEi IC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iRmllbGQzIiBWYWx1ZT0iMSIgLz4N CiAgPC9vcGM6RW51bWVyYXRlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJB YnN0cmFjdFN0cnVjdHVyZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9w YzpEb2N1bWVudGF0aW9uPkFic3RyYWN0IHN0cnVjdHVyZTwvb3BjOkRvY3VtZW50YXRpb24+DQog ICAgPG9wYzpGaWVsZCBOYW1lPSJOdW1iZXIiIFR5cGVOYW1lPSJ1YTpWYXJpYW50IiAvPg0KICA8 L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkRlcml2 ZWRTdHJ1Y3R1cmUiIEJhc2VUeXBlPSJ0bnM6QWJzdHJhY3RTdHJ1Y3R1cmUiPg0KICAgIDxvcGM6 RmllbGQgTmFtZT0iTnVtYmVyIiBUeXBlTmFtZT0idWE6VmFyaWFudCIgU291cmNlVHlwZT0idG5z OkFic3RyYWN0U3RydWN0dXJlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTnVtYmVyIiBUeXBl TmFtZT0ib3BjOkludDMyIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KPC9vcGM6VHlw ZURpY3Rpb25hcnk+ i=15 -1 1 1 i=47 true i=93 Variable_2 ns=1;i=7 0 NamespaceUri i=46 i=68 7 http://cas.eu/UA/CommServer/UnitTests/DataTypeTest i=12 -1 1 1 Variable_2 ns=1;i=1 0 Deprecated i=46 i=68 1 true i=1 -1 1 1 Variable_2 ns=1;i=19 1 AbstractStructure i=47 i=69 19 AbstractStructure i=12 -1 1 1 Variable_2 ns=1;i=28 1 DerivedStructure i=47 i=69 28 DerivedStructure i=12 -1 1 1 Object_1 ns=1;i=14 0 Default XML i=76 14 i=38 true ns=1;i=13 i=39 ns=1;i=15 Object_1 ns=1;i=23 0 Default XML i=76 23 i=38 true ns=1;i=22 i=39 ns=1;i=24 Variable_2 ns=1;i=2 1 DataTypeTest i=72 2 PHhzOnNjaGVtYQ0KICB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEi DQogIHhtbG5zOnVhPSJodHRwOi8vb3BjZm91bmRhdGlvbi5vcmcvVUEvMjAwOC8wMi9UeXBlcy54 c2QiDQogIHhtbG5zOnRucz0iaHR0cDovL2Nhcy5ldS9VQS9Db21tU2VydmVyL1VuaXRUZXN0cy9E YXRhVHlwZVRlc3QiDQogIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2Nhcy5ldS9VQS9Db21tU2Vy dmVyL1VuaXRUZXN0cy9EYXRhVHlwZVRlc3QiDQogIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlm aWVkIg0KPg0KICA8eHM6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL29wY2ZvdW5kYXRpb24ub3Jn L1VBLyIgLz4NCg0KICA8eHM6c2ltcGxlVHlwZSAgbmFtZT0iQWJzdHJhY3RFbnVtZXJhdGlvbkRh dGFUeXBlIj4NCiAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIj4NCiAgICAgIDx4 czplbnVtZXJhdGlvbiB2YWx1ZT0iRmllbGQxXzAiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24g dmFsdWU9IkZpZWxkMl8xIiAvPg0KICAgIDwveHM6cmVzdHJpY3Rpb24+DQogIDwveHM6c2ltcGxl VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iQWJzdHJhY3RFbnVtZXJhdGlvbkRhdGFUeXBlIiB0 eXBlPSJ0bnM6QWJzdHJhY3RFbnVtZXJhdGlvbkRhdGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4 VHlwZSBuYW1lPSJMaXN0T2ZBYnN0cmFjdEVudW1lcmF0aW9uRGF0YVR5cGUiPg0KICAgIDx4czpz ZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkFic3RyYWN0RW51bWVyYXRpb25EYXRh VHlwZSIgdHlwZT0idG5zOkFic3RyYWN0RW51bWVyYXRpb25EYXRhVHlwZSIgbWluT2NjdXJzPSIw IiBtYXhPY2N1cnM9InVuYm91bmRlZCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNv bXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZBYnN0cmFjdEVudW1lcmF0aW9u RGF0YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZBYnN0cmFjdEVudW1lcmF0aW9uRGF0YVR5cGUiIG5p bGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOnNpbXBsZVR5cGUgIG5hbWU9IkVu dW1lcmF0aW9uRGF0YVR5cGUiPg0KICAgIDx4czphbm5vdGF0aW9uPg0KICAgICAgPHhzOmRvY3Vt ZW50YXRpb24+RW51bWVyYXRpb24gRGF0YVR5cGUgZGVyaXZlZCBmcm9tIGFic3RyYWN0IHR5cGU8 L3hzOmRvY3VtZW50YXRpb24+DQogICAgPC94czphbm5vdGF0aW9uPg0KICAgIDx4czpyZXN0cmlj dGlvbiBiYXNlPSJ4czpzdHJpbmciPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJGaWVs ZDNfMSIgLz4NCiAgICA8L3hzOnJlc3RyaWN0aW9uPg0KICA8L3hzOnNpbXBsZVR5cGU+DQogIDx4 czplbGVtZW50IG5hbWU9IkVudW1lcmF0aW9uRGF0YVR5cGUiIHR5cGU9InRuczpFbnVtZXJhdGlv bkRhdGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZFbnVtZXJhdGlv bkRhdGFUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJF bnVtZXJhdGlvbkRhdGFUeXBlIiB0eXBlPSJ0bnM6RW51bWVyYXRpb25EYXRhVHlwZSIgbWluT2Nj dXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8 L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZFbnVtZXJhdGlvbkRh dGFUeXBlIiB0eXBlPSJ0bnM6TGlzdE9mRW51bWVyYXRpb25EYXRhVHlwZSIgbmlsbGFibGU9InRy dWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iQWJzdHJhY3RTdHJ1 Y3R1cmUiPg0KICAgIDx4czphbm5vdGF0aW9uPg0KICAgICAgPHhzOmRvY3VtZW50YXRpb24+QWJz dHJhY3Qgc3RydWN0dXJlPC94czpkb2N1bWVudGF0aW9uPg0KICAgIDwveHM6YW5ub3RhdGlvbj4N CiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJOdW1iZXIiIHR5cGU9 InVhOlZhcmlhbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hz OmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJBYnN0cmFjdFN0cnVjdHVyZSIgdHlw ZT0idG5zOkFic3RyYWN0U3RydWN0dXJlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJM aXN0T2ZBYnN0cmFjdFN0cnVjdHVyZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVs ZW1lbnQgbmFtZT0iQWJzdHJhY3RTdHJ1Y3R1cmUiIHR5cGU9InRuczpBYnN0cmFjdFN0cnVjdHVy ZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+ DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQg bmFtZT0iTGlzdE9mQWJzdHJhY3RTdHJ1Y3R1cmUiIHR5cGU9InRuczpMaXN0T2ZBYnN0cmFjdFN0 cnVjdHVyZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5 cGUgbmFtZT0iRGVyaXZlZFN0cnVjdHVyZSI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVk PSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpBYnN0cmFjdFN0cnVjdHVy ZSI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJO dW1iZXIiIHR5cGU9InhzOmludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICA8L3hzOnNlcXVl bmNlPg0KICAgICAgPC94czpleHRlbnNpb24+DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAg PC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iRGVyaXZlZFN0cnVjdHVyZSIg dHlwZT0idG5zOkRlcml2ZWRTdHJ1Y3R1cmUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9 Ikxpc3RPZkRlcml2ZWRTdHJ1Y3R1cmUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czpl bGVtZW50IG5hbWU9IkRlcml2ZWRTdHJ1Y3R1cmUiIHR5cGU9InRuczpEZXJpdmVkU3RydWN0dXJl IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4N CiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBu YW1lPSJMaXN0T2ZEZXJpdmVkU3RydWN0dXJlIiB0eXBlPSJ0bnM6TGlzdE9mRGVyaXZlZFN0cnVj dHVyZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KPC94czpzY2hlbWE+ i=15 -1 1 1 i=47 true i=92 Variable_2 ns=1;i=4 0 NamespaceUri i=46 i=68 4 http://cas.eu/UA/CommServer/UnitTests/DataTypeTest i=12 -1 1 1 Variable_2 ns=1;i=8 0 Deprecated i=46 i=68 8 true i=1 -1 1 1 Variable_2 ns=1;i=15 1 AbstractStructure i=47 i=69 15 //xs:element[@name='AbstractStructure'] i=12 -1 1 1 Variable_2 ns=1;i=24 1 DerivedStructure i=47 i=69 24 //xs:element[@name='DerivedStructure'] i=12 -1 1 1 Object_1 ns=1;i=31 0 Default JSON i=76 31 i=38 true ns=1;i=13 Object_1 ns=1;i=32 0 Default JSON i=76 32 i=38 true ns=1;i=22 ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/XMLModels/CorrectModels/DataTypeTest/DataTypeTest.Types.bsd ================================================ Enumeration DataType derived from abstract type Abstract structure ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/XMLModels/CorrectModels/DataTypeTest/DataTypeTest.Types.xsd ================================================ Enumeration DataType derived from abstract type Abstract structure ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/XMLModels/CorrectModels/DataTypeTest.csv ================================================ cas_BinarySchema_Deprecated,1,Variable cas_XmlSchema,2,Variable cas_XmlSchema_DataTypeVersion,3,Variable cas_XmlSchema_NamespaceUri,4,Variable cas_BinarySchema,5,Variable cas_BinarySchema_DataTypeVersion,6,Variable cas_BinarySchema_NamespaceUri,7,Variable cas_XmlSchema_Deprecated,8,Variable AbstractEnumerationDataType,9,DataType AbstractEnumerationDataType_EnumStrings,10,Variable EnumerationDataType,11,DataType EnumerationDataType_EnumValues,12,Variable AbstractStructure,13,DataType AbstractStructure_Encoding_DefaultXml,14,Object cas_XmlSchema_AbstractStructure,15,Variable cas_XmlSchema_AbstractStructure_DataTypeVersion,16,Variable cas_XmlSchema_AbstractStructure_DictionaryFragment,17,Variable AbstractStructure_Encoding_DefaultBinary,18,Object cas_BinarySchema_AbstractStructure,19,Variable cas_BinarySchema_AbstractStructure_DataTypeVersion,20,Variable cas_BinarySchema_AbstractStructure_DictionaryFragment,21,Variable DerivedStructure,22,DataType DerivedStructure_Encoding_DefaultXml,23,Object cas_XmlSchema_DerivedStructure,24,Variable cas_XmlSchema_DerivedStructure_DataTypeVersion,25,Variable cas_XmlSchema_DerivedStructure_DictionaryFragment,26,Variable DerivedStructure_Encoding_DefaultBinary,27,Object cas_BinarySchema_DerivedStructure,28,Variable cas_BinarySchema_DerivedStructure_DataTypeVersion,29,Variable cas_BinarySchema_DerivedStructure_DictionaryFragment,30,Variable AbstractStructure_Encoding_DefaultJson,31,Object DerivedStructure_Encoding_DefaultJson,32,Object ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/XMLModels/CorrectModels/DataTypeTest.xml ================================================  http://cas.eu/UA/CommServer/UnitTests/DataTypeTest http://opcfoundation.org/UA/ Enumeration DataType derived from abstract type Abstract structure Derived from Number ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/XMLModels/CorrectModels/GoNodeSet.cmd ================================================ set COMPILER=mdc del %1\mdc.log /q del %1\mdc.warnings.log /q "%1\%COMPILER%" compile --d2 "ReferenceTest.xml" -c "ReferenceTest.csv" --o2 "ReferenceTest" xcopy %1\mdc.log .\ReferenceTest\mdc.log /y /i xcopy %1\mdc.warnings.log .\ReferenceTest\mdc.warnings.log /y /i del %1\mdc.log /q del %1\mdc.warnings.log /q "%1\%COMPILER%" compile --d2 "ObjectTypeTest.xml" -c "ObjectTypeTest.csv" --o2 "ObjectTypeTest" xcopy %1\mdc.log .\ObjectTypeTest\mdc.log /y /i xcopy %1\mdc.warnings.log .\ObjectTypeTest\mdc.warnings.log /y /i del %1\mdc.log /q del %1\mdc.warnings.log /q "%1\%COMPILER%" compile --d2 "VariableTypeTest.xml" -c "VariableTypeTest.csv" --o2 "VariableTypeTest" xcopy %1\mdc.log .\VariableTypeTest\mdc.log /y /i xcopy %1\mdc.warnings.log .\VariableTypeTest\mdc.warnings.log /y /i del %1\mdc.log /q del %1\mdc.warnings.log /q "%1\%COMPILER%" compile --d2 "DataTypeTest.xml" -c "DataTypeTest.csv" --o2 "DataTypeTest" xcopy %1\mdc.log .\DataTypeTest\mdc.log /y /i xcopy %1\mdc.warnings.log .\DataTypeTest\mdc.warnings.log /y /i ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/XMLModels/CorrectModels/ObjectTypeTest/ObjectTypeTest.Classes.cs ================================================ /* ======================================================================== * Copyright (c) 2005-2021 The OPC Foundation, Inc. All rights reserved. * * OPC Foundation MIT License 1.00 * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, * copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following * conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. * * The complete license agreement can be found here: * http://opcfoundation.org/License/MIT/1.00/ * ======================================================================*/ using System; using System.Collections.Generic; using System.Text; using System.Xml; using System.Runtime.Serialization; using ; namespace ObjectTypeTest { #region ComplexObjectState Class #if (!OPCUA_EXCLUDE_ComplexObjectState) /// /// Stores an instance of the ComplexObjectType ObjectType. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public partial class ComplexObjectState : ServerObjectState { #region Constructors /// /// Initializes the type with its default attribute values. /// public ComplexObjectState(NodeState parent) : base(parent) { } /// /// Returns the id of the default type definition node for the instance. /// protected override NodeId GetDefaultTypeDefinitionId(NamespaceTable namespaceUris) { return Opc.Ua.NodeId.Create(ObjectTypeTest.ObjectTypes.ComplexObjectType, ObjectTypeTest.Namespaces.cas, namespaceUris); } #if (!OPCUA_EXCLUDE_InitializationStrings) /// /// Initializes the instance. /// protected override void Initialize(ISystemContext context) { base.Initialize(context); Initialize(context, InitializationString); InitializeOptionalChildren(context); } /// /// Initializes the instance with a node. /// protected override void Initialize(ISystemContext context, NodeState source) { InitializeOptionalChildren(context); base.Initialize(context, source); } /// /// Initializes the any option children defined for the instance. /// protected override void InitializeOptionalChildren(ISystemContext context) { base.InitializeOptionalChildren(context); } #region Initialization String private const string InitializationString = "AQAAADQAAABodHRwOi8vY2FzLmV1L1VBL0NvbW1TZXJ2ZXIvVW5pdFRlc3RzL09iamVjdFR5cGVUZXN0" + "/////wRggAIBAAAAAQAZAAAAQ29tcGxleE9iamVjdFR5cGVJbnN0YW5jZQEBxAABAcQAxAAAAP////8N" + "AAAAF3CJCgIAAAAAAAsAAABTZXJ2ZXJBcnJheQEBxQAALgBExQAAAAAMAQAAAAEAAAAAAAAAAQEAAAAA" + "AECPQP////8AAAAAF3CJCgIAAAAAAA4AAABOYW1lc3BhY2VBcnJheQEBxgAALgBExgAAAAAMAQAAAAEA" + "AAAAAAAAAQEAAAAAAECPQP////8AAAAAFXCJCgIAAAAAAAwAAABTZXJ2ZXJTdGF0dXMBAccAAC8BAFoI" + "xwAAAAEAXgP/////AQEAAAAAAECPQP////8GAAAAFWCJCgIAAAAAAAkAAABTdGFydFRpbWUBAcgAAC8A" + "P8gAAAABACYB/////wEB/////wAAAAAVYIkKAgAAAAAACwAAAEN1cnJlbnRUaW1lAQHJAAAvAD/JAAAA" + "AQAmAf////8BAf////8AAAAAFWCJCgIAAAAAAAUAAABTdGF0ZQEBygAALwA/ygAAAAEAVAP/////AQH/" + "////AAAAABVgiQoCAAAAAAAJAAAAQnVpbGRJbmZvAQHLAAAvAQDrC8sAAAABAFIB/////wEB/////wYA" + "AAAVcIkKAgAAAAAACgAAAFByb2R1Y3RVcmkBAcwAAC8AP8wAAAAADP////8BAQAAAAAAQI9A/////wAA" + "AAAVcIkKAgAAAAAAEAAAAE1hbnVmYWN0dXJlck5hbWUBAc0AAC8AP80AAAAADP////8BAQAAAAAAQI9A" + "/////wAAAAAVcIkKAgAAAAAACwAAAFByb2R1Y3ROYW1lAQHOAAAvAD/OAAAAAAz/////AQEAAAAAAECP" + "QP////8AAAAAFXCJCgIAAAAAAA8AAABTb2Z0d2FyZVZlcnNpb24BAc8AAC8AP88AAAAADP////8BAQAA" + "AAAAQI9A/////wAAAAAVcIkKAgAAAAAACwAAAEJ1aWxkTnVtYmVyAQHQAAAvAD/QAAAAAAz/////AQEA" + "AAAAAECPQP////8AAAAAFXCJCgIAAAAAAAkAAABCdWlsZERhdGUBAdEAAC8AP9EAAAABACYB/////wEB" + "AAAAAABAj0D/////AAAAABVgiQoCAAAAAAATAAAAU2Vjb25kc1RpbGxTaHV0ZG93bgEB0gAALwA/0gAA" + "AAAH/////wEB/////wAAAAAVYIkKAgAAAAAADgAAAFNodXRkb3duUmVhc29uAQHTAAAvAD/TAAAAABX/" + "////AQH/////AAAAABVwiQoCAAAAAAAMAAAAU2VydmljZUxldmVsAQHUAAAuAETUAAAAAAP/////AQEA" + "AAAAAECPQP////8AAAAAFXCJCgIAAAAAAAgAAABBdWRpdGluZwEB1QAALgBE1QAAAAAB/////wEBAAAA" + "AABAj0D/////AAAAAARggAoBAAAAAAASAAAAU2VydmVyQ2FwYWJpbGl0aWVzAQHWAAAvAQDdB9YAAAD/" + "////CQAAABdgiQoCAAAAAAASAAAAU2VydmVyUHJvZmlsZUFycmF5AQHXAAAuAETXAAAAAAwBAAAAAQAA" + "AAAAAAABAf////8AAAAAF2CJCgIAAAAAAA0AAABMb2NhbGVJZEFycmF5AQHYAAAuAETYAAAAAQAnAQEA" + "AAABAAAAAAAAAAEB/////wAAAAAVYIkKAgAAAAAAFgAAAE1pblN1cHBvcnRlZFNhbXBsZVJhdGUBAdkA" + "AC4ARNkAAAABACIB/////wEB/////wAAAAAVYIkKAgAAAAAAGwAAAE1heEJyb3dzZUNvbnRpbnVhdGlv" + "blBvaW50cwEB2gAALgBE2gAAAAAF/////wEB/////wAAAAAVYIkKAgAAAAAAGgAAAE1heFF1ZXJ5Q29u" + "dGludWF0aW9uUG9pbnRzAQHbAAAuAETbAAAAAAX/////AQH/////AAAAABVgiQoCAAAAAAAcAAAATWF4" + "SGlzdG9yeUNvbnRpbnVhdGlvblBvaW50cwEB3AAALgBE3AAAAAAF/////wEB/////wAAAAAXYIkKAgAA" + "AAAAFAAAAFNvZnR3YXJlQ2VydGlmaWNhdGVzAQHdAAAuAETdAAAAAQBYAQEAAAABAAAAAAAAAAEB////" + "/wAAAAAEYIAKAQAAAAAADgAAAE1vZGVsbGluZ1J1bGVzAQHtAAAvAD3tAAAA/////wAAAAAEYIAKAQAA" + "AAAAEgAAAEFnZ3JlZ2F0ZUZ1bmN0aW9ucwEB7gAALwA97gAAAP////8AAAAABGCACgEAAAAAABEAAABT" + "ZXJ2ZXJEaWFnbm9zdGljcwEB7wAALwEA5AfvAAAA/////wQAAAAVYIkKAgAAAAAAGAAAAFNlcnZlckRp" + "YWdub3N0aWNzU3VtbWFyeQEB8AAALwEAZgjwAAAAAQBbA/////8BAf////8MAAAAFWCJCgIAAAAAAA8A" + "AABTZXJ2ZXJWaWV3Q291bnQBAfEAAC8AP/EAAAAAB/////8BAf////8AAAAAFWCJCgIAAAAAABMAAABD" + "dXJyZW50U2Vzc2lvbkNvdW50AQHyAAAvAD/yAAAAAAf/////AQH/////AAAAABVgiQoCAAAAAAAVAAAA" + "Q3VtdWxhdGVkU2Vzc2lvbkNvdW50AQHzAAAvAD/zAAAAAAf/////AQH/////AAAAABVgiQoCAAAAAAAc" + "AAAAU2VjdXJpdHlSZWplY3RlZFNlc3Npb25Db3VudAEB9AAALwA/9AAAAAAH/////wEB/////wAAAAAV" + "YIkKAgAAAAAAFAAAAFJlamVjdGVkU2Vzc2lvbkNvdW50AQH1AAAvAD/1AAAAAAf/////AQH/////AAAA" + "ABVgiQoCAAAAAAATAAAAU2Vzc2lvblRpbWVvdXRDb3VudAEB9gAALwA/9gAAAAAH/////wEB/////wAA" + "AAAVYIkKAgAAAAAAEQAAAFNlc3Npb25BYm9ydENvdW50AQH3AAAvAD/3AAAAAAf/////AQH/////AAAA" + "ABVgiQoCAAAAAAAXAAAAUHVibGlzaGluZ0ludGVydmFsQ291bnQBAfgAAC8AP/gAAAAAB/////8BAf//" + "//8AAAAAFWCJCgIAAAAAABgAAABDdXJyZW50U3Vic2NyaXB0aW9uQ291bnQBAfkAAC8AP/kAAAAAB///" + "//8BAf////8AAAAAFWCJCgIAAAAAABoAAABDdW11bGF0ZWRTdWJzY3JpcHRpb25Db3VudAEB+gAALwA/" + "+gAAAAAH/////wEB/////wAAAAAVYIkKAgAAAAAAHQAAAFNlY3VyaXR5UmVqZWN0ZWRSZXF1ZXN0c0Nv" + "dW50AQH7AAAvAD/7AAAAAAf/////AQH/////AAAAABVgiQoCAAAAAAAVAAAAUmVqZWN0ZWRSZXF1ZXN0" + "c0NvdW50AQH8AAAvAD/8AAAAAAf/////AQH/////AAAAABdgiQoCAAAAAAAcAAAAU3Vic2NyaXB0aW9u" + "RGlhZ25vc3RpY3NBcnJheQEB/gAALwEAewj+AAAAAQBqAwEAAAABAAAAAAAAAAEB/////wAAAAAEYIAK" + "AQAAAAAAGgAAAFNlc3Npb25zRGlhZ25vc3RpY3NTdW1tYXJ5AQH/AAAvAQDqB/8AAAD/////AgAAABdg" + "iQoCAAAAAAAXAAAAU2Vzc2lvbkRpYWdub3N0aWNzQXJyYXkBAQABAC8BAJQIAAEAAAEAYQMBAAAAAQAA" + "AAAAAAABAf////8AAAAAF2CJCgIAAAAAAB8AAABTZXNzaW9uU2VjdXJpdHlEaWFnbm9zdGljc0FycmF5" + "AQEBAQAvAQDDCAEBAAABAGQDAQAAAAEAAAAAAAAAAQH/////AAAAABVgiQoCAAAAAAALAAAARW5hYmxl" + "ZEZsYWcBAQIBAC4ARAIBAAAAAf////8DA/////8AAAAABGCACgEAAAAAABAAAABWZW5kb3JTZXJ2ZXJJ" + "bmZvAQEDAQAvAQDxBwMBAAD/////AAAAAARggAoBAAAAAAAQAAAAU2VydmVyUmVkdW5kYW5jeQEBBAEA" + "LwEA8gcEAQAA/////wEAAAAVYIkKAgAAAAAAEQAAAFJlZHVuZGFuY3lTdXBwb3J0AQEFAQAuAEQFAQAA" + "AQBTA/////8BAf////8AAAAAFWDJCgIAAAARAAAAQnJvd3NlTmFtZTRub2RlNjYBAA0AAABDaGlsZFBy" + "b3BlcnR5AQE1AQAuAEQ1AQAAABX/////AQEBAAAAAQHDAAEBASEBAAAAABVgyQoCAAAADgAAAE5hbWVO" + "b3RTZXQxMTA5AQATAAAAQnJvd3NlTmFtZTRub2RlMTEwOQEBIQEALwEAQAkhAQAAABr/////AQEBAAAA" + "AQHDAAABATUBAQAAABVgiQoCAAAAAAAHAAAARVVSYW5nZQEBJQEALgBEJQEAAAEAdAP/////AQH/////" + "AAAAAARhggoEAAAAAQALAAAAQ2hpbGRNZXRob2QBAScBAC8BAScBJwEAAAEB/////wIAAAAXYKkKAgAA" + "AAAADgAAAElucHV0QXJndW1lbnRzAQErAQAuAEQrAQAAlgIAAAABACoBARUAAAAGAAAASW5wdXQxAAb/" + "////AAAAAAABACoBARUAAAAGAAAASW5wdXQyAAb/////AAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////" + "AAAAABdgqQoCAAAAAAAPAAAAT3V0cHV0QXJndW1lbnRzAQEsAQAuAEQsAQAAlgEAAAABACoBARYAAAAH" + "AAAAT3V0cHV0MQAG/////wAAAAAAAQAoAQEAAAABAAAAAAAAAAEB/////wAAAAAEYYIKBAAAAAEAEwAA" + "AE5vbkV4ZWN1dGFibGVNZXRob2QBATIBAC8BATIBMgEAAAEB/////wAAAAA="; #endregion #endif #endregion #region Public Properties /// public PropertyState BrowseName4node66 { get { return m_browseName4node66; } set { if (!Object.ReferenceEquals(m_browseName4node66, value)) { ChangeMasks |= NodeStateChangeMasks.Children; } m_browseName4node66 = value; } } /// public AnalogItemState NameNotSet1109 { get { return m_nameNotSet1109; } set { if (!Object.ReferenceEquals(m_nameNotSet1109, value)) { ChangeMasks |= NodeStateChangeMasks.Children; } m_nameNotSet1109 = value; } } /// public ChildMethodComplexObjectMethodState ChildMethod { get { return m_childMethodMethod; } set { if (!Object.ReferenceEquals(m_childMethodMethod, value)) { ChangeMasks |= NodeStateChangeMasks.Children; } m_childMethodMethod = value; } } /// public MethodState NonExecutableMethod { get { return m_nonExecutableMethodMethod; } set { if (!Object.ReferenceEquals(m_nonExecutableMethodMethod, value)) { ChangeMasks |= NodeStateChangeMasks.Children; } m_nonExecutableMethodMethod = value; } } #endregion #region Overridden Methods /// /// Populates a list with the children that belong to the node. /// /// The context for the system being accessed. /// The list of children to populate. public override void GetChildren( ISystemContext context, IList children) { if (m_browseName4node66 != null) { children.Add(m_browseName4node66); } if (m_nameNotSet1109 != null) { children.Add(m_nameNotSet1109); } if (m_childMethodMethod != null) { children.Add(m_childMethodMethod); } if (m_nonExecutableMethodMethod != null) { children.Add(m_nonExecutableMethodMethod); } base.GetChildren(context, children); } /// /// Finds the child with the specified browse name. /// protected override BaseInstanceState FindChild( ISystemContext context, QualifiedName browseName, bool createOrReplace, BaseInstanceState replacement) { if (QualifiedName.IsNull(browseName)) { return null; } BaseInstanceState instance = null; switch (browseName.Name) { case ObjectTypeTest.BrowseNames.BrowseName4node66: { if (createOrReplace) { if (BrowseName4node66 == null) { if (replacement == null) { BrowseName4node66 = new PropertyState(this); } else { BrowseName4node66 = (PropertyState)replacement; } } } instance = BrowseName4node66; break; } case ObjectTypeTest.BrowseNames.NameNotSet1109: { if (createOrReplace) { if (NameNotSet1109 == null) { if (replacement == null) { NameNotSet1109 = new AnalogItemState(this); } else { NameNotSet1109 = (AnalogItemState)replacement; } } } instance = NameNotSet1109; break; } case ObjectTypeTest.BrowseNames.ChildMethod: { if (createOrReplace) { if (ChildMethod == null) { if (replacement == null) { ChildMethod = new ChildMethodComplexObjectMethodState(this); } else { ChildMethod = (ChildMethodComplexObjectMethodState)replacement; } } } instance = ChildMethod; break; } case ObjectTypeTest.BrowseNames.NonExecutableMethod: { if (createOrReplace) { if (NonExecutableMethod == null) { if (replacement == null) { NonExecutableMethod = new MethodState(this); } else { NonExecutableMethod = (MethodState)replacement; } } } instance = NonExecutableMethod; break; } } if (instance != null) { return instance; } return base.FindChild(context, browseName, createOrReplace, replacement); } #endregion #region Private Fields private PropertyState m_browseName4node66; private AnalogItemState m_nameNotSet1109; private ChildMethodComplexObjectMethodState m_childMethodMethod; private MethodState m_nonExecutableMethodMethod; #endregion } #endif #endregion #region ChildMethodComplexObjectMethodState Class #if (!OPCUA_EXCLUDE_ChildMethodComplexObjectMethodState) /// /// Stores an instance of the ChildMethodComplexObjectType Method. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public partial class ChildMethodComplexObjectMethodState : MethodState { #region Constructors /// /// Initializes the type with its default attribute values. /// public ChildMethodComplexObjectMethodState(NodeState parent) : base(parent) { } /// /// Constructs an instance of a node. /// /// The parent. /// The new node. public new static NodeState Construct(NodeState parent) { return new ChildMethodComplexObjectMethodState(parent); } #if (!OPCUA_EXCLUDE_InitializationStrings) /// /// Initializes the instance. /// protected override void Initialize(ISystemContext context) { base.Initialize(context); Initialize(context, InitializationString); InitializeOptionalChildren(context); } /// /// Initializes the any option children defined for the instance. /// protected override void InitializeOptionalChildren(ISystemContext context) { base.InitializeOptionalChildren(context); } #region Initialization String private const string InitializationString = "AQAAADQAAABodHRwOi8vY2FzLmV1L1VBL0NvbW1TZXJ2ZXIvVW5pdFRlc3RzL09iamVjdFR5cGVUZXN0" + "/////wRhggoEAAAAAQAcAAAAQ2hpbGRNZXRob2RDb21wbGV4T2JqZWN0VHlwZQEBLwEALwEBLwEvAQAA" + "AQH/////AgAAABdgqQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMBATABAC4ARDABAACWAgAAAAEAKgEB" + "FQAAAAYAAABJbnB1dDEABv////8AAAAAAAEAKgEBFQAAAAYAAABJbnB1dDIABv////8AAAAAAAEAKAEB" + "AAAAAQAAAAAAAAABAf////8AAAAAF2CpCgIAAAAAAA8AAABPdXRwdXRBcmd1bWVudHMBATEBAC4ARDEB" + "AACWAQAAAAEAKgEBFgAAAAcAAABPdXRwdXQxAAb/////AAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////" + "AAAAAA=="; #endregion #endif #endregion #region Event Callbacks /// /// Raised when the the method is called. /// public ChildMethodComplexObjectMethodStateMethodCallHandler OnCall; #endregion #region Public Properties #endregion #region Overridden Methods /// /// Invokes the method, returns the result and output argument. /// protected override ServiceResult Call( ISystemContext _context, NodeId _objectId, IList _inputArguments, IList _outputArguments) { if (OnCall == null) { return base.Call(_context, _objectId, _inputArguments, _outputArguments); } ServiceResult result = null; int input1 = (int)_inputArguments[0]; int input2 = (int)_inputArguments[1]; int output1 = (int)_outputArguments[0]; if (OnCall != null) { result = OnCall( _context, this, _objectId, input1, input2, ref output1); } _outputArguments[0] = output1; return result; } #endregion #region Private Fields #endregion } /// /// Used to receive notifications when the method is called. /// /// public delegate ServiceResult ChildMethodComplexObjectMethodStateMethodCallHandler( ISystemContext _context, MethodState _method, NodeId _objectId, int input1, int input2, ref int output1); #endif #endregion #region DerivedFromComplexObjectState Class #if (!OPCUA_EXCLUDE_DerivedFromComplexObjectState) /// /// Stores an instance of the DerivedFromComplexObjectType ObjectType. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public partial class DerivedFromComplexObjectState : ComplexObjectState { #region Constructors /// /// Initializes the type with its default attribute values. /// public DerivedFromComplexObjectState(NodeState parent) : base(parent) { } /// /// Returns the id of the default type definition node for the instance. /// protected override NodeId GetDefaultTypeDefinitionId(NamespaceTable namespaceUris) { return Opc.Ua.NodeId.Create(ObjectTypeTest.ObjectTypes.DerivedFromComplexObjectType, ObjectTypeTest.Namespaces.cas, namespaceUris); } #if (!OPCUA_EXCLUDE_InitializationStrings) /// /// Initializes the instance. /// protected override void Initialize(ISystemContext context) { base.Initialize(context); Initialize(context, InitializationString); InitializeOptionalChildren(context); } /// /// Initializes the instance with a node. /// protected override void Initialize(ISystemContext context, NodeState source) { InitializeOptionalChildren(context); base.Initialize(context, source); } /// /// Initializes the any option children defined for the instance. /// protected override void InitializeOptionalChildren(ISystemContext context) { base.InitializeOptionalChildren(context); } #region Initialization String private const string InitializationString = "AQAAADQAAABodHRwOi8vY2FzLmV1L1VBL0NvbW1TZXJ2ZXIvVW5pdFRlc3RzL09iamVjdFR5cGVUZXN0" + "/////wRggAIBAAAAAQAkAAAARGVyaXZlZEZyb21Db21wbGV4T2JqZWN0VHlwZUluc3RhbmNlAQE2AQEB" + "NgE2AQAA/////w0AAAAXcIkKAgAAAAAACwAAAFNlcnZlckFycmF5AQE3AQAuAEQ3AQAAAAwBAAAAAQAA" + "AAAAAAABAQAAAAAAQI9A/////wAAAAAXcIkKAgAAAAAADgAAAE5hbWVzcGFjZUFycmF5AQE4AQAuAEQ4" + "AQAAAAwBAAAAAQAAAAAAAAABAQAAAAAAQI9A/////wAAAAAVcIkKAgAAAAAADAAAAFNlcnZlclN0YXR1" + "cwEBOQEALwEAWgg5AQAAAQBeA/////8BAQAAAAAAQI9A/////wYAAAAVYIkKAgAAAAAACQAAAFN0YXJ0" + "VGltZQEBOgEALwA/OgEAAAEAJgH/////AQH/////AAAAABVgiQoCAAAAAAALAAAAQ3VycmVudFRpbWUB" + "ATsBAC8APzsBAAABACYB/////wEB/////wAAAAAVYIkKAgAAAAAABQAAAFN0YXRlAQE8AQAvAD88AQAA" + "AQBUA/////8BAf////8AAAAAFWCJCgIAAAAAAAkAAABCdWlsZEluZm8BAT0BAC8BAOsLPQEAAAEAUgH/" + "////AQH/////BgAAABVwiQoCAAAAAAAKAAAAUHJvZHVjdFVyaQEBPgEALwA/PgEAAAAM/////wEBAAAA" + "AABAj0D/////AAAAABVwiQoCAAAAAAAQAAAATWFudWZhY3R1cmVyTmFtZQEBPwEALwA/PwEAAAAM////" + "/wEBAAAAAABAj0D/////AAAAABVwiQoCAAAAAAALAAAAUHJvZHVjdE5hbWUBAUABAC8AP0ABAAAADP//" + "//8BAQAAAAAAQI9A/////wAAAAAVcIkKAgAAAAAADwAAAFNvZnR3YXJlVmVyc2lvbgEBQQEALwA/QQEA" + "AAAM/////wEBAAAAAABAj0D/////AAAAABVwiQoCAAAAAAALAAAAQnVpbGROdW1iZXIBAUIBAC8AP0IB" + "AAAADP////8BAQAAAAAAQI9A/////wAAAAAVcIkKAgAAAAAACQAAAEJ1aWxkRGF0ZQEBQwEALwA/QwEA" + "AAEAJgH/////AQEAAAAAAECPQP////8AAAAAFWCJCgIAAAAAABMAAABTZWNvbmRzVGlsbFNodXRkb3du" + "AQFEAQAvAD9EAQAAAAf/////AQH/////AAAAABVgiQoCAAAAAAAOAAAAU2h1dGRvd25SZWFzb24BAUUB" + "AC8AP0UBAAAAFf////8BAf////8AAAAAFXCJCgIAAAAAAAwAAABTZXJ2aWNlTGV2ZWwBAUYBAC4AREYB" + "AAAAA/////8BAQAAAAAAQI9A/////wAAAAAVcIkKAgAAAAAACAAAAEF1ZGl0aW5nAQFHAQAuAERHAQAA" + "AAH/////AQEAAAAAAECPQP////8AAAAABGCACgEAAAAAABIAAABTZXJ2ZXJDYXBhYmlsaXRpZXMBAUgB" + "AC8BAN0HSAEAAP////8JAAAAF2CJCgIAAAAAABIAAABTZXJ2ZXJQcm9maWxlQXJyYXkBAUkBAC4AREkB" + "AAAADAEAAAABAAAAAAAAAAEB/////wAAAAAXYIkKAgAAAAAADQAAAExvY2FsZUlkQXJyYXkBAUoBAC4A" + "REoBAAABACcBAQAAAAEAAAAAAAAAAQH/////AAAAABVgiQoCAAAAAAAWAAAATWluU3VwcG9ydGVkU2Ft" + "cGxlUmF0ZQEBSwEALgBESwEAAAEAIgH/////AQH/////AAAAABVgiQoCAAAAAAAbAAAATWF4QnJvd3Nl" + "Q29udGludWF0aW9uUG9pbnRzAQFMAQAuAERMAQAAAAX/////AQH/////AAAAABVgiQoCAAAAAAAaAAAA" + "TWF4UXVlcnlDb250aW51YXRpb25Qb2ludHMBAU0BAC4ARE0BAAAABf////8BAf////8AAAAAFWCJCgIA" + "AAAAABwAAABNYXhIaXN0b3J5Q29udGludWF0aW9uUG9pbnRzAQFOAQAuAEROAQAAAAX/////AQH/////" + "AAAAABdgiQoCAAAAAAAUAAAAU29mdHdhcmVDZXJ0aWZpY2F0ZXMBAU8BAC4ARE8BAAABAFgBAQAAAAEA" + "AAAAAAAAAQH/////AAAAAARggAoBAAAAAAAOAAAATW9kZWxsaW5nUnVsZXMBAV8BAC8APV8BAAD/////" + "AAAAAARggAoBAAAAAAASAAAAQWdncmVnYXRlRnVuY3Rpb25zAQFgAQAvAD1gAQAA/////wAAAAAEYIAK" + "AQAAAAAAEQAAAFNlcnZlckRpYWdub3N0aWNzAQFhAQAvAQDkB2EBAAD/////BAAAABVgiQoCAAAAAAAY" + "AAAAU2VydmVyRGlhZ25vc3RpY3NTdW1tYXJ5AQFiAQAvAQBmCGIBAAABAFsD/////wEB/////wwAAAAV" + "YIkKAgAAAAAADwAAAFNlcnZlclZpZXdDb3VudAEBYwEALwA/YwEAAAAH/////wEB/////wAAAAAVYIkK" + "AgAAAAAAEwAAAEN1cnJlbnRTZXNzaW9uQ291bnQBAWQBAC8AP2QBAAAAB/////8BAf////8AAAAAFWCJ" + "CgIAAAAAABUAAABDdW11bGF0ZWRTZXNzaW9uQ291bnQBAWUBAC8AP2UBAAAAB/////8BAf////8AAAAA" + "FWCJCgIAAAAAABwAAABTZWN1cml0eVJlamVjdGVkU2Vzc2lvbkNvdW50AQFmAQAvAD9mAQAAAAf/////" + "AQH/////AAAAABVgiQoCAAAAAAAUAAAAUmVqZWN0ZWRTZXNzaW9uQ291bnQBAWcBAC8AP2cBAAAAB///" + "//8BAf////8AAAAAFWCJCgIAAAAAABMAAABTZXNzaW9uVGltZW91dENvdW50AQFoAQAvAD9oAQAAAAf/" + "////AQH/////AAAAABVgiQoCAAAAAAARAAAAU2Vzc2lvbkFib3J0Q291bnQBAWkBAC8AP2kBAAAAB///" + "//8BAf////8AAAAAFWCJCgIAAAAAABcAAABQdWJsaXNoaW5nSW50ZXJ2YWxDb3VudAEBagEALwA/agEA" + "AAAH/////wEB/////wAAAAAVYIkKAgAAAAAAGAAAAEN1cnJlbnRTdWJzY3JpcHRpb25Db3VudAEBawEA" + "LwA/awEAAAAH/////wEB/////wAAAAAVYIkKAgAAAAAAGgAAAEN1bXVsYXRlZFN1YnNjcmlwdGlvbkNv" + "dW50AQFsAQAvAD9sAQAAAAf/////AQH/////AAAAABVgiQoCAAAAAAAdAAAAU2VjdXJpdHlSZWplY3Rl" + "ZFJlcXVlc3RzQ291bnQBAW0BAC8AP20BAAAAB/////8BAf////8AAAAAFWCJCgIAAAAAABUAAABSZWpl" + "Y3RlZFJlcXVlc3RzQ291bnQBAW4BAC8AP24BAAAAB/////8BAf////8AAAAAF2CJCgIAAAAAABwAAABT" + "dWJzY3JpcHRpb25EaWFnbm9zdGljc0FycmF5AQFwAQAvAQB7CHABAAABAGoDAQAAAAEAAAAAAAAAAQH/" + "////AAAAAARggAoBAAAAAAAaAAAAU2Vzc2lvbnNEaWFnbm9zdGljc1N1bW1hcnkBAXEBAC8BAOoHcQEA" + "AP////8CAAAAF2CJCgIAAAAAABcAAABTZXNzaW9uRGlhZ25vc3RpY3NBcnJheQEBcgEALwEAlAhyAQAA" + "AQBhAwEAAAABAAAAAAAAAAEB/////wAAAAAXYIkKAgAAAAAAHwAAAFNlc3Npb25TZWN1cml0eURpYWdu" + "b3N0aWNzQXJyYXkBAXMBAC8BAMMIcwEAAAEAZAMBAAAAAQAAAAAAAAABAf////8AAAAAFWCJCgIAAAAA" + "AAsAAABFbmFibGVkRmxhZwEBdAEALgBEdAEAAAAB/////wMD/////wAAAAAEYIAKAQAAAAAAEAAAAFZl" + "bmRvclNlcnZlckluZm8BAXUBAC8BAPEHdQEAAP////8AAAAABGCACgEAAAAAABAAAABTZXJ2ZXJSZWR1" + "bmRhbmN5AQF2AQAvAQDyB3YBAAD/////AQAAABVgiQoCAAAAAAARAAAAUmVkdW5kYW5jeVN1cHBvcnQB" + "AXcBAC4ARHcBAAABAFMD/////wEB/////wAAAAAVYMkKAgAAABEAAABCcm93c2VOYW1lNG5vZGU2NgEA" + "DQAAAENoaWxkUHJvcGVydHkBAZIBAC4ARJIBAAAAFf////8BAQEAAAABAcMAAQEBkwEAAAAAFWDJCgIA" + "AAAOAAAATmFtZU5vdFNldDExMDkBABMAAABCcm93c2VOYW1lNG5vZGUxMTA5AQGTAQAvAQBACZMBAAAA" + "Gv////8BAQEAAAABAcMAAAEBkgEBAAAAFWCJCgIAAAAAAAcAAABFVVJhbmdlAQGXAQAuAESXAQAAAQB0" + "A/////8BAf////8AAAAABGGCCgQAAAABAAsAAABDaGlsZE1ldGhvZAEBmQEALwEBJwGZAQAAAQH/////" + "AgAAABdgqQoCAAAAAAAOAAAASW5wdXRBcmd1bWVudHMBAZoBAC4ARJoBAACWAgAAAAEAKgEBFQAAAAYA" + "AABJbnB1dDEABv////8AAAAAAAEAKgEBFQAAAAYAAABJbnB1dDIABv////8AAAAAAAEAKAEBAAAAAQAA" + "AAAAAAABAf////8AAAAAF2CpCgIAAAAAAA8AAABPdXRwdXRBcmd1bWVudHMBAZsBAC4ARJsBAACWAQAA" + "AAEAKgEBFgAAAAcAAABPdXRwdXQxAAb/////AAAAAAABACgBAQAAAAEAAAAAAAAAAQH/////AAAAAARh" + "ggoEAAAAAQATAAAATm9uRXhlY3V0YWJsZU1ldGhvZAEBnAEALwEBMgGcAQAAAQH/////AAAAAA=="; #endregion #endif #endregion #region Public Properties #endregion #region Overridden Methods #endregion #region Private Fields #endregion } #endif #endregion } ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/XMLModels/CorrectModels/ObjectTypeTest/ObjectTypeTest.Constants.cs ================================================ /* ======================================================================== * Copyright (c) 2005-2021 The OPC Foundation, Inc. All rights reserved. * * OPC Foundation MIT License 1.00 * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, * copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following * conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. * * The complete license agreement can be found here: * http://opcfoundation.org/License/MIT/1.00/ * ======================================================================*/ using System; using System.Collections.Generic; using System.Text; using System.Reflection; using System.Xml; using System.Runtime.Serialization; using ; namespace ObjectTypeTest { #region Method Identifiers /// /// A class that declares constants for all Methods in the Model Design. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class Methods { /// /// The identifier for the ComplexObjectType_ServerCapabilities_RoleSet_AddRole Method. /// public const uint ComplexObjectType_ServerCapabilities_RoleSet_AddRole = 3; /// /// The identifier for the ComplexObjectType_ServerCapabilities_RoleSet_RemoveRole Method. /// public const uint ComplexObjectType_ServerCapabilities_RoleSet_RemoveRole = 6; /// /// The identifier for the ComplexObjectType_ChildMethod Method. /// public const uint ComplexObjectType_ChildMethod = 295; /// /// The identifier for the ComplexObjectType_NonExecutableMethod Method. /// public const uint ComplexObjectType_NonExecutableMethod = 306; /// /// The identifier for the ChildMethodComplexObjectType Method. /// public const uint ChildMethodComplexObjectType = 303; /// /// The identifier for the NonExecutableMethodComplexObjectType Method. /// public const uint NonExecutableMethodComplexObjectType = 307; /// /// The identifier for the DerivedFromComplexObjectType_ServerCapabilities_RoleSet_AddRole Method. /// public const uint DerivedFromComplexObjectType_ServerCapabilities_RoleSet_AddRole = 10; /// /// The identifier for the DerivedFromComplexObjectType_ServerCapabilities_RoleSet_RemoveRole Method. /// public const uint DerivedFromComplexObjectType_ServerCapabilities_RoleSet_RemoveRole = 13; /// /// The identifier for the DerivedFromComplexObjectType_ChildMethod Method. /// public const uint DerivedFromComplexObjectType_ChildMethod = 409; /// /// The identifier for the NameNotSet6_ServerCapabilities_RoleSet_AddRole Method. /// public const uint NameNotSet6_ServerCapabilities_RoleSet_AddRole = 17; /// /// The identifier for the NameNotSet6_ServerCapabilities_RoleSet_RemoveRole Method. /// public const uint NameNotSet6_ServerCapabilities_RoleSet_RemoveRole = 20; /// /// The identifier for the NameNotSet6_ChildMethod Method. /// public const uint NameNotSet6_ChildMethod = 512; /// /// The identifier for the NameNotSet6_NonExecutableMethod Method. /// public const uint NameNotSet6_NonExecutableMethod = 515; } #endregion #region Object Identifiers /// /// A class that declares constants for all Objects in the Model Design. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class Objects { /// /// The identifier for the ComplexObjectType_ServerCapabilities Object. /// public const uint ComplexObjectType_ServerCapabilities = 214; /// /// The identifier for the ComplexObjectType_ServerCapabilities_ModellingRules Object. /// public const uint ComplexObjectType_ServerCapabilities_ModellingRules = 237; /// /// The identifier for the ComplexObjectType_ServerCapabilities_AggregateFunctions Object. /// public const uint ComplexObjectType_ServerCapabilities_AggregateFunctions = 238; /// /// The identifier for the ComplexObjectType_ServerDiagnostics_SessionsDiagnosticsSummary Object. /// public const uint ComplexObjectType_ServerDiagnostics_SessionsDiagnosticsSummary = 255; /// /// The identifier for the ComplexObjectType_ChildObject Object. /// public const uint ComplexObjectType_ChildObject = 308; /// /// The identifier for the DerivedFromComplexObjectType_ServerCapabilities_ModellingRules Object. /// public const uint DerivedFromComplexObjectType_ServerCapabilities_ModellingRules = 351; /// /// The identifier for the DerivedFromComplexObjectType_ServerCapabilities_AggregateFunctions Object. /// public const uint DerivedFromComplexObjectType_ServerCapabilities_AggregateFunctions = 352; /// /// The identifier for the DerivedFromComplexObjectType_ServerDiagnostics_SessionsDiagnosticsSummary Object. /// public const uint DerivedFromComplexObjectType_ServerDiagnostics_SessionsDiagnosticsSummary = 369; /// /// The identifier for the NameNotSet6 Object. /// public const uint NameNotSet6 = 413; /// /// The identifier for the NameNotSet6_ServerCapabilities Object. /// public const uint NameNotSet6_ServerCapabilities = 431; /// /// The identifier for the NameNotSet6_ServerCapabilities_ModellingRules Object. /// public const uint NameNotSet6_ServerCapabilities_ModellingRules = 454; /// /// The identifier for the NameNotSet6_ServerCapabilities_AggregateFunctions Object. /// public const uint NameNotSet6_ServerCapabilities_AggregateFunctions = 455; /// /// The identifier for the NameNotSet6_ServerDiagnostics Object. /// public const uint NameNotSet6_ServerDiagnostics = 456; /// /// The identifier for the NameNotSet6_ServerDiagnostics_SessionsDiagnosticsSummary Object. /// public const uint NameNotSet6_ServerDiagnostics_SessionsDiagnosticsSummary = 472; /// /// The identifier for the NameNotSet6_VendorServerInfo Object. /// public const uint NameNotSet6_VendorServerInfo = 476; /// /// The identifier for the NameNotSet6_ServerRedundancy Object. /// public const uint NameNotSet6_ServerRedundancy = 477; } #endregion #region ObjectType Identifiers /// /// A class that declares constants for all ObjectTypes in the Model Design. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class ObjectTypes { /// /// The identifier for the ComplexObjectType ObjectType. /// public const uint ComplexObjectType = 196; /// /// The identifier for the DerivedFromComplexObjectType ObjectType. /// public const uint DerivedFromComplexObjectType = 310; } #endregion #region ReferenceType Identifiers /// /// A class that declares constants for all ReferenceTypes in the Model Design. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class ReferenceTypes { /// /// The identifier for the FlowTo ReferenceType. /// public const uint FlowTo = 195; } #endregion #region Variable Identifiers /// /// A class that declares constants for all Variables in the Model Design. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class Variables { /// /// The identifier for the ComplexObjectType_ServerStatus_StartTime Variable. /// public const uint ComplexObjectType_ServerStatus_StartTime = 200; /// /// The identifier for the ComplexObjectType_ServerStatus_CurrentTime Variable. /// public const uint ComplexObjectType_ServerStatus_CurrentTime = 201; /// /// The identifier for the ComplexObjectType_ServerStatus_State Variable. /// public const uint ComplexObjectType_ServerStatus_State = 202; /// /// The identifier for the ComplexObjectType_ServerStatus_BuildInfo Variable. /// public const uint ComplexObjectType_ServerStatus_BuildInfo = 203; /// /// The identifier for the ComplexObjectType_ServerStatus_BuildInfo_ProductUri Variable. /// public const uint ComplexObjectType_ServerStatus_BuildInfo_ProductUri = 204; /// /// The identifier for the ComplexObjectType_ServerStatus_BuildInfo_ManufacturerName Variable. /// public const uint ComplexObjectType_ServerStatus_BuildInfo_ManufacturerName = 205; /// /// The identifier for the ComplexObjectType_ServerStatus_BuildInfo_ProductName Variable. /// public const uint ComplexObjectType_ServerStatus_BuildInfo_ProductName = 206; /// /// The identifier for the ComplexObjectType_ServerStatus_BuildInfo_SoftwareVersion Variable. /// public const uint ComplexObjectType_ServerStatus_BuildInfo_SoftwareVersion = 207; /// /// The identifier for the ComplexObjectType_ServerStatus_BuildInfo_BuildNumber Variable. /// public const uint ComplexObjectType_ServerStatus_BuildInfo_BuildNumber = 208; /// /// The identifier for the ComplexObjectType_ServerStatus_BuildInfo_BuildDate Variable. /// public const uint ComplexObjectType_ServerStatus_BuildInfo_BuildDate = 209; /// /// The identifier for the ComplexObjectType_ServerStatus_SecondsTillShutdown Variable. /// public const uint ComplexObjectType_ServerStatus_SecondsTillShutdown = 210; /// /// The identifier for the ComplexObjectType_ServerStatus_ShutdownReason Variable. /// public const uint ComplexObjectType_ServerStatus_ShutdownReason = 211; /// /// The identifier for the ComplexObjectType_ServerCapabilities_ServerProfileArray Variable. /// public const uint ComplexObjectType_ServerCapabilities_ServerProfileArray = 215; /// /// The identifier for the ComplexObjectType_ServerCapabilities_LocaleIdArray Variable. /// public const uint ComplexObjectType_ServerCapabilities_LocaleIdArray = 216; /// /// The identifier for the ComplexObjectType_ServerCapabilities_MinSupportedSampleRate Variable. /// public const uint ComplexObjectType_ServerCapabilities_MinSupportedSampleRate = 217; /// /// The identifier for the ComplexObjectType_ServerCapabilities_MaxBrowseContinuationPoints Variable. /// public const uint ComplexObjectType_ServerCapabilities_MaxBrowseContinuationPoints = 218; /// /// The identifier for the ComplexObjectType_ServerCapabilities_MaxQueryContinuationPoints Variable. /// public const uint ComplexObjectType_ServerCapabilities_MaxQueryContinuationPoints = 219; /// /// The identifier for the ComplexObjectType_ServerCapabilities_MaxHistoryContinuationPoints Variable. /// public const uint ComplexObjectType_ServerCapabilities_MaxHistoryContinuationPoints = 220; /// /// The identifier for the ComplexObjectType_ServerCapabilities_SoftwareCertificates Variable. /// public const uint ComplexObjectType_ServerCapabilities_SoftwareCertificates = 221; /// /// The identifier for the ComplexObjectType_ServerCapabilities_RoleSet_AddRole_InputArguments Variable. /// public const uint ComplexObjectType_ServerCapabilities_RoleSet_AddRole_InputArguments = 4; /// /// The identifier for the ComplexObjectType_ServerCapabilities_RoleSet_AddRole_OutputArguments Variable. /// public const uint ComplexObjectType_ServerCapabilities_RoleSet_AddRole_OutputArguments = 5; /// /// The identifier for the ComplexObjectType_ServerCapabilities_RoleSet_RemoveRole_InputArguments Variable. /// public const uint ComplexObjectType_ServerCapabilities_RoleSet_RemoveRole_InputArguments = 7; /// /// The identifier for the ComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary Variable. /// public const uint ComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary = 240; /// /// The identifier for the ComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_ServerViewCount Variable. /// public const uint ComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_ServerViewCount = 241; /// /// The identifier for the ComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_CurrentSessionCount Variable. /// public const uint ComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_CurrentSessionCount = 242; /// /// The identifier for the ComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_CumulatedSessionCount Variable. /// public const uint ComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_CumulatedSessionCount = 243; /// /// The identifier for the ComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_SecurityRejectedSessionCount Variable. /// public const uint ComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_SecurityRejectedSessionCount = 244; /// /// The identifier for the ComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_RejectedSessionCount Variable. /// public const uint ComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_RejectedSessionCount = 245; /// /// The identifier for the ComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_SessionTimeoutCount Variable. /// public const uint ComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_SessionTimeoutCount = 246; /// /// The identifier for the ComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_SessionAbortCount Variable. /// public const uint ComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_SessionAbortCount = 247; /// /// The identifier for the ComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_PublishingIntervalCount Variable. /// public const uint ComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_PublishingIntervalCount = 248; /// /// The identifier for the ComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_CurrentSubscriptionCount Variable. /// public const uint ComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_CurrentSubscriptionCount = 249; /// /// The identifier for the ComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_CumulatedSubscriptionCount Variable. /// public const uint ComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_CumulatedSubscriptionCount = 250; /// /// The identifier for the ComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_SecurityRejectedRequestsCount Variable. /// public const uint ComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_SecurityRejectedRequestsCount = 251; /// /// The identifier for the ComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_RejectedRequestsCount Variable. /// public const uint ComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_RejectedRequestsCount = 252; /// /// The identifier for the ComplexObjectType_ServerDiagnostics_SubscriptionDiagnosticsArray Variable. /// public const uint ComplexObjectType_ServerDiagnostics_SubscriptionDiagnosticsArray = 254; /// /// The identifier for the ComplexObjectType_ServerDiagnostics_SessionsDiagnosticsSummary_SessionDiagnosticsArray Variable. /// public const uint ComplexObjectType_ServerDiagnostics_SessionsDiagnosticsSummary_SessionDiagnosticsArray = 256; /// /// The identifier for the ComplexObjectType_ServerDiagnostics_SessionsDiagnosticsSummary_SessionSecurityDiagnosticsArray Variable. /// public const uint ComplexObjectType_ServerDiagnostics_SessionsDiagnosticsSummary_SessionSecurityDiagnosticsArray = 257; /// /// The identifier for the ComplexObjectType_ServerDiagnostics_EnabledFlag Variable. /// public const uint ComplexObjectType_ServerDiagnostics_EnabledFlag = 258; /// /// The identifier for the ComplexObjectType_ServerRedundancy_RedundancySupport Variable. /// public const uint ComplexObjectType_ServerRedundancy_RedundancySupport = 261; /// /// The identifier for the ComplexObjectType_GetMonitoredItems_InputArguments Variable. /// public const uint ComplexObjectType_GetMonitoredItems_InputArguments = 285; /// /// The identifier for the ComplexObjectType_GetMonitoredItems_OutputArguments Variable. /// public const uint ComplexObjectType_GetMonitoredItems_OutputArguments = 286; /// /// The identifier for the ComplexObjectType_ResendData_InputArguments Variable. /// public const uint ComplexObjectType_ResendData_InputArguments = 526; /// /// The identifier for the ComplexObjectType_SetSubscriptionDurable_InputArguments Variable. /// public const uint ComplexObjectType_SetSubscriptionDurable_InputArguments = 528; /// /// The identifier for the ComplexObjectType_SetSubscriptionDurable_OutputArguments Variable. /// public const uint ComplexObjectType_SetSubscriptionDurable_OutputArguments = 529; /// /// The identifier for the ComplexObjectType_RequestServerStateChange_InputArguments Variable. /// public const uint ComplexObjectType_RequestServerStateChange_InputArguments = 531; /// /// The identifier for the ComplexObjectType_BrowseName4node66 Variable. /// public const uint ComplexObjectType_BrowseName4node66 = 309; /// /// The identifier for the ComplexObjectType_NameNotSet1109 Variable. /// public const uint ComplexObjectType_NameNotSet1109 = 289; /// /// The identifier for the ComplexObjectType_NameNotSet1109_EURange Variable. /// public const uint ComplexObjectType_NameNotSet1109_EURange = 293; /// /// The identifier for the ComplexObjectType_ChildMethod_InputArguments Variable. /// public const uint ComplexObjectType_ChildMethod_InputArguments = 299; /// /// The identifier for the ComplexObjectType_ChildMethod_OutputArguments Variable. /// public const uint ComplexObjectType_ChildMethod_OutputArguments = 300; /// /// The identifier for the ChildMethodComplexObjectType_InputArguments Variable. /// public const uint ChildMethodComplexObjectType_InputArguments = 304; /// /// The identifier for the ChildMethodComplexObjectType_OutputArguments Variable. /// public const uint ChildMethodComplexObjectType_OutputArguments = 305; /// /// The identifier for the DerivedFromComplexObjectType_ServerStatus_StartTime Variable. /// public const uint DerivedFromComplexObjectType_ServerStatus_StartTime = 314; /// /// The identifier for the DerivedFromComplexObjectType_ServerStatus_CurrentTime Variable. /// public const uint DerivedFromComplexObjectType_ServerStatus_CurrentTime = 315; /// /// The identifier for the DerivedFromComplexObjectType_ServerStatus_State Variable. /// public const uint DerivedFromComplexObjectType_ServerStatus_State = 316; /// /// The identifier for the DerivedFromComplexObjectType_ServerStatus_BuildInfo Variable. /// public const uint DerivedFromComplexObjectType_ServerStatus_BuildInfo = 317; /// /// The identifier for the DerivedFromComplexObjectType_ServerStatus_BuildInfo_ProductUri Variable. /// public const uint DerivedFromComplexObjectType_ServerStatus_BuildInfo_ProductUri = 318; /// /// The identifier for the DerivedFromComplexObjectType_ServerStatus_BuildInfo_ManufacturerName Variable. /// public const uint DerivedFromComplexObjectType_ServerStatus_BuildInfo_ManufacturerName = 319; /// /// The identifier for the DerivedFromComplexObjectType_ServerStatus_BuildInfo_ProductName Variable. /// public const uint DerivedFromComplexObjectType_ServerStatus_BuildInfo_ProductName = 320; /// /// The identifier for the DerivedFromComplexObjectType_ServerStatus_BuildInfo_SoftwareVersion Variable. /// public const uint DerivedFromComplexObjectType_ServerStatus_BuildInfo_SoftwareVersion = 321; /// /// The identifier for the DerivedFromComplexObjectType_ServerStatus_BuildInfo_BuildNumber Variable. /// public const uint DerivedFromComplexObjectType_ServerStatus_BuildInfo_BuildNumber = 322; /// /// The identifier for the DerivedFromComplexObjectType_ServerStatus_BuildInfo_BuildDate Variable. /// public const uint DerivedFromComplexObjectType_ServerStatus_BuildInfo_BuildDate = 323; /// /// The identifier for the DerivedFromComplexObjectType_ServerStatus_SecondsTillShutdown Variable. /// public const uint DerivedFromComplexObjectType_ServerStatus_SecondsTillShutdown = 324; /// /// The identifier for the DerivedFromComplexObjectType_ServerStatus_ShutdownReason Variable. /// public const uint DerivedFromComplexObjectType_ServerStatus_ShutdownReason = 325; /// /// The identifier for the DerivedFromComplexObjectType_ServerCapabilities_ServerProfileArray Variable. /// public const uint DerivedFromComplexObjectType_ServerCapabilities_ServerProfileArray = 329; /// /// The identifier for the DerivedFromComplexObjectType_ServerCapabilities_LocaleIdArray Variable. /// public const uint DerivedFromComplexObjectType_ServerCapabilities_LocaleIdArray = 330; /// /// The identifier for the DerivedFromComplexObjectType_ServerCapabilities_MinSupportedSampleRate Variable. /// public const uint DerivedFromComplexObjectType_ServerCapabilities_MinSupportedSampleRate = 331; /// /// The identifier for the DerivedFromComplexObjectType_ServerCapabilities_MaxBrowseContinuationPoints Variable. /// public const uint DerivedFromComplexObjectType_ServerCapabilities_MaxBrowseContinuationPoints = 332; /// /// The identifier for the DerivedFromComplexObjectType_ServerCapabilities_MaxQueryContinuationPoints Variable. /// public const uint DerivedFromComplexObjectType_ServerCapabilities_MaxQueryContinuationPoints = 333; /// /// The identifier for the DerivedFromComplexObjectType_ServerCapabilities_MaxHistoryContinuationPoints Variable. /// public const uint DerivedFromComplexObjectType_ServerCapabilities_MaxHistoryContinuationPoints = 334; /// /// The identifier for the DerivedFromComplexObjectType_ServerCapabilities_SoftwareCertificates Variable. /// public const uint DerivedFromComplexObjectType_ServerCapabilities_SoftwareCertificates = 335; /// /// The identifier for the DerivedFromComplexObjectType_ServerCapabilities_RoleSet_AddRole_InputArguments Variable. /// public const uint DerivedFromComplexObjectType_ServerCapabilities_RoleSet_AddRole_InputArguments = 11; /// /// The identifier for the DerivedFromComplexObjectType_ServerCapabilities_RoleSet_AddRole_OutputArguments Variable. /// public const uint DerivedFromComplexObjectType_ServerCapabilities_RoleSet_AddRole_OutputArguments = 12; /// /// The identifier for the DerivedFromComplexObjectType_ServerCapabilities_RoleSet_RemoveRole_InputArguments Variable. /// public const uint DerivedFromComplexObjectType_ServerCapabilities_RoleSet_RemoveRole_InputArguments = 14; /// /// The identifier for the DerivedFromComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary Variable. /// public const uint DerivedFromComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary = 354; /// /// The identifier for the DerivedFromComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_ServerViewCount Variable. /// public const uint DerivedFromComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_ServerViewCount = 355; /// /// The identifier for the DerivedFromComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_CurrentSessionCount Variable. /// public const uint DerivedFromComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_CurrentSessionCount = 356; /// /// The identifier for the DerivedFromComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_CumulatedSessionCount Variable. /// public const uint DerivedFromComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_CumulatedSessionCount = 357; /// /// The identifier for the DerivedFromComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_SecurityRejectedSessionCount Variable. /// public const uint DerivedFromComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_SecurityRejectedSessionCount = 358; /// /// The identifier for the DerivedFromComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_RejectedSessionCount Variable. /// public const uint DerivedFromComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_RejectedSessionCount = 359; /// /// The identifier for the DerivedFromComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_SessionTimeoutCount Variable. /// public const uint DerivedFromComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_SessionTimeoutCount = 360; /// /// The identifier for the DerivedFromComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_SessionAbortCount Variable. /// public const uint DerivedFromComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_SessionAbortCount = 361; /// /// The identifier for the DerivedFromComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_PublishingIntervalCount Variable. /// public const uint DerivedFromComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_PublishingIntervalCount = 362; /// /// The identifier for the DerivedFromComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_CurrentSubscriptionCount Variable. /// public const uint DerivedFromComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_CurrentSubscriptionCount = 363; /// /// The identifier for the DerivedFromComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_CumulatedSubscriptionCount Variable. /// public const uint DerivedFromComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_CumulatedSubscriptionCount = 364; /// /// The identifier for the DerivedFromComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_SecurityRejectedRequestsCount Variable. /// public const uint DerivedFromComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_SecurityRejectedRequestsCount = 365; /// /// The identifier for the DerivedFromComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_RejectedRequestsCount Variable. /// public const uint DerivedFromComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_RejectedRequestsCount = 366; /// /// The identifier for the DerivedFromComplexObjectType_ServerDiagnostics_SubscriptionDiagnosticsArray Variable. /// public const uint DerivedFromComplexObjectType_ServerDiagnostics_SubscriptionDiagnosticsArray = 368; /// /// The identifier for the DerivedFromComplexObjectType_ServerDiagnostics_SessionsDiagnosticsSummary_SessionDiagnosticsArray Variable. /// public const uint DerivedFromComplexObjectType_ServerDiagnostics_SessionsDiagnosticsSummary_SessionDiagnosticsArray = 370; /// /// The identifier for the DerivedFromComplexObjectType_ServerDiagnostics_SessionsDiagnosticsSummary_SessionSecurityDiagnosticsArray Variable. /// public const uint DerivedFromComplexObjectType_ServerDiagnostics_SessionsDiagnosticsSummary_SessionSecurityDiagnosticsArray = 371; /// /// The identifier for the DerivedFromComplexObjectType_ServerDiagnostics_EnabledFlag Variable. /// public const uint DerivedFromComplexObjectType_ServerDiagnostics_EnabledFlag = 372; /// /// The identifier for the DerivedFromComplexObjectType_ServerRedundancy_RedundancySupport Variable. /// public const uint DerivedFromComplexObjectType_ServerRedundancy_RedundancySupport = 375; /// /// The identifier for the DerivedFromComplexObjectType_GetMonitoredItems_InputArguments Variable. /// public const uint DerivedFromComplexObjectType_GetMonitoredItems_InputArguments = 399; /// /// The identifier for the DerivedFromComplexObjectType_GetMonitoredItems_OutputArguments Variable. /// public const uint DerivedFromComplexObjectType_GetMonitoredItems_OutputArguments = 400; /// /// The identifier for the DerivedFromComplexObjectType_ResendData_InputArguments Variable. /// public const uint DerivedFromComplexObjectType_ResendData_InputArguments = 542; /// /// The identifier for the DerivedFromComplexObjectType_SetSubscriptionDurable_InputArguments Variable. /// public const uint DerivedFromComplexObjectType_SetSubscriptionDurable_InputArguments = 544; /// /// The identifier for the DerivedFromComplexObjectType_SetSubscriptionDurable_OutputArguments Variable. /// public const uint DerivedFromComplexObjectType_SetSubscriptionDurable_OutputArguments = 545; /// /// The identifier for the DerivedFromComplexObjectType_RequestServerStateChange_InputArguments Variable. /// public const uint DerivedFromComplexObjectType_RequestServerStateChange_InputArguments = 547; /// /// The identifier for the DerivedFromComplexObjectType_BrowseName4node66 Variable. /// public const uint DerivedFromComplexObjectType_BrowseName4node66 = 402; /// /// The identifier for the DerivedFromComplexObjectType_NameNotSet1109 Variable. /// public const uint DerivedFromComplexObjectType_NameNotSet1109 = 403; /// /// The identifier for the DerivedFromComplexObjectType_NameNotSet1109_EURange Variable. /// public const uint DerivedFromComplexObjectType_NameNotSet1109_EURange = 407; /// /// The identifier for the DerivedFromComplexObjectType_ChildMethod_InputArguments Variable. /// public const uint DerivedFromComplexObjectType_ChildMethod_InputArguments = 410; /// /// The identifier for the DerivedFromComplexObjectType_ChildMethod_OutputArguments Variable. /// public const uint DerivedFromComplexObjectType_ChildMethod_OutputArguments = 411; /// /// The identifier for the NameNotSet6_ServerArray Variable. /// public const uint NameNotSet6_ServerArray = 414; /// /// The identifier for the NameNotSet6_NamespaceArray Variable. /// public const uint NameNotSet6_NamespaceArray = 415; /// /// The identifier for the NameNotSet6_ServerStatus Variable. /// public const uint NameNotSet6_ServerStatus = 416; /// /// The identifier for the NameNotSet6_ServerStatus_StartTime Variable. /// public const uint NameNotSet6_ServerStatus_StartTime = 417; /// /// The identifier for the NameNotSet6_ServerStatus_CurrentTime Variable. /// public const uint NameNotSet6_ServerStatus_CurrentTime = 418; /// /// The identifier for the NameNotSet6_ServerStatus_State Variable. /// public const uint NameNotSet6_ServerStatus_State = 419; /// /// The identifier for the NameNotSet6_ServerStatus_BuildInfo Variable. /// public const uint NameNotSet6_ServerStatus_BuildInfo = 420; /// /// The identifier for the NameNotSet6_ServerStatus_BuildInfo_ProductUri Variable. /// public const uint NameNotSet6_ServerStatus_BuildInfo_ProductUri = 421; /// /// The identifier for the NameNotSet6_ServerStatus_BuildInfo_ManufacturerName Variable. /// public const uint NameNotSet6_ServerStatus_BuildInfo_ManufacturerName = 422; /// /// The identifier for the NameNotSet6_ServerStatus_BuildInfo_ProductName Variable. /// public const uint NameNotSet6_ServerStatus_BuildInfo_ProductName = 423; /// /// The identifier for the NameNotSet6_ServerStatus_BuildInfo_SoftwareVersion Variable. /// public const uint NameNotSet6_ServerStatus_BuildInfo_SoftwareVersion = 424; /// /// The identifier for the NameNotSet6_ServerStatus_BuildInfo_BuildNumber Variable. /// public const uint NameNotSet6_ServerStatus_BuildInfo_BuildNumber = 425; /// /// The identifier for the NameNotSet6_ServerStatus_BuildInfo_BuildDate Variable. /// public const uint NameNotSet6_ServerStatus_BuildInfo_BuildDate = 426; /// /// The identifier for the NameNotSet6_ServerStatus_SecondsTillShutdown Variable. /// public const uint NameNotSet6_ServerStatus_SecondsTillShutdown = 427; /// /// The identifier for the NameNotSet6_ServerStatus_ShutdownReason Variable. /// public const uint NameNotSet6_ServerStatus_ShutdownReason = 428; /// /// The identifier for the NameNotSet6_ServiceLevel Variable. /// public const uint NameNotSet6_ServiceLevel = 429; /// /// The identifier for the NameNotSet6_Auditing Variable. /// public const uint NameNotSet6_Auditing = 430; /// /// The identifier for the NameNotSet6_ServerCapabilities_ServerProfileArray Variable. /// public const uint NameNotSet6_ServerCapabilities_ServerProfileArray = 432; /// /// The identifier for the NameNotSet6_ServerCapabilities_LocaleIdArray Variable. /// public const uint NameNotSet6_ServerCapabilities_LocaleIdArray = 433; /// /// The identifier for the NameNotSet6_ServerCapabilities_MinSupportedSampleRate Variable. /// public const uint NameNotSet6_ServerCapabilities_MinSupportedSampleRate = 434; /// /// The identifier for the NameNotSet6_ServerCapabilities_MaxBrowseContinuationPoints Variable. /// public const uint NameNotSet6_ServerCapabilities_MaxBrowseContinuationPoints = 435; /// /// The identifier for the NameNotSet6_ServerCapabilities_MaxQueryContinuationPoints Variable. /// public const uint NameNotSet6_ServerCapabilities_MaxQueryContinuationPoints = 436; /// /// The identifier for the NameNotSet6_ServerCapabilities_MaxHistoryContinuationPoints Variable. /// public const uint NameNotSet6_ServerCapabilities_MaxHistoryContinuationPoints = 437; /// /// The identifier for the NameNotSet6_ServerCapabilities_SoftwareCertificates Variable. /// public const uint NameNotSet6_ServerCapabilities_SoftwareCertificates = 438; /// /// The identifier for the NameNotSet6_ServerCapabilities_RoleSet_AddRole_InputArguments Variable. /// public const uint NameNotSet6_ServerCapabilities_RoleSet_AddRole_InputArguments = 18; /// /// The identifier for the NameNotSet6_ServerCapabilities_RoleSet_AddRole_OutputArguments Variable. /// public const uint NameNotSet6_ServerCapabilities_RoleSet_AddRole_OutputArguments = 19; /// /// The identifier for the NameNotSet6_ServerCapabilities_RoleSet_RemoveRole_InputArguments Variable. /// public const uint NameNotSet6_ServerCapabilities_RoleSet_RemoveRole_InputArguments = 21; /// /// The identifier for the NameNotSet6_ServerDiagnostics_ServerDiagnosticsSummary Variable. /// public const uint NameNotSet6_ServerDiagnostics_ServerDiagnosticsSummary = 457; /// /// The identifier for the NameNotSet6_ServerDiagnostics_ServerDiagnosticsSummary_ServerViewCount Variable. /// public const uint NameNotSet6_ServerDiagnostics_ServerDiagnosticsSummary_ServerViewCount = 458; /// /// The identifier for the NameNotSet6_ServerDiagnostics_ServerDiagnosticsSummary_CurrentSessionCount Variable. /// public const uint NameNotSet6_ServerDiagnostics_ServerDiagnosticsSummary_CurrentSessionCount = 459; /// /// The identifier for the NameNotSet6_ServerDiagnostics_ServerDiagnosticsSummary_CumulatedSessionCount Variable. /// public const uint NameNotSet6_ServerDiagnostics_ServerDiagnosticsSummary_CumulatedSessionCount = 460; /// /// The identifier for the NameNotSet6_ServerDiagnostics_ServerDiagnosticsSummary_SecurityRejectedSessionCount Variable. /// public const uint NameNotSet6_ServerDiagnostics_ServerDiagnosticsSummary_SecurityRejectedSessionCount = 461; /// /// The identifier for the NameNotSet6_ServerDiagnostics_ServerDiagnosticsSummary_RejectedSessionCount Variable. /// public const uint NameNotSet6_ServerDiagnostics_ServerDiagnosticsSummary_RejectedSessionCount = 462; /// /// The identifier for the NameNotSet6_ServerDiagnostics_ServerDiagnosticsSummary_SessionTimeoutCount Variable. /// public const uint NameNotSet6_ServerDiagnostics_ServerDiagnosticsSummary_SessionTimeoutCount = 463; /// /// The identifier for the NameNotSet6_ServerDiagnostics_ServerDiagnosticsSummary_SessionAbortCount Variable. /// public const uint NameNotSet6_ServerDiagnostics_ServerDiagnosticsSummary_SessionAbortCount = 464; /// /// The identifier for the NameNotSet6_ServerDiagnostics_ServerDiagnosticsSummary_PublishingIntervalCount Variable. /// public const uint NameNotSet6_ServerDiagnostics_ServerDiagnosticsSummary_PublishingIntervalCount = 465; /// /// The identifier for the NameNotSet6_ServerDiagnostics_ServerDiagnosticsSummary_CurrentSubscriptionCount Variable. /// public const uint NameNotSet6_ServerDiagnostics_ServerDiagnosticsSummary_CurrentSubscriptionCount = 466; /// /// The identifier for the NameNotSet6_ServerDiagnostics_ServerDiagnosticsSummary_CumulatedSubscriptionCount Variable. /// public const uint NameNotSet6_ServerDiagnostics_ServerDiagnosticsSummary_CumulatedSubscriptionCount = 467; /// /// The identifier for the NameNotSet6_ServerDiagnostics_ServerDiagnosticsSummary_SecurityRejectedRequestsCount Variable. /// public const uint NameNotSet6_ServerDiagnostics_ServerDiagnosticsSummary_SecurityRejectedRequestsCount = 468; /// /// The identifier for the NameNotSet6_ServerDiagnostics_ServerDiagnosticsSummary_RejectedRequestsCount Variable. /// public const uint NameNotSet6_ServerDiagnostics_ServerDiagnosticsSummary_RejectedRequestsCount = 469; /// /// The identifier for the NameNotSet6_ServerDiagnostics_SubscriptionDiagnosticsArray Variable. /// public const uint NameNotSet6_ServerDiagnostics_SubscriptionDiagnosticsArray = 471; /// /// The identifier for the NameNotSet6_ServerDiagnostics_SessionsDiagnosticsSummary_SessionDiagnosticsArray Variable. /// public const uint NameNotSet6_ServerDiagnostics_SessionsDiagnosticsSummary_SessionDiagnosticsArray = 473; /// /// The identifier for the NameNotSet6_ServerDiagnostics_SessionsDiagnosticsSummary_SessionSecurityDiagnosticsArray Variable. /// public const uint NameNotSet6_ServerDiagnostics_SessionsDiagnosticsSummary_SessionSecurityDiagnosticsArray = 474; /// /// The identifier for the NameNotSet6_ServerDiagnostics_EnabledFlag Variable. /// public const uint NameNotSet6_ServerDiagnostics_EnabledFlag = 475; /// /// The identifier for the NameNotSet6_ServerRedundancy_RedundancySupport Variable. /// public const uint NameNotSet6_ServerRedundancy_RedundancySupport = 478; /// /// The identifier for the NameNotSet6_GetMonitoredItems_InputArguments Variable. /// public const uint NameNotSet6_GetMonitoredItems_InputArguments = 502; /// /// The identifier for the NameNotSet6_GetMonitoredItems_OutputArguments Variable. /// public const uint NameNotSet6_GetMonitoredItems_OutputArguments = 503; /// /// The identifier for the NameNotSet6_ResendData_InputArguments Variable. /// public const uint NameNotSet6_ResendData_InputArguments = 558; /// /// The identifier for the NameNotSet6_SetSubscriptionDurable_InputArguments Variable. /// public const uint NameNotSet6_SetSubscriptionDurable_InputArguments = 560; /// /// The identifier for the NameNotSet6_SetSubscriptionDurable_OutputArguments Variable. /// public const uint NameNotSet6_SetSubscriptionDurable_OutputArguments = 561; /// /// The identifier for the NameNotSet6_RequestServerStateChange_InputArguments Variable. /// public const uint NameNotSet6_RequestServerStateChange_InputArguments = 563; /// /// The identifier for the NameNotSet6_BrowseName4node66 Variable. /// public const uint NameNotSet6_BrowseName4node66 = 505; /// /// The identifier for the NameNotSet6_NameNotSet1109 Variable. /// public const uint NameNotSet6_NameNotSet1109 = 506; /// /// The identifier for the NameNotSet6_NameNotSet1109_EURange Variable. /// public const uint NameNotSet6_NameNotSet1109_EURange = 510; /// /// The identifier for the NameNotSet6_ChildMethod_InputArguments Variable. /// public const uint NameNotSet6_ChildMethod_InputArguments = 513; /// /// The identifier for the NameNotSet6_ChildMethod_OutputArguments Variable. /// public const uint NameNotSet6_ChildMethod_OutputArguments = 514; } #endregion #region Method Node Identifiers /// /// A class that declares constants for all Methods in the Model Design. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class MethodIds { /// /// The identifier for the ComplexObjectType_ServerCapabilities_RoleSet_AddRole Method. /// public static readonly ExpandedNodeId ComplexObjectType_ServerCapabilities_RoleSet_AddRole = new ExpandedNodeId(ObjectTypeTest.Methods.ComplexObjectType_ServerCapabilities_RoleSet_AddRole, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the ComplexObjectType_ServerCapabilities_RoleSet_RemoveRole Method. /// public static readonly ExpandedNodeId ComplexObjectType_ServerCapabilities_RoleSet_RemoveRole = new ExpandedNodeId(ObjectTypeTest.Methods.ComplexObjectType_ServerCapabilities_RoleSet_RemoveRole, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the ComplexObjectType_ChildMethod Method. /// public static readonly ExpandedNodeId ComplexObjectType_ChildMethod = new ExpandedNodeId(ObjectTypeTest.Methods.ComplexObjectType_ChildMethod, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the ComplexObjectType_NonExecutableMethod Method. /// public static readonly ExpandedNodeId ComplexObjectType_NonExecutableMethod = new ExpandedNodeId(ObjectTypeTest.Methods.ComplexObjectType_NonExecutableMethod, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the ChildMethodComplexObjectType Method. /// public static readonly ExpandedNodeId ChildMethodComplexObjectType = new ExpandedNodeId(ObjectTypeTest.Methods.ChildMethodComplexObjectType, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the NonExecutableMethodComplexObjectType Method. /// public static readonly ExpandedNodeId NonExecutableMethodComplexObjectType = new ExpandedNodeId(ObjectTypeTest.Methods.NonExecutableMethodComplexObjectType, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the DerivedFromComplexObjectType_ServerCapabilities_RoleSet_AddRole Method. /// public static readonly ExpandedNodeId DerivedFromComplexObjectType_ServerCapabilities_RoleSet_AddRole = new ExpandedNodeId(ObjectTypeTest.Methods.DerivedFromComplexObjectType_ServerCapabilities_RoleSet_AddRole, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the DerivedFromComplexObjectType_ServerCapabilities_RoleSet_RemoveRole Method. /// public static readonly ExpandedNodeId DerivedFromComplexObjectType_ServerCapabilities_RoleSet_RemoveRole = new ExpandedNodeId(ObjectTypeTest.Methods.DerivedFromComplexObjectType_ServerCapabilities_RoleSet_RemoveRole, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the DerivedFromComplexObjectType_ChildMethod Method. /// public static readonly ExpandedNodeId DerivedFromComplexObjectType_ChildMethod = new ExpandedNodeId(ObjectTypeTest.Methods.DerivedFromComplexObjectType_ChildMethod, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the NameNotSet6_ServerCapabilities_RoleSet_AddRole Method. /// public static readonly ExpandedNodeId NameNotSet6_ServerCapabilities_RoleSet_AddRole = new ExpandedNodeId(ObjectTypeTest.Methods.NameNotSet6_ServerCapabilities_RoleSet_AddRole, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the NameNotSet6_ServerCapabilities_RoleSet_RemoveRole Method. /// public static readonly ExpandedNodeId NameNotSet6_ServerCapabilities_RoleSet_RemoveRole = new ExpandedNodeId(ObjectTypeTest.Methods.NameNotSet6_ServerCapabilities_RoleSet_RemoveRole, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the NameNotSet6_ChildMethod Method. /// public static readonly ExpandedNodeId NameNotSet6_ChildMethod = new ExpandedNodeId(ObjectTypeTest.Methods.NameNotSet6_ChildMethod, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the NameNotSet6_NonExecutableMethod Method. /// public static readonly ExpandedNodeId NameNotSet6_NonExecutableMethod = new ExpandedNodeId(ObjectTypeTest.Methods.NameNotSet6_NonExecutableMethod, ObjectTypeTest.Namespaces.cas); } #endregion #region Object Node Identifiers /// /// A class that declares constants for all Objects in the Model Design. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class ObjectIds { /// /// The identifier for the ComplexObjectType_ServerCapabilities Object. /// public static readonly ExpandedNodeId ComplexObjectType_ServerCapabilities = new ExpandedNodeId(ObjectTypeTest.Objects.ComplexObjectType_ServerCapabilities, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the ComplexObjectType_ServerCapabilities_ModellingRules Object. /// public static readonly ExpandedNodeId ComplexObjectType_ServerCapabilities_ModellingRules = new ExpandedNodeId(ObjectTypeTest.Objects.ComplexObjectType_ServerCapabilities_ModellingRules, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the ComplexObjectType_ServerCapabilities_AggregateFunctions Object. /// public static readonly ExpandedNodeId ComplexObjectType_ServerCapabilities_AggregateFunctions = new ExpandedNodeId(ObjectTypeTest.Objects.ComplexObjectType_ServerCapabilities_AggregateFunctions, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the ComplexObjectType_ServerDiagnostics_SessionsDiagnosticsSummary Object. /// public static readonly ExpandedNodeId ComplexObjectType_ServerDiagnostics_SessionsDiagnosticsSummary = new ExpandedNodeId(ObjectTypeTest.Objects.ComplexObjectType_ServerDiagnostics_SessionsDiagnosticsSummary, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the ComplexObjectType_ChildObject Object. /// public static readonly ExpandedNodeId ComplexObjectType_ChildObject = new ExpandedNodeId(ObjectTypeTest.Objects.ComplexObjectType_ChildObject, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the DerivedFromComplexObjectType_ServerCapabilities_ModellingRules Object. /// public static readonly ExpandedNodeId DerivedFromComplexObjectType_ServerCapabilities_ModellingRules = new ExpandedNodeId(ObjectTypeTest.Objects.DerivedFromComplexObjectType_ServerCapabilities_ModellingRules, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the DerivedFromComplexObjectType_ServerCapabilities_AggregateFunctions Object. /// public static readonly ExpandedNodeId DerivedFromComplexObjectType_ServerCapabilities_AggregateFunctions = new ExpandedNodeId(ObjectTypeTest.Objects.DerivedFromComplexObjectType_ServerCapabilities_AggregateFunctions, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the DerivedFromComplexObjectType_ServerDiagnostics_SessionsDiagnosticsSummary Object. /// public static readonly ExpandedNodeId DerivedFromComplexObjectType_ServerDiagnostics_SessionsDiagnosticsSummary = new ExpandedNodeId(ObjectTypeTest.Objects.DerivedFromComplexObjectType_ServerDiagnostics_SessionsDiagnosticsSummary, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the NameNotSet6 Object. /// public static readonly ExpandedNodeId NameNotSet6 = new ExpandedNodeId(ObjectTypeTest.Objects.NameNotSet6, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the NameNotSet6_ServerCapabilities Object. /// public static readonly ExpandedNodeId NameNotSet6_ServerCapabilities = new ExpandedNodeId(ObjectTypeTest.Objects.NameNotSet6_ServerCapabilities, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the NameNotSet6_ServerCapabilities_ModellingRules Object. /// public static readonly ExpandedNodeId NameNotSet6_ServerCapabilities_ModellingRules = new ExpandedNodeId(ObjectTypeTest.Objects.NameNotSet6_ServerCapabilities_ModellingRules, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the NameNotSet6_ServerCapabilities_AggregateFunctions Object. /// public static readonly ExpandedNodeId NameNotSet6_ServerCapabilities_AggregateFunctions = new ExpandedNodeId(ObjectTypeTest.Objects.NameNotSet6_ServerCapabilities_AggregateFunctions, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the NameNotSet6_ServerDiagnostics Object. /// public static readonly ExpandedNodeId NameNotSet6_ServerDiagnostics = new ExpandedNodeId(ObjectTypeTest.Objects.NameNotSet6_ServerDiagnostics, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the NameNotSet6_ServerDiagnostics_SessionsDiagnosticsSummary Object. /// public static readonly ExpandedNodeId NameNotSet6_ServerDiagnostics_SessionsDiagnosticsSummary = new ExpandedNodeId(ObjectTypeTest.Objects.NameNotSet6_ServerDiagnostics_SessionsDiagnosticsSummary, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the NameNotSet6_VendorServerInfo Object. /// public static readonly ExpandedNodeId NameNotSet6_VendorServerInfo = new ExpandedNodeId(ObjectTypeTest.Objects.NameNotSet6_VendorServerInfo, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the NameNotSet6_ServerRedundancy Object. /// public static readonly ExpandedNodeId NameNotSet6_ServerRedundancy = new ExpandedNodeId(ObjectTypeTest.Objects.NameNotSet6_ServerRedundancy, ObjectTypeTest.Namespaces.cas); } #endregion #region ObjectType Node Identifiers /// /// A class that declares constants for all ObjectTypes in the Model Design. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class ObjectTypeIds { /// /// The identifier for the ComplexObjectType ObjectType. /// public static readonly ExpandedNodeId ComplexObjectType = new ExpandedNodeId(ObjectTypeTest.ObjectTypes.ComplexObjectType, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the DerivedFromComplexObjectType ObjectType. /// public static readonly ExpandedNodeId DerivedFromComplexObjectType = new ExpandedNodeId(ObjectTypeTest.ObjectTypes.DerivedFromComplexObjectType, ObjectTypeTest.Namespaces.cas); } #endregion #region ReferenceType Node Identifiers /// /// A class that declares constants for all ReferenceTypes in the Model Design. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class ReferenceTypeIds { /// /// The identifier for the FlowTo ReferenceType. /// public static readonly ExpandedNodeId FlowTo = new ExpandedNodeId(ObjectTypeTest.ReferenceTypes.FlowTo, ObjectTypeTest.Namespaces.cas); } #endregion #region Variable Node Identifiers /// /// A class that declares constants for all Variables in the Model Design. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class VariableIds { /// /// The identifier for the ComplexObjectType_ServerStatus_StartTime Variable. /// public static readonly ExpandedNodeId ComplexObjectType_ServerStatus_StartTime = new ExpandedNodeId(ObjectTypeTest.Variables.ComplexObjectType_ServerStatus_StartTime, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the ComplexObjectType_ServerStatus_CurrentTime Variable. /// public static readonly ExpandedNodeId ComplexObjectType_ServerStatus_CurrentTime = new ExpandedNodeId(ObjectTypeTest.Variables.ComplexObjectType_ServerStatus_CurrentTime, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the ComplexObjectType_ServerStatus_State Variable. /// public static readonly ExpandedNodeId ComplexObjectType_ServerStatus_State = new ExpandedNodeId(ObjectTypeTest.Variables.ComplexObjectType_ServerStatus_State, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the ComplexObjectType_ServerStatus_BuildInfo Variable. /// public static readonly ExpandedNodeId ComplexObjectType_ServerStatus_BuildInfo = new ExpandedNodeId(ObjectTypeTest.Variables.ComplexObjectType_ServerStatus_BuildInfo, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the ComplexObjectType_ServerStatus_BuildInfo_ProductUri Variable. /// public static readonly ExpandedNodeId ComplexObjectType_ServerStatus_BuildInfo_ProductUri = new ExpandedNodeId(ObjectTypeTest.Variables.ComplexObjectType_ServerStatus_BuildInfo_ProductUri, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the ComplexObjectType_ServerStatus_BuildInfo_ManufacturerName Variable. /// public static readonly ExpandedNodeId ComplexObjectType_ServerStatus_BuildInfo_ManufacturerName = new ExpandedNodeId(ObjectTypeTest.Variables.ComplexObjectType_ServerStatus_BuildInfo_ManufacturerName, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the ComplexObjectType_ServerStatus_BuildInfo_ProductName Variable. /// public static readonly ExpandedNodeId ComplexObjectType_ServerStatus_BuildInfo_ProductName = new ExpandedNodeId(ObjectTypeTest.Variables.ComplexObjectType_ServerStatus_BuildInfo_ProductName, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the ComplexObjectType_ServerStatus_BuildInfo_SoftwareVersion Variable. /// public static readonly ExpandedNodeId ComplexObjectType_ServerStatus_BuildInfo_SoftwareVersion = new ExpandedNodeId(ObjectTypeTest.Variables.ComplexObjectType_ServerStatus_BuildInfo_SoftwareVersion, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the ComplexObjectType_ServerStatus_BuildInfo_BuildNumber Variable. /// public static readonly ExpandedNodeId ComplexObjectType_ServerStatus_BuildInfo_BuildNumber = new ExpandedNodeId(ObjectTypeTest.Variables.ComplexObjectType_ServerStatus_BuildInfo_BuildNumber, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the ComplexObjectType_ServerStatus_BuildInfo_BuildDate Variable. /// public static readonly ExpandedNodeId ComplexObjectType_ServerStatus_BuildInfo_BuildDate = new ExpandedNodeId(ObjectTypeTest.Variables.ComplexObjectType_ServerStatus_BuildInfo_BuildDate, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the ComplexObjectType_ServerStatus_SecondsTillShutdown Variable. /// public static readonly ExpandedNodeId ComplexObjectType_ServerStatus_SecondsTillShutdown = new ExpandedNodeId(ObjectTypeTest.Variables.ComplexObjectType_ServerStatus_SecondsTillShutdown, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the ComplexObjectType_ServerStatus_ShutdownReason Variable. /// public static readonly ExpandedNodeId ComplexObjectType_ServerStatus_ShutdownReason = new ExpandedNodeId(ObjectTypeTest.Variables.ComplexObjectType_ServerStatus_ShutdownReason, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the ComplexObjectType_ServerCapabilities_ServerProfileArray Variable. /// public static readonly ExpandedNodeId ComplexObjectType_ServerCapabilities_ServerProfileArray = new ExpandedNodeId(ObjectTypeTest.Variables.ComplexObjectType_ServerCapabilities_ServerProfileArray, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the ComplexObjectType_ServerCapabilities_LocaleIdArray Variable. /// public static readonly ExpandedNodeId ComplexObjectType_ServerCapabilities_LocaleIdArray = new ExpandedNodeId(ObjectTypeTest.Variables.ComplexObjectType_ServerCapabilities_LocaleIdArray, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the ComplexObjectType_ServerCapabilities_MinSupportedSampleRate Variable. /// public static readonly ExpandedNodeId ComplexObjectType_ServerCapabilities_MinSupportedSampleRate = new ExpandedNodeId(ObjectTypeTest.Variables.ComplexObjectType_ServerCapabilities_MinSupportedSampleRate, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the ComplexObjectType_ServerCapabilities_MaxBrowseContinuationPoints Variable. /// public static readonly ExpandedNodeId ComplexObjectType_ServerCapabilities_MaxBrowseContinuationPoints = new ExpandedNodeId(ObjectTypeTest.Variables.ComplexObjectType_ServerCapabilities_MaxBrowseContinuationPoints, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the ComplexObjectType_ServerCapabilities_MaxQueryContinuationPoints Variable. /// public static readonly ExpandedNodeId ComplexObjectType_ServerCapabilities_MaxQueryContinuationPoints = new ExpandedNodeId(ObjectTypeTest.Variables.ComplexObjectType_ServerCapabilities_MaxQueryContinuationPoints, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the ComplexObjectType_ServerCapabilities_MaxHistoryContinuationPoints Variable. /// public static readonly ExpandedNodeId ComplexObjectType_ServerCapabilities_MaxHistoryContinuationPoints = new ExpandedNodeId(ObjectTypeTest.Variables.ComplexObjectType_ServerCapabilities_MaxHistoryContinuationPoints, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the ComplexObjectType_ServerCapabilities_SoftwareCertificates Variable. /// public static readonly ExpandedNodeId ComplexObjectType_ServerCapabilities_SoftwareCertificates = new ExpandedNodeId(ObjectTypeTest.Variables.ComplexObjectType_ServerCapabilities_SoftwareCertificates, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the ComplexObjectType_ServerCapabilities_RoleSet_AddRole_InputArguments Variable. /// public static readonly ExpandedNodeId ComplexObjectType_ServerCapabilities_RoleSet_AddRole_InputArguments = new ExpandedNodeId(ObjectTypeTest.Variables.ComplexObjectType_ServerCapabilities_RoleSet_AddRole_InputArguments, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the ComplexObjectType_ServerCapabilities_RoleSet_AddRole_OutputArguments Variable. /// public static readonly ExpandedNodeId ComplexObjectType_ServerCapabilities_RoleSet_AddRole_OutputArguments = new ExpandedNodeId(ObjectTypeTest.Variables.ComplexObjectType_ServerCapabilities_RoleSet_AddRole_OutputArguments, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the ComplexObjectType_ServerCapabilities_RoleSet_RemoveRole_InputArguments Variable. /// public static readonly ExpandedNodeId ComplexObjectType_ServerCapabilities_RoleSet_RemoveRole_InputArguments = new ExpandedNodeId(ObjectTypeTest.Variables.ComplexObjectType_ServerCapabilities_RoleSet_RemoveRole_InputArguments, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the ComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary Variable. /// public static readonly ExpandedNodeId ComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary = new ExpandedNodeId(ObjectTypeTest.Variables.ComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the ComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_ServerViewCount Variable. /// public static readonly ExpandedNodeId ComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_ServerViewCount = new ExpandedNodeId(ObjectTypeTest.Variables.ComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_ServerViewCount, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the ComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_CurrentSessionCount Variable. /// public static readonly ExpandedNodeId ComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_CurrentSessionCount = new ExpandedNodeId(ObjectTypeTest.Variables.ComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_CurrentSessionCount, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the ComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_CumulatedSessionCount Variable. /// public static readonly ExpandedNodeId ComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_CumulatedSessionCount = new ExpandedNodeId(ObjectTypeTest.Variables.ComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_CumulatedSessionCount, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the ComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_SecurityRejectedSessionCount Variable. /// public static readonly ExpandedNodeId ComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_SecurityRejectedSessionCount = new ExpandedNodeId(ObjectTypeTest.Variables.ComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_SecurityRejectedSessionCount, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the ComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_RejectedSessionCount Variable. /// public static readonly ExpandedNodeId ComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_RejectedSessionCount = new ExpandedNodeId(ObjectTypeTest.Variables.ComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_RejectedSessionCount, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the ComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_SessionTimeoutCount Variable. /// public static readonly ExpandedNodeId ComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_SessionTimeoutCount = new ExpandedNodeId(ObjectTypeTest.Variables.ComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_SessionTimeoutCount, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the ComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_SessionAbortCount Variable. /// public static readonly ExpandedNodeId ComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_SessionAbortCount = new ExpandedNodeId(ObjectTypeTest.Variables.ComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_SessionAbortCount, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the ComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_PublishingIntervalCount Variable. /// public static readonly ExpandedNodeId ComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_PublishingIntervalCount = new ExpandedNodeId(ObjectTypeTest.Variables.ComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_PublishingIntervalCount, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the ComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_CurrentSubscriptionCount Variable. /// public static readonly ExpandedNodeId ComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_CurrentSubscriptionCount = new ExpandedNodeId(ObjectTypeTest.Variables.ComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_CurrentSubscriptionCount, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the ComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_CumulatedSubscriptionCount Variable. /// public static readonly ExpandedNodeId ComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_CumulatedSubscriptionCount = new ExpandedNodeId(ObjectTypeTest.Variables.ComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_CumulatedSubscriptionCount, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the ComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_SecurityRejectedRequestsCount Variable. /// public static readonly ExpandedNodeId ComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_SecurityRejectedRequestsCount = new ExpandedNodeId(ObjectTypeTest.Variables.ComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_SecurityRejectedRequestsCount, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the ComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_RejectedRequestsCount Variable. /// public static readonly ExpandedNodeId ComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_RejectedRequestsCount = new ExpandedNodeId(ObjectTypeTest.Variables.ComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_RejectedRequestsCount, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the ComplexObjectType_ServerDiagnostics_SubscriptionDiagnosticsArray Variable. /// public static readonly ExpandedNodeId ComplexObjectType_ServerDiagnostics_SubscriptionDiagnosticsArray = new ExpandedNodeId(ObjectTypeTest.Variables.ComplexObjectType_ServerDiagnostics_SubscriptionDiagnosticsArray, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the ComplexObjectType_ServerDiagnostics_SessionsDiagnosticsSummary_SessionDiagnosticsArray Variable. /// public static readonly ExpandedNodeId ComplexObjectType_ServerDiagnostics_SessionsDiagnosticsSummary_SessionDiagnosticsArray = new ExpandedNodeId(ObjectTypeTest.Variables.ComplexObjectType_ServerDiagnostics_SessionsDiagnosticsSummary_SessionDiagnosticsArray, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the ComplexObjectType_ServerDiagnostics_SessionsDiagnosticsSummary_SessionSecurityDiagnosticsArray Variable. /// public static readonly ExpandedNodeId ComplexObjectType_ServerDiagnostics_SessionsDiagnosticsSummary_SessionSecurityDiagnosticsArray = new ExpandedNodeId(ObjectTypeTest.Variables.ComplexObjectType_ServerDiagnostics_SessionsDiagnosticsSummary_SessionSecurityDiagnosticsArray, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the ComplexObjectType_ServerDiagnostics_EnabledFlag Variable. /// public static readonly ExpandedNodeId ComplexObjectType_ServerDiagnostics_EnabledFlag = new ExpandedNodeId(ObjectTypeTest.Variables.ComplexObjectType_ServerDiagnostics_EnabledFlag, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the ComplexObjectType_ServerRedundancy_RedundancySupport Variable. /// public static readonly ExpandedNodeId ComplexObjectType_ServerRedundancy_RedundancySupport = new ExpandedNodeId(ObjectTypeTest.Variables.ComplexObjectType_ServerRedundancy_RedundancySupport, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the ComplexObjectType_GetMonitoredItems_InputArguments Variable. /// public static readonly ExpandedNodeId ComplexObjectType_GetMonitoredItems_InputArguments = new ExpandedNodeId(ObjectTypeTest.Variables.ComplexObjectType_GetMonitoredItems_InputArguments, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the ComplexObjectType_GetMonitoredItems_OutputArguments Variable. /// public static readonly ExpandedNodeId ComplexObjectType_GetMonitoredItems_OutputArguments = new ExpandedNodeId(ObjectTypeTest.Variables.ComplexObjectType_GetMonitoredItems_OutputArguments, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the ComplexObjectType_ResendData_InputArguments Variable. /// public static readonly ExpandedNodeId ComplexObjectType_ResendData_InputArguments = new ExpandedNodeId(ObjectTypeTest.Variables.ComplexObjectType_ResendData_InputArguments, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the ComplexObjectType_SetSubscriptionDurable_InputArguments Variable. /// public static readonly ExpandedNodeId ComplexObjectType_SetSubscriptionDurable_InputArguments = new ExpandedNodeId(ObjectTypeTest.Variables.ComplexObjectType_SetSubscriptionDurable_InputArguments, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the ComplexObjectType_SetSubscriptionDurable_OutputArguments Variable. /// public static readonly ExpandedNodeId ComplexObjectType_SetSubscriptionDurable_OutputArguments = new ExpandedNodeId(ObjectTypeTest.Variables.ComplexObjectType_SetSubscriptionDurable_OutputArguments, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the ComplexObjectType_RequestServerStateChange_InputArguments Variable. /// public static readonly ExpandedNodeId ComplexObjectType_RequestServerStateChange_InputArguments = new ExpandedNodeId(ObjectTypeTest.Variables.ComplexObjectType_RequestServerStateChange_InputArguments, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the ComplexObjectType_BrowseName4node66 Variable. /// public static readonly ExpandedNodeId ComplexObjectType_BrowseName4node66 = new ExpandedNodeId(ObjectTypeTest.Variables.ComplexObjectType_BrowseName4node66, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the ComplexObjectType_NameNotSet1109 Variable. /// public static readonly ExpandedNodeId ComplexObjectType_NameNotSet1109 = new ExpandedNodeId(ObjectTypeTest.Variables.ComplexObjectType_NameNotSet1109, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the ComplexObjectType_NameNotSet1109_EURange Variable. /// public static readonly ExpandedNodeId ComplexObjectType_NameNotSet1109_EURange = new ExpandedNodeId(ObjectTypeTest.Variables.ComplexObjectType_NameNotSet1109_EURange, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the ComplexObjectType_ChildMethod_InputArguments Variable. /// public static readonly ExpandedNodeId ComplexObjectType_ChildMethod_InputArguments = new ExpandedNodeId(ObjectTypeTest.Variables.ComplexObjectType_ChildMethod_InputArguments, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the ComplexObjectType_ChildMethod_OutputArguments Variable. /// public static readonly ExpandedNodeId ComplexObjectType_ChildMethod_OutputArguments = new ExpandedNodeId(ObjectTypeTest.Variables.ComplexObjectType_ChildMethod_OutputArguments, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the ChildMethodComplexObjectType_InputArguments Variable. /// public static readonly ExpandedNodeId ChildMethodComplexObjectType_InputArguments = new ExpandedNodeId(ObjectTypeTest.Variables.ChildMethodComplexObjectType_InputArguments, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the ChildMethodComplexObjectType_OutputArguments Variable. /// public static readonly ExpandedNodeId ChildMethodComplexObjectType_OutputArguments = new ExpandedNodeId(ObjectTypeTest.Variables.ChildMethodComplexObjectType_OutputArguments, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the DerivedFromComplexObjectType_ServerStatus_StartTime Variable. /// public static readonly ExpandedNodeId DerivedFromComplexObjectType_ServerStatus_StartTime = new ExpandedNodeId(ObjectTypeTest.Variables.DerivedFromComplexObjectType_ServerStatus_StartTime, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the DerivedFromComplexObjectType_ServerStatus_CurrentTime Variable. /// public static readonly ExpandedNodeId DerivedFromComplexObjectType_ServerStatus_CurrentTime = new ExpandedNodeId(ObjectTypeTest.Variables.DerivedFromComplexObjectType_ServerStatus_CurrentTime, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the DerivedFromComplexObjectType_ServerStatus_State Variable. /// public static readonly ExpandedNodeId DerivedFromComplexObjectType_ServerStatus_State = new ExpandedNodeId(ObjectTypeTest.Variables.DerivedFromComplexObjectType_ServerStatus_State, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the DerivedFromComplexObjectType_ServerStatus_BuildInfo Variable. /// public static readonly ExpandedNodeId DerivedFromComplexObjectType_ServerStatus_BuildInfo = new ExpandedNodeId(ObjectTypeTest.Variables.DerivedFromComplexObjectType_ServerStatus_BuildInfo, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the DerivedFromComplexObjectType_ServerStatus_BuildInfo_ProductUri Variable. /// public static readonly ExpandedNodeId DerivedFromComplexObjectType_ServerStatus_BuildInfo_ProductUri = new ExpandedNodeId(ObjectTypeTest.Variables.DerivedFromComplexObjectType_ServerStatus_BuildInfo_ProductUri, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the DerivedFromComplexObjectType_ServerStatus_BuildInfo_ManufacturerName Variable. /// public static readonly ExpandedNodeId DerivedFromComplexObjectType_ServerStatus_BuildInfo_ManufacturerName = new ExpandedNodeId(ObjectTypeTest.Variables.DerivedFromComplexObjectType_ServerStatus_BuildInfo_ManufacturerName, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the DerivedFromComplexObjectType_ServerStatus_BuildInfo_ProductName Variable. /// public static readonly ExpandedNodeId DerivedFromComplexObjectType_ServerStatus_BuildInfo_ProductName = new ExpandedNodeId(ObjectTypeTest.Variables.DerivedFromComplexObjectType_ServerStatus_BuildInfo_ProductName, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the DerivedFromComplexObjectType_ServerStatus_BuildInfo_SoftwareVersion Variable. /// public static readonly ExpandedNodeId DerivedFromComplexObjectType_ServerStatus_BuildInfo_SoftwareVersion = new ExpandedNodeId(ObjectTypeTest.Variables.DerivedFromComplexObjectType_ServerStatus_BuildInfo_SoftwareVersion, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the DerivedFromComplexObjectType_ServerStatus_BuildInfo_BuildNumber Variable. /// public static readonly ExpandedNodeId DerivedFromComplexObjectType_ServerStatus_BuildInfo_BuildNumber = new ExpandedNodeId(ObjectTypeTest.Variables.DerivedFromComplexObjectType_ServerStatus_BuildInfo_BuildNumber, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the DerivedFromComplexObjectType_ServerStatus_BuildInfo_BuildDate Variable. /// public static readonly ExpandedNodeId DerivedFromComplexObjectType_ServerStatus_BuildInfo_BuildDate = new ExpandedNodeId(ObjectTypeTest.Variables.DerivedFromComplexObjectType_ServerStatus_BuildInfo_BuildDate, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the DerivedFromComplexObjectType_ServerStatus_SecondsTillShutdown Variable. /// public static readonly ExpandedNodeId DerivedFromComplexObjectType_ServerStatus_SecondsTillShutdown = new ExpandedNodeId(ObjectTypeTest.Variables.DerivedFromComplexObjectType_ServerStatus_SecondsTillShutdown, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the DerivedFromComplexObjectType_ServerStatus_ShutdownReason Variable. /// public static readonly ExpandedNodeId DerivedFromComplexObjectType_ServerStatus_ShutdownReason = new ExpandedNodeId(ObjectTypeTest.Variables.DerivedFromComplexObjectType_ServerStatus_ShutdownReason, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the DerivedFromComplexObjectType_ServerCapabilities_ServerProfileArray Variable. /// public static readonly ExpandedNodeId DerivedFromComplexObjectType_ServerCapabilities_ServerProfileArray = new ExpandedNodeId(ObjectTypeTest.Variables.DerivedFromComplexObjectType_ServerCapabilities_ServerProfileArray, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the DerivedFromComplexObjectType_ServerCapabilities_LocaleIdArray Variable. /// public static readonly ExpandedNodeId DerivedFromComplexObjectType_ServerCapabilities_LocaleIdArray = new ExpandedNodeId(ObjectTypeTest.Variables.DerivedFromComplexObjectType_ServerCapabilities_LocaleIdArray, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the DerivedFromComplexObjectType_ServerCapabilities_MinSupportedSampleRate Variable. /// public static readonly ExpandedNodeId DerivedFromComplexObjectType_ServerCapabilities_MinSupportedSampleRate = new ExpandedNodeId(ObjectTypeTest.Variables.DerivedFromComplexObjectType_ServerCapabilities_MinSupportedSampleRate, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the DerivedFromComplexObjectType_ServerCapabilities_MaxBrowseContinuationPoints Variable. /// public static readonly ExpandedNodeId DerivedFromComplexObjectType_ServerCapabilities_MaxBrowseContinuationPoints = new ExpandedNodeId(ObjectTypeTest.Variables.DerivedFromComplexObjectType_ServerCapabilities_MaxBrowseContinuationPoints, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the DerivedFromComplexObjectType_ServerCapabilities_MaxQueryContinuationPoints Variable. /// public static readonly ExpandedNodeId DerivedFromComplexObjectType_ServerCapabilities_MaxQueryContinuationPoints = new ExpandedNodeId(ObjectTypeTest.Variables.DerivedFromComplexObjectType_ServerCapabilities_MaxQueryContinuationPoints, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the DerivedFromComplexObjectType_ServerCapabilities_MaxHistoryContinuationPoints Variable. /// public static readonly ExpandedNodeId DerivedFromComplexObjectType_ServerCapabilities_MaxHistoryContinuationPoints = new ExpandedNodeId(ObjectTypeTest.Variables.DerivedFromComplexObjectType_ServerCapabilities_MaxHistoryContinuationPoints, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the DerivedFromComplexObjectType_ServerCapabilities_SoftwareCertificates Variable. /// public static readonly ExpandedNodeId DerivedFromComplexObjectType_ServerCapabilities_SoftwareCertificates = new ExpandedNodeId(ObjectTypeTest.Variables.DerivedFromComplexObjectType_ServerCapabilities_SoftwareCertificates, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the DerivedFromComplexObjectType_ServerCapabilities_RoleSet_AddRole_InputArguments Variable. /// public static readonly ExpandedNodeId DerivedFromComplexObjectType_ServerCapabilities_RoleSet_AddRole_InputArguments = new ExpandedNodeId(ObjectTypeTest.Variables.DerivedFromComplexObjectType_ServerCapabilities_RoleSet_AddRole_InputArguments, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the DerivedFromComplexObjectType_ServerCapabilities_RoleSet_AddRole_OutputArguments Variable. /// public static readonly ExpandedNodeId DerivedFromComplexObjectType_ServerCapabilities_RoleSet_AddRole_OutputArguments = new ExpandedNodeId(ObjectTypeTest.Variables.DerivedFromComplexObjectType_ServerCapabilities_RoleSet_AddRole_OutputArguments, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the DerivedFromComplexObjectType_ServerCapabilities_RoleSet_RemoveRole_InputArguments Variable. /// public static readonly ExpandedNodeId DerivedFromComplexObjectType_ServerCapabilities_RoleSet_RemoveRole_InputArguments = new ExpandedNodeId(ObjectTypeTest.Variables.DerivedFromComplexObjectType_ServerCapabilities_RoleSet_RemoveRole_InputArguments, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the DerivedFromComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary Variable. /// public static readonly ExpandedNodeId DerivedFromComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary = new ExpandedNodeId(ObjectTypeTest.Variables.DerivedFromComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the DerivedFromComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_ServerViewCount Variable. /// public static readonly ExpandedNodeId DerivedFromComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_ServerViewCount = new ExpandedNodeId(ObjectTypeTest.Variables.DerivedFromComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_ServerViewCount, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the DerivedFromComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_CurrentSessionCount Variable. /// public static readonly ExpandedNodeId DerivedFromComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_CurrentSessionCount = new ExpandedNodeId(ObjectTypeTest.Variables.DerivedFromComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_CurrentSessionCount, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the DerivedFromComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_CumulatedSessionCount Variable. /// public static readonly ExpandedNodeId DerivedFromComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_CumulatedSessionCount = new ExpandedNodeId(ObjectTypeTest.Variables.DerivedFromComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_CumulatedSessionCount, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the DerivedFromComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_SecurityRejectedSessionCount Variable. /// public static readonly ExpandedNodeId DerivedFromComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_SecurityRejectedSessionCount = new ExpandedNodeId(ObjectTypeTest.Variables.DerivedFromComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_SecurityRejectedSessionCount, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the DerivedFromComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_RejectedSessionCount Variable. /// public static readonly ExpandedNodeId DerivedFromComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_RejectedSessionCount = new ExpandedNodeId(ObjectTypeTest.Variables.DerivedFromComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_RejectedSessionCount, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the DerivedFromComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_SessionTimeoutCount Variable. /// public static readonly ExpandedNodeId DerivedFromComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_SessionTimeoutCount = new ExpandedNodeId(ObjectTypeTest.Variables.DerivedFromComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_SessionTimeoutCount, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the DerivedFromComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_SessionAbortCount Variable. /// public static readonly ExpandedNodeId DerivedFromComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_SessionAbortCount = new ExpandedNodeId(ObjectTypeTest.Variables.DerivedFromComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_SessionAbortCount, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the DerivedFromComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_PublishingIntervalCount Variable. /// public static readonly ExpandedNodeId DerivedFromComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_PublishingIntervalCount = new ExpandedNodeId(ObjectTypeTest.Variables.DerivedFromComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_PublishingIntervalCount, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the DerivedFromComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_CurrentSubscriptionCount Variable. /// public static readonly ExpandedNodeId DerivedFromComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_CurrentSubscriptionCount = new ExpandedNodeId(ObjectTypeTest.Variables.DerivedFromComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_CurrentSubscriptionCount, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the DerivedFromComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_CumulatedSubscriptionCount Variable. /// public static readonly ExpandedNodeId DerivedFromComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_CumulatedSubscriptionCount = new ExpandedNodeId(ObjectTypeTest.Variables.DerivedFromComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_CumulatedSubscriptionCount, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the DerivedFromComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_SecurityRejectedRequestsCount Variable. /// public static readonly ExpandedNodeId DerivedFromComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_SecurityRejectedRequestsCount = new ExpandedNodeId(ObjectTypeTest.Variables.DerivedFromComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_SecurityRejectedRequestsCount, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the DerivedFromComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_RejectedRequestsCount Variable. /// public static readonly ExpandedNodeId DerivedFromComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_RejectedRequestsCount = new ExpandedNodeId(ObjectTypeTest.Variables.DerivedFromComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_RejectedRequestsCount, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the DerivedFromComplexObjectType_ServerDiagnostics_SubscriptionDiagnosticsArray Variable. /// public static readonly ExpandedNodeId DerivedFromComplexObjectType_ServerDiagnostics_SubscriptionDiagnosticsArray = new ExpandedNodeId(ObjectTypeTest.Variables.DerivedFromComplexObjectType_ServerDiagnostics_SubscriptionDiagnosticsArray, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the DerivedFromComplexObjectType_ServerDiagnostics_SessionsDiagnosticsSummary_SessionDiagnosticsArray Variable. /// public static readonly ExpandedNodeId DerivedFromComplexObjectType_ServerDiagnostics_SessionsDiagnosticsSummary_SessionDiagnosticsArray = new ExpandedNodeId(ObjectTypeTest.Variables.DerivedFromComplexObjectType_ServerDiagnostics_SessionsDiagnosticsSummary_SessionDiagnosticsArray, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the DerivedFromComplexObjectType_ServerDiagnostics_SessionsDiagnosticsSummary_SessionSecurityDiagnosticsArray Variable. /// public static readonly ExpandedNodeId DerivedFromComplexObjectType_ServerDiagnostics_SessionsDiagnosticsSummary_SessionSecurityDiagnosticsArray = new ExpandedNodeId(ObjectTypeTest.Variables.DerivedFromComplexObjectType_ServerDiagnostics_SessionsDiagnosticsSummary_SessionSecurityDiagnosticsArray, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the DerivedFromComplexObjectType_ServerDiagnostics_EnabledFlag Variable. /// public static readonly ExpandedNodeId DerivedFromComplexObjectType_ServerDiagnostics_EnabledFlag = new ExpandedNodeId(ObjectTypeTest.Variables.DerivedFromComplexObjectType_ServerDiagnostics_EnabledFlag, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the DerivedFromComplexObjectType_ServerRedundancy_RedundancySupport Variable. /// public static readonly ExpandedNodeId DerivedFromComplexObjectType_ServerRedundancy_RedundancySupport = new ExpandedNodeId(ObjectTypeTest.Variables.DerivedFromComplexObjectType_ServerRedundancy_RedundancySupport, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the DerivedFromComplexObjectType_GetMonitoredItems_InputArguments Variable. /// public static readonly ExpandedNodeId DerivedFromComplexObjectType_GetMonitoredItems_InputArguments = new ExpandedNodeId(ObjectTypeTest.Variables.DerivedFromComplexObjectType_GetMonitoredItems_InputArguments, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the DerivedFromComplexObjectType_GetMonitoredItems_OutputArguments Variable. /// public static readonly ExpandedNodeId DerivedFromComplexObjectType_GetMonitoredItems_OutputArguments = new ExpandedNodeId(ObjectTypeTest.Variables.DerivedFromComplexObjectType_GetMonitoredItems_OutputArguments, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the DerivedFromComplexObjectType_ResendData_InputArguments Variable. /// public static readonly ExpandedNodeId DerivedFromComplexObjectType_ResendData_InputArguments = new ExpandedNodeId(ObjectTypeTest.Variables.DerivedFromComplexObjectType_ResendData_InputArguments, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the DerivedFromComplexObjectType_SetSubscriptionDurable_InputArguments Variable. /// public static readonly ExpandedNodeId DerivedFromComplexObjectType_SetSubscriptionDurable_InputArguments = new ExpandedNodeId(ObjectTypeTest.Variables.DerivedFromComplexObjectType_SetSubscriptionDurable_InputArguments, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the DerivedFromComplexObjectType_SetSubscriptionDurable_OutputArguments Variable. /// public static readonly ExpandedNodeId DerivedFromComplexObjectType_SetSubscriptionDurable_OutputArguments = new ExpandedNodeId(ObjectTypeTest.Variables.DerivedFromComplexObjectType_SetSubscriptionDurable_OutputArguments, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the DerivedFromComplexObjectType_RequestServerStateChange_InputArguments Variable. /// public static readonly ExpandedNodeId DerivedFromComplexObjectType_RequestServerStateChange_InputArguments = new ExpandedNodeId(ObjectTypeTest.Variables.DerivedFromComplexObjectType_RequestServerStateChange_InputArguments, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the DerivedFromComplexObjectType_BrowseName4node66 Variable. /// public static readonly ExpandedNodeId DerivedFromComplexObjectType_BrowseName4node66 = new ExpandedNodeId(ObjectTypeTest.Variables.DerivedFromComplexObjectType_BrowseName4node66, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the DerivedFromComplexObjectType_NameNotSet1109 Variable. /// public static readonly ExpandedNodeId DerivedFromComplexObjectType_NameNotSet1109 = new ExpandedNodeId(ObjectTypeTest.Variables.DerivedFromComplexObjectType_NameNotSet1109, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the DerivedFromComplexObjectType_NameNotSet1109_EURange Variable. /// public static readonly ExpandedNodeId DerivedFromComplexObjectType_NameNotSet1109_EURange = new ExpandedNodeId(ObjectTypeTest.Variables.DerivedFromComplexObjectType_NameNotSet1109_EURange, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the DerivedFromComplexObjectType_ChildMethod_InputArguments Variable. /// public static readonly ExpandedNodeId DerivedFromComplexObjectType_ChildMethod_InputArguments = new ExpandedNodeId(ObjectTypeTest.Variables.DerivedFromComplexObjectType_ChildMethod_InputArguments, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the DerivedFromComplexObjectType_ChildMethod_OutputArguments Variable. /// public static readonly ExpandedNodeId DerivedFromComplexObjectType_ChildMethod_OutputArguments = new ExpandedNodeId(ObjectTypeTest.Variables.DerivedFromComplexObjectType_ChildMethod_OutputArguments, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the NameNotSet6_ServerArray Variable. /// public static readonly ExpandedNodeId NameNotSet6_ServerArray = new ExpandedNodeId(ObjectTypeTest.Variables.NameNotSet6_ServerArray, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the NameNotSet6_NamespaceArray Variable. /// public static readonly ExpandedNodeId NameNotSet6_NamespaceArray = new ExpandedNodeId(ObjectTypeTest.Variables.NameNotSet6_NamespaceArray, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the NameNotSet6_ServerStatus Variable. /// public static readonly ExpandedNodeId NameNotSet6_ServerStatus = new ExpandedNodeId(ObjectTypeTest.Variables.NameNotSet6_ServerStatus, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the NameNotSet6_ServerStatus_StartTime Variable. /// public static readonly ExpandedNodeId NameNotSet6_ServerStatus_StartTime = new ExpandedNodeId(ObjectTypeTest.Variables.NameNotSet6_ServerStatus_StartTime, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the NameNotSet6_ServerStatus_CurrentTime Variable. /// public static readonly ExpandedNodeId NameNotSet6_ServerStatus_CurrentTime = new ExpandedNodeId(ObjectTypeTest.Variables.NameNotSet6_ServerStatus_CurrentTime, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the NameNotSet6_ServerStatus_State Variable. /// public static readonly ExpandedNodeId NameNotSet6_ServerStatus_State = new ExpandedNodeId(ObjectTypeTest.Variables.NameNotSet6_ServerStatus_State, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the NameNotSet6_ServerStatus_BuildInfo Variable. /// public static readonly ExpandedNodeId NameNotSet6_ServerStatus_BuildInfo = new ExpandedNodeId(ObjectTypeTest.Variables.NameNotSet6_ServerStatus_BuildInfo, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the NameNotSet6_ServerStatus_BuildInfo_ProductUri Variable. /// public static readonly ExpandedNodeId NameNotSet6_ServerStatus_BuildInfo_ProductUri = new ExpandedNodeId(ObjectTypeTest.Variables.NameNotSet6_ServerStatus_BuildInfo_ProductUri, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the NameNotSet6_ServerStatus_BuildInfo_ManufacturerName Variable. /// public static readonly ExpandedNodeId NameNotSet6_ServerStatus_BuildInfo_ManufacturerName = new ExpandedNodeId(ObjectTypeTest.Variables.NameNotSet6_ServerStatus_BuildInfo_ManufacturerName, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the NameNotSet6_ServerStatus_BuildInfo_ProductName Variable. /// public static readonly ExpandedNodeId NameNotSet6_ServerStatus_BuildInfo_ProductName = new ExpandedNodeId(ObjectTypeTest.Variables.NameNotSet6_ServerStatus_BuildInfo_ProductName, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the NameNotSet6_ServerStatus_BuildInfo_SoftwareVersion Variable. /// public static readonly ExpandedNodeId NameNotSet6_ServerStatus_BuildInfo_SoftwareVersion = new ExpandedNodeId(ObjectTypeTest.Variables.NameNotSet6_ServerStatus_BuildInfo_SoftwareVersion, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the NameNotSet6_ServerStatus_BuildInfo_BuildNumber Variable. /// public static readonly ExpandedNodeId NameNotSet6_ServerStatus_BuildInfo_BuildNumber = new ExpandedNodeId(ObjectTypeTest.Variables.NameNotSet6_ServerStatus_BuildInfo_BuildNumber, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the NameNotSet6_ServerStatus_BuildInfo_BuildDate Variable. /// public static readonly ExpandedNodeId NameNotSet6_ServerStatus_BuildInfo_BuildDate = new ExpandedNodeId(ObjectTypeTest.Variables.NameNotSet6_ServerStatus_BuildInfo_BuildDate, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the NameNotSet6_ServerStatus_SecondsTillShutdown Variable. /// public static readonly ExpandedNodeId NameNotSet6_ServerStatus_SecondsTillShutdown = new ExpandedNodeId(ObjectTypeTest.Variables.NameNotSet6_ServerStatus_SecondsTillShutdown, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the NameNotSet6_ServerStatus_ShutdownReason Variable. /// public static readonly ExpandedNodeId NameNotSet6_ServerStatus_ShutdownReason = new ExpandedNodeId(ObjectTypeTest.Variables.NameNotSet6_ServerStatus_ShutdownReason, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the NameNotSet6_ServiceLevel Variable. /// public static readonly ExpandedNodeId NameNotSet6_ServiceLevel = new ExpandedNodeId(ObjectTypeTest.Variables.NameNotSet6_ServiceLevel, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the NameNotSet6_Auditing Variable. /// public static readonly ExpandedNodeId NameNotSet6_Auditing = new ExpandedNodeId(ObjectTypeTest.Variables.NameNotSet6_Auditing, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the NameNotSet6_ServerCapabilities_ServerProfileArray Variable. /// public static readonly ExpandedNodeId NameNotSet6_ServerCapabilities_ServerProfileArray = new ExpandedNodeId(ObjectTypeTest.Variables.NameNotSet6_ServerCapabilities_ServerProfileArray, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the NameNotSet6_ServerCapabilities_LocaleIdArray Variable. /// public static readonly ExpandedNodeId NameNotSet6_ServerCapabilities_LocaleIdArray = new ExpandedNodeId(ObjectTypeTest.Variables.NameNotSet6_ServerCapabilities_LocaleIdArray, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the NameNotSet6_ServerCapabilities_MinSupportedSampleRate Variable. /// public static readonly ExpandedNodeId NameNotSet6_ServerCapabilities_MinSupportedSampleRate = new ExpandedNodeId(ObjectTypeTest.Variables.NameNotSet6_ServerCapabilities_MinSupportedSampleRate, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the NameNotSet6_ServerCapabilities_MaxBrowseContinuationPoints Variable. /// public static readonly ExpandedNodeId NameNotSet6_ServerCapabilities_MaxBrowseContinuationPoints = new ExpandedNodeId(ObjectTypeTest.Variables.NameNotSet6_ServerCapabilities_MaxBrowseContinuationPoints, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the NameNotSet6_ServerCapabilities_MaxQueryContinuationPoints Variable. /// public static readonly ExpandedNodeId NameNotSet6_ServerCapabilities_MaxQueryContinuationPoints = new ExpandedNodeId(ObjectTypeTest.Variables.NameNotSet6_ServerCapabilities_MaxQueryContinuationPoints, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the NameNotSet6_ServerCapabilities_MaxHistoryContinuationPoints Variable. /// public static readonly ExpandedNodeId NameNotSet6_ServerCapabilities_MaxHistoryContinuationPoints = new ExpandedNodeId(ObjectTypeTest.Variables.NameNotSet6_ServerCapabilities_MaxHistoryContinuationPoints, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the NameNotSet6_ServerCapabilities_SoftwareCertificates Variable. /// public static readonly ExpandedNodeId NameNotSet6_ServerCapabilities_SoftwareCertificates = new ExpandedNodeId(ObjectTypeTest.Variables.NameNotSet6_ServerCapabilities_SoftwareCertificates, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the NameNotSet6_ServerCapabilities_RoleSet_AddRole_InputArguments Variable. /// public static readonly ExpandedNodeId NameNotSet6_ServerCapabilities_RoleSet_AddRole_InputArguments = new ExpandedNodeId(ObjectTypeTest.Variables.NameNotSet6_ServerCapabilities_RoleSet_AddRole_InputArguments, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the NameNotSet6_ServerCapabilities_RoleSet_AddRole_OutputArguments Variable. /// public static readonly ExpandedNodeId NameNotSet6_ServerCapabilities_RoleSet_AddRole_OutputArguments = new ExpandedNodeId(ObjectTypeTest.Variables.NameNotSet6_ServerCapabilities_RoleSet_AddRole_OutputArguments, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the NameNotSet6_ServerCapabilities_RoleSet_RemoveRole_InputArguments Variable. /// public static readonly ExpandedNodeId NameNotSet6_ServerCapabilities_RoleSet_RemoveRole_InputArguments = new ExpandedNodeId(ObjectTypeTest.Variables.NameNotSet6_ServerCapabilities_RoleSet_RemoveRole_InputArguments, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the NameNotSet6_ServerDiagnostics_ServerDiagnosticsSummary Variable. /// public static readonly ExpandedNodeId NameNotSet6_ServerDiagnostics_ServerDiagnosticsSummary = new ExpandedNodeId(ObjectTypeTest.Variables.NameNotSet6_ServerDiagnostics_ServerDiagnosticsSummary, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the NameNotSet6_ServerDiagnostics_ServerDiagnosticsSummary_ServerViewCount Variable. /// public static readonly ExpandedNodeId NameNotSet6_ServerDiagnostics_ServerDiagnosticsSummary_ServerViewCount = new ExpandedNodeId(ObjectTypeTest.Variables.NameNotSet6_ServerDiagnostics_ServerDiagnosticsSummary_ServerViewCount, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the NameNotSet6_ServerDiagnostics_ServerDiagnosticsSummary_CurrentSessionCount Variable. /// public static readonly ExpandedNodeId NameNotSet6_ServerDiagnostics_ServerDiagnosticsSummary_CurrentSessionCount = new ExpandedNodeId(ObjectTypeTest.Variables.NameNotSet6_ServerDiagnostics_ServerDiagnosticsSummary_CurrentSessionCount, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the NameNotSet6_ServerDiagnostics_ServerDiagnosticsSummary_CumulatedSessionCount Variable. /// public static readonly ExpandedNodeId NameNotSet6_ServerDiagnostics_ServerDiagnosticsSummary_CumulatedSessionCount = new ExpandedNodeId(ObjectTypeTest.Variables.NameNotSet6_ServerDiagnostics_ServerDiagnosticsSummary_CumulatedSessionCount, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the NameNotSet6_ServerDiagnostics_ServerDiagnosticsSummary_SecurityRejectedSessionCount Variable. /// public static readonly ExpandedNodeId NameNotSet6_ServerDiagnostics_ServerDiagnosticsSummary_SecurityRejectedSessionCount = new ExpandedNodeId(ObjectTypeTest.Variables.NameNotSet6_ServerDiagnostics_ServerDiagnosticsSummary_SecurityRejectedSessionCount, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the NameNotSet6_ServerDiagnostics_ServerDiagnosticsSummary_RejectedSessionCount Variable. /// public static readonly ExpandedNodeId NameNotSet6_ServerDiagnostics_ServerDiagnosticsSummary_RejectedSessionCount = new ExpandedNodeId(ObjectTypeTest.Variables.NameNotSet6_ServerDiagnostics_ServerDiagnosticsSummary_RejectedSessionCount, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the NameNotSet6_ServerDiagnostics_ServerDiagnosticsSummary_SessionTimeoutCount Variable. /// public static readonly ExpandedNodeId NameNotSet6_ServerDiagnostics_ServerDiagnosticsSummary_SessionTimeoutCount = new ExpandedNodeId(ObjectTypeTest.Variables.NameNotSet6_ServerDiagnostics_ServerDiagnosticsSummary_SessionTimeoutCount, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the NameNotSet6_ServerDiagnostics_ServerDiagnosticsSummary_SessionAbortCount Variable. /// public static readonly ExpandedNodeId NameNotSet6_ServerDiagnostics_ServerDiagnosticsSummary_SessionAbortCount = new ExpandedNodeId(ObjectTypeTest.Variables.NameNotSet6_ServerDiagnostics_ServerDiagnosticsSummary_SessionAbortCount, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the NameNotSet6_ServerDiagnostics_ServerDiagnosticsSummary_PublishingIntervalCount Variable. /// public static readonly ExpandedNodeId NameNotSet6_ServerDiagnostics_ServerDiagnosticsSummary_PublishingIntervalCount = new ExpandedNodeId(ObjectTypeTest.Variables.NameNotSet6_ServerDiagnostics_ServerDiagnosticsSummary_PublishingIntervalCount, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the NameNotSet6_ServerDiagnostics_ServerDiagnosticsSummary_CurrentSubscriptionCount Variable. /// public static readonly ExpandedNodeId NameNotSet6_ServerDiagnostics_ServerDiagnosticsSummary_CurrentSubscriptionCount = new ExpandedNodeId(ObjectTypeTest.Variables.NameNotSet6_ServerDiagnostics_ServerDiagnosticsSummary_CurrentSubscriptionCount, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the NameNotSet6_ServerDiagnostics_ServerDiagnosticsSummary_CumulatedSubscriptionCount Variable. /// public static readonly ExpandedNodeId NameNotSet6_ServerDiagnostics_ServerDiagnosticsSummary_CumulatedSubscriptionCount = new ExpandedNodeId(ObjectTypeTest.Variables.NameNotSet6_ServerDiagnostics_ServerDiagnosticsSummary_CumulatedSubscriptionCount, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the NameNotSet6_ServerDiagnostics_ServerDiagnosticsSummary_SecurityRejectedRequestsCount Variable. /// public static readonly ExpandedNodeId NameNotSet6_ServerDiagnostics_ServerDiagnosticsSummary_SecurityRejectedRequestsCount = new ExpandedNodeId(ObjectTypeTest.Variables.NameNotSet6_ServerDiagnostics_ServerDiagnosticsSummary_SecurityRejectedRequestsCount, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the NameNotSet6_ServerDiagnostics_ServerDiagnosticsSummary_RejectedRequestsCount Variable. /// public static readonly ExpandedNodeId NameNotSet6_ServerDiagnostics_ServerDiagnosticsSummary_RejectedRequestsCount = new ExpandedNodeId(ObjectTypeTest.Variables.NameNotSet6_ServerDiagnostics_ServerDiagnosticsSummary_RejectedRequestsCount, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the NameNotSet6_ServerDiagnostics_SubscriptionDiagnosticsArray Variable. /// public static readonly ExpandedNodeId NameNotSet6_ServerDiagnostics_SubscriptionDiagnosticsArray = new ExpandedNodeId(ObjectTypeTest.Variables.NameNotSet6_ServerDiagnostics_SubscriptionDiagnosticsArray, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the NameNotSet6_ServerDiagnostics_SessionsDiagnosticsSummary_SessionDiagnosticsArray Variable. /// public static readonly ExpandedNodeId NameNotSet6_ServerDiagnostics_SessionsDiagnosticsSummary_SessionDiagnosticsArray = new ExpandedNodeId(ObjectTypeTest.Variables.NameNotSet6_ServerDiagnostics_SessionsDiagnosticsSummary_SessionDiagnosticsArray, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the NameNotSet6_ServerDiagnostics_SessionsDiagnosticsSummary_SessionSecurityDiagnosticsArray Variable. /// public static readonly ExpandedNodeId NameNotSet6_ServerDiagnostics_SessionsDiagnosticsSummary_SessionSecurityDiagnosticsArray = new ExpandedNodeId(ObjectTypeTest.Variables.NameNotSet6_ServerDiagnostics_SessionsDiagnosticsSummary_SessionSecurityDiagnosticsArray, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the NameNotSet6_ServerDiagnostics_EnabledFlag Variable. /// public static readonly ExpandedNodeId NameNotSet6_ServerDiagnostics_EnabledFlag = new ExpandedNodeId(ObjectTypeTest.Variables.NameNotSet6_ServerDiagnostics_EnabledFlag, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the NameNotSet6_ServerRedundancy_RedundancySupport Variable. /// public static readonly ExpandedNodeId NameNotSet6_ServerRedundancy_RedundancySupport = new ExpandedNodeId(ObjectTypeTest.Variables.NameNotSet6_ServerRedundancy_RedundancySupport, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the NameNotSet6_GetMonitoredItems_InputArguments Variable. /// public static readonly ExpandedNodeId NameNotSet6_GetMonitoredItems_InputArguments = new ExpandedNodeId(ObjectTypeTest.Variables.NameNotSet6_GetMonitoredItems_InputArguments, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the NameNotSet6_GetMonitoredItems_OutputArguments Variable. /// public static readonly ExpandedNodeId NameNotSet6_GetMonitoredItems_OutputArguments = new ExpandedNodeId(ObjectTypeTest.Variables.NameNotSet6_GetMonitoredItems_OutputArguments, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the NameNotSet6_ResendData_InputArguments Variable. /// public static readonly ExpandedNodeId NameNotSet6_ResendData_InputArguments = new ExpandedNodeId(ObjectTypeTest.Variables.NameNotSet6_ResendData_InputArguments, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the NameNotSet6_SetSubscriptionDurable_InputArguments Variable. /// public static readonly ExpandedNodeId NameNotSet6_SetSubscriptionDurable_InputArguments = new ExpandedNodeId(ObjectTypeTest.Variables.NameNotSet6_SetSubscriptionDurable_InputArguments, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the NameNotSet6_SetSubscriptionDurable_OutputArguments Variable. /// public static readonly ExpandedNodeId NameNotSet6_SetSubscriptionDurable_OutputArguments = new ExpandedNodeId(ObjectTypeTest.Variables.NameNotSet6_SetSubscriptionDurable_OutputArguments, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the NameNotSet6_RequestServerStateChange_InputArguments Variable. /// public static readonly ExpandedNodeId NameNotSet6_RequestServerStateChange_InputArguments = new ExpandedNodeId(ObjectTypeTest.Variables.NameNotSet6_RequestServerStateChange_InputArguments, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the NameNotSet6_BrowseName4node66 Variable. /// public static readonly ExpandedNodeId NameNotSet6_BrowseName4node66 = new ExpandedNodeId(ObjectTypeTest.Variables.NameNotSet6_BrowseName4node66, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the NameNotSet6_NameNotSet1109 Variable. /// public static readonly ExpandedNodeId NameNotSet6_NameNotSet1109 = new ExpandedNodeId(ObjectTypeTest.Variables.NameNotSet6_NameNotSet1109, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the NameNotSet6_NameNotSet1109_EURange Variable. /// public static readonly ExpandedNodeId NameNotSet6_NameNotSet1109_EURange = new ExpandedNodeId(ObjectTypeTest.Variables.NameNotSet6_NameNotSet1109_EURange, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the NameNotSet6_ChildMethod_InputArguments Variable. /// public static readonly ExpandedNodeId NameNotSet6_ChildMethod_InputArguments = new ExpandedNodeId(ObjectTypeTest.Variables.NameNotSet6_ChildMethod_InputArguments, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the NameNotSet6_ChildMethod_OutputArguments Variable. /// public static readonly ExpandedNodeId NameNotSet6_ChildMethod_OutputArguments = new ExpandedNodeId(ObjectTypeTest.Variables.NameNotSet6_ChildMethod_OutputArguments, ObjectTypeTest.Namespaces.cas); } #endregion #region BrowseName Declarations /// /// Declares all of the BrowseNames used in the Model Design. /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class BrowseNames { /// /// The BrowseName for the BrowseName4node66 component. /// public const string BrowseName4node66 = "ChildProperty"; /// /// The BrowseName for the ChildMethod component. /// public const string ChildMethod = "ChildMethod"; /// /// The BrowseName for the ChildMethodComplexObjectType component. /// public const string ChildMethodComplexObjectType = "ChildMethodComplexObjectType"; /// /// The BrowseName for the ChildObject component. /// public const string ChildObject = "ChildObject"; /// /// The BrowseName for the ComplexObjectType component. /// public const string ComplexObjectType = "ComplexObjectType"; /// /// The BrowseName for the DerivedFromComplexObjectType component. /// public const string DerivedFromComplexObjectType = "DerivedFromComplexObjectType"; /// /// The BrowseName for the FlowTo component. /// public const string FlowTo = "FlowTo"; /// /// The BrowseName for the NameNotSet1109 component. /// public const string NameNotSet1109 = "BrowseName4node1109"; /// /// The BrowseName for the NameNotSet6 component. /// public const string NameNotSet6 = "NameNotSet6"; /// /// The BrowseName for the NonExecutableMethod component. /// public const string NonExecutableMethod = "NonExecutableMethod"; /// /// The BrowseName for the NonExecutableMethodComplexObjectType component. /// public const string NonExecutableMethodComplexObjectType = "NonExecutableMethodComplexObjectType"; } #endregion #region Namespace Declarations /// /// Defines constants for all namespaces referenced by the model design. /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class Namespaces { /// /// The URI for the cas namespace (.NET code namespace is 'ObjectTypeTest'). /// public const string cas = "http://cas.eu/UA/CommServer/UnitTests/ObjectTypeTest"; /// /// The URI for the ua namespace (.NET code namespace is ''). /// public const string ua = "http://opcfoundation.org/UA/"; } #endregion } ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/XMLModels/CorrectModels/ObjectTypeTest/ObjectTypeTest.DataTypes.cs ================================================ /* ======================================================================== * Copyright (c) 2005-2021 The OPC Foundation, Inc. All rights reserved. * * OPC Foundation MIT License 1.00 * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, * copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following * conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. * * The complete license agreement can be found here: * http://opcfoundation.org/License/MIT/1.00/ * ======================================================================*/ using System; using System.Collections.Generic; using System.Text; using System.Xml; using System.Runtime.Serialization; using ; namespace ObjectTypeTest { } ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/XMLModels/CorrectModels/ObjectTypeTest/ObjectTypeTest.NodeIds.csv ================================================ ChildMethodComplexObjectType,303,Method ComplexObjectType,196,ObjectType DerivedFromComplexObjectType,310,ObjectType FlowTo,195,ReferenceType NameNotSet6,413,Object NonExecutableMethodComplexObjectType,307,Method ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/XMLModels/CorrectModels/ObjectTypeTest/ObjectTypeTest.NodeSet.xml ================================================  http://opcfoundation.org/UA/ http://cas.eu/UA/CommServer/UnitTests/ObjectTypeTest ns=1;i=195 ReferenceType_32 1 FlowTo Flow to type It is test ReferenceType 0 0 0 i=45 true i=32 false false FlowFrom ns=1;i=196 ObjectType_8 1 ComplexObjectType ComplexObjectType 0 0 0 i=45 true i=2004 i=47 false ns=1;i=214 i=47 false ns=1;i=308 i=46 false ns=1;i=309 i=47 false ns=1;i=289 i=47 false ns=1;i=295 i=47 false ns=1;i=306 i=45 false ns=1;i=310 false ns=1;i=214 Object_1 0 ServerCapabilities ServerCapabilities 0 0 0 i=47 true ns=1;i=196 i=40 false i=2013 i=37 false i=78 i=46 false ns=1;i=215 i=46 false ns=1;i=216 i=46 false ns=1;i=217 i=46 false ns=1;i=218 i=46 false ns=1;i=219 i=46 false ns=1;i=220 i=46 false ns=1;i=221 i=47 false ns=1;i=237 i=47 false ns=1;i=238 0 ns=1;i=215 Variable_2 0 ServerProfileArray ServerProfileArray 0 0 0 i=46 true ns=1;i=214 i=40 false i=68 i=37 false i=78 i=12 1 0 1 1 0 false 0 ns=1;i=216 Variable_2 0 LocaleIdArray LocaleIdArray 0 0 0 i=46 true ns=1;i=214 i=40 false i=68 i=37 false i=78 i=295 1 0 1 1 0 false 0 ns=1;i=217 Variable_2 0 MinSupportedSampleRate MinSupportedSampleRate 0 0 0 i=46 true ns=1;i=214 i=40 false i=68 i=37 false i=78 0 i=290 -1 1 1 0 false 0 ns=1;i=218 Variable_2 0 MaxBrowseContinuationPoints MaxBrowseContinuationPoints 0 0 0 i=46 true ns=1;i=214 i=40 false i=68 i=37 false i=78 0 i=5 -1 1 1 0 false 0 ns=1;i=219 Variable_2 0 MaxQueryContinuationPoints MaxQueryContinuationPoints 0 0 0 i=46 true ns=1;i=214 i=40 false i=68 i=37 false i=78 0 i=5 -1 1 1 0 false 0 ns=1;i=220 Variable_2 0 MaxHistoryContinuationPoints MaxHistoryContinuationPoints 0 0 0 i=46 true ns=1;i=214 i=40 false i=68 i=37 false i=78 0 i=5 -1 1 1 0 false 0 ns=1;i=221 Variable_2 0 SoftwareCertificates SoftwareCertificates 0 0 0 i=46 true ns=1;i=214 i=40 false i=68 i=37 false i=78 i=344 1 0 1 1 0 false 0 ns=1;i=237 Object_1 0 ModellingRules ModellingRules 0 0 0 i=47 true ns=1;i=214 i=40 false i=61 i=37 false i=78 0 ns=1;i=238 Object_1 0 AggregateFunctions AggregateFunctions 0 0 0 i=47 true ns=1;i=214 i=40 false i=61 i=37 false i=78 0 ns=1;i=289 Variable_2 1 BrowseName4node1109 BrowseName4node1109 0 0 0 i=47 true ns=1;i=196 i=40 false i=2368 i=37 false i=78 ns=1;i=195 false ns=1;i=309 i=46 false ns=1;i=293 0 i=26 -1 1 1 0 false 0 ns=1;i=293 Variable_2 0 EURange EURange 0 0 0 i=46 true ns=1;i=289 i=40 false i=68 i=37 false i=78 i=884 -1 1 1 0 false 0 ns=1;i=295 Method_4 1 ChildMethod ChildMethod 0 0 0 i=47 true ns=1;i=196 i=37 false i=78 i=46 false ns=1;i=299 i=46 false ns=1;i=300 true true ns=1;i=299 Variable_2 0 InputArguments InputArguments 0 0 0 i=46 true ns=1;i=295 i=40 false i=68 i=37 false i=78 i=297 Input1 i=6 -1 i=297 Input2 i=6 -1 i=296 1 0 1 1 0 false 0 ns=1;i=300 Variable_2 0 OutputArguments OutputArguments 0 0 0 i=46 true ns=1;i=295 i=40 false i=68 i=37 false i=78 i=297 Output1 i=6 -1 i=296 1 0 1 1 0 false 0 ns=1;i=303 Method_4 1 ChildMethodComplexObjectType ChildMethodComplexObjectType 0 0 0 i=46 false ns=1;i=304 i=46 false ns=1;i=305 true true ns=1;i=304 Variable_2 0 InputArguments InputArguments 0 0 0 i=46 true ns=1;i=303 i=40 false i=68 i=297 Input1 i=6 -1 i=297 Input2 i=6 -1 i=296 1 0 1 1 0 false 0 ns=1;i=305 Variable_2 0 OutputArguments OutputArguments 0 0 0 i=46 true ns=1;i=303 i=40 false i=68 i=297 Output1 i=6 -1 i=296 1 0 1 1 0 false 0 ns=1;i=306 Method_4 1 NonExecutableMethod NonExecutableMethod 0 0 0 i=47 true ns=1;i=196 i=37 false i=78 true true ns=1;i=307 Method_4 1 NonExecutableMethodComplexObjectType NonExecutableMethodComplexObjectType 0 0 0 false false ns=1;i=308 Object_1 1 ChildObject ChildObject 0 0 0 i=47 true ns=1;i=196 i=40 false i=58 i=37 false i=11510 1 ns=1;i=309 Variable_2 1 ChildProperty ChildProperty 0 0 0 i=46 true ns=1;i=196 i=40 false i=68 i=37 false i=78 ns=1;i=195 true ns=1;i=289 i=21 -1 1 1 0 false 0 ns=1;i=310 ObjectType_8 1 DerivedFromComplexObjectType DerivedFromComplexObjectType 0 0 0 i=45 true ns=1;i=196 i=47 false ns=1;i=409 false ns=1;i=409 Method_4 1 ChildMethod ChildMethod 0 0 0 i=47 true ns=1;i=310 i=37 false i=78 i=46 false ns=1;i=410 i=46 false ns=1;i=411 true true ns=1;i=410 Variable_2 0 InputArguments InputArguments 0 0 0 i=46 true ns=1;i=409 i=40 false i=68 i=37 false i=78 i=297 Input1 i=6 -1 i=297 Input2 i=6 -1 i=296 1 0 1 1 0 false 0 ns=1;i=411 Variable_2 0 OutputArguments OutputArguments 0 0 0 i=46 true ns=1;i=409 i=40 false i=68 i=37 false i=78 i=297 Output1 i=6 -1 i=296 1 0 1 1 0 false 0 ns=1;i=413 Object_1 1 NameNotSet6 NameNotSet6 0 0 0 i=40 false ns=1;i=310 i=35 true i=85 i=46 false ns=1;i=414 i=46 false ns=1;i=415 i=47 false ns=1;i=416 i=46 false ns=1;i=429 i=46 false ns=1;i=430 i=47 false ns=1;i=431 i=47 false ns=1;i=456 i=47 false ns=1;i=476 i=47 false ns=1;i=477 i=46 false ns=1;i=505 i=47 false ns=1;i=506 i=47 false ns=1;i=512 i=47 false ns=1;i=515 0 ns=1;i=414 Variable_2 0 ServerArray ServerArray 0 0 0 i=46 true ns=1;i=413 i=40 false i=68 i=12 1 0 1 1 1000 false 0 ns=1;i=415 Variable_2 0 NamespaceArray NamespaceArray 0 0 0 i=46 true ns=1;i=413 i=40 false i=68 i=12 1 0 1 1 1000 false 0 ns=1;i=416 Variable_2 0 ServerStatus ServerStatus 0 0 0 i=47 true ns=1;i=413 i=40 false i=2138 i=47 false ns=1;i=417 i=47 false ns=1;i=418 i=47 false ns=1;i=419 i=47 false ns=1;i=420 i=47 false ns=1;i=427 i=47 false ns=1;i=428 i=862 -1 1 1 1000 false 0 ns=1;i=417 Variable_2 0 StartTime StartTime 0 0 0 i=47 true ns=1;i=416 i=40 false i=63 0001-01-01T00:00:00 i=294 -1 1 1 0 false 0 ns=1;i=418 Variable_2 0 CurrentTime CurrentTime 0 0 0 i=47 true ns=1;i=416 i=40 false i=63 0001-01-01T00:00:00 i=294 -1 1 1 0 false 0 ns=1;i=419 Variable_2 0 State State 0 0 0 i=47 true ns=1;i=416 i=40 false i=63 i=852 -1 1 1 0 false 0 ns=1;i=420 Variable_2 0 BuildInfo BuildInfo 0 0 0 i=47 true ns=1;i=416 i=40 false i=3051 i=47 false ns=1;i=421 i=47 false ns=1;i=422 i=47 false ns=1;i=423 i=47 false ns=1;i=424 i=47 false ns=1;i=425 i=47 false ns=1;i=426 i=338 -1 1 1 0 false 0 ns=1;i=421 Variable_2 0 ProductUri ProductUri 0 0 0 i=47 true ns=1;i=420 i=40 false i=63 i=12 -1 1 1 1000 false 0 ns=1;i=422 Variable_2 0 ManufacturerName ManufacturerName 0 0 0 i=47 true ns=1;i=420 i=40 false i=63 i=12 -1 1 1 1000 false 0 ns=1;i=423 Variable_2 0 ProductName ProductName 0 0 0 i=47 true ns=1;i=420 i=40 false i=63 i=12 -1 1 1 1000 false 0 ns=1;i=424 Variable_2 0 SoftwareVersion SoftwareVersion 0 0 0 i=47 true ns=1;i=420 i=40 false i=63 i=12 -1 1 1 1000 false 0 ns=1;i=425 Variable_2 0 BuildNumber BuildNumber 0 0 0 i=47 true ns=1;i=420 i=40 false i=63 i=12 -1 1 1 1000 false 0 ns=1;i=426 Variable_2 0 BuildDate BuildDate 0 0 0 i=47 true ns=1;i=420 i=40 false i=63 0001-01-01T00:00:00 i=294 -1 1 1 1000 false 0 ns=1;i=427 Variable_2 0 SecondsTillShutdown SecondsTillShutdown 0 0 0 i=47 true ns=1;i=416 i=40 false i=63 0 i=7 -1 1 1 0 false 0 ns=1;i=428 Variable_2 0 ShutdownReason ShutdownReason 0 0 0 i=47 true ns=1;i=416 i=40 false i=63 i=21 -1 1 1 0 false 0 ns=1;i=429 Variable_2 0 ServiceLevel ServiceLevel 0 0 0 i=46 true ns=1;i=413 i=40 false i=68 0 i=3 -1 1 1 1000 false 0 ns=1;i=430 Variable_2 0 Auditing Auditing 0 0 0 i=46 true ns=1;i=413 i=40 false i=68 false i=1 -1 1 1 1000 false 0 ns=1;i=431 Object_1 0 ServerCapabilities ServerCapabilities 0 0 0 i=47 true ns=1;i=413 i=40 false i=2013 i=46 false ns=1;i=432 i=46 false ns=1;i=433 i=46 false ns=1;i=434 i=46 false ns=1;i=435 i=46 false ns=1;i=436 i=46 false ns=1;i=437 i=46 false ns=1;i=438 i=47 false ns=1;i=454 i=47 false ns=1;i=455 0 ns=1;i=432 Variable_2 0 ServerProfileArray ServerProfileArray 0 0 0 i=46 true ns=1;i=431 i=40 false i=68 i=12 1 0 1 1 0 false 0 ns=1;i=433 Variable_2 0 LocaleIdArray LocaleIdArray 0 0 0 i=46 true ns=1;i=431 i=40 false i=68 i=295 1 0 1 1 0 false 0 ns=1;i=434 Variable_2 0 MinSupportedSampleRate MinSupportedSampleRate 0 0 0 i=46 true ns=1;i=431 i=40 false i=68 0 i=290 -1 1 1 0 false 0 ns=1;i=435 Variable_2 0 MaxBrowseContinuationPoints MaxBrowseContinuationPoints 0 0 0 i=46 true ns=1;i=431 i=40 false i=68 0 i=5 -1 1 1 0 false 0 ns=1;i=436 Variable_2 0 MaxQueryContinuationPoints MaxQueryContinuationPoints 0 0 0 i=46 true ns=1;i=431 i=40 false i=68 0 i=5 -1 1 1 0 false 0 ns=1;i=437 Variable_2 0 MaxHistoryContinuationPoints MaxHistoryContinuationPoints 0 0 0 i=46 true ns=1;i=431 i=40 false i=68 0 i=5 -1 1 1 0 false 0 ns=1;i=438 Variable_2 0 SoftwareCertificates SoftwareCertificates 0 0 0 i=46 true ns=1;i=431 i=40 false i=68 i=344 1 0 1 1 0 false 0 ns=1;i=454 Object_1 0 ModellingRules ModellingRules 0 0 0 i=47 true ns=1;i=431 i=40 false i=61 0 ns=1;i=455 Object_1 0 AggregateFunctions AggregateFunctions 0 0 0 i=47 true ns=1;i=431 i=40 false i=61 0 ns=1;i=456 Object_1 0 ServerDiagnostics ServerDiagnostics 0 0 0 i=47 true ns=1;i=413 i=40 false i=2020 i=47 false ns=1;i=457 i=47 false ns=1;i=471 i=47 false ns=1;i=472 i=46 false ns=1;i=475 0 ns=1;i=457 Variable_2 0 ServerDiagnosticsSummary ServerDiagnosticsSummary 0 0 0 i=47 true ns=1;i=456 i=40 false i=2150 i=47 false ns=1;i=458 i=47 false ns=1;i=459 i=47 false ns=1;i=460 i=47 false ns=1;i=461 i=47 false ns=1;i=462 i=47 false ns=1;i=463 i=47 false ns=1;i=464 i=47 false ns=1;i=465 i=47 false ns=1;i=466 i=47 false ns=1;i=467 i=47 false ns=1;i=468 i=47 false ns=1;i=469 i=859 -1 1 1 0 false 0 ns=1;i=458 Variable_2 0 ServerViewCount ServerViewCount 0 0 0 i=47 true ns=1;i=457 i=40 false i=63 0 i=7 -1 1 1 0 false 0 ns=1;i=459 Variable_2 0 CurrentSessionCount CurrentSessionCount 0 0 0 i=47 true ns=1;i=457 i=40 false i=63 0 i=7 -1 1 1 0 false 0 ns=1;i=460 Variable_2 0 CumulatedSessionCount CumulatedSessionCount 0 0 0 i=47 true ns=1;i=457 i=40 false i=63 0 i=7 -1 1 1 0 false 0 ns=1;i=461 Variable_2 0 SecurityRejectedSessionCount SecurityRejectedSessionCount 0 0 0 i=47 true ns=1;i=457 i=40 false i=63 0 i=7 -1 1 1 0 false 0 ns=1;i=462 Variable_2 0 RejectedSessionCount RejectedSessionCount 0 0 0 i=47 true ns=1;i=457 i=40 false i=63 0 i=7 -1 1 1 0 false 0 ns=1;i=463 Variable_2 0 SessionTimeoutCount SessionTimeoutCount 0 0 0 i=47 true ns=1;i=457 i=40 false i=63 0 i=7 -1 1 1 0 false 0 ns=1;i=464 Variable_2 0 SessionAbortCount SessionAbortCount 0 0 0 i=47 true ns=1;i=457 i=40 false i=63 0 i=7 -1 1 1 0 false 0 ns=1;i=465 Variable_2 0 PublishingIntervalCount PublishingIntervalCount 0 0 0 i=47 true ns=1;i=457 i=40 false i=63 0 i=7 -1 1 1 0 false 0 ns=1;i=466 Variable_2 0 CurrentSubscriptionCount CurrentSubscriptionCount 0 0 0 i=47 true ns=1;i=457 i=40 false i=63 0 i=7 -1 1 1 0 false 0 ns=1;i=467 Variable_2 0 CumulatedSubscriptionCount CumulatedSubscriptionCount 0 0 0 i=47 true ns=1;i=457 i=40 false i=63 0 i=7 -1 1 1 0 false 0 ns=1;i=468 Variable_2 0 SecurityRejectedRequestsCount SecurityRejectedRequestsCount 0 0 0 i=47 true ns=1;i=457 i=40 false i=63 0 i=7 -1 1 1 0 false 0 ns=1;i=469 Variable_2 0 RejectedRequestsCount RejectedRequestsCount 0 0 0 i=47 true ns=1;i=457 i=40 false i=63 0 i=7 -1 1 1 0 false 0 ns=1;i=471 Variable_2 0 SubscriptionDiagnosticsArray SubscriptionDiagnosticsArray 0 0 0 i=47 true ns=1;i=456 i=40 false i=2171 i=874 1 0 1 1 0 false 0 ns=1;i=472 Object_1 0 SessionsDiagnosticsSummary SessionsDiagnosticsSummary 0 0 0 i=47 true ns=1;i=456 i=40 false i=2026 i=47 false ns=1;i=473 i=47 false ns=1;i=474 0 ns=1;i=473 Variable_2 0 SessionDiagnosticsArray SessionDiagnosticsArray 0 0 0 i=47 true ns=1;i=472 i=40 false i=2196 i=865 1 0 1 1 0 false 0 ns=1;i=474 Variable_2 0 SessionSecurityDiagnosticsArray SessionSecurityDiagnosticsArray 0 0 0 i=47 true ns=1;i=472 i=40 false i=2243 i=868 1 0 1 1 0 false 0 ns=1;i=475 Variable_2 0 EnabledFlag EnabledFlag 0 0 0 i=46 true ns=1;i=456 i=40 false i=68 false i=1 -1 3 3 0 false 0 ns=1;i=476 Object_1 0 VendorServerInfo VendorServerInfo 0 0 0 i=47 true ns=1;i=413 i=40 false i=2033 0 ns=1;i=477 Object_1 0 ServerRedundancy ServerRedundancy 0 0 0 i=47 true ns=1;i=413 i=40 false i=2034 i=46 false ns=1;i=478 0 ns=1;i=478 Variable_2 0 RedundancySupport RedundancySupport 0 0 0 i=46 true ns=1;i=477 i=40 false i=68 i=851 -1 1 1 0 false 0 ns=1;i=505 Variable_2 1 ChildProperty ChildProperty 0 0 0 i=46 true ns=1;i=413 i=40 false i=68 ns=1;i=195 true ns=1;i=506 i=21 -1 1 1 0 false 0 ns=1;i=506 Variable_2 1 BrowseName4node1109 BrowseName4node1109 0 0 0 i=47 true ns=1;i=413 i=40 false i=2368 ns=1;i=195 false ns=1;i=505 i=46 false ns=1;i=510 0 i=26 -1 1 1 0 false 0 ns=1;i=510 Variable_2 0 EURange EURange 0 0 0 i=46 true ns=1;i=506 i=40 false i=68 i=884 -1 1 1 0 false 0 ns=1;i=512 Method_4 1 ChildMethod ChildMethod 0 0 0 i=47 true ns=1;i=413 i=46 false ns=1;i=513 i=46 false ns=1;i=514 true true ns=1;i=513 Variable_2 0 InputArguments InputArguments 0 0 0 i=46 true ns=1;i=512 i=40 false i=68 i=297 Input1 i=6 -1 i=297 Input2 i=6 -1 i=296 1 0 1 1 0 false 0 ns=1;i=514 Variable_2 0 OutputArguments OutputArguments 0 0 0 i=46 true ns=1;i=512 i=40 false i=68 i=297 Output1 i=6 -1 i=296 1 0 1 1 0 false 0 ns=1;i=515 Method_4 1 NonExecutableMethod NonExecutableMethod 0 0 0 i=47 true ns=1;i=413 true true ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/XMLModels/CorrectModels/ObjectTypeTest/ObjectTypeTest.NodeSet2.xml ================================================  http://cas.eu/UA/CommServer/UnitTests/ObjectTypeTest i=1 i=2 i=3 i=4 i=5 i=6 i=7 i=8 i=9 i=10 i=11 i=13 i=12 i=15 i=14 i=16 i=17 i=18 i=20 i=21 i=19 i=22 i=26 i=27 i=28 i=47 i=46 i=35 i=36 i=48 i=45 i=40 i=37 i=38 i=39 i=53 i=52 i=51 i=54 i=9004 i=9005 i=17597 i=9006 i=15112 i=17604 i=17603 ComplexObjectType ns=1;i=214 ns=1;i=308 ns=1;i=309 ns=1;i=289 ns=1;i=295 ns=1;i=306 i=2004 ServerCapabilities ns=1;i=215 ns=1;i=216 ns=1;i=217 ns=1;i=218 ns=1;i=219 ns=1;i=220 ns=1;i=221 ns=1;i=237 ns=1;i=238 i=2013 i=78 ns=1;i=196 ServerProfileArray i=68 i=78 ns=1;i=214 LocaleIdArray i=68 i=78 ns=1;i=214 MinSupportedSampleRate i=68 i=78 ns=1;i=214 MaxBrowseContinuationPoints i=68 i=78 ns=1;i=214 MaxQueryContinuationPoints i=68 i=78 ns=1;i=214 MaxHistoryContinuationPoints i=68 i=78 ns=1;i=214 SoftwareCertificates i=68 i=78 ns=1;i=214 ModellingRules i=61 i=78 ns=1;i=214 AggregateFunctions i=61 i=78 ns=1;i=214 ChildObject i=58 i=11510 ns=1;i=196 ChildProperty ns=1;i=289 i=68 i=78 ns=1;i=196 BrowseName4node1109 ns=1;i=293 ns=1;i=309 i=2368 i=78 ns=1;i=196 EURange i=68 i=78 ns=1;i=289 ChildMethod ns=1;i=299 ns=1;i=300 i=78 ns=1;i=196 InputArguments i=68 i=78 ns=1;i=295 i=297 Input1 i=6 -1 i=297 Input2 i=6 -1 OutputArguments i=68 i=78 ns=1;i=295 i=297 Output1 i=6 -1 NonExecutableMethod i=78 ns=1;i=196 Flow to type It is test ReferenceType i=32 FlowFrom ChildMethodComplexObjectType ns=1;i=304 ns=1;i=305 InputArguments i=68 ns=1;i=303 i=297 Input1 i=6 -1 i=297 Input2 i=6 -1 OutputArguments i=68 ns=1;i=303 i=297 Output1 i=6 -1 NonExecutableMethodComplexObjectType DerivedFromComplexObjectType ns=1;i=409 ns=1;i=196 ChildMethod ns=1;i=410 ns=1;i=411 i=78 ns=1;i=310 InputArguments i=68 i=78 ns=1;i=409 i=297 Input1 i=6 -1 i=297 Input2 i=6 -1 OutputArguments i=68 i=78 ns=1;i=409 i=297 Output1 i=6 -1 NameNotSet6 ns=1;i=414 ns=1;i=415 ns=1;i=416 ns=1;i=429 ns=1;i=430 ns=1;i=431 ns=1;i=456 ns=1;i=476 ns=1;i=477 ns=1;i=505 ns=1;i=506 ns=1;i=512 ns=1;i=515 i=85 ns=1;i=310 ServerArray i=68 ns=1;i=413 NamespaceArray i=68 ns=1;i=413 ServerStatus ns=1;i=417 ns=1;i=418 ns=1;i=419 ns=1;i=420 ns=1;i=427 ns=1;i=428 i=2138 ns=1;i=413 StartTime i=63 ns=1;i=416 CurrentTime i=63 ns=1;i=416 State i=63 ns=1;i=416 BuildInfo ns=1;i=421 ns=1;i=422 ns=1;i=423 ns=1;i=424 ns=1;i=425 ns=1;i=426 i=3051 ns=1;i=416 ProductUri i=63 ns=1;i=420 ManufacturerName i=63 ns=1;i=420 ProductName i=63 ns=1;i=420 SoftwareVersion i=63 ns=1;i=420 BuildNumber i=63 ns=1;i=420 BuildDate i=63 ns=1;i=420 SecondsTillShutdown i=63 ns=1;i=416 ShutdownReason i=63 ns=1;i=416 ServiceLevel i=68 ns=1;i=413 Auditing i=68 ns=1;i=413 ServerCapabilities ns=1;i=432 ns=1;i=433 ns=1;i=434 ns=1;i=435 ns=1;i=436 ns=1;i=437 ns=1;i=438 ns=1;i=454 ns=1;i=455 i=2013 ns=1;i=413 ServerProfileArray i=68 ns=1;i=431 LocaleIdArray i=68 ns=1;i=431 MinSupportedSampleRate i=68 ns=1;i=431 MaxBrowseContinuationPoints i=68 ns=1;i=431 MaxQueryContinuationPoints i=68 ns=1;i=431 MaxHistoryContinuationPoints i=68 ns=1;i=431 SoftwareCertificates i=68 ns=1;i=431 ModellingRules i=61 ns=1;i=431 AggregateFunctions i=61 ns=1;i=431 ServerDiagnostics ns=1;i=457 ns=1;i=471 ns=1;i=472 ns=1;i=475 i=2020 ns=1;i=413 ServerDiagnosticsSummary ns=1;i=458 ns=1;i=459 ns=1;i=460 ns=1;i=461 ns=1;i=462 ns=1;i=463 ns=1;i=464 ns=1;i=465 ns=1;i=466 ns=1;i=467 ns=1;i=468 ns=1;i=469 i=2150 ns=1;i=456 ServerViewCount i=63 ns=1;i=457 CurrentSessionCount i=63 ns=1;i=457 CumulatedSessionCount i=63 ns=1;i=457 SecurityRejectedSessionCount i=63 ns=1;i=457 RejectedSessionCount i=63 ns=1;i=457 SessionTimeoutCount i=63 ns=1;i=457 SessionAbortCount i=63 ns=1;i=457 PublishingIntervalCount i=63 ns=1;i=457 CurrentSubscriptionCount i=63 ns=1;i=457 CumulatedSubscriptionCount i=63 ns=1;i=457 SecurityRejectedRequestsCount i=63 ns=1;i=457 RejectedRequestsCount i=63 ns=1;i=457 SubscriptionDiagnosticsArray i=2171 ns=1;i=456 SessionsDiagnosticsSummary ns=1;i=473 ns=1;i=474 i=2026 ns=1;i=456 SessionDiagnosticsArray i=2196 ns=1;i=472 SessionSecurityDiagnosticsArray i=2243 ns=1;i=472 EnabledFlag i=68 ns=1;i=456 VendorServerInfo i=2033 ns=1;i=413 ServerRedundancy ns=1;i=478 i=2034 ns=1;i=413 RedundancySupport i=68 ns=1;i=477 ChildProperty ns=1;i=506 i=68 ns=1;i=413 BrowseName4node1109 ns=1;i=510 ns=1;i=505 i=2368 ns=1;i=413 EURange i=68 ns=1;i=506 ChildMethod ns=1;i=513 ns=1;i=514 ns=1;i=413 InputArguments i=68 ns=1;i=512 i=297 Input1 i=6 -1 i=297 Input2 i=6 -1 OutputArguments i=68 ns=1;i=512 i=297 Output1 i=6 -1 NonExecutableMethod ns=1;i=413 ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/XMLModels/CorrectModels/ObjectTypeTest/ObjectTypeTest.PredefinedNodes.xml ================================================  http://cas.eu/UA/CommServer/UnitTests/ObjectTypeTest ObjectType_8 ns=1;i=196 1 ComplexObjectType i=2004 Object_1 ns=1;i=214 0 ServerCapabilities i=47 i=2013 i=78 214 Variable_2 ns=1;i=215 0 ServerProfileArray i=46 i=68 i=78 215 i=12 1 0 1 1 Variable_2 ns=1;i=216 0 LocaleIdArray i=46 i=68 i=78 216 i=295 1 0 1 1 Variable_2 ns=1;i=217 0 MinSupportedSampleRate i=46 i=68 i=78 217 i=290 -1 1 1 Variable_2 ns=1;i=218 0 MaxBrowseContinuationPoints i=46 i=68 i=78 218 i=5 -1 1 1 Variable_2 ns=1;i=219 0 MaxQueryContinuationPoints i=46 i=68 i=78 219 i=5 -1 1 1 Variable_2 ns=1;i=220 0 MaxHistoryContinuationPoints i=46 i=68 i=78 220 i=5 -1 1 1 Variable_2 ns=1;i=221 0 SoftwareCertificates i=46 i=68 i=78 221 i=344 1 0 1 1 Object_1 ns=1;i=237 0 ModellingRules i=47 i=61 i=78 237 Object_1 ns=1;i=238 0 AggregateFunctions i=47 i=61 i=78 238 Object_1 ns=1;i=308 1 ChildObject i=47 i=58 i=11510 308 1 Variable_2 ns=1;i=309 1 ChildProperty i=46 i=68 i=78 309 i=21 -1 1 1 ns=1;i=195 true ns=1;i=289 Variable_2 ns=1;i=289 1 BrowseName4node1109 i=47 i=2368 i=78 289 i=26 -1 1 1 ns=1;i=195 ns=1;i=309 Variable_2 ns=1;i=293 0 EURange i=46 i=68 i=78 293 i=884 -1 1 1 Method_4 ns=1;i=295 1 ChildMethod i=47 ns=1;i=295 i=78 295 true true Variable_2 ns=1;i=299 0 InputArguments i=46 i=68 i=78 299 i=297 Input1 i=6 -1 i=297 Input2 i=6 -1 i=296 1 0 1 1 Variable_2 ns=1;i=300 0 OutputArguments i=46 i=68 i=78 300 i=297 Output1 i=6 -1 i=296 1 0 1 1 Method_4 ns=1;i=306 1 NonExecutableMethod i=47 ns=1;i=306 i=78 306 true true ReferenceType_32 ns=1;i=195 1 FlowTo Flow to type It is test ReferenceType i=32 FlowFrom Method_4 ns=1;i=303 1 ChildMethodComplexObjectType i=47 ns=1;i=303 303 true true Variable_2 ns=1;i=304 0 InputArguments i=46 i=68 304 i=297 Input1 i=6 -1 i=297 Input2 i=6 -1 i=296 1 0 1 1 Variable_2 ns=1;i=305 0 OutputArguments i=46 i=68 305 i=297 Output1 i=6 -1 i=296 1 0 1 1 Method_4 ns=1;i=307 1 NonExecutableMethodComplexObjectType i=47 ns=1;i=307 307 ObjectType_8 ns=1;i=310 1 DerivedFromComplexObjectType ns=1;i=196 Method_4 ns=1;i=409 1 ChildMethod i=47 ns=1;i=295 i=78 409 true true Variable_2 ns=1;i=410 0 InputArguments i=46 i=68 i=78 410 i=297 Input1 i=6 -1 i=297 Input2 i=6 -1 i=296 1 0 1 1 Variable_2 ns=1;i=411 0 OutputArguments i=46 i=68 i=78 411 i=297 Output1 i=6 -1 i=296 1 0 1 1 Object_1 ns=1;i=413 1 NameNotSet6 i=47 ns=1;i=310 413 i=35 true i=85 Variable_2 ns=1;i=414 0 ServerArray i=46 i=68 414 i=12 1 0 1 1 1000 Variable_2 ns=1;i=415 0 NamespaceArray i=46 i=68 415 i=12 1 0 1 1 1000 Variable_2 ns=1;i=416 0 ServerStatus i=47 i=2138 416 i=862 -1 1 1 1000 Variable_2 ns=1;i=417 0 StartTime i=47 i=63 417 i=294 -1 1 1 Variable_2 ns=1;i=418 0 CurrentTime i=47 i=63 418 i=294 -1 1 1 Variable_2 ns=1;i=419 0 State i=47 i=63 419 i=852 -1 1 1 Variable_2 ns=1;i=420 0 BuildInfo i=47 i=3051 420 i=338 -1 1 1 Variable_2 ns=1;i=421 0 ProductUri i=47 i=63 421 i=12 -1 1 1 1000 Variable_2 ns=1;i=422 0 ManufacturerName i=47 i=63 422 i=12 -1 1 1 1000 Variable_2 ns=1;i=423 0 ProductName i=47 i=63 423 i=12 -1 1 1 1000 Variable_2 ns=1;i=424 0 SoftwareVersion i=47 i=63 424 i=12 -1 1 1 1000 Variable_2 ns=1;i=425 0 BuildNumber i=47 i=63 425 i=12 -1 1 1 1000 Variable_2 ns=1;i=426 0 BuildDate i=47 i=63 426 i=294 -1 1 1 1000 Variable_2 ns=1;i=427 0 SecondsTillShutdown i=47 i=63 427 i=7 -1 1 1 Variable_2 ns=1;i=428 0 ShutdownReason i=47 i=63 428 i=21 -1 1 1 Variable_2 ns=1;i=429 0 ServiceLevel i=46 i=68 429 i=3 -1 1 1 1000 Variable_2 ns=1;i=430 0 Auditing i=46 i=68 430 i=1 -1 1 1 1000 Object_1 ns=1;i=431 0 ServerCapabilities i=47 i=2013 431 Variable_2 ns=1;i=432 0 ServerProfileArray i=46 i=68 432 i=12 1 0 1 1 Variable_2 ns=1;i=433 0 LocaleIdArray i=46 i=68 433 i=295 1 0 1 1 Variable_2 ns=1;i=434 0 MinSupportedSampleRate i=46 i=68 434 i=290 -1 1 1 Variable_2 ns=1;i=435 0 MaxBrowseContinuationPoints i=46 i=68 435 i=5 -1 1 1 Variable_2 ns=1;i=436 0 MaxQueryContinuationPoints i=46 i=68 436 i=5 -1 1 1 Variable_2 ns=1;i=437 0 MaxHistoryContinuationPoints i=46 i=68 437 i=5 -1 1 1 Variable_2 ns=1;i=438 0 SoftwareCertificates i=46 i=68 438 i=344 1 0 1 1 Object_1 ns=1;i=454 0 ModellingRules i=47 i=61 454 Object_1 ns=1;i=455 0 AggregateFunctions i=47 i=61 455 Object_1 ns=1;i=456 0 ServerDiagnostics i=47 i=2020 456 Variable_2 ns=1;i=457 0 ServerDiagnosticsSummary i=47 i=2150 457 i=859 -1 1 1 Variable_2 ns=1;i=458 0 ServerViewCount i=47 i=63 458 i=7 -1 1 1 Variable_2 ns=1;i=459 0 CurrentSessionCount i=47 i=63 459 i=7 -1 1 1 Variable_2 ns=1;i=460 0 CumulatedSessionCount i=47 i=63 460 i=7 -1 1 1 Variable_2 ns=1;i=461 0 SecurityRejectedSessionCount i=47 i=63 461 i=7 -1 1 1 Variable_2 ns=1;i=462 0 RejectedSessionCount i=47 i=63 462 i=7 -1 1 1 Variable_2 ns=1;i=463 0 SessionTimeoutCount i=47 i=63 463 i=7 -1 1 1 Variable_2 ns=1;i=464 0 SessionAbortCount i=47 i=63 464 i=7 -1 1 1 Variable_2 ns=1;i=465 0 PublishingIntervalCount i=47 i=63 465 i=7 -1 1 1 Variable_2 ns=1;i=466 0 CurrentSubscriptionCount i=47 i=63 466 i=7 -1 1 1 Variable_2 ns=1;i=467 0 CumulatedSubscriptionCount i=47 i=63 467 i=7 -1 1 1 Variable_2 ns=1;i=468 0 SecurityRejectedRequestsCount i=47 i=63 468 i=7 -1 1 1 Variable_2 ns=1;i=469 0 RejectedRequestsCount i=47 i=63 469 i=7 -1 1 1 Variable_2 ns=1;i=471 0 SubscriptionDiagnosticsArray i=47 i=2171 471 i=874 1 0 1 1 Object_1 ns=1;i=472 0 SessionsDiagnosticsSummary i=47 i=2026 472 Variable_2 ns=1;i=473 0 SessionDiagnosticsArray i=47 i=2196 473 i=865 1 0 1 1 Variable_2 ns=1;i=474 0 SessionSecurityDiagnosticsArray i=47 i=2243 474 i=868 1 0 1 1 Variable_2 ns=1;i=475 0 EnabledFlag i=46 i=68 475 i=1 -1 3 3 Object_1 ns=1;i=476 0 VendorServerInfo i=47 i=2033 476 Object_1 ns=1;i=477 0 ServerRedundancy i=47 i=2034 477 Variable_2 ns=1;i=478 0 RedundancySupport i=46 i=68 478 i=851 -1 1 1 Variable_2 ns=1;i=505 1 ChildProperty i=46 i=68 505 i=21 -1 1 1 ns=1;i=195 true ns=1;i=506 Variable_2 ns=1;i=506 1 BrowseName4node1109 i=47 i=2368 506 i=26 -1 1 1 ns=1;i=195 ns=1;i=505 Variable_2 ns=1;i=510 0 EURange i=46 i=68 510 i=884 -1 1 1 Method_4 ns=1;i=512 1 ChildMethod i=47 ns=1;i=295 512 true true Variable_2 ns=1;i=513 0 InputArguments i=46 i=68 513 i=297 Input1 i=6 -1 i=297 Input2 i=6 -1 i=296 1 0 1 1 Variable_2 ns=1;i=514 0 OutputArguments i=46 i=68 514 i=297 Output1 i=6 -1 i=296 1 0 1 1 Method_4 ns=1;i=515 1 NonExecutableMethod i=47 ns=1;i=306 515 true true ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/XMLModels/CorrectModels/ObjectTypeTest/ObjectTypeTest.Types.bsd ================================================ ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/XMLModels/CorrectModels/ObjectTypeTest/ObjectTypeTest.Types.xsd ================================================ ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/XMLModels/CorrectModels/ObjectTypeTest.csv ================================================ ComplexObjectType_UrisVersion,1,Variable ComplexObjectType_ServerCapabilities_RoleSet,2,Object ComplexObjectType_ServerCapabilities_RoleSet_AddRole,3,Method ComplexObjectType_ServerCapabilities_RoleSet_AddRole_InputArguments,4,Variable ComplexObjectType_ServerCapabilities_RoleSet_AddRole_OutputArguments,5,Variable ComplexObjectType_ServerCapabilities_RoleSet_RemoveRole,6,Method ComplexObjectType_ServerCapabilities_RoleSet_RemoveRole_InputArguments,7,Variable DerivedFromComplexObjectType_UrisVersion,8,Variable DerivedFromComplexObjectType_ServerCapabilities_RoleSet,9,Object DerivedFromComplexObjectType_ServerCapabilities_RoleSet_AddRole,10,Method DerivedFromComplexObjectType_ServerCapabilities_RoleSet_AddRole_InputArguments,11,Variable DerivedFromComplexObjectType_ServerCapabilities_RoleSet_AddRole_OutputArguments,12,Variable DerivedFromComplexObjectType_ServerCapabilities_RoleSet_RemoveRole,13,Method DerivedFromComplexObjectType_ServerCapabilities_RoleSet_RemoveRole_InputArguments,14,Variable NameNotSet6_UrisVersion,15,Variable NameNotSet6_ServerCapabilities_RoleSet,16,Object NameNotSet6_ServerCapabilities_RoleSet_AddRole,17,Method NameNotSet6_ServerCapabilities_RoleSet_AddRole_InputArguments,18,Variable NameNotSet6_ServerCapabilities_RoleSet_AddRole_OutputArguments,19,Variable NameNotSet6_ServerCapabilities_RoleSet_RemoveRole,20,Method NameNotSet6_ServerCapabilities_RoleSet_RemoveRole_InputArguments,21,Variable FlowTo,195,ReferenceType ComplexObjectType,196,ObjectType ComplexObjectType_ServerArray,197,Variable ComplexObjectType_NamespaceArray,198,Variable ComplexObjectType_ServerStatus,199,Variable ComplexObjectType_ServerStatus_StartTime,200,Variable ComplexObjectType_ServerStatus_CurrentTime,201,Variable ComplexObjectType_ServerStatus_State,202,Variable ComplexObjectType_ServerStatus_BuildInfo,203,Variable ComplexObjectType_ServerStatus_BuildInfo_ProductUri,204,Variable ComplexObjectType_ServerStatus_BuildInfo_ManufacturerName,205,Variable ComplexObjectType_ServerStatus_BuildInfo_ProductName,206,Variable ComplexObjectType_ServerStatus_BuildInfo_SoftwareVersion,207,Variable ComplexObjectType_ServerStatus_BuildInfo_BuildNumber,208,Variable ComplexObjectType_ServerStatus_BuildInfo_BuildDate,209,Variable ComplexObjectType_ServerStatus_SecondsTillShutdown,210,Variable ComplexObjectType_ServerStatus_ShutdownReason,211,Variable ComplexObjectType_ServiceLevel,212,Variable ComplexObjectType_Auditing,213,Variable ComplexObjectType_ServerCapabilities,214,Object ComplexObjectType_ServerCapabilities_ServerProfileArray,215,Variable ComplexObjectType_ServerCapabilities_LocaleIdArray,216,Variable ComplexObjectType_ServerCapabilities_MinSupportedSampleRate,217,Variable ComplexObjectType_ServerCapabilities_MaxBrowseContinuationPoints,218,Variable ComplexObjectType_ServerCapabilities_MaxQueryContinuationPoints,219,Variable ComplexObjectType_ServerCapabilities_MaxHistoryContinuationPoints,220,Variable ComplexObjectType_ServerCapabilities_SoftwareCertificates,221,Variable ComplexObjectType_ServerCapabilities_MaxArrayLength,222,Variable ComplexObjectType_ServerCapabilities_MaxStringLength,223,Variable ComplexObjectType_ServerCapabilities_OperationLimits,224,Object ComplexObjectType_ServerCapabilities_OperationLimits_MaxNodesPerRead,225,Variable ComplexObjectType_ServerCapabilities_OperationLimits_MaxNodesPerHistoryReadData,226,Variable ComplexObjectType_ServerCapabilities_OperationLimits_MaxNodesPerHistoryReadEvents,227,Variable ComplexObjectType_ServerCapabilities_OperationLimits_MaxNodesPerWrite,228,Variable ComplexObjectType_ServerCapabilities_OperationLimits_MaxNodesPerHistoryUpdateData,229,Variable ComplexObjectType_ServerCapabilities_OperationLimits_MaxNodesPerHistoryUpdateEvents,230,Variable ComplexObjectType_ServerCapabilities_OperationLimits_MaxNodesPerMethodCall,231,Variable ComplexObjectType_ServerCapabilities_OperationLimits_MaxNodesPerBrowse,232,Variable ComplexObjectType_ServerCapabilities_OperationLimits_MaxNodesPerRegisterNodes,233,Variable ComplexObjectType_ServerCapabilities_OperationLimits_MaxNodesPerTranslateBrowsePathsToNodeIds,234,Variable ComplexObjectType_ServerCapabilities_OperationLimits_MaxNodesPerNodeManagement,235,Variable ComplexObjectType_ServerCapabilities_OperationLimits_MaxMonitoredItemsPerCall,236,Variable ComplexObjectType_ServerCapabilities_ModellingRules,237,Object ComplexObjectType_ServerCapabilities_AggregateFunctions,238,Object ComplexObjectType_ServerDiagnostics,239,Object ComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary,240,Variable ComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_ServerViewCount,241,Variable ComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_CurrentSessionCount,242,Variable ComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_CumulatedSessionCount,243,Variable ComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_SecurityRejectedSessionCount,244,Variable ComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_RejectedSessionCount,245,Variable ComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_SessionTimeoutCount,246,Variable ComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_SessionAbortCount,247,Variable ComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_PublishingIntervalCount,248,Variable ComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_CurrentSubscriptionCount,249,Variable ComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_CumulatedSubscriptionCount,250,Variable ComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_SecurityRejectedRequestsCount,251,Variable ComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_RejectedRequestsCount,252,Variable ComplexObjectType_ServerDiagnostics_SamplingIntervalDiagnosticsArray,253,Variable ComplexObjectType_ServerDiagnostics_SubscriptionDiagnosticsArray,254,Variable ComplexObjectType_ServerDiagnostics_SessionsDiagnosticsSummary,255,Object ComplexObjectType_ServerDiagnostics_SessionsDiagnosticsSummary_SessionDiagnosticsArray,256,Variable ComplexObjectType_ServerDiagnostics_SessionsDiagnosticsSummary_SessionSecurityDiagnosticsArray,257,Variable ComplexObjectType_ServerDiagnostics_EnabledFlag,258,Variable ComplexObjectType_VendorServerInfo,259,Object ComplexObjectType_ServerRedundancy,260,Object ComplexObjectType_ServerRedundancy_RedundancySupport,261,Variable ComplexObjectType_Namespaces,262,Object ComplexObjectType_GetMonitoredItems,284,Method ComplexObjectType_GetMonitoredItems_InputArguments,285,Variable ComplexObjectType_GetMonitoredItems_OutputArguments,286,Variable ComplexObjectType_NameNotSet1109,289,Variable ComplexObjectType_NameNotSet1109_Definition,290,Variable ComplexObjectType_NameNotSet1109_ValuePrecision,291,Variable ComplexObjectType_NameNotSet1109_InstrumentRange,292,Variable ComplexObjectType_NameNotSet1109_EURange,293,Variable ComplexObjectType_NameNotSet1109_EngineeringUnits,294,Variable ComplexObjectType_ChildMethod,295,Method ComplexObjectType_ChildMethod_InputArguments,299,Variable ComplexObjectType_ChildMethod_OutputArguments,300,Variable ChildMethodComplexObjectType,303,Method ChildMethodComplexObjectType_InputArguments,304,Variable ChildMethodComplexObjectType_OutputArguments,305,Variable ComplexObjectType_NonExecutableMethod,306,Method NonExecutableMethodComplexObjectType,307,Method ComplexObjectType_ChildObject,308,Object ComplexObjectType_BrowseName4node66,309,Variable DerivedFromComplexObjectType,310,ObjectType DerivedFromComplexObjectType_ServerArray,311,Variable DerivedFromComplexObjectType_NamespaceArray,312,Variable DerivedFromComplexObjectType_ServerStatus,313,Variable DerivedFromComplexObjectType_ServerStatus_StartTime,314,Variable DerivedFromComplexObjectType_ServerStatus_CurrentTime,315,Variable DerivedFromComplexObjectType_ServerStatus_State,316,Variable DerivedFromComplexObjectType_ServerStatus_BuildInfo,317,Variable DerivedFromComplexObjectType_ServerStatus_BuildInfo_ProductUri,318,Variable DerivedFromComplexObjectType_ServerStatus_BuildInfo_ManufacturerName,319,Variable DerivedFromComplexObjectType_ServerStatus_BuildInfo_ProductName,320,Variable DerivedFromComplexObjectType_ServerStatus_BuildInfo_SoftwareVersion,321,Variable DerivedFromComplexObjectType_ServerStatus_BuildInfo_BuildNumber,322,Variable DerivedFromComplexObjectType_ServerStatus_BuildInfo_BuildDate,323,Variable DerivedFromComplexObjectType_ServerStatus_SecondsTillShutdown,324,Variable DerivedFromComplexObjectType_ServerStatus_ShutdownReason,325,Variable DerivedFromComplexObjectType_ServiceLevel,326,Variable DerivedFromComplexObjectType_Auditing,327,Variable DerivedFromComplexObjectType_ServerCapabilities,328,Object DerivedFromComplexObjectType_ServerCapabilities_ServerProfileArray,329,Variable DerivedFromComplexObjectType_ServerCapabilities_LocaleIdArray,330,Variable DerivedFromComplexObjectType_ServerCapabilities_MinSupportedSampleRate,331,Variable DerivedFromComplexObjectType_ServerCapabilities_MaxBrowseContinuationPoints,332,Variable DerivedFromComplexObjectType_ServerCapabilities_MaxQueryContinuationPoints,333,Variable DerivedFromComplexObjectType_ServerCapabilities_MaxHistoryContinuationPoints,334,Variable DerivedFromComplexObjectType_ServerCapabilities_SoftwareCertificates,335,Variable DerivedFromComplexObjectType_ServerCapabilities_MaxArrayLength,336,Variable DerivedFromComplexObjectType_ServerCapabilities_MaxStringLength,337,Variable DerivedFromComplexObjectType_ServerCapabilities_OperationLimits,338,Object DerivedFromComplexObjectType_ServerCapabilities_OperationLimits_MaxNodesPerRead,339,Variable DerivedFromComplexObjectType_ServerCapabilities_OperationLimits_MaxNodesPerHistoryReadData,340,Variable DerivedFromComplexObjectType_ServerCapabilities_OperationLimits_MaxNodesPerHistoryReadEvents,341,Variable DerivedFromComplexObjectType_ServerCapabilities_OperationLimits_MaxNodesPerWrite,342,Variable DerivedFromComplexObjectType_ServerCapabilities_OperationLimits_MaxNodesPerHistoryUpdateData,343,Variable DerivedFromComplexObjectType_ServerCapabilities_OperationLimits_MaxNodesPerHistoryUpdateEvents,344,Variable DerivedFromComplexObjectType_ServerCapabilities_OperationLimits_MaxNodesPerMethodCall,345,Variable DerivedFromComplexObjectType_ServerCapabilities_OperationLimits_MaxNodesPerBrowse,346,Variable DerivedFromComplexObjectType_ServerCapabilities_OperationLimits_MaxNodesPerRegisterNodes,347,Variable DerivedFromComplexObjectType_ServerCapabilities_OperationLimits_MaxNodesPerTranslateBrowsePathsToNodeIds,348,Variable DerivedFromComplexObjectType_ServerCapabilities_OperationLimits_MaxNodesPerNodeManagement,349,Variable DerivedFromComplexObjectType_ServerCapabilities_OperationLimits_MaxMonitoredItemsPerCall,350,Variable DerivedFromComplexObjectType_ServerCapabilities_ModellingRules,351,Object DerivedFromComplexObjectType_ServerCapabilities_AggregateFunctions,352,Object DerivedFromComplexObjectType_ServerDiagnostics,353,Object DerivedFromComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary,354,Variable DerivedFromComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_ServerViewCount,355,Variable DerivedFromComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_CurrentSessionCount,356,Variable DerivedFromComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_CumulatedSessionCount,357,Variable DerivedFromComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_SecurityRejectedSessionCount,358,Variable DerivedFromComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_RejectedSessionCount,359,Variable DerivedFromComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_SessionTimeoutCount,360,Variable DerivedFromComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_SessionAbortCount,361,Variable DerivedFromComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_PublishingIntervalCount,362,Variable DerivedFromComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_CurrentSubscriptionCount,363,Variable DerivedFromComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_CumulatedSubscriptionCount,364,Variable DerivedFromComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_SecurityRejectedRequestsCount,365,Variable DerivedFromComplexObjectType_ServerDiagnostics_ServerDiagnosticsSummary_RejectedRequestsCount,366,Variable DerivedFromComplexObjectType_ServerDiagnostics_SamplingIntervalDiagnosticsArray,367,Variable DerivedFromComplexObjectType_ServerDiagnostics_SubscriptionDiagnosticsArray,368,Variable DerivedFromComplexObjectType_ServerDiagnostics_SessionsDiagnosticsSummary,369,Object DerivedFromComplexObjectType_ServerDiagnostics_SessionsDiagnosticsSummary_SessionDiagnosticsArray,370,Variable DerivedFromComplexObjectType_ServerDiagnostics_SessionsDiagnosticsSummary_SessionSecurityDiagnosticsArray,371,Variable DerivedFromComplexObjectType_ServerDiagnostics_EnabledFlag,372,Variable DerivedFromComplexObjectType_VendorServerInfo,373,Object DerivedFromComplexObjectType_ServerRedundancy,374,Object DerivedFromComplexObjectType_ServerRedundancy_RedundancySupport,375,Variable DerivedFromComplexObjectType_Namespaces,376,Object DerivedFromComplexObjectType_GetMonitoredItems,398,Method DerivedFromComplexObjectType_GetMonitoredItems_InputArguments,399,Variable DerivedFromComplexObjectType_GetMonitoredItems_OutputArguments,400,Variable DerivedFromComplexObjectType_ChildObject,401,Object DerivedFromComplexObjectType_BrowseName4node66,402,Variable DerivedFromComplexObjectType_NameNotSet1109,403,Variable DerivedFromComplexObjectType_NameNotSet1109_Definition,404,Variable DerivedFromComplexObjectType_NameNotSet1109_ValuePrecision,405,Variable DerivedFromComplexObjectType_NameNotSet1109_InstrumentRange,406,Variable DerivedFromComplexObjectType_NameNotSet1109_EURange,407,Variable DerivedFromComplexObjectType_NameNotSet1109_EngineeringUnits,408,Variable DerivedFromComplexObjectType_ChildMethod,409,Method DerivedFromComplexObjectType_ChildMethod_InputArguments,410,Variable DerivedFromComplexObjectType_ChildMethod_OutputArguments,411,Variable DerivedFromComplexObjectType_NonExecutableMethod,412,Method NameNotSet6,413,Object NameNotSet6_ServerArray,414,Variable NameNotSet6_NamespaceArray,415,Variable NameNotSet6_ServerStatus,416,Variable NameNotSet6_ServerStatus_StartTime,417,Variable NameNotSet6_ServerStatus_CurrentTime,418,Variable NameNotSet6_ServerStatus_State,419,Variable NameNotSet6_ServerStatus_BuildInfo,420,Variable NameNotSet6_ServerStatus_BuildInfo_ProductUri,421,Variable NameNotSet6_ServerStatus_BuildInfo_ManufacturerName,422,Variable NameNotSet6_ServerStatus_BuildInfo_ProductName,423,Variable NameNotSet6_ServerStatus_BuildInfo_SoftwareVersion,424,Variable NameNotSet6_ServerStatus_BuildInfo_BuildNumber,425,Variable NameNotSet6_ServerStatus_BuildInfo_BuildDate,426,Variable NameNotSet6_ServerStatus_SecondsTillShutdown,427,Variable NameNotSet6_ServerStatus_ShutdownReason,428,Variable NameNotSet6_ServiceLevel,429,Variable NameNotSet6_Auditing,430,Variable NameNotSet6_ServerCapabilities,431,Object NameNotSet6_ServerCapabilities_ServerProfileArray,432,Variable NameNotSet6_ServerCapabilities_LocaleIdArray,433,Variable NameNotSet6_ServerCapabilities_MinSupportedSampleRate,434,Variable NameNotSet6_ServerCapabilities_MaxBrowseContinuationPoints,435,Variable NameNotSet6_ServerCapabilities_MaxQueryContinuationPoints,436,Variable NameNotSet6_ServerCapabilities_MaxHistoryContinuationPoints,437,Variable NameNotSet6_ServerCapabilities_SoftwareCertificates,438,Variable NameNotSet6_ServerCapabilities_MaxArrayLength,439,Variable NameNotSet6_ServerCapabilities_MaxStringLength,440,Variable NameNotSet6_ServerCapabilities_OperationLimits,441,Object NameNotSet6_ServerCapabilities_OperationLimits_MaxNodesPerRead,442,Variable NameNotSet6_ServerCapabilities_OperationLimits_MaxNodesPerHistoryReadData,443,Variable NameNotSet6_ServerCapabilities_OperationLimits_MaxNodesPerHistoryReadEvents,444,Variable NameNotSet6_ServerCapabilities_OperationLimits_MaxNodesPerWrite,445,Variable NameNotSet6_ServerCapabilities_OperationLimits_MaxNodesPerHistoryUpdateData,446,Variable NameNotSet6_ServerCapabilities_OperationLimits_MaxNodesPerHistoryUpdateEvents,447,Variable NameNotSet6_ServerCapabilities_OperationLimits_MaxNodesPerMethodCall,448,Variable NameNotSet6_ServerCapabilities_OperationLimits_MaxNodesPerBrowse,449,Variable NameNotSet6_ServerCapabilities_OperationLimits_MaxNodesPerRegisterNodes,450,Variable NameNotSet6_ServerCapabilities_OperationLimits_MaxNodesPerTranslateBrowsePathsToNodeIds,451,Variable NameNotSet6_ServerCapabilities_OperationLimits_MaxNodesPerNodeManagement,452,Variable NameNotSet6_ServerCapabilities_OperationLimits_MaxMonitoredItemsPerCall,453,Variable NameNotSet6_ServerCapabilities_ModellingRules,454,Object NameNotSet6_ServerCapabilities_AggregateFunctions,455,Object NameNotSet6_ServerDiagnostics,456,Object NameNotSet6_ServerDiagnostics_ServerDiagnosticsSummary,457,Variable NameNotSet6_ServerDiagnostics_ServerDiagnosticsSummary_ServerViewCount,458,Variable NameNotSet6_ServerDiagnostics_ServerDiagnosticsSummary_CurrentSessionCount,459,Variable NameNotSet6_ServerDiagnostics_ServerDiagnosticsSummary_CumulatedSessionCount,460,Variable NameNotSet6_ServerDiagnostics_ServerDiagnosticsSummary_SecurityRejectedSessionCount,461,Variable NameNotSet6_ServerDiagnostics_ServerDiagnosticsSummary_RejectedSessionCount,462,Variable NameNotSet6_ServerDiagnostics_ServerDiagnosticsSummary_SessionTimeoutCount,463,Variable NameNotSet6_ServerDiagnostics_ServerDiagnosticsSummary_SessionAbortCount,464,Variable NameNotSet6_ServerDiagnostics_ServerDiagnosticsSummary_PublishingIntervalCount,465,Variable NameNotSet6_ServerDiagnostics_ServerDiagnosticsSummary_CurrentSubscriptionCount,466,Variable NameNotSet6_ServerDiagnostics_ServerDiagnosticsSummary_CumulatedSubscriptionCount,467,Variable NameNotSet6_ServerDiagnostics_ServerDiagnosticsSummary_SecurityRejectedRequestsCount,468,Variable NameNotSet6_ServerDiagnostics_ServerDiagnosticsSummary_RejectedRequestsCount,469,Variable NameNotSet6_ServerDiagnostics_SamplingIntervalDiagnosticsArray,470,Variable NameNotSet6_ServerDiagnostics_SubscriptionDiagnosticsArray,471,Variable NameNotSet6_ServerDiagnostics_SessionsDiagnosticsSummary,472,Object NameNotSet6_ServerDiagnostics_SessionsDiagnosticsSummary_SessionDiagnosticsArray,473,Variable NameNotSet6_ServerDiagnostics_SessionsDiagnosticsSummary_SessionSecurityDiagnosticsArray,474,Variable NameNotSet6_ServerDiagnostics_EnabledFlag,475,Variable NameNotSet6_VendorServerInfo,476,Object NameNotSet6_ServerRedundancy,477,Object NameNotSet6_ServerRedundancy_RedundancySupport,478,Variable NameNotSet6_Namespaces,479,Object NameNotSet6_GetMonitoredItems,501,Method NameNotSet6_GetMonitoredItems_InputArguments,502,Variable NameNotSet6_GetMonitoredItems_OutputArguments,503,Variable NameNotSet6_ChildObject,504,Object NameNotSet6_BrowseName4node66,505,Variable NameNotSet6_NameNotSet1109,506,Variable NameNotSet6_NameNotSet1109_Definition,507,Variable NameNotSet6_NameNotSet1109_ValuePrecision,508,Variable NameNotSet6_NameNotSet1109_InstrumentRange,509,Variable NameNotSet6_NameNotSet1109_EURange,510,Variable NameNotSet6_NameNotSet1109_EngineeringUnits,511,Variable NameNotSet6_ChildMethod,512,Method NameNotSet6_ChildMethod_InputArguments,513,Variable NameNotSet6_ChildMethod_OutputArguments,514,Variable NameNotSet6_NonExecutableMethod,515,Method ComplexObjectType_EstimatedReturnTime,516,Variable ComplexObjectType_LocalTime,517,Variable ComplexObjectType_ServerCapabilities_MaxByteStringLength,518,Variable ComplexObjectType_ServerCapabilities_Roles,519,Unspecified ComplexObjectType_ServerCapabilities_Roles_AddRole,520,Unspecified ComplexObjectType_ServerCapabilities_Roles_AddRole_InputArguments,521,Unspecified ComplexObjectType_ServerCapabilities_Roles_AddRole_OutputArguments,522,Unspecified ComplexObjectType_ServerCapabilities_Roles_RemoveRole,523,Unspecified ComplexObjectType_ServerCapabilities_Roles_RemoveRole_InputArguments,524,Unspecified ComplexObjectType_ResendData,525,Method ComplexObjectType_ResendData_InputArguments,526,Variable ComplexObjectType_SetSubscriptionDurable,527,Method ComplexObjectType_SetSubscriptionDurable_InputArguments,528,Variable ComplexObjectType_SetSubscriptionDurable_OutputArguments,529,Variable ComplexObjectType_RequestServerStateChange,530,Method ComplexObjectType_RequestServerStateChange_InputArguments,531,Variable DerivedFromComplexObjectType_EstimatedReturnTime,532,Variable DerivedFromComplexObjectType_LocalTime,533,Variable DerivedFromComplexObjectType_ServerCapabilities_MaxByteStringLength,534,Variable DerivedFromComplexObjectType_ServerCapabilities_Roles,535,Unspecified DerivedFromComplexObjectType_ServerCapabilities_Roles_AddRole,536,Unspecified DerivedFromComplexObjectType_ServerCapabilities_Roles_AddRole_InputArguments,537,Unspecified DerivedFromComplexObjectType_ServerCapabilities_Roles_AddRole_OutputArguments,538,Unspecified DerivedFromComplexObjectType_ServerCapabilities_Roles_RemoveRole,539,Unspecified DerivedFromComplexObjectType_ServerCapabilities_Roles_RemoveRole_InputArguments,540,Unspecified DerivedFromComplexObjectType_ResendData,541,Method DerivedFromComplexObjectType_ResendData_InputArguments,542,Variable DerivedFromComplexObjectType_SetSubscriptionDurable,543,Method DerivedFromComplexObjectType_SetSubscriptionDurable_InputArguments,544,Variable DerivedFromComplexObjectType_SetSubscriptionDurable_OutputArguments,545,Variable DerivedFromComplexObjectType_RequestServerStateChange,546,Method DerivedFromComplexObjectType_RequestServerStateChange_InputArguments,547,Variable NameNotSet6_EstimatedReturnTime,548,Variable NameNotSet6_LocalTime,549,Variable NameNotSet6_ServerCapabilities_MaxByteStringLength,550,Variable NameNotSet6_ServerCapabilities_Roles,551,Unspecified NameNotSet6_ServerCapabilities_Roles_AddRole,552,Unspecified NameNotSet6_ServerCapabilities_Roles_AddRole_InputArguments,553,Unspecified NameNotSet6_ServerCapabilities_Roles_AddRole_OutputArguments,554,Unspecified NameNotSet6_ServerCapabilities_Roles_RemoveRole,555,Unspecified NameNotSet6_ServerCapabilities_Roles_RemoveRole_InputArguments,556,Unspecified NameNotSet6_ResendData,557,Method NameNotSet6_ResendData_InputArguments,558,Variable NameNotSet6_SetSubscriptionDurable,559,Method NameNotSet6_SetSubscriptionDurable_InputArguments,560,Variable NameNotSet6_SetSubscriptionDurable_OutputArguments,561,Variable NameNotSet6_RequestServerStateChange,562,Method NameNotSet6_RequestServerStateChange_InputArguments,563,Variable ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/XMLModels/CorrectModels/ObjectTypeTest.xml ================================================  http://cas.eu/UA/CommServer/UnitTests/ObjectTypeTest http://opcfoundation.org/UA/ ChildProperty cas:FlowTo cas:ComplexObjectType_NameNotSet1109 BrowseName4node1109 Flow to type It is test ReferenceType FlowFrom ua:Organizes ua:ObjectsFolder ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/XMLModels/CorrectModels/ReferenceTest/ReferenceTest.Classes.cs ================================================ /* ======================================================================== * Copyright (c) 2005-2021 The OPC Foundation, Inc. All rights reserved. * * OPC Foundation MIT License 1.00 * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, * copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following * conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. * * The complete license agreement can be found here: * http://opcfoundation.org/License/MIT/1.00/ * ======================================================================*/ using System; using System.Collections.Generic; using System.Text; using System.Xml; using System.Runtime.Serialization; using ; namespace ReferenceTest { } ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/XMLModels/CorrectModels/ReferenceTest/ReferenceTest.Constants.cs ================================================ /* ======================================================================== * Copyright (c) 2005-2021 The OPC Foundation, Inc. All rights reserved. * * OPC Foundation MIT License 1.00 * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, * copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following * conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. * * The complete license agreement can be found here: * http://opcfoundation.org/License/MIT/1.00/ * ======================================================================*/ using System; using System.Collections.Generic; using System.Text; using System.Reflection; using System.Xml; using System.Runtime.Serialization; using ; namespace ReferenceTest { #region ReferenceType Identifiers /// /// A class that declares constants for all ReferenceTypes in the Model Design. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class ReferenceTypes { /// /// The identifier for the ReferenceTypeTest ReferenceType. /// public const uint ReferenceTypeTest = 1; } #endregion #region ReferenceType Node Identifiers /// /// A class that declares constants for all ReferenceTypes in the Model Design. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class ReferenceTypeIds { /// /// The identifier for the ReferenceTypeTest ReferenceType. /// public static readonly ExpandedNodeId ReferenceTypeTest = new ExpandedNodeId(ReferenceTest.ReferenceTypes.ReferenceTypeTest, ReferenceTest.Namespaces.cas); } #endregion #region BrowseName Declarations /// /// Declares all of the BrowseNames used in the Model Design. /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class BrowseNames { /// /// The BrowseName for the ReferenceTypeTest component. /// public const string ReferenceTypeTest = "ReferenceTypeTest"; } #endregion #region Namespace Declarations /// /// Defines constants for all namespaces referenced by the model design. /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class Namespaces { /// /// The URI for the cas namespace (.NET code namespace is 'ReferenceTest'). /// public const string cas = "http://cas.eu/UA/CommServer/UnitTests/ReferenceTest"; /// /// The URI for the ua namespace (.NET code namespace is ''). /// public const string ua = "http://opcfoundation.org/UA/"; } #endregion } ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/XMLModels/CorrectModels/ReferenceTest/ReferenceTest.DataTypes.cs ================================================ /* ======================================================================== * Copyright (c) 2005-2021 The OPC Foundation, Inc. All rights reserved. * * OPC Foundation MIT License 1.00 * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, * copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following * conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. * * The complete license agreement can be found here: * http://opcfoundation.org/License/MIT/1.00/ * ======================================================================*/ using System; using System.Collections.Generic; using System.Text; using System.Xml; using System.Runtime.Serialization; using ; namespace ReferenceTest { } ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/XMLModels/CorrectModels/ReferenceTest/ReferenceTest.NodeIds.csv ================================================ ReferenceTypeTest,1,ReferenceType ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/XMLModels/CorrectModels/ReferenceTest/ReferenceTest.NodeSet.xml ================================================  http://opcfoundation.org/UA/ http://cas.eu/UA/CommServer/UnitTests/ReferenceTest ns=1;i=1 ReferenceType_32 1 ReferenceTypeTest ReferenceTypeTest 0 0 0 i=45 true i=46 false false FromSomwhere ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/XMLModels/CorrectModels/ReferenceTest/ReferenceTest.NodeSet2.xml ================================================  http://cas.eu/UA/CommServer/UnitTests/ReferenceTest i=1 i=2 i=3 i=4 i=5 i=6 i=7 i=8 i=9 i=10 i=11 i=13 i=12 i=15 i=14 i=16 i=17 i=18 i=20 i=21 i=19 i=22 i=26 i=27 i=28 i=47 i=46 i=35 i=36 i=48 i=45 i=40 i=37 i=38 i=39 i=53 i=52 i=51 i=54 i=9004 i=9005 i=17597 i=9006 i=15112 i=17604 i=17603 ReferenceTypeTest i=46 FromSomwhere ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/XMLModels/CorrectModels/ReferenceTest/ReferenceTest.PredefinedNodes.xml ================================================  http://cas.eu/UA/CommServer/UnitTests/ReferenceTest ReferenceType_32 ns=1;i=1 1 ReferenceTypeTest i=46 FromSomwhere ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/XMLModels/CorrectModels/ReferenceTest/ReferenceTest.Types.bsd ================================================ ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/XMLModels/CorrectModels/ReferenceTest/ReferenceTest.Types.xsd ================================================ ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/XMLModels/CorrectModels/ReferenceTest.csv ================================================ ReferenceTypeTest,1,ReferenceType ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/XMLModels/CorrectModels/ReferenceTest.xml ================================================  http://cas.eu/UA/CommServer/UnitTests/ReferenceTest http://opcfoundation.org/UA/ FromSomwhere ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/XMLModels/CorrectModels/TestModels.uamdsl ================================================  UnitTestsData ReferenceTest $(ProjectFileName).csv $(ProjectFileName) ReferenceTest.xml ObjectTypeTest $(ProjectFileName).csv $(ProjectFileName) ObjectTypeTest.xml VariableTypeTest $(ProjectFileName).csv $(ProjectFileName) VariableTypeTest.xml DataTypeTest $(ProjectFileName).csv $(ProjectFileName) DataTypeTest.xml ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/XMLModels/CorrectModels/VariableTypeTest/VariableTypeTest.Classes.cs ================================================ /* ======================================================================== * Copyright (c) 2005-2021 The OPC Foundation, Inc. All rights reserved. * * OPC Foundation MIT License 1.00 * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, * copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following * conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. * * The complete license agreement can be found here: * http://opcfoundation.org/License/MIT/1.00/ * ======================================================================*/ using System; using System.Collections.Generic; using System.Text; using System.Xml; using System.Runtime.Serialization; using ; namespace VariableTypeTest { #region ComplexVariableState Class #if (!OPCUA_EXCLUDE_ComplexVariableState) /// /// Stores an instance of the ComplexVariableType VariableType. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public partial class ComplexVariableState : AnalogItemState { #region Constructors /// /// Initializes the type with its default attribute values. /// public ComplexVariableState(NodeState parent) : base(parent) { } /// /// Returns the id of the default type definition node for the instance. /// protected override NodeId GetDefaultTypeDefinitionId(NamespaceTable namespaceUris) { return Opc.Ua.NodeId.Create(VariableTypeTest.VariableTypes.ComplexVariableType, VariableTypeTest.Namespaces.cas, namespaceUris); } /// /// Returns the id of the default data type node for the instance. /// protected override NodeId GetDefaultDataTypeId(NamespaceTable namespaceUris) { return Opc.Ua.NodeId.Create(.DataTypes.Number, .Namespaces.ua, namespaceUris); } /// /// Returns the id of the default value rank for the instance. /// protected override int GetDefaultValueRank() { return ValueRanks.Scalar; } #if (!OPCUA_EXCLUDE_InitializationStrings) /// /// Initializes the instance. /// protected override void Initialize(ISystemContext context) { base.Initialize(context); Initialize(context, InitializationString); InitializeOptionalChildren(context); } /// /// Initializes the instance with a node. /// protected override void Initialize(ISystemContext context, NodeState source) { InitializeOptionalChildren(context); base.Initialize(context, source); } /// /// Initializes the any option children defined for the instance. /// protected override void InitializeOptionalChildren(ISystemContext context) { base.InitializeOptionalChildren(context); } #region Initialization String private const string InitializationString = "AQAAADYAAABodHRwOi8vY2FzLmV1L1VBL0NvbW1TZXJ2ZXIvVW5pdFRlc3RzL1ZhcmlhYmxlVHlwZVRl" + "c3T/////FWCJAgIAAAABABsAAABDb21wbGV4VmFyaWFibGVUeXBlSW5zdGFuY2UBAQgAAQEIAAgAAAAA" + "Gv////8BAf////8CAAAAVWCJCgIAAAAAAAcAAABFVVJhbmdlAQEMAAMAAAAADgAAAE5ld0Rpc3BsYXlO" + "YW1lAC4ARAwAAAABAHQD/////wEB/////wAAAAAVYIkKAgAAAAEADQAAAFZhcmlhYmxlQ2hpbGQBAQ4A" + "AC4ARA4AAAAABv////8CAv////8AAAAA"; #endregion #endif #endregion #region Public Properties /// public PropertyState VariableChild { get { return m_variableChild; } set { if (!Object.ReferenceEquals(m_variableChild, value)) { ChangeMasks |= NodeStateChangeMasks.Children; } m_variableChild = value; } } #endregion #region Overridden Methods /// /// Populates a list with the children that belong to the node. /// /// The context for the system being accessed. /// The list of children to populate. public override void GetChildren( ISystemContext context, IList children) { if (m_variableChild != null) { children.Add(m_variableChild); } base.GetChildren(context, children); } /// /// Finds the child with the specified browse name. /// protected override BaseInstanceState FindChild( ISystemContext context, QualifiedName browseName, bool createOrReplace, BaseInstanceState replacement) { if (QualifiedName.IsNull(browseName)) { return null; } BaseInstanceState instance = null; switch (browseName.Name) { case VariableTypeTest.BrowseNames.VariableChild: { if (createOrReplace) { if (VariableChild == null) { if (replacement == null) { VariableChild = new PropertyState(this); } else { VariableChild = (PropertyState)replacement; } } } instance = VariableChild; break; } } if (instance != null) { return instance; } return base.FindChild(context, browseName, createOrReplace, replacement); } #endregion #region Private Fields private PropertyState m_variableChild; #endregion } #region ComplexVariableState Class /// /// A typed version of the ComplexVariableType variable. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public class ComplexVariableState : ComplexVariableState { #region Constructors /// /// Initializes the instance with its defalt attribute values. /// public ComplexVariableState(NodeState parent) : base(parent) { Value = default(T); } /// /// Initializes the instance with the default values. /// protected override void Initialize(ISystemContext context) { base.Initialize(context); Value = default(T); DataType = TypeInfo.GetDataTypeId(typeof(T)); ValueRank = TypeInfo.GetValueRank(typeof(T)); } /// /// Initializes the instance with a node. /// protected override void Initialize(ISystemContext context, NodeState source) { InitializeOptionalChildren(context); base.Initialize(context, source); } #endregion #region Public Members /// /// The value of the variable. /// public new T Value { get { return CheckTypeBeforeCast(base.Value, true); } set { base.Value = value; } } #endregion } #endregion #endif #endregion #region ArrayVariableState Class #if (!OPCUA_EXCLUDE_ArrayVariableState) /// /// Stores an instance of the ArrayVariableType VariableType. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public partial class ArrayVariableState : BaseDataVariableState { #region Constructors /// /// Initializes the type with its default attribute values. /// public ArrayVariableState(NodeState parent) : base(parent) { } /// /// Returns the id of the default type definition node for the instance. /// protected override NodeId GetDefaultTypeDefinitionId(NamespaceTable namespaceUris) { return Opc.Ua.NodeId.Create(VariableTypeTest.VariableTypes.ArrayVariableType, VariableTypeTest.Namespaces.cas, namespaceUris); } /// /// Returns the id of the default data type node for the instance. /// protected override NodeId GetDefaultDataTypeId(NamespaceTable namespaceUris) { return Opc.Ua.NodeId.Create(.DataTypes.Int32, .Namespaces.ua, namespaceUris); } /// /// Returns the id of the default value rank for the instance. /// protected override int GetDefaultValueRank() { return 4; } #if (!OPCUA_EXCLUDE_InitializationStrings) /// /// Initializes the instance. /// protected override void Initialize(ISystemContext context) { base.Initialize(context); Initialize(context, InitializationString); InitializeOptionalChildren(context); } /// /// Initializes the instance with a node. /// protected override void Initialize(ISystemContext context, NodeState source) { InitializeOptionalChildren(context); base.Initialize(context, source); } /// /// Initializes the any option children defined for the instance. /// protected override void InitializeOptionalChildren(ISystemContext context) { base.InitializeOptionalChildren(context); } #region Initialization String private const string InitializationString = "AQAAADYAAABodHRwOi8vY2FzLmV1L1VBL0NvbW1TZXJ2ZXIvVW5pdFRlc3RzL1ZhcmlhYmxlVHlwZVRl" + "c3T/////F2CJAgIAAAABABkAAABBcnJheVZhcmlhYmxlVHlwZUluc3RhbmNlAQEPAAEBDwAPAAAAAAYD" + "AAAAAwAAAAAAAAAAAAAAAAAAAAEB/////wAAAAA="; #endregion #endif #endregion #region Public Properties #endregion #region Overridden Methods #endregion #region Private Fields #endregion } #endif #endregion #region SimpleVariableWithValueState Class #if (!OPCUA_EXCLUDE_SimpleVariableWithValueState) /// /// Stores an instance of the SimpleVariableWithValueType VariableType. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public partial class SimpleVariableWithValueState : BaseDataVariableState { #region Constructors /// /// Initializes the type with its default attribute values. /// public SimpleVariableWithValueState(NodeState parent) : base(parent) { } /// /// Returns the id of the default type definition node for the instance. /// protected override NodeId GetDefaultTypeDefinitionId(NamespaceTable namespaceUris) { return Opc.Ua.NodeId.Create(VariableTypeTest.VariableTypes.SimpleVariableWithValueType, VariableTypeTest.Namespaces.cas, namespaceUris); } /// /// Returns the id of the default data type node for the instance. /// protected override NodeId GetDefaultDataTypeId(NamespaceTable namespaceUris) { return Opc.Ua.NodeId.Create(.DataTypes.Int32, .Namespaces.ua, namespaceUris); } /// /// Returns the id of the default value rank for the instance. /// protected override int GetDefaultValueRank() { return ValueRanks.Scalar; } #if (!OPCUA_EXCLUDE_InitializationStrings) /// /// Initializes the instance. /// protected override void Initialize(ISystemContext context) { base.Initialize(context); Initialize(context, InitializationString); InitializeOptionalChildren(context); } /// /// Initializes the instance with a node. /// protected override void Initialize(ISystemContext context, NodeState source) { InitializeOptionalChildren(context); base.Initialize(context, source); } /// /// Initializes the any option children defined for the instance. /// protected override void InitializeOptionalChildren(ISystemContext context) { base.InitializeOptionalChildren(context); } #region Initialization String private const string InitializationString = "AQAAADYAAABodHRwOi8vY2FzLmV1L1VBL0NvbW1TZXJ2ZXIvVW5pdFRlc3RzL1ZhcmlhYmxlVHlwZVRl" + "c3T/////FWCpAgIAAAABACMAAABTaW1wbGVWYXJpYWJsZVdpdGhWYWx1ZVR5cGVJbnN0YW5jZQEBEAAB" + "ARAAEAAAAAYBAAAAAAb/////AQH/////AAAAAA=="; #endregion #endif #endregion #region Public Properties #endregion #region Overridden Methods #endregion #region Private Fields #endregion } #endif #endregion } ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/XMLModels/CorrectModels/VariableTypeTest/VariableTypeTest.Constants.cs ================================================ /* ======================================================================== * Copyright (c) 2005-2021 The OPC Foundation, Inc. All rights reserved. * * OPC Foundation MIT License 1.00 * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, * copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following * conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. * * The complete license agreement can be found here: * http://opcfoundation.org/License/MIT/1.00/ * ======================================================================*/ using System; using System.Collections.Generic; using System.Text; using System.Reflection; using System.Xml; using System.Runtime.Serialization; using ; namespace VariableTypeTest { #region Variable Identifiers /// /// A class that declares constants for all Variables in the Model Design. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class Variables { /// /// The identifier for the ComplexVariableType_EURange Variable. /// public const uint ComplexVariableType_EURange = 12; /// /// The identifier for the ComplexVariableType_VariableChild Variable. /// public const uint ComplexVariableType_VariableChild = 14; } #endregion #region VariableType Identifiers /// /// A class that declares constants for all VariableTypes in the Model Design. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class VariableTypes { /// /// The identifier for the ComplexVariableType VariableType. /// public const uint ComplexVariableType = 8; /// /// The identifier for the ArrayVariableType VariableType. /// public const uint ArrayVariableType = 15; /// /// The identifier for the SimpleVariableWithValueType VariableType. /// public const uint SimpleVariableWithValueType = 16; } #endregion #region Variable Node Identifiers /// /// A class that declares constants for all Variables in the Model Design. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class VariableIds { /// /// The identifier for the ComplexVariableType_EURange Variable. /// public static readonly ExpandedNodeId ComplexVariableType_EURange = new ExpandedNodeId(VariableTypeTest.Variables.ComplexVariableType_EURange, VariableTypeTest.Namespaces.cas); /// /// The identifier for the ComplexVariableType_VariableChild Variable. /// public static readonly ExpandedNodeId ComplexVariableType_VariableChild = new ExpandedNodeId(VariableTypeTest.Variables.ComplexVariableType_VariableChild, VariableTypeTest.Namespaces.cas); } #endregion #region VariableType Node Identifiers /// /// A class that declares constants for all VariableTypes in the Model Design. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class VariableTypeIds { /// /// The identifier for the ComplexVariableType VariableType. /// public static readonly ExpandedNodeId ComplexVariableType = new ExpandedNodeId(VariableTypeTest.VariableTypes.ComplexVariableType, VariableTypeTest.Namespaces.cas); /// /// The identifier for the ArrayVariableType VariableType. /// public static readonly ExpandedNodeId ArrayVariableType = new ExpandedNodeId(VariableTypeTest.VariableTypes.ArrayVariableType, VariableTypeTest.Namespaces.cas); /// /// The identifier for the SimpleVariableWithValueType VariableType. /// public static readonly ExpandedNodeId SimpleVariableWithValueType = new ExpandedNodeId(VariableTypeTest.VariableTypes.SimpleVariableWithValueType, VariableTypeTest.Namespaces.cas); } #endregion #region BrowseName Declarations /// /// Declares all of the BrowseNames used in the Model Design. /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class BrowseNames { /// /// The BrowseName for the ArrayVariableType component. /// public const string ArrayVariableType = "ArrayVariableType"; /// /// The BrowseName for the ComplexVariableType component. /// public const string ComplexVariableType = "ComplexVariableType"; /// /// The BrowseName for the SimpleVariableWithValueType component. /// public const string SimpleVariableWithValueType = "SimpleVariableWithValueType"; /// /// The BrowseName for the VariableChild component. /// public const string VariableChild = "VariableChild"; } #endregion #region Namespace Declarations /// /// Defines constants for all namespaces referenced by the model design. /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class Namespaces { /// /// The URI for the cas namespace (.NET code namespace is 'VariableTypeTest'). /// public const string cas = "http://cas.eu/UA/CommServer/UnitTests/VariableTypeTest"; /// /// The URI for the ua namespace (.NET code namespace is ''). /// public const string ua = "http://opcfoundation.org/UA/"; } #endregion } ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/XMLModels/CorrectModels/VariableTypeTest/VariableTypeTest.DataTypes.cs ================================================ /* ======================================================================== * Copyright (c) 2005-2021 The OPC Foundation, Inc. All rights reserved. * * OPC Foundation MIT License 1.00 * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, * copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following * conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. * * The complete license agreement can be found here: * http://opcfoundation.org/License/MIT/1.00/ * ======================================================================*/ using System; using System.Collections.Generic; using System.Text; using System.Xml; using System.Runtime.Serialization; using ; namespace VariableTypeTest { } ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/XMLModels/CorrectModels/VariableTypeTest/VariableTypeTest.NodeIds.csv ================================================ ArrayVariableType,15,VariableType ComplexVariableType,8,VariableType SimpleVariableWithValueType,16,VariableType ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/XMLModels/CorrectModels/VariableTypeTest/VariableTypeTest.NodeSet.xml ================================================  http://opcfoundation.org/UA/ http://cas.eu/UA/CommServer/UnitTests/VariableTypeTest ns=1;i=8 VariableType_16 1 ComplexVariableType ComplexVariableType 0 0 0 i=45 true i=2368 i=46 false ns=1;i=12 i=46 false ns=1;i=14 i=26 -1 false ns=1;i=12 Variable_2 0 EURange NewDisplayName 0 0 0 i=46 true ns=1;i=8 i=40 false i=68 i=37 false i=78 i=884 -1 1 1 0 false 0 ns=1;i=14 Variable_2 1 VariableChild VariableChild 0 0 0 i=46 true ns=1;i=8 i=40 false i=68 i=37 false i=78 0 i=6 -1 2 2 0 false 0 ns=1;i=15 VariableType_16 1 ArrayVariableType ArrayVariableType 0 0 0 i=45 true i=63 i=6 3 0 0 0 false ns=1;i=16 VariableType_16 1 SimpleVariableWithValueType SimpleVariableWithValueType 0 0 0 i=45 true i=63 1 i=6 -1 false ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/XMLModels/CorrectModels/VariableTypeTest/VariableTypeTest.NodeSet2.xml ================================================  http://cas.eu/UA/CommServer/UnitTests/VariableTypeTest i=1 i=2 i=3 i=4 i=5 i=6 i=7 i=8 i=9 i=10 i=11 i=13 i=12 i=15 i=14 i=16 i=17 i=18 i=20 i=21 i=19 i=22 i=26 i=27 i=28 i=47 i=46 i=35 i=36 i=48 i=45 i=40 i=37 i=38 i=39 i=53 i=52 i=51 i=54 i=9004 i=9005 i=17597 i=9006 i=15112 i=17604 i=17603 ComplexVariableType ns=1;i=12 ns=1;i=14 i=2368 NewDisplayName i=68 i=78 ns=1;i=8 VariableChild i=68 i=78 ns=1;i=8 ArrayVariableType i=63 SimpleVariableWithValueType i=63 1 ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/XMLModels/CorrectModels/VariableTypeTest/VariableTypeTest.PredefinedNodes.xml ================================================  http://cas.eu/UA/CommServer/UnitTests/VariableTypeTest VariableType_16 ns=1;i=8 1 ComplexVariableType i=2368 i=26 -1 Variable_2 ns=1;i=12 0 EURange NewDisplayName i=46 i=68 i=78 12 i=884 -1 1 1 Variable_2 ns=1;i=14 1 VariableChild i=46 i=68 i=78 14 i=6 -1 2 2 VariableType_16 ns=1;i=15 1 ArrayVariableType i=63 i=6 3 0,0,0 VariableType_16 ns=1;i=16 1 SimpleVariableWithValueType i=63 1 i=6 -1 ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/XMLModels/CorrectModels/VariableTypeTest/VariableTypeTest.Types.bsd ================================================ ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/XMLModels/CorrectModels/VariableTypeTest/VariableTypeTest.Types.xsd ================================================ ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/XMLModels/CorrectModels/VariableTypeTest.csv ================================================ ComplexVariableType,8,VariableType ComplexVariableType_Definition,9,Variable ComplexVariableType_ValuePrecision,10,Variable ComplexVariableType_InstrumentRange,11,Variable ComplexVariableType_EURange,12,Variable ComplexVariableType_EngineeringUnits,13,Variable ComplexVariableType_VariableChild,14,Variable ArrayVariableType,15,VariableType SimpleVariableWithValueType,16,VariableType ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/XMLModels/CorrectModels/VariableTypeTest.xml ================================================  http://cas.eu/UA/CommServer/UnitTests/VariableTypeTest http://opcfoundation.org/UA/ NewDisplayName 1 ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/XMLModels/ModelsWithErrors/DuplicatedNodeId.xml ================================================  http://commsvr.com/OOIUA/SemanticData/UnitTest/UANodeSetValidationUnitTestProject i=1 i=2 i=3 i=4 i=5 i=6 i=7 i=8 i=9 i=10 i=11 i=13 i=12 i=15 i=14 i=16 i=17 i=18 i=20 i=21 i=19 i=22 i=26 i=27 i=28 i=47 i=46 i=35 i=36 i=48 i=45 i=40 i=37 i=38 i=39 ReferenceTypeTest #1 i=46 ReferenceTypeTest #2 i=46 Inverse Name ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/XMLModels/ModelsWithErrors/NotSupportedFeature.xml ================================================  http://commsvr.com/OOIUA/SemanticData/UnitTest/UANodeSetValidationUnitTestProject i=1 i=2 i=3 i=4 i=5 i=6 i=7 i=8 i=9 i=10 i=11 i=13 i=12 i=15 i=14 i=16 i=17 i=18 i=20 i=21 i=19 i=22 i=26 i=27 i=28 i=47 i=46 i=35 i=36 i=48 i=45 i=40 i=37 i=38 i=39 OK UAObjectType. i=58 ns=1;i=2 Wrong UAVariable i=62 i=297 ConfigData i=15 -1 [English Translation for Description] [German Translation for Description] [French Translation for Description] Wrong UAObjectType. i=58 ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/XMLModels/ModelsWithErrors/UndefinedHasChildren.xml ================================================  http://commsvr.com/OOIUA/SemanticData/UnitTest/UANodeSetValidationUnitTestProject i=47 i=45 i=46 ComplexObjectType ns=1;i=14 ns=1;i=308 i=2004 ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/XMLModels/ModelsWithErrors/UndefinedHasSubtype.xml ================================================  http://commsvr.com/OOIUA/SemanticData/UnitTest/UANodeSetValidationUnitTestProject i=1 i=2 i=3 i=4 i=5 i=6 i=7 i=8 i=9 i=10 i=11 i=13 i=12 i=15 i=14 i=16 i=17 i=18 i=20 i=21 i=19 i=22 i=26 i=27 i=28 i=47 i=46 i=35 i=36 i=48 i=45 i=40 i=37 i=38 i=39 ReferenceTypeTest #1 i=46999 ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/XMLModels/ModelsWithErrors/UndefinedHasTypeDefinition.xml ================================================  http://commsvr.com/OOIUA/SemanticData/UnitTest/UANodeSetValidationUnitTestProject i=45 ReferenceTypeTest #1 i=46999 ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/XMLModels/ModelsWithErrors/WrongAccessLevel.xml ================================================  http://commsvr.com/OOIUA/SemanticData/UnitTest/UANodeSetValidationUnitTestProject i=1 i=2 i=3 i=4 i=5 i=6 i=7 i=8 i=9 i=10 i=11 i=13 i=12 i=15 i=14 i=16 i=17 i=18 i=20 i=21 i=19 i=22 i=26 i=27 i=28 i=47 i=46 i=35 i=36 i=48 i=45 i=40 i=37 i=38 i=39 ComplexVariableType ns=1;i=14 i=2368 VariableChild i=68 i=78 ns=1;i=8 ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/XMLModels/ModelsWithErrors/WrongBrowseName.xml ================================================  http://commsvr.com/OOIUA/SemanticData/UnitTest/UANodeSetValidationUnitTestProject i=1 i=2 i=3 i=4 i=5 i=6 i=7 i=8 i=9 i=10 i=11 i=13 i=12 i=15 i=14 i=16 i=17 i=18 i=20 i=21 i=19 i=22 i=26 i=27 i=28 i=47 i=46 i=35 i=36 i=48 i=45 i=40 i=37 i=38 i=39 ReferenceTypeTest #1 i=46 ReferenceTypeTest #2 i=46 Inverse Name ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/XMLModels/ModelsWithErrors/WrongDisplayNameLength.xml ================================================  http://commsvr.com/OOIUA/SemanticData/UnitTest/UANodeSetValidationUnitTestProject i=1 i=2 i=3 i=4 i=5 i=6 i=7 i=8 i=9 i=10 i=11 i=13 i=12 i=15 i=14 i=16 i=17 i=18 i=20 i=21 i=19 i=22 i=26 i=27 i=28 i=47 i=46 i=35 i=36 i=48 i=45 i=40 i=37 i=38 i=39 ComplexObjectType too long display name ComplexObjectType too long display name ComplexObjectType too long display name ComplexObjectType too long display name ComplexObjectType too long display name ComplexObjectType too long display name ComplexObjectType too long display name ComplexObjectType too long display name ComplexObjectType too long display name ComplexObjectType too long display name ComplexObjectType too long display name ComplexObjectType too long display name ComplexObjectType too long display name ComplexObjectType too long display name i=58 ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/XMLModels/ModelsWithErrors/WrongEventNotifier.xml ================================================  http://commsvr.com/OOIUA/SemanticData/UnitTest/UANodeSetValidationUnitTestProject i=1 i=2 i=3 i=4 i=5 i=6 i=7 i=8 i=9 i=10 i=11 i=13 i=12 i=15 i=14 i=16 i=17 i=18 i=20 i=21 i=19 i=22 i=26 i=27 i=28 i=47 i=46 i=35 i=36 i=48 i=45 i=40 i=37 i=38 i=39 ComplexObjectType ns=1;i=287 i=2004 NameNotSet6 i=58 i=11510 ns=1;i=196 ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/XMLModels/ModelsWithErrors/WrongInverseName.xml ================================================  http://commsvr.com/OOIUA/SemanticData/UnitTest/UANodeSetValidationUnitTestProject i=1 i=2 i=3 i=4 i=5 i=6 i=7 i=8 i=9 i=10 i=11 i=13 i=12 i=15 i=14 i=16 i=17 i=18 i=20 i=21 i=19 i=22 i=26 i=27 i=28 i=47 i=46 i=35 i=36 i=48 i=45 i=40 i=37 i=38 i=39 ReferenceTypeTest #1 i=46 FromSomewhere ReferenceTypeTest #4 i=46 FromSomewhere ReferenceTypeTest #2 i=46 ReferenceTypeTest #3 i=46 FromSomewhere ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/XMLModels/ModelsWithErrors/WrongNodeId.xml ================================================  http://commsvr.com/OOIUA/SemanticData/UnitTest/UANodeSetValidationUnitTestProject i=1 i=2 i=3 i=4 i=5 i=6 i=7 i=8 i=9 i=10 i=11 i=13 i=12 i=15 i=14 i=16 i=17 i=18 i=20 i=21 i=19 i=22 i=26 i=27 i=28 i=46 i=35 i=36 i=48 i=45 i=40 i=37 i=38 i=39 Wrong DataType i=63 Wrong DataType i=63 Wrong DataType i=63 ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/XMLModels/ModelsWithErrors/WrongReference2Property.xml ================================================  http://commsvr.com/OOIUA/SemanticData/UnitTest/UANodeSetValidationUnitTestProject i=1 i=2 i=3 i=4 i=5 i=6 i=7 i=8 i=9 i=10 i=11 i=13 i=12 i=15 i=14 i=16 i=17 i=18 i=20 i=21 i=19 i=22 i=26 i=27 i=28 i=47 i=46 i=35 i=36 i=48 i=45 i=40 i=37 i=38 i=39 ComplexObjectType ns=1;i=309 ns=1;i=289 i=2004 ChildProperty i=68 i=78 ns=1;i=196 BrowseName4node1109 ns=1;i=293 i=2368 i=78 ns=1;i=196 EURange i=68 i=78 ns=1;i=289 ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/XMLModels/ModelsWithErrors/WrongValueRank.xml ================================================  http://commsvr.com/OOIUA/SemanticData/UnitTest/UANodeSetValidationUnitTestProject i=1 i=2 i=3 i=4 i=5 i=6 i=7 i=8 i=9 i=10 i=11 i=13 i=12 i=15 i=14 i=16 i=17 i=18 i=20 i=21 i=19 i=22 i=26 i=27 i=28 i=47 i=46 i=35 i=36 i=48 i=45 i=40 i=37 i=38 i=39 ComplexVariableType ns=1;i=14 i=2368 VariableChild i=68 i=78 ns=1;i=8 ArrayVariableType i=63 SimpleVariableWithValueType i=63 1 ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/XMLModels/ModelsWithErrors/WrongWriteMask.xml ================================================  http://commsvr.com/OOIUA/SemanticData/UnitTest/UANodeSetValidationUnitTestProject i=1 i=2 i=3 i=4 i=5 i=6 i=7 i=8 i=9 i=10 i=11 i=13 i=12 i=15 i=14 i=16 i=17 i=18 i=20 i=21 i=19 i=22 i=26 i=27 i=28 i=47 i=46 i=35 i=36 i=48 i=45 i=40 i=37 i=38 i=39 OK UAObjectType. i=58 ns=1;i=2 Wrong UAVariable i=62 Wrong UAObjectType. i=58 ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/XMLModels/ProblemsToReport/ADI#509/Opc.Ua.Adi.NodeSet2.xml ================================================  http://opcfoundation.org/UA/ADI/ http://opcfoundation.org/UA/DI/ i=1 i=2 i=3 i=4 i=5 i=6 i=7 i=8 i=9 i=10 i=11 i=13 i=12 i=15 i=14 i=16 i=17 i=18 i=20 i=21 i=19 i=22 i=26 i=27 i=28 i=47 i=46 i=35 i=36 i=48 i=45 i=40 i=37 i=38 i=39 AnalyserDeviceType ns=1;i=1001 ns=1;i=1002 ns=1;i=2903 ns=1;i=1053 ns=1;i=1054 ns=1;i=1055 ns=1;i=1056 ns=1;i=4310 ns=1;i=4420 ns=2;i=12254 ParameterSet Flat list of Parameters ns=1;i=1010 ns=1;i=4286 i=58 i=80 ns=1;i=1000 DiagnosticStatus General health status of the analyser ns=1;i=1054 i=2365 i=78 ns=1;i=1001 ConfigData Optional analyser device large configuration ns=1;i=4287 ns=1;i=4288 ns=1;i=4289 ns=1;i=4290 ns=1;i=4291 ns=1;i=4294 ns=1;i=4296 ns=1;i=4299 ns=1;i=4301 ns=1;i=4304 ns=1;i=1053 i=11575 i=80 ns=1;i=1001 Size The size of the file in bytes. i=68 i=78 ns=1;i=4286 Writeable Whether the file is writeable. i=68 i=78 ns=1;i=4286 UserWriteable Whether the file is writeable by the current user. i=68 i=78 ns=1;i=4286 OpenCount The current number of open file handles. i=68 i=78 ns=1;i=4286 Open ns=1;i=4292 ns=1;i=4293 i=78 ns=1;i=4286 InputArguments i=68 i=78 ns=1;i=4291 i=297 Mode i=3 -1 OutputArguments i=68 i=78 ns=1;i=4291 i=297 FileHandle i=7 -1 Close ns=1;i=4295 i=78 ns=1;i=4286 InputArguments i=68 i=78 ns=1;i=4294 i=297 FileHandle i=7 -1 Read ns=1;i=4297 ns=1;i=4298 i=78 ns=1;i=4286 InputArguments i=68 i=78 ns=1;i=4296 i=297 FileHandle i=7 -1 i=297 Length i=6 -1 OutputArguments i=68 i=78 ns=1;i=4296 i=297 Data i=15 -1 Write ns=1;i=4300 i=78 ns=1;i=4286 InputArguments i=68 i=78 ns=1;i=4299 i=297 FileHandle i=7 -1 i=297 Data i=15 -1 GetPosition ns=1;i=4302 ns=1;i=4303 i=78 ns=1;i=4286 InputArguments i=68 i=78 ns=1;i=4301 i=297 FileHandle i=7 -1 OutputArguments i=68 i=78 ns=1;i=4301 i=297 Position i=9 -1 SetPosition ns=1;i=4305 i=78 ns=1;i=4286 InputArguments i=68 i=78 ns=1;i=4304 i=297 FileHandle i=7 -1 i=297 Position i=9 -1 MethodSet Flat list of Methods ns=1;i=2905 ns=1;i=2907 ns=1;i=2910 ns=1;i=2912 ns=1;i=2915 ns=1;i=2916 ns=1;i=2917 ns=1;i=2918 ns=1;i=2919 ns=1;i=2920 i=58 i=78 ns=1;i=1000 GetConfiguration ns=1;i=2906 i=78 ns=1;i=1002 OutputArguments i=68 i=78 ns=1;i=2905 i=297 ConfigData i=15 -1 SetConfiguration ns=1;i=2908 ns=1;i=2909 i=78 ns=1;i=1002 InputArguments i=68 i=78 ns=1;i=2907 i=297 ConfigData i=15 -1 OutputArguments i=68 i=78 ns=1;i=2907 i=297 ConfigDataDigest i=12 -1 GetConfigDataDigest ns=1;i=2911 i=78 ns=1;i=1002 OutputArguments i=68 i=78 ns=1;i=2910 i=297 ConfigDataDigest i=12 -1 CompareConfigDataDigest ns=1;i=2913 ns=1;i=2914 i=78 ns=1;i=1002 InputArguments i=68 i=78 ns=1;i=2912 i=297 ConfigDataDigest i=12 -1 OutputArguments i=68 i=78 ns=1;i=2912 i=297 IsEqual i=1 -1 ResetAllChannels Reset all AnalyserChannels belonging to this AnalyserDevice. i=78 ns=1;i=1002 StartAllChannels Start all AnalyserChannels belonging to this AnalyserDevice. i=78 ns=1;i=1002 StopAllChannels Stop all AnalyserChannels belonging to this AnalyserDevice. i=78 ns=1;i=1002 AbortAllChannels Abort all AnalyserChannels belonging to this AnalyserDevice. i=78 ns=1;i=1002 GotoOperating AnalyserDeviceStateMachine to go to Operating state, forcing all AnalyserChannels to leave the SlaveMode state and go to the Operating state. i=78 ns=1;i=1002 GotoMaintenance AnalyserDeviceStateMachine to go to Maintenance state, forcing all AnalyserChannels to SlaveMode state. i=78 ns=1;i=1002 Identification Used to organize parameters for identification of this TopologyElement ns=2;i=12270 ns=2;i=12271 ns=2;i=12268 ns=2;i=12257 i=78 ns=1;i=1000 Configuration ns=1;i=4286 ns=2;i=12257 i=78 ns=1;i=1000 Status ns=1;i=1010 ns=2;i=12257 i=78 ns=1;i=1000 FactorySettings ns=2;i=12257 i=78 ns=1;i=1000 AnalyserStateMachine ns=1;i=1057 ns=1;i=1123 i=78 ns=1;i=1000 CurrentState ns=1;i=1058 i=2760 i=78 ns=1;i=1056 Id i=68 i=78 ns=1;i=1057 <ChannelIdentifier> Channel definition ns=1;i=4313 ns=1;i=4356 ns=1;i=4358 ns=1;i=4360 ns=1;i=1166 i=11508 ns=1;i=1000 MethodSet Flat list of Methods ns=1;i=4331 ns=1;i=4332 ns=1;i=4333 ns=1;i=4335 ns=1;i=4336 ns=1;i=4337 ns=1;i=4338 ns=1;i=4339 ns=1;i=4340 ns=1;i=4341 ns=1;i=4342 ns=1;i=4343 i=58 i=78 ns=1;i=4310 GotoOperating Transitions the AnalyserChannel to Operating mode. i=78 ns=1;i=4313 GotoMaintenance Transitions the AnalyserChannel to Maintenance mode. i=78 ns=1;i=4313 StartSingleAcquisition ns=1;i=4334 i=78 ns=1;i=4313 InputArguments i=68 i=78 ns=1;i=4333 i=297 ExecutionCycle ns=1;i=4189 -1 i=297 ExecutionCycleSubcode i=7 -1 i=297 SelectedStream i=12 -1 Reset Causes transition to the Resetting state. i=78 ns=1;i=4313 Start Causes transition to the Starting state. i=78 ns=1;i=4313 Stop Causes transition to the Stopping state. i=78 ns=1;i=4313 Hold Causes transition to the Holding state. i=78 ns=1;i=4313 Unhold Causes transition to the Unholding state. i=78 ns=1;i=4313 Suspend Causes transition to the Suspending state. i=78 ns=1;i=4313 Unsuspend Causes transition to the Unsuspending state. i=78 ns=1;i=4313 Abort Causes transition to the Aborting state. i=78 ns=1;i=4313 Clear Causes transition to the Clearing state. i=78 ns=1;i=4313 Configuration ns=2;i=12257 i=78 ns=1;i=4310 Status ns=2;i=12257 i=78 ns=1;i=4310 ChannelStateMachine ns=1;i=4361 ns=1;i=4372 ns=1;i=1233 i=78 ns=1;i=4310 CurrentState ns=1;i=4362 i=2760 i=78 ns=1;i=4360 Id i=68 i=78 ns=1;i=4361 OperatingSubStateMachine ns=1;i=4373 ns=1;i=4384 ns=1;i=1275 i=78 ns=1;i=4360 CurrentState ns=1;i=4374 i=2760 i=78 ns=1;i=4372 Id i=68 i=78 ns=1;i=4373 OperatingExecuteSubStateMachine ns=1;i=4385 ns=1;i=1651 i=78 ns=1;i=4372 CurrentState ns=1;i=4386 i=2760 i=78 ns=1;i=4384 Id i=68 i=78 ns=1;i=4385 <AccessorySlotIdentifier> AccessorySlot definition ns=1;i=4421 ns=1;i=4422 ns=1;i=4423 ns=1;i=4424 ns=1;i=2642 i=11508 ns=1;i=1000 SupportedTypes Folder maintaining the set of (sub-types of) BaseObjectTypes that can be instantiated in the ConfigurableComponent i=61 i=78 ns=1;i=4420 IsHotSwappable True if an accessory can be inserted in the accessory slot while it is powered i=68 i=78 ns=1;i=4420 IsEnabled True if this accessory slot is capable of accepting an accessory in it i=68 i=78 ns=1;i=4420 AccessorySlotStateMachine ns=1;i=4425 ns=1;i=2692 i=78 ns=1;i=4420 CurrentState ns=1;i=4426 i=2760 i=78 ns=1;i=4424 Id i=68 i=78 ns=1;i=4425 AnalyserDeviceStateMachineType ns=1;i=1134 ns=1;i=1136 ns=1;i=1138 ns=1;i=1140 ns=1;i=1142 ns=1;i=1144 ns=1;i=1146 ns=1;i=1148 ns=1;i=1150 ns=1;i=1152 ns=1;i=1154 ns=1;i=1156 ns=1;i=1158 ns=1;i=1160 ns=1;i=1162 i=2771 Powerup The AnalyserDevice is in its power-up sequence and cannot perform any other task. ns=1;i=1135 ns=1;i=1144 i=2309 ns=1;i=1123 StateNumber i=68 i=78 ns=1;i=1134 0 Operating The AnalyserDevice is in the Operating mode. ns=1;i=1137 ns=1;i=1144 ns=1;i=1146 ns=1;i=1148 ns=1;i=1150 ns=1;i=1154 ns=1;i=1158 i=2307 ns=1;i=1123 StateNumber i=68 i=78 ns=1;i=1136 0 Local The AnalyserDevice is in the Local mode. This mode is normally used to perform local physical maintenance on the analyser. ns=1;i=1139 ns=1;i=1146 ns=1;i=1150 ns=1;i=1152 ns=1;i=1156 ns=1;i=1160 i=2307 ns=1;i=1123 StateNumber i=68 i=78 ns=1;i=1138 0 Maintenance The AnalyserDevice is in the Maintenance mode. This mode is used to perform remote maintenance on the analyser like firmware upgrade. ns=1;i=1141 ns=1;i=1148 ns=1;i=1152 ns=1;i=1154 ns=1;i=1156 ns=1;i=1162 i=2307 ns=1;i=1123 StateNumber i=68 i=78 ns=1;i=1140 0 Shutdown The AnalyserDevice is in its power-down sequence and cannot perform any other task. ns=1;i=1143 ns=1;i=1158 ns=1;i=1160 ns=1;i=1162 i=2307 ns=1;i=1123 StateNumber i=68 i=78 ns=1;i=1142 0 PowerupToOperatingTransition ns=1;i=1145 ns=1;i=1134 ns=1;i=1136 i=2310 ns=1;i=1123 TransitionNumber i=68 i=78 ns=1;i=1144 0 OperatingToLocalTransition ns=1;i=1147 ns=1;i=1136 ns=1;i=1138 i=2310 ns=1;i=1123 TransitionNumber i=68 i=78 ns=1;i=1146 0 OperatingToMaintenanceTransition ns=1;i=1149 ns=1;i=1136 ns=1;i=1140 ns=1;i=2920 i=2310 ns=1;i=1123 TransitionNumber i=68 i=78 ns=1;i=1148 0 LocalToOperatingTransition ns=1;i=1151 ns=1;i=1138 ns=1;i=1136 i=2310 ns=1;i=1123 TransitionNumber i=68 i=78 ns=1;i=1150 0 LocalToMaintenanceTransition ns=1;i=1153 ns=1;i=1138 ns=1;i=1140 i=2310 ns=1;i=1123 TransitionNumber i=68 i=78 ns=1;i=1152 0 MaintenanceToOperatingTransition ns=1;i=1155 ns=1;i=1140 ns=1;i=1136 ns=1;i=2919 i=2310 ns=1;i=1123 TransitionNumber i=68 i=78 ns=1;i=1154 0 MaintenanceToLocalTransition ns=1;i=1157 ns=1;i=1140 ns=1;i=1138 i=2310 ns=1;i=1123 TransitionNumber i=68 i=78 ns=1;i=1156 0 OperatingToShutdownTransition ns=1;i=1159 ns=1;i=1136 ns=1;i=1142 i=2310 ns=1;i=1123 TransitionNumber i=68 i=78 ns=1;i=1158 0 LocalToShutdownTransition ns=1;i=1161 ns=1;i=1138 ns=1;i=1142 i=2310 ns=1;i=1123 TransitionNumber i=68 i=78 ns=1;i=1160 0 MaintenanceToShutdownTransition ns=1;i=1163 ns=1;i=1140 ns=1;i=1142 i=2310 ns=1;i=1123 TransitionNumber i=68 i=78 ns=1;i=1162 0 AnalyserChannelType ns=1;i=1167 ns=1;i=1168 ns=1;i=4449 ns=1;i=1178 ns=1;i=1179 ns=1;i=1180 ns=1;i=4517 ns=1;i=4643 ns=2;i=12253 ParameterSet Flat list of Parameters ns=1;i=1169 ns=1;i=2935 ns=1;i=1172 ns=1;i=1175 i=58 i=80 ns=1;i=1166 ChannelId Channel Id defined by user i=2365 i=80 ns=1;i=1167 IsEnabled True if the channel is enabled and accepting commands ns=1;i=1178 i=2365 i=78 ns=1;i=1167 DiagnosticStatus AnalyserChannel health status ns=1;i=1179 i=2365 i=78 ns=1;i=1167 ActiveStream Active stream for this AnalyserChannel ns=1;i=1179 i=2365 i=78 ns=1;i=1167 MethodSet Flat list of Methods ns=1;i=2924 ns=1;i=2925 ns=1;i=2922 ns=1;i=2926 ns=1;i=2927 ns=1;i=2928 ns=1;i=2929 ns=1;i=2930 ns=1;i=2931 ns=1;i=2932 ns=1;i=2933 ns=1;i=2934 i=58 i=78 ns=1;i=1166 GotoOperating Transitions the AnalyserChannel to Operating mode. i=78 ns=1;i=1168 GotoMaintenance Transitions the AnalyserChannel to Maintenance mode. i=78 ns=1;i=1168 StartSingleAcquisition ns=1;i=2923 i=78 ns=1;i=1168 InputArguments i=68 i=78 ns=1;i=2922 i=297 ExecutionCycle ns=1;i=4189 -1 i=297 ExecutionCycleSubcode i=7 -1 i=297 SelectedStream i=12 -1 Reset Causes transition to the Resetting state. i=78 ns=1;i=1168 Start Causes transition to the Starting state. i=78 ns=1;i=1168 Stop Causes transition to the Stopping state. i=78 ns=1;i=1168 Hold Causes transition to the Holding state. i=78 ns=1;i=1168 Unhold Causes transition to the Unholding state. i=78 ns=1;i=1168 Suspend Causes transition to the Suspending state. i=78 ns=1;i=1168 Unsuspend Causes transition to the Unsuspending state. i=78 ns=1;i=1168 Abort Causes transition to the Aborting state. i=78 ns=1;i=1168 Clear Causes transition to the Clearing state. i=78 ns=1;i=1168 <GroupIdentifier> Group definition ns=2;i=12257 i=11508 ns=1;i=1166 Configuration ns=1;i=2935 ns=2;i=12257 i=78 ns=1;i=1166 Status ns=1;i=1172 ns=1;i=1175 ns=2;i=12257 i=78 ns=1;i=1166 ChannelStateMachine ns=1;i=1181 ns=1;i=4469 ns=1;i=1233 i=78 ns=1;i=1166 CurrentState ns=1;i=1182 i=2760 i=78 ns=1;i=1180 Id i=68 i=78 ns=1;i=1181 OperatingSubStateMachine ns=1;i=4470 ns=1;i=4481 ns=1;i=1275 i=78 ns=1;i=1180 CurrentState ns=1;i=4471 i=2760 i=78 ns=1;i=4469 Id i=68 i=78 ns=1;i=4470 OperatingExecuteSubStateMachine ns=1;i=4482 ns=1;i=1651 i=78 ns=1;i=4469 CurrentState ns=1;i=4483 i=2760 i=78 ns=1;i=4481 Id i=68 i=78 ns=1;i=4482 <StreamIdentifier> Stream definition ns=1;i=4629 ns=1;i=4631 ns=1;i=4633 ns=1;i=4635 ns=1;i=4637 ns=1;i=4639 ns=1;i=4641 ns=1;i=1866 i=11508 ns=1;i=1166 Configuration ns=2;i=12257 i=78 ns=1;i=4517 Status ns=2;i=12257 i=78 ns=1;i=4517 AcquisitionSettings ns=2;i=12257 i=78 ns=1;i=4517 AcquisitionStatus ns=2;i=12257 i=78 ns=1;i=4517 AcquisitionData ns=2;i=12257 i=78 ns=1;i=4517 ChemometricModelSettings ns=2;i=12257 i=78 ns=1;i=4517 Context ns=2;i=12257 i=78 ns=1;i=4517 <AccessorySlotIdentifier> AccessorySlot definition ns=1;i=4644 ns=1;i=4645 ns=1;i=4646 ns=1;i=4647 ns=1;i=2642 i=11508 ns=1;i=1166 SupportedTypes Folder maintaining the set of (sub-types of) BaseObjectTypes that can be instantiated in the ConfigurableComponent i=61 i=78 ns=1;i=4643 IsHotSwappable True if an accessory can be inserted in the accessory slot while it is powered i=68 i=78 ns=1;i=4643 IsEnabled True if this accessory slot is capable of accepting an accessory in it i=68 i=78 ns=1;i=4643 AccessorySlotStateMachine ns=1;i=4648 ns=1;i=2692 i=78 ns=1;i=4643 CurrentState ns=1;i=4649 i=2760 i=78 ns=1;i=4647 Id i=68 i=78 ns=1;i=4648 AnalyserChannelOperatingStateType i=2307 AnalyserChannelLocalStateType i=2307 AnalyserChannelMaintenanceStateType i=2307 AnalyserChannelStateMachineType Contains a nested state model that defines the top level states Operating, Local and Maintenance ns=1;i=4662 ns=1;i=4686 ns=1;i=4698 ns=1;i=1244 ns=1;i=1246 ns=1;i=1249 ns=1;i=1251 ns=1;i=1253 ns=1;i=1255 ns=1;i=1257 ns=1;i=1259 ns=1;i=1261 ns=1;i=1263 ns=1;i=1265 ns=1;i=1267 ns=1;i=1269 ns=1;i=1271 i=2771 OperatingSubStateMachine ns=1;i=4663 ns=1;i=4674 ns=1;i=1246 ns=1;i=1275 i=78 ns=1;i=1233 CurrentState ns=1;i=4664 i=2760 i=78 ns=1;i=4662 Id i=68 i=78 ns=1;i=4663 OperatingExecuteSubStateMachine ns=1;i=4675 ns=1;i=1651 i=78 ns=1;i=4662 CurrentState ns=1;i=4676 i=2760 i=78 ns=1;i=4674 Id i=68 i=78 ns=1;i=4675 LocalSubStateMachine ns=1;i=4687 ns=1;i=1249 i=2771 i=80 ns=1;i=1233 CurrentState ns=1;i=4688 i=2760 i=78 ns=1;i=4686 Id i=68 i=78 ns=1;i=4687 MaintenanceSubStateMachine ns=1;i=4699 ns=1;i=1251 i=2771 i=80 ns=1;i=1233 CurrentState ns=1;i=4700 i=2760 i=78 ns=1;i=4698 Id i=68 i=78 ns=1;i=4699 SlaveMode The AnalyserDevice is in Local or Maintenance mode and all AnalyserChannels are in SlaveMode ns=1;i=1245 ns=1;i=1253 ns=1;i=1267 ns=1;i=1269 ns=1;i=1271 i=2309 ns=1;i=1233 StateNumber i=68 i=78 ns=1;i=1244 0 Operating The AnalyserChannel is in the Operating mode. ns=1;i=1247 ns=1;i=4662 ns=1;i=1253 ns=1;i=1255 ns=1;i=1257 ns=1;i=1259 ns=1;i=1263 ns=1;i=1267 ns=1;i=1226 ns=1;i=1233 StateNumber i=68 i=78 ns=1;i=1246 0 Local The AnalyserChannel is in the Local mode. This mode is normally used to perform local physical maintenance on the analyser. ns=1;i=1250 ns=1;i=4686 ns=1;i=1255 ns=1;i=1259 ns=1;i=1261 ns=1;i=1265 ns=1;i=1269 ns=1;i=1229 ns=1;i=1233 StateNumber i=68 i=78 ns=1;i=1249 0 Maintenance The AnalyserChannel is in the Maintenance mode. This mode is used to perform remote maintenance on the analyser like firmware upgrade. ns=1;i=1252 ns=1;i=4698 ns=1;i=1257 ns=1;i=1261 ns=1;i=1263 ns=1;i=1265 ns=1;i=1271 ns=1;i=1231 ns=1;i=1233 StateNumber i=68 i=78 ns=1;i=1251 0 SlaveModeToOperatingTransition ns=1;i=1254 ns=1;i=1244 ns=1;i=1246 i=2310 ns=1;i=1233 TransitionNumber i=68 i=78 ns=1;i=1253 0 OperatingToLocalTransition ns=1;i=1256 ns=1;i=1246 ns=1;i=1249 i=2310 ns=1;i=1233 TransitionNumber i=68 i=78 ns=1;i=1255 0 OperatingToMaintenanceTransition ns=1;i=1258 ns=1;i=1246 ns=1;i=1251 ns=1;i=2925 i=2310 ns=1;i=1233 TransitionNumber i=68 i=78 ns=1;i=1257 0 LocalToOperatingTransition ns=1;i=1260 ns=1;i=1249 ns=1;i=1246 i=2310 ns=1;i=1233 TransitionNumber i=68 i=78 ns=1;i=1259 0 LocalToMaintenanceTransition ns=1;i=1262 ns=1;i=1249 ns=1;i=1251 i=2310 ns=1;i=1233 TransitionNumber i=68 i=78 ns=1;i=1261 0 MaintenanceToOperatingTransition ns=1;i=1264 ns=1;i=1251 ns=1;i=1246 ns=1;i=2924 i=2310 ns=1;i=1233 TransitionNumber i=68 i=78 ns=1;i=1263 0 MaintenanceToLocalTransition ns=1;i=1266 ns=1;i=1251 ns=1;i=1249 i=2310 ns=1;i=1233 TransitionNumber i=68 i=78 ns=1;i=1265 0 OperatingToSlaveModeTransition ns=1;i=1268 ns=1;i=1246 ns=1;i=1244 i=2310 ns=1;i=1233 TransitionNumber i=68 i=78 ns=1;i=1267 0 LocalToSlaveModeTransition ns=1;i=1270 ns=1;i=1249 ns=1;i=1244 i=2310 ns=1;i=1233 TransitionNumber i=68 i=78 ns=1;i=1269 0 MaintenanceToSlaveModeTransition ns=1;i=1272 ns=1;i=1251 ns=1;i=1244 i=2310 ns=1;i=1233 TransitionNumber i=68 i=78 ns=1;i=1271 0 AnalyserChannelOperatingExecuteStateType i=2307 AnalyserChannel_OperatingModeSubStateMachineType AnalyserChannel OperatingMode SubStateMachine ns=1;i=4711 ns=1;i=1286 ns=1;i=1288 ns=1;i=1290 ns=1;i=1292 ns=1;i=1294 ns=1;i=1510 ns=1;i=1512 ns=1;i=1514 ns=1;i=1516 ns=1;i=1518 ns=1;i=1520 ns=1;i=1522 ns=1;i=1524 ns=1;i=1526 ns=1;i=1528 ns=1;i=1530 ns=1;i=1532 ns=1;i=1534 ns=1;i=1536 ns=1;i=1538 ns=1;i=1540 ns=1;i=1542 ns=1;i=1544 ns=1;i=1546 ns=1;i=1548 ns=1;i=1550 ns=1;i=1552 ns=1;i=1554 ns=1;i=1556 ns=1;i=1558 ns=1;i=1560 ns=1;i=1562 ns=1;i=1564 ns=1;i=1566 ns=1;i=1568 ns=1;i=1570 ns=1;i=1572 ns=1;i=1574 ns=1;i=1576 ns=1;i=1578 ns=1;i=1580 ns=1;i=1582 ns=1;i=1584 ns=1;i=1586 ns=1;i=1588 ns=1;i=1590 ns=1;i=1592 ns=1;i=1594 ns=1;i=1596 ns=1;i=1598 ns=1;i=1600 ns=1;i=1602 ns=1;i=1604 ns=1;i=1606 ns=1;i=1608 ns=1;i=1610 ns=1;i=1612 ns=1;i=1614 ns=1;i=1616 ns=1;i=1618 ns=1;i=1620 ns=1;i=1622 ns=1;i=1624 ns=1;i=1626 ns=1;i=1628 ns=1;i=1630 ns=1;i=1632 ns=1;i=1634 ns=1;i=1636 ns=1;i=1638 ns=1;i=1640 i=2771 OperatingExecuteSubStateMachine ns=1;i=4712 ns=1;i=1294 ns=1;i=1651 i=78 ns=1;i=1275 CurrentState ns=1;i=4713 i=2760 i=78 ns=1;i=4711 Id i=68 i=78 ns=1;i=4712 Stopped This is the initial state after AnalyserDeviceStateMachine state Powerup ns=1;i=1287 ns=1;i=1534 ns=1;i=1552 ns=1;i=1582 ns=1;i=1588 ns=1;i=1614 i=2309 ns=1;i=1275 StateNumber i=68 i=78 ns=1;i=1286 0 Resetting This state is the result of a Reset or SetConfiguration Method call from the Stopped state. ns=1;i=1289 ns=1;i=1534 ns=1;i=1536 ns=1;i=1536 ns=1;i=1538 ns=1;i=1590 ns=1;i=1616 i=2307 ns=1;i=1275 StateNumber i=68 i=78 ns=1;i=1288 0 Idle The Resetting state is completed, all parameters have been committed and ready to start acquisition ns=1;i=1291 ns=1;i=1538 ns=1;i=1540 ns=1;i=1592 ns=1;i=1618 i=2307 ns=1;i=1275 StateNumber i=68 i=78 ns=1;i=1290 0 Starting The analyser has received the Start or SingleAcquisitionStart Method call and it is preparing to enter in Execute state. ns=1;i=1293 ns=1;i=1540 ns=1;i=1542 ns=1;i=1542 ns=1;i=1544 ns=1;i=1594 ns=1;i=1620 i=2307 ns=1;i=1275 StateNumber i=68 i=78 ns=1;i=1292 0 Execute All repetitive acquisition cycles are done in this state: ns=1;i=1509 ns=1;i=4711 ns=1;i=1544 ns=1;i=1546 ns=1;i=1554 ns=1;i=1566 ns=1;i=1568 ns=1;i=1580 ns=1;i=1596 ns=1;i=1622 ns=1;i=3775 ns=1;i=1275 StateNumber i=68 i=78 ns=1;i=1294 0 Completing This state is an automatic or commanded exit from the Execute state. ns=1;i=1511 ns=1;i=1546 ns=1;i=1548 ns=1;i=1548 ns=1;i=1550 ns=1;i=1598 ns=1;i=1624 i=2307 ns=1;i=1275 StateNumber i=68 i=78 ns=1;i=1510 0 Complete At this point, the Completing state is done and it transitions automatically to Stopped state to wait. ns=1;i=1513 ns=1;i=1550 ns=1;i=1552 ns=1;i=1600 ns=1;i=1626 i=2307 ns=1;i=1275 StateNumber i=68 i=78 ns=1;i=1512 0 Suspending This state is a result of a change in monitored conditions due to process conditions or factors. ns=1;i=1515 ns=1;i=1568 ns=1;i=1570 ns=1;i=1570 ns=1;i=1572 ns=1;i=1578 ns=1;i=1602 ns=1;i=1628 i=2307 ns=1;i=1275 StateNumber i=68 i=78 ns=1;i=1514 0 Suspended The analyser or channel may be running but no results are being generated while the analyser or channel is waiting for external process conditions to return to normal. ns=1;i=1517 ns=1;i=1572 ns=1;i=1574 ns=1;i=1604 ns=1;i=1630 i=2307 ns=1;i=1275 StateNumber i=68 i=78 ns=1;i=1516 0 Unsuspending This state is a result of a device request from Suspended state to transition back to the Execute state by calling the Unsuspend Method. ns=1;i=1519 ns=1;i=1574 ns=1;i=1576 ns=1;i=1576 ns=1;i=1578 ns=1;i=1580 ns=1;i=1606 ns=1;i=1632 i=2307 ns=1;i=1275 StateNumber i=68 i=78 ns=1;i=1518 0 Holding Brings the analyser or channel to a controlled stop or to a state which represents Held for the particular unit control mode ns=1;i=1521 ns=1;i=1554 ns=1;i=1556 ns=1;i=1556 ns=1;i=1558 ns=1;i=1564 ns=1;i=1608 ns=1;i=1634 i=2307 ns=1;i=1275 StateNumber i=68 i=78 ns=1;i=1520 0 Held The Held state holds the analyser or channel's operation. At this state, no acquisition cycle is performed. ns=1;i=1523 ns=1;i=1558 ns=1;i=1560 ns=1;i=1610 ns=1;i=1636 i=2307 ns=1;i=1275 StateNumber i=68 i=78 ns=1;i=1522 0 Unholding The Unholding state is a response to an operator command to resume the Execute state. ns=1;i=1525 ns=1;i=1560 ns=1;i=1562 ns=1;i=1562 ns=1;i=1564 ns=1;i=1566 ns=1;i=1612 ns=1;i=1638 i=2307 ns=1;i=1275 StateNumber i=68 i=78 ns=1;i=1524 0 Stopping Initiated by a Stop Method call, this state: ns=1;i=1527 ns=1;i=1582 ns=1;i=1590 ns=1;i=1592 ns=1;i=1594 ns=1;i=1596 ns=1;i=1598 ns=1;i=1600 ns=1;i=1602 ns=1;i=1604 ns=1;i=1606 ns=1;i=1608 ns=1;i=1610 ns=1;i=1612 ns=1;i=1640 i=2307 ns=1;i=1275 StateNumber i=68 i=78 ns=1;i=1526 0 Aborting The Aborting state can be entered at any time in response to the Abort command or on the occurrence of a machine fault. ns=1;i=1529 ns=1;i=1584 ns=1;i=1614 ns=1;i=1616 ns=1;i=1618 ns=1;i=1620 ns=1;i=1622 ns=1;i=1624 ns=1;i=1626 ns=1;i=1628 ns=1;i=1630 ns=1;i=1632 ns=1;i=1634 ns=1;i=1636 ns=1;i=1638 ns=1;i=1640 i=2307 ns=1;i=1275 StateNumber i=68 i=78 ns=1;i=1528 0 Aborted This state maintains machine status information relevant to the Abort condition. ns=1;i=1531 ns=1;i=1584 ns=1;i=1586 i=2307 ns=1;i=1275 StateNumber i=68 i=78 ns=1;i=1530 0 Clearing Clears faults that may have occurred when Aborting and are present in the Aborted state before proceeding to a Stopped state ns=1;i=1533 ns=1;i=1586 ns=1;i=1588 i=2307 ns=1;i=1275 StateNumber i=68 i=78 ns=1;i=1532 0 StoppedToResettingTransition ns=1;i=1535 ns=1;i=1286 ns=1;i=1288 ns=1;i=2926 ns=1;i=2907 i=2310 ns=1;i=1275 TransitionNumber i=68 i=78 ns=1;i=1534 0 ResettingTransition ns=1;i=1537 ns=1;i=1288 ns=1;i=1288 i=2310 ns=1;i=1275 TransitionNumber i=68 i=78 ns=1;i=1536 0 ResettingToIdleTransition ns=1;i=1539 ns=1;i=1288 ns=1;i=1290 i=2310 ns=1;i=1275 TransitionNumber i=68 i=78 ns=1;i=1538 0 IdleToStartingTransition ns=1;i=1541 ns=1;i=1290 ns=1;i=1292 ns=1;i=2927 ns=1;i=2922 i=2310 ns=1;i=1275 TransitionNumber i=68 i=78 ns=1;i=1540 0 StartingTransition ns=1;i=1543 ns=1;i=1292 ns=1;i=1292 i=2310 ns=1;i=1275 TransitionNumber i=68 i=78 ns=1;i=1542 0 StartingToExecuteTransition ns=1;i=1545 ns=1;i=1292 ns=1;i=1294 i=2310 ns=1;i=1275 TransitionNumber i=68 i=78 ns=1;i=1544 0 ExecuteToCompletingTransition ns=1;i=1547 ns=1;i=1294 ns=1;i=1510 i=2310 ns=1;i=1275 TransitionNumber i=68 i=78 ns=1;i=1546 0 CompletingTransition ns=1;i=1549 ns=1;i=1510 ns=1;i=1510 i=2310 ns=1;i=1275 TransitionNumber i=68 i=78 ns=1;i=1548 0 CompletingToCompleteTransition ns=1;i=1551 ns=1;i=1510 ns=1;i=1512 i=2310 ns=1;i=1275 TransitionNumber i=68 i=78 ns=1;i=1550 0 CompleteToStoppedTransition ns=1;i=1553 ns=1;i=1512 ns=1;i=1286 i=2310 ns=1;i=1275 TransitionNumber i=68 i=78 ns=1;i=1552 0 ExecuteToHoldingTransition ns=1;i=1555 ns=1;i=1294 ns=1;i=1520 ns=1;i=2929 i=2310 ns=1;i=1275 TransitionNumber i=68 i=78 ns=1;i=1554 0 HoldingTransition ns=1;i=1557 ns=1;i=1520 ns=1;i=1520 i=2310 ns=1;i=1275 TransitionNumber i=68 i=78 ns=1;i=1556 0 HoldingToHeldTransition ns=1;i=1559 ns=1;i=1520 ns=1;i=1522 i=2310 ns=1;i=1275 TransitionNumber i=68 i=78 ns=1;i=1558 0 HeldToUnholdingTransition ns=1;i=1561 ns=1;i=1522 ns=1;i=1524 ns=1;i=2930 i=2310 ns=1;i=1275 TransitionNumber i=68 i=78 ns=1;i=1560 0 UnholdingTransition ns=1;i=1563 ns=1;i=1524 ns=1;i=1524 i=2310 ns=1;i=1275 TransitionNumber i=68 i=78 ns=1;i=1562 0 UnholdingToHoldingTransition ns=1;i=1565 ns=1;i=1524 ns=1;i=1520 ns=1;i=2929 i=2310 ns=1;i=1275 TransitionNumber i=68 i=78 ns=1;i=1564 0 UnholdingToExecuteTransition ns=1;i=1567 ns=1;i=1524 ns=1;i=1294 i=2310 ns=1;i=1275 TransitionNumber i=68 i=78 ns=1;i=1566 0 ExecuteToSuspendingTransition ns=1;i=1569 ns=1;i=1294 ns=1;i=1514 ns=1;i=2931 i=2310 ns=1;i=1275 TransitionNumber i=68 i=78 ns=1;i=1568 0 SuspendingTransition ns=1;i=1571 ns=1;i=1514 ns=1;i=1514 i=2310 ns=1;i=1275 TransitionNumber i=68 i=78 ns=1;i=1570 0 SuspendingToSuspendedTransition ns=1;i=1573 ns=1;i=1514 ns=1;i=1516 i=2310 ns=1;i=1275 TransitionNumber i=68 i=78 ns=1;i=1572 0 SuspendedToUnsuspendingTransition ns=1;i=1575 ns=1;i=1516 ns=1;i=1518 ns=1;i=2932 i=2310 ns=1;i=1275 TransitionNumber i=68 i=78 ns=1;i=1574 0 UnsuspendingTransition ns=1;i=1577 ns=1;i=1518 ns=1;i=1518 i=2310 ns=1;i=1275 TransitionNumber i=68 i=78 ns=1;i=1576 0 UnsuspendingToSuspendingTransition ns=1;i=1579 ns=1;i=1518 ns=1;i=1514 ns=1;i=2931 i=2310 ns=1;i=1275 TransitionNumber i=68 i=78 ns=1;i=1578 0 UnsuspendingToExecuteTransition ns=1;i=1581 ns=1;i=1518 ns=1;i=1294 i=2310 ns=1;i=1275 TransitionNumber i=68 i=78 ns=1;i=1580 0 StoppingToStoppedTransition ns=1;i=1583 ns=1;i=1526 ns=1;i=1286 i=2310 ns=1;i=1275 TransitionNumber i=68 i=78 ns=1;i=1582 0 AbortingToAbortedTransition ns=1;i=1585 ns=1;i=1528 ns=1;i=1530 i=2310 ns=1;i=1275 TransitionNumber i=68 i=78 ns=1;i=1584 0 AbortedToClearingTransition ns=1;i=1587 ns=1;i=1530 ns=1;i=1532 ns=1;i=2934 i=2310 ns=1;i=1275 TransitionNumber i=68 i=78 ns=1;i=1586 0 ClearingToStoppedTransition ns=1;i=1589 ns=1;i=1532 ns=1;i=1286 i=2310 ns=1;i=1275 TransitionNumber i=68 i=78 ns=1;i=1588 0 ResettingToStoppingTransition ns=1;i=1591 ns=1;i=1288 ns=1;i=1526 ns=1;i=2928 i=2310 ns=1;i=1275 TransitionNumber i=68 i=78 ns=1;i=1590 0 IdleToStoppingTransition ns=1;i=1593 ns=1;i=1290 ns=1;i=1526 ns=1;i=2928 i=2310 ns=1;i=1275 TransitionNumber i=68 i=78 ns=1;i=1592 0 StartingToStoppingTransition ns=1;i=1595 ns=1;i=1292 ns=1;i=1526 ns=1;i=2928 i=2310 ns=1;i=1275 TransitionNumber i=68 i=78 ns=1;i=1594 0 ExecuteToStoppingTransition ns=1;i=1597 ns=1;i=1294 ns=1;i=1526 ns=1;i=2928 i=2310 ns=1;i=1275 TransitionNumber i=68 i=78 ns=1;i=1596 0 CompletingToStoppingTransition ns=1;i=1599 ns=1;i=1510 ns=1;i=1526 ns=1;i=2928 i=2310 ns=1;i=1275 TransitionNumber i=68 i=78 ns=1;i=1598 0 CompleteToStoppingTransition ns=1;i=1601 ns=1;i=1512 ns=1;i=1526 ns=1;i=2928 i=2310 ns=1;i=1275 TransitionNumber i=68 i=78 ns=1;i=1600 0 SuspendingToStoppingTransition ns=1;i=1603 ns=1;i=1514 ns=1;i=1526 ns=1;i=2928 i=2310 ns=1;i=1275 TransitionNumber i=68 i=78 ns=1;i=1602 0 SuspendedToStoppingTransition ns=1;i=1605 ns=1;i=1516 ns=1;i=1526 ns=1;i=2928 i=2310 ns=1;i=1275 TransitionNumber i=68 i=78 ns=1;i=1604 0 UnsuspendingToStoppingTransition ns=1;i=1607 ns=1;i=1518 ns=1;i=1526 ns=1;i=2928 i=2310 ns=1;i=1275 TransitionNumber i=68 i=78 ns=1;i=1606 0 HoldingToStoppingTransition ns=1;i=1609 ns=1;i=1520 ns=1;i=1526 ns=1;i=2928 i=2310 ns=1;i=1275 TransitionNumber i=68 i=78 ns=1;i=1608 0 HeldToStoppingTransition ns=1;i=1611 ns=1;i=1522 ns=1;i=1526 ns=1;i=2928 i=2310 ns=1;i=1275 TransitionNumber i=68 i=78 ns=1;i=1610 0 UnholdingToStoppingTransition ns=1;i=1613 ns=1;i=1524 ns=1;i=1526 ns=1;i=2928 i=2310 ns=1;i=1275 TransitionNumber i=68 i=78 ns=1;i=1612 0 StoppedToAbortingTransition ns=1;i=1615 ns=1;i=1286 ns=1;i=1528 ns=1;i=2933 i=2310 ns=1;i=1275 TransitionNumber i=68 i=78 ns=1;i=1614 0 ResettingToAbortingTransition ns=1;i=1617 ns=1;i=1288 ns=1;i=1528 ns=1;i=2933 i=2310 ns=1;i=1275 TransitionNumber i=68 i=78 ns=1;i=1616 0 IdleToAbortingTransition ns=1;i=1619 ns=1;i=1290 ns=1;i=1528 ns=1;i=2933 i=2310 ns=1;i=1275 TransitionNumber i=68 i=78 ns=1;i=1618 0 StartingToAbortingTransition ns=1;i=1621 ns=1;i=1292 ns=1;i=1528 ns=1;i=2933 i=2310 ns=1;i=1275 TransitionNumber i=68 i=78 ns=1;i=1620 0 ExecuteToAbortingTransition ns=1;i=1623 ns=1;i=1294 ns=1;i=1528 ns=1;i=2933 i=2310 ns=1;i=1275 TransitionNumber i=68 i=78 ns=1;i=1622 0 CompletingToAbortingTransition ns=1;i=1625 ns=1;i=1510 ns=1;i=1528 ns=1;i=2933 i=2310 ns=1;i=1275 TransitionNumber i=68 i=78 ns=1;i=1624 0 CompleteToAbortingTransition ns=1;i=1627 ns=1;i=1512 ns=1;i=1528 ns=1;i=2933 i=2310 ns=1;i=1275 TransitionNumber i=68 i=78 ns=1;i=1626 0 SuspendingToAbortingTransition ns=1;i=1629 ns=1;i=1514 ns=1;i=1528 ns=1;i=2933 i=2310 ns=1;i=1275 TransitionNumber i=68 i=78 ns=1;i=1628 0 SuspendedToAbortingTransition ns=1;i=1631 ns=1;i=1516 ns=1;i=1528 ns=1;i=2933 i=2310 ns=1;i=1275 TransitionNumber i=68 i=78 ns=1;i=1630 0 UnsuspendingToAbortingTransition ns=1;i=1633 ns=1;i=1518 ns=1;i=1528 ns=1;i=2933 i=2310 ns=1;i=1275 TransitionNumber i=68 i=78 ns=1;i=1632 0 HoldingToAbortingTransition ns=1;i=1635 ns=1;i=1520 ns=1;i=1528 ns=1;i=2933 i=2310 ns=1;i=1275 TransitionNumber i=68 i=78 ns=1;i=1634 0 HeldToAbortingTransition ns=1;i=1637 ns=1;i=1522 ns=1;i=1528 ns=1;i=2933 i=2310 ns=1;i=1275 TransitionNumber i=68 i=78 ns=1;i=1636 0 UnholdingToAbortingTransition ns=1;i=1639 ns=1;i=1524 ns=1;i=1528 ns=1;i=2933 i=2310 ns=1;i=1275 TransitionNumber i=68 i=78 ns=1;i=1638 0 StoppingToAbortingTransition ns=1;i=1641 ns=1;i=1526 ns=1;i=1528 ns=1;i=2933 i=2310 ns=1;i=1275 TransitionNumber i=68 i=78 ns=1;i=1640 0 AnalyserChannel_OperatingModeExecuteSubStateMachineType ns=1;i=4031 ns=1;i=1664 ns=1;i=1666 ns=1;i=1668 ns=1;i=1670 ns=1;i=1672 ns=1;i=1674 ns=1;i=1676 ns=1;i=1678 ns=1;i=1680 ns=1;i=1682 ns=1;i=1684 ns=1;i=1686 ns=1;i=1688 ns=1;i=1690 ns=1;i=1692 ns=1;i=1694 ns=1;i=1696 ns=1;i=1698 ns=1;i=1700 ns=1;i=4033 ns=1;i=1706 ns=1;i=1708 ns=1;i=1710 ns=1;i=1712 ns=1;i=1714 ns=1;i=1716 ns=1;i=1718 ns=1;i=4035 ns=1;i=1722 ns=1;i=1724 ns=1;i=1726 ns=1;i=1728 ns=1;i=1730 ns=1;i=1732 ns=1;i=1734 ns=1;i=4037 ns=1;i=1738 ns=1;i=1740 ns=1;i=1742 ns=1;i=1744 ns=1;i=1746 ns=1;i=1748 ns=1;i=1750 ns=1;i=4039 ns=1;i=1754 ns=1;i=1756 ns=1;i=1758 ns=1;i=4041 ns=1;i=1762 ns=1;i=1764 ns=1;i=1766 ns=1;i=1768 ns=1;i=1770 ns=1;i=1772 ns=1;i=1774 ns=1;i=1776 ns=1;i=4043 i=2771 SelectExecutionCycle This pseudo-state is used to decide which execution path shall be taken. ns=1;i=4032 ns=1;i=4033 ns=1;i=4035 ns=1;i=4037 ns=1;i=4039 ns=1;i=4041 ns=1;i=4043 i=2309 ns=1;i=1651 StateNumber i=68 i=78 ns=1;i=4031 0 WaitForCalibrationTrigger Wait until the analyser channel is ready to perform the Calibration acquisition cycle ns=1;i=1665 ns=1;i=4033 ns=1;i=1706 i=2307 ns=1;i=1651 StateNumber i=68 i=78 ns=1;i=1664 0 ExtractCalibrationSample Collect / setup the sampling system to perform the acquisition cycle of a Calibration cycle ns=1;i=1667 ns=1;i=1706 ns=1;i=1708 ns=1;i=1708 ns=1;i=1710 i=2307 ns=1;i=1651 StateNumber i=68 i=78 ns=1;i=1666 0 PrepareCalibrationSample Prepare the Calibration sample for the AnalyseCalibrationSample state ns=1;i=1669 ns=1;i=1710 ns=1;i=1712 ns=1;i=1712 ns=1;i=1714 i=2307 ns=1;i=1651 StateNumber i=68 i=78 ns=1;i=1668 0 AnalyseCalibrationSample Perform the analysis of the Calibration Sample ns=1;i=1671 ns=1;i=1714 ns=1;i=1716 ns=1;i=1716 ns=1;i=1718 i=2307 ns=1;i=1651 StateNumber i=68 i=78 ns=1;i=1670 0 WaitForValidationTrigger Wait until the analyser channel is ready to perform the Validation acquisition cycle ns=1;i=1673 ns=1;i=4035 ns=1;i=1722 i=2307 ns=1;i=1651 StateNumber i=68 i=78 ns=1;i=1672 0 ExtractValidationSample Collect / setup the sampling system to perform the acquisition cycle of a Validation cycle ns=1;i=1675 ns=1;i=1722 ns=1;i=1724 ns=1;i=1724 ns=1;i=1726 i=2307 ns=1;i=1651 StateNumber i=68 i=78 ns=1;i=1674 0 PrepareValidationSample Prepare the Validation sample for the AnalyseValidationSample state ns=1;i=1677 ns=1;i=1726 ns=1;i=1728 ns=1;i=1728 ns=1;i=1730 i=2307 ns=1;i=1651 StateNumber i=68 i=78 ns=1;i=1676 0 AnalyseValidationSample Perform the analysis of the Validation Sample ns=1;i=1679 ns=1;i=1730 ns=1;i=1732 ns=1;i=1732 ns=1;i=1734 i=2307 ns=1;i=1651 StateNumber i=68 i=78 ns=1;i=1678 0 WaitForSampleTrigger Wait until the analyser channel is ready to perform the Sample acquisition cycle ns=1;i=1681 ns=1;i=4037 ns=1;i=1738 i=2307 ns=1;i=1651 StateNumber i=68 i=78 ns=1;i=1680 0 ExtractSample Collect the Sample from the process ns=1;i=1683 ns=1;i=1738 ns=1;i=1740 ns=1;i=1740 ns=1;i=1742 i=2307 ns=1;i=1651 StateNumber i=68 i=78 ns=1;i=1682 0 PrepareSample Prepare the Sample for the AnalyseSample state ns=1;i=1685 ns=1;i=1742 ns=1;i=1744 ns=1;i=1744 ns=1;i=1746 i=2307 ns=1;i=1651 StateNumber i=68 i=78 ns=1;i=1684 0 AnalyseSample Perform the analysis of the Sample ns=1;i=1687 ns=1;i=1746 ns=1;i=1748 ns=1;i=1748 ns=1;i=1750 i=2307 ns=1;i=1651 StateNumber i=68 i=78 ns=1;i=1686 0 WaitForDiagnosticTrigger Wait until the analyser channel is ready to perform the diagnostic cycle, ns=1;i=1689 ns=1;i=4039 ns=1;i=1754 i=2307 ns=1;i=1651 StateNumber i=68 i=78 ns=1;i=1688 0 Diagnostic Perform the diagnostic cycle. ns=1;i=1691 ns=1;i=1754 ns=1;i=1756 ns=1;i=1756 ns=1;i=1758 i=2307 ns=1;i=1651 StateNumber i=68 i=78 ns=1;i=1690 0 WaitForCleaningTrigger Wait until the analyser channel is ready to perform the cleaning cycle, ns=1;i=1693 ns=1;i=4041 ns=1;i=1762 i=2307 ns=1;i=1651 StateNumber i=68 i=78 ns=1;i=1692 0 Cleaning Perform the cleaning cycle. ns=1;i=1695 ns=1;i=1762 ns=1;i=1764 ns=1;i=1764 ns=1;i=1766 i=2307 ns=1;i=1651 StateNumber i=68 i=78 ns=1;i=1694 0 PublishResults Publish the results of the previous acquisition cycle ns=1;i=1697 ns=1;i=1718 ns=1;i=1734 ns=1;i=1750 ns=1;i=1758 ns=1;i=1766 ns=1;i=1768 ns=1;i=1770 i=2307 ns=1;i=1651 StateNumber i=68 i=78 ns=1;i=1696 0 EjectGrabSample The Sample that was just analysed is ejected from the system to allow the operator or another system to grab it ns=1;i=1699 ns=1;i=1770 ns=1;i=1772 ns=1;i=1772 ns=1;i=1774 i=2307 ns=1;i=1651 StateNumber i=68 i=78 ns=1;i=1698 0 CleanupSamplingSystem Cleanup the sampling sub-system to be ready for the next acquisition ns=1;i=1701 ns=1;i=1768 ns=1;i=1774 ns=1;i=1776 ns=1;i=1776 ns=1;i=4043 i=2307 ns=1;i=1651 StateNumber i=68 i=78 ns=1;i=1700 0 SelectExecutionCycleToWaitForCalibrationTriggerTransition ns=1;i=4034 ns=1;i=4031 ns=1;i=1664 i=2310 ns=1;i=1651 TransitionNumber i=68 i=78 ns=1;i=4033 0 WaitForCalibrationTriggerToExtractCalibrationSampleTransition ns=1;i=1707 ns=1;i=1664 ns=1;i=1666 i=2310 ns=1;i=1651 TransitionNumber i=68 i=78 ns=1;i=1706 0 ExtractCalibrationSampleTransition ns=1;i=1709 ns=1;i=1666 ns=1;i=1666 i=2310 ns=1;i=1651 TransitionNumber i=68 i=78 ns=1;i=1708 0 ExtractCalibrationSampleToPrepareCalibrationSampleTransition ns=1;i=1711 ns=1;i=1666 ns=1;i=1668 i=2310 ns=1;i=1651 TransitionNumber i=68 i=78 ns=1;i=1710 0 PrepareCalibrationSampleTransition ns=1;i=1713 ns=1;i=1668 ns=1;i=1668 i=2310 ns=1;i=1651 TransitionNumber i=68 i=78 ns=1;i=1712 0 PrepareCalibrationSampleToAnalyseCalibrationSampleTransition ns=1;i=1715 ns=1;i=1668 ns=1;i=1670 i=2310 ns=1;i=1651 TransitionNumber i=68 i=78 ns=1;i=1714 0 AnalyseCalibrationSampleTransition ns=1;i=1717 ns=1;i=1670 ns=1;i=1670 i=2310 ns=1;i=1651 TransitionNumber i=68 i=78 ns=1;i=1716 0 AnalyseCalibrationSampleToPublishResultsTransition ns=1;i=1719 ns=1;i=1670 ns=1;i=1696 i=2310 ns=1;i=1651 TransitionNumber i=68 i=78 ns=1;i=1718 0 SelectExecutionCycleToWaitForValidationTriggerTransition ns=1;i=4036 ns=1;i=4031 ns=1;i=1672 i=2310 ns=1;i=1651 TransitionNumber i=68 i=78 ns=1;i=4035 0 WaitForValidationTriggerToExtractValidationSampleTransition ns=1;i=1723 ns=1;i=1672 ns=1;i=1674 i=2310 ns=1;i=1651 TransitionNumber i=68 i=78 ns=1;i=1722 0 ExtractValidationSampleTransition ns=1;i=1725 ns=1;i=1674 ns=1;i=1674 i=2310 ns=1;i=1651 TransitionNumber i=68 i=78 ns=1;i=1724 0 ExtractValidationSampleToPrepareValidationSampleTransition ns=1;i=1727 ns=1;i=1674 ns=1;i=1676 i=2310 ns=1;i=1651 TransitionNumber i=68 i=78 ns=1;i=1726 0 PrepareValidationSampleTransition ns=1;i=1729 ns=1;i=1676 ns=1;i=1676 i=2310 ns=1;i=1651 TransitionNumber i=68 i=78 ns=1;i=1728 0 PrepareValidationSampleToAnalyseValidationSampleTransition ns=1;i=1731 ns=1;i=1676 ns=1;i=1678 i=2310 ns=1;i=1651 TransitionNumber i=68 i=78 ns=1;i=1730 0 AnalyseValidationSampleTransition ns=1;i=1733 ns=1;i=1678 ns=1;i=1678 i=2310 ns=1;i=1651 TransitionNumber i=68 i=78 ns=1;i=1732 0 AnalyseValidationSampleToPublishResultsTransition ns=1;i=1735 ns=1;i=1678 ns=1;i=1696 i=2310 ns=1;i=1651 TransitionNumber i=68 i=78 ns=1;i=1734 0 SelectExecutionCycleToWaitForSampleTriggerTransition ns=1;i=4038 ns=1;i=4031 ns=1;i=1680 i=2310 ns=1;i=1651 TransitionNumber i=68 i=78 ns=1;i=4037 0 WaitForSampleTriggerToExtractSampleTransition ns=1;i=1739 ns=1;i=1680 ns=1;i=1682 i=2310 ns=1;i=1651 TransitionNumber i=68 i=78 ns=1;i=1738 0 ExtractSampleTransition ns=1;i=1741 ns=1;i=1682 ns=1;i=1682 i=2310 ns=1;i=1651 TransitionNumber i=68 i=78 ns=1;i=1740 0 ExtractSampleToPrepareSampleTransition ns=1;i=1743 ns=1;i=1682 ns=1;i=1684 i=2310 ns=1;i=1651 TransitionNumber i=68 i=78 ns=1;i=1742 0 PrepareSampleTransition ns=1;i=1745 ns=1;i=1684 ns=1;i=1684 i=2310 ns=1;i=1651 TransitionNumber i=68 i=78 ns=1;i=1744 0 PrepareSampleToAnalyseSampleTransition ns=1;i=1747 ns=1;i=1684 ns=1;i=1686 i=2310 ns=1;i=1651 TransitionNumber i=68 i=78 ns=1;i=1746 0 AnalyseSampleTransition ns=1;i=1749 ns=1;i=1686 ns=1;i=1686 i=2310 ns=1;i=1651 TransitionNumber i=68 i=78 ns=1;i=1748 0 AnalyseSampleToPublishResultsTransition ns=1;i=1751 ns=1;i=1686 ns=1;i=1696 i=2310 ns=1;i=1651 TransitionNumber i=68 i=78 ns=1;i=1750 0 SelectExecutionCycleToWaitForDiagnosticTriggerTransition ns=1;i=4040 ns=1;i=4031 ns=1;i=1688 i=2310 ns=1;i=1651 TransitionNumber i=68 i=78 ns=1;i=4039 0 WaitForDiagnosticTriggerToDiagnosticTransition ns=1;i=1755 ns=1;i=1688 ns=1;i=1690 i=2310 ns=1;i=1651 TransitionNumber i=68 i=78 ns=1;i=1754 0 DiagnosticTransition ns=1;i=1757 ns=1;i=1690 ns=1;i=1690 i=2310 ns=1;i=1651 TransitionNumber i=68 i=78 ns=1;i=1756 0 DiagnosticToPublishResultsTransition ns=1;i=1759 ns=1;i=1690 ns=1;i=1696 i=2310 ns=1;i=1651 TransitionNumber i=68 i=78 ns=1;i=1758 0 SelectExecutionCycleToWaitForCleaningTriggerTransition ns=1;i=4042 ns=1;i=4031 ns=1;i=1692 i=2310 ns=1;i=1651 TransitionNumber i=68 i=78 ns=1;i=4041 0 WaitForCleaningTriggerToCleaningTransition ns=1;i=1763 ns=1;i=1692 ns=1;i=1694 i=2310 ns=1;i=1651 TransitionNumber i=68 i=78 ns=1;i=1762 0 CleaningTransition ns=1;i=1765 ns=1;i=1694 ns=1;i=1694 i=2310 ns=1;i=1651 TransitionNumber i=68 i=78 ns=1;i=1764 0 CleaningToPublishResultsTransition ns=1;i=1767 ns=1;i=1694 ns=1;i=1696 i=2310 ns=1;i=1651 TransitionNumber i=68 i=78 ns=1;i=1766 0 PublishResultsToCleanupSamplingSystemTransition ns=1;i=1769 ns=1;i=1696 ns=1;i=1700 i=2310 ns=1;i=1651 TransitionNumber i=68 i=78 ns=1;i=1768 0 PublishResultsToEjectGrabSampleTransition ns=1;i=1771 ns=1;i=1696 ns=1;i=1698 i=2310 ns=1;i=1651 TransitionNumber i=68 i=78 ns=1;i=1770 0 EjectGrabSampleTransition ns=1;i=1773 ns=1;i=1698 ns=1;i=1698 i=2310 ns=1;i=1651 TransitionNumber i=68 i=78 ns=1;i=1772 0 EjectGrabSampleToCleanupSamplingSystemTransition ns=1;i=1775 ns=1;i=1698 ns=1;i=1700 i=2310 ns=1;i=1651 TransitionNumber i=68 i=78 ns=1;i=1774 0 CleanupSamplingSystemTransition ns=1;i=1777 ns=1;i=1700 ns=1;i=1700 i=2310 ns=1;i=1651 TransitionNumber i=68 i=78 ns=1;i=1776 0 CleanupSamplingSystemToSelectExecutionCycleTransition ns=1;i=4044 ns=1;i=1700 ns=1;i=4031 i=2310 ns=1;i=1651 TransitionNumber i=68 i=78 ns=1;i=4043 0 StreamType ns=1;i=1867 ns=1;i=4726 ns=1;i=1954 ns=1;i=1955 ns=1;i=1956 ns=1;i=1957 ns=1;i=1958 ns=1;i=1959 ns=1;i=1960 ns=2;i=12253 ParameterSet Flat list of Parameters ns=1;i=1872 ns=1;i=1875 ns=1;i=1878 ns=1;i=1881 ns=1;i=1884 ns=1;i=1887 ns=1;i=1890 ns=1;i=1896 ns=1;i=4046 ns=1;i=4047 ns=1;i=1900 ns=1;i=1903 ns=1;i=1909 ns=1;i=1912 ns=1;i=1915 ns=1;i=4743 ns=1;i=1918 ns=1;i=1921 ns=1;i=1924 ns=1;i=1927 ns=1;i=1930 ns=1;i=1933 ns=1;i=1936 ns=1;i=1939 ns=1;i=1942 ns=1;i=1945 ns=1;i=1948 ns=1;i=1951 i=58 i=80 ns=1;i=1866 IsEnabled True if this stream maybe used to perform acquisition ns=1;i=1954 i=2365 i=78 ns=1;i=1867 IsForced True if this stream is forced, which means that is the only Stream on this AnalyserChannel that can be used to perform acquisition ns=1;i=1954 i=2365 i=80 ns=1;i=1867 DiagnosticStatus Stream health status ns=1;i=1955 i=2365 i=78 ns=1;i=1867 LastCalibrationTime Time at which the last calibration was run ns=1;i=1955 i=2365 i=80 ns=1;i=1867 LastValidationTime Time at which the last validation was run ns=1;i=1955 i=2365 i=80 ns=1;i=1867 LastSampleTime Time at which the last sample was acquired ns=1;i=1955 i=2365 i=78 ns=1;i=1867 TimeBetweenSamples Number of milliseconds between two consecutive starts of acquisition ns=1;i=1893 ns=1;i=1956 i=2368 i=80 ns=1;i=1867 EURange i=68 i=78 ns=1;i=1890 IsActive True if this stream is actually running, acquiring data ns=1;i=1957 i=2365 i=78 ns=1;i=1867 ExecutionCycle Indicates which Execution cycle is in progress ns=1;i=1957 i=2365 i=78 ns=1;i=1867 ExecutionCycleSubcode Indicates which Execution cycle subcode is in progress ns=1;i=4050 ns=1;i=1957 i=2376 i=78 ns=1;i=1867 EnumStrings i=68 i=78 ns=1;i=4047 Progress Indicates the progress of an acquisition in terms of percentage of completion. Its value shall be between 0 and 100. ns=1;i=1957 i=2365 i=78 ns=1;i=1867 AcquisitionCounter Simple counter incremented after each Sampling acquisition performed on this Stream ns=1;i=1906 ns=1;i=1958 i=2368 i=78 ns=1;i=1867 EURange i=68 i=78 ns=1;i=1903 AcquisitionResultStatus Quality of the acquisition ns=1;i=1958 i=2365 i=78 ns=1;i=1867 RawData Raw data produced as a result of data acquisition on the Stream ns=1;i=1958 i=2365 i=80 ns=1;i=1867 ScaledData Scaled data produced as a result of data acquisition on the Stream and application of the analyser model ns=1;i=1958 i=2365 i=78 ns=1;i=1867 Offset Difference in milliseconds between the start of sample extraction and the start of the analysis. ns=1;i=1958 i=2365 i=80 ns=1;i=1867 AcquisitionEndTime The end time of the AnalyseSample or AnalyseCalibrationSample or AnalyseValidationSample state of the AnalyserChannel_OperatingModeExecuteSubStateMachine state machine ns=1;i=1958 i=2365 i=78 ns=1;i=1867 CampaignId Defines the current campaign ns=1;i=1960 i=2365 i=80 ns=1;i=1867 BatchId Defines the current batch ns=1;i=1960 i=2365 i=80 ns=1;i=1867 SubBatchId Defines the current sub-batch ns=1;i=1960 i=2365 i=80 ns=1;i=1867 LotId Defines the current lot ns=1;i=1960 i=2365 i=80 ns=1;i=1867 MaterialId Defines the current material ns=1;i=1960 i=2365 i=80 ns=1;i=1867 Process Current Process name ns=1;i=1960 i=2365 i=80 ns=1;i=1867 Unit Current Unit name ns=1;i=1960 i=2365 i=80 ns=1;i=1867 Operation Current Operation name ns=1;i=1960 i=2365 i=80 ns=1;i=1867 Phase Current Phase name ns=1;i=1960 i=2365 i=80 ns=1;i=1867 UserId Login name of the user who is logged on at the device console ns=1;i=1960 i=2365 i=80 ns=1;i=1867 SampleId Identifier for the sample ns=1;i=1960 i=2365 i=80 ns=1;i=1867 <GroupIdentifier> Group definition ns=2;i=12257 i=11508 ns=1;i=1866 Configuration ns=1;i=1872 ns=1;i=1875 ns=2;i=12257 i=78 ns=1;i=1866 Status ns=1;i=1878 ns=1;i=1881 ns=1;i=1884 ns=1;i=1887 ns=2;i=12257 i=78 ns=1;i=1866 AcquisitionSettings ns=1;i=1890 ns=2;i=12257 i=78 ns=1;i=1866 AcquisitionStatus ns=1;i=1896 ns=1;i=4046 ns=1;i=4047 ns=1;i=1900 ns=2;i=12257 i=78 ns=1;i=1866 AcquisitionData ns=1;i=1903 ns=1;i=1909 ns=1;i=1912 ns=1;i=1915 ns=1;i=4743 ns=1;i=1918 ns=2;i=12257 i=78 ns=1;i=1866 ChemometricModelSettings ns=2;i=12257 i=78 ns=1;i=1866 Context ns=1;i=1921 ns=1;i=1924 ns=1;i=1927 ns=1;i=1930 ns=1;i=1933 ns=1;i=1936 ns=1;i=1939 ns=1;i=1942 ns=1;i=1945 ns=1;i=1948 ns=1;i=1951 ns=2;i=12257 i=78 ns=1;i=1866 SpectrometerDeviceStreamType ns=1;i=4754 ns=1;i=4867 ns=1;i=4871 ns=1;i=4873 ns=1;i=4875 ns=1;i=4944 ns=1;i=1866 ParameterSet Flat list of Parameters ns=1;i=4776 ns=1;i=4782 ns=1;i=4791 ns=1;i=4800 ns=1;i=4803 ns=1;i=4806 ns=1;i=4810 ns=1;i=4813 ns=1;i=4819 ns=1;i=4825 ns=1;i=4831 ns=1;i=4881 ns=1;i=4890 ns=1;i=4899 ns=1;i=4902 ns=1;i=4905 ns=1;i=4908 ns=1;i=4911 ns=1;i=4914 ns=1;i=4917 ns=1;i=4920 ns=1;i=4923 ns=1;i=4926 ns=1;i=4935 i=58 i=80 ns=1;i=4753 IsEnabled True if this stream maybe used to perform acquisition ns=1;i=4867 i=2365 i=78 ns=1;i=4754 DiagnosticStatus Stream health status i=2365 i=78 ns=1;i=4754 LastSampleTime Time at which the last sample was acquired i=2365 i=78 ns=1;i=4754 IsActive True if this stream is actually running, acquiring data ns=1;i=4873 i=2365 i=78 ns=1;i=4754 ExecutionCycle Indicates which Execution cycle is in progress ns=1;i=4873 i=2365 i=78 ns=1;i=4754 ExecutionCycleSubcode Indicates which Execution cycle subcode is in progress ns=1;i=4809 ns=1;i=4873 i=2376 i=78 ns=1;i=4754 EnumStrings i=68 i=78 ns=1;i=4806 Progress Indicates the progress of an acquisition in terms of percentage of completion. Its value shall be between 0 and 100. ns=1;i=4873 i=2365 i=78 ns=1;i=4754 AcquisitionCounter Simple counter incremented after each Sampling acquisition performed on this Stream ns=1;i=4817 ns=1;i=4875 i=2368 i=78 ns=1;i=4754 EURange i=68 i=78 ns=1;i=4813 AcquisitionResultStatus Quality of the acquisition ns=1;i=4875 i=2365 i=78 ns=1;i=4754 ScaledData Scaled data produced as a result of data acquisition on the Stream and application of the analyser model ns=1;i=4875 i=2365 i=78 ns=1;i=4754 AcquisitionEndTime The end time of the AnalyseSample or AnalyseCalibrationSample or AnalyseValidationSample state of the AnalyserChannel_OperatingModeExecuteSubStateMachine state machine ns=1;i=4875 i=2365 i=78 ns=1;i=4754 ActiveBackground ns=1;i=4885 ns=1;i=4886 ns=1;i=4887 ns=1;i=4888 ns=1;i=4889 ns=1;i=4867 i=12029 i=78 ns=1;i=4754 EURange i=68 i=78 ns=1;i=4881 EngineeringUnits i=68 i=78 ns=1;i=4881 Title i=68 i=78 ns=1;i=4881 AxisScaleType i=68 i=78 ns=1;i=4881 XAxisDefinition i=68 i=78 ns=1;i=4881 ActiveBackground1 ns=1;i=4894 ns=1;i=4895 ns=1;i=4896 ns=1;i=4897 ns=1;i=4898 ns=1;i=4867 i=12029 i=80 ns=1;i=4754 EURange i=68 i=78 ns=1;i=4890 EngineeringUnits i=68 i=78 ns=1;i=4890 Title i=68 i=78 ns=1;i=4890 AxisScaleType i=68 i=78 ns=1;i=4890 XAxisDefinition i=68 i=78 ns=1;i=4890 SpectralRange ns=1;i=4871 i=2365 i=80 ns=1;i=4754 Resolution ns=1;i=4871 i=2365 i=80 ns=1;i=4754 RequestedNumberOfScans ns=1;i=4871 i=2365 i=80 ns=1;i=4754 Gain ns=1;i=4871 i=2365 i=80 ns=1;i=4754 TransmittanceCutoff ns=1;i=4871 i=2365 i=80 ns=1;i=4754 AbsorbanceCutoff ns=1;i=4871 i=2365 i=80 ns=1;i=4754 NumberOfScansDone ns=1;i=4873 i=2365 i=80 ns=1;i=4754 TotalNumberOfScansDone ns=1;i=4875 i=2365 i=78 ns=1;i=4754 BackgroundAcquisitionTime ns=1;i=4875 i=2365 i=78 ns=1;i=4754 PendingBackground ns=1;i=4930 ns=1;i=4931 ns=1;i=4932 ns=1;i=4933 ns=1;i=4934 ns=1;i=4875 i=12029 i=78 ns=1;i=4754 EURange i=68 i=78 ns=1;i=4926 EngineeringUnits i=68 i=78 ns=1;i=4926 Title i=68 i=78 ns=1;i=4926 AxisScaleType i=68 i=78 ns=1;i=4926 XAxisDefinition i=68 i=78 ns=1;i=4926 PendingBackground1 ns=1;i=4939 ns=1;i=4940 ns=1;i=4941 ns=1;i=4942 ns=1;i=4943 ns=1;i=4875 i=12029 i=80 ns=1;i=4754 EURange i=68 i=78 ns=1;i=4935 EngineeringUnits i=68 i=78 ns=1;i=4935 Title i=68 i=78 ns=1;i=4935 AxisScaleType i=68 i=78 ns=1;i=4935 XAxisDefinition i=68 i=78 ns=1;i=4935 Configuration ns=1;i=4881 ns=1;i=4890 ns=2;i=12257 i=78 ns=1;i=4753 AcquisitionSettings ns=1;i=4899 ns=1;i=4902 ns=1;i=4905 ns=1;i=4908 ns=1;i=4911 ns=1;i=4914 ns=2;i=12257 i=78 ns=1;i=4753 AcquisitionStatus ns=1;i=4917 ns=2;i=12257 i=78 ns=1;i=4753 AcquisitionData ns=1;i=4920 ns=1;i=4923 ns=1;i=4926 ns=1;i=4935 ns=2;i=12257 i=78 ns=1;i=4753 FactorySettings i=58 i=78 ns=1;i=4753 MassSpectrometerDeviceStreamType ns=1;i=1866 ParticleSizeMonitorDeviceStreamType ns=1;i=5074 ns=1;i=5195 ns=1;i=1866 ParameterSet Flat list of Parameters ns=1;i=5096 ns=1;i=5102 ns=1;i=5111 ns=1;i=5120 ns=1;i=5123 ns=1;i=5126 ns=1;i=5130 ns=1;i=5133 ns=1;i=5139 ns=1;i=5145 ns=1;i=5151 ns=1;i=5201 ns=1;i=5210 ns=1;i=5219 i=58 i=80 ns=1;i=5073 IsEnabled True if this stream maybe used to perform acquisition i=2365 i=78 ns=1;i=5074 DiagnosticStatus Stream health status i=2365 i=78 ns=1;i=5074 LastSampleTime Time at which the last sample was acquired i=2365 i=78 ns=1;i=5074 IsActive True if this stream is actually running, acquiring data i=2365 i=78 ns=1;i=5074 ExecutionCycle Indicates which Execution cycle is in progress i=2365 i=78 ns=1;i=5074 ExecutionCycleSubcode Indicates which Execution cycle subcode is in progress ns=1;i=5129 i=2376 i=78 ns=1;i=5074 EnumStrings i=68 i=78 ns=1;i=5126 Progress Indicates the progress of an acquisition in terms of percentage of completion. Its value shall be between 0 and 100. i=2365 i=78 ns=1;i=5074 AcquisitionCounter Simple counter incremented after each Sampling acquisition performed on this Stream ns=1;i=5137 ns=1;i=5195 i=2368 i=78 ns=1;i=5074 EURange i=68 i=78 ns=1;i=5133 AcquisitionResultStatus Quality of the acquisition ns=1;i=5195 i=2365 i=78 ns=1;i=5074 ScaledData Scaled data produced as a result of data acquisition on the Stream and application of the analyser model ns=1;i=5195 i=2365 i=78 ns=1;i=5074 AcquisitionEndTime The end time of the AnalyseSample or AnalyseCalibrationSample or AnalyseValidationSample state of the AnalyserChannel_OperatingModeExecuteSubStateMachine state machine ns=1;i=5195 i=2365 i=78 ns=1;i=5074 Background ns=1;i=5205 ns=1;i=5206 ns=1;i=5207 ns=1;i=5208 ns=1;i=5209 ns=1;i=5195 i=12029 i=80 ns=1;i=5074 EURange i=68 i=78 ns=1;i=5201 EngineeringUnits i=68 i=78 ns=1;i=5201 Title i=68 i=78 ns=1;i=5201 AxisScaleType i=68 i=78 ns=1;i=5201 XAxisDefinition i=68 i=78 ns=1;i=5201 SizeDistribution ns=1;i=5214 ns=1;i=5215 ns=1;i=5216 ns=1;i=5217 ns=1;i=5218 ns=1;i=5195 i=12029 i=78 ns=1;i=5074 EURange i=68 i=78 ns=1;i=5210 EngineeringUnits i=68 i=78 ns=1;i=5210 Title i=68 i=78 ns=1;i=5210 AxisScaleType i=68 i=78 ns=1;i=5210 XAxisDefinition i=68 i=78 ns=1;i=5210 BackgroundAcquisitionTime ns=1;i=5195 i=2365 i=78 ns=1;i=5074 AcquisitionData ns=1;i=5201 ns=1;i=5210 ns=1;i=5219 ns=2;i=12257 i=78 ns=1;i=5073 AcousticSpectrometerDeviceStreamType ns=1;i=1866 ChromatographDeviceStreamType ns=1;i=1866 MNRDeviceStreamType ns=1;i=1866 SpectrometerDeviceType ns=1;i=1962 ns=1;i=2016 ns=1;i=1000 ParameterSet Flat list of Parameters ns=1;i=1971 ns=1;i=2074 i=58 i=80 ns=1;i=1961 DiagnosticStatus General health status of the analyser i=2365 i=78 ns=1;i=1962 SpectralRange i=2365 i=80 ns=1;i=1962 FactorySettings ns=2;i=12257 i=78 ns=1;i=1961 ParticleSizeMonitorDeviceType ns=1;i=1000 ChromatographDeviceType ns=1;i=1000 MassSpectrometerDeviceType ns=1;i=1000 AcousticSpectrometerDeviceType ns=1;i=1000 NMRDeviceType ns=1;i=1000 AccessorySlotType Organizes zero or more Accessory objects identified by "AccessoryIdentifier" which represent Accessories currently being used on that AccessorySlot. ns=1;i=2643 ns=1;i=2644 ns=1;i=2645 ns=1;i=6820 ns=2;i=12256 IsHotSwappable True if an accessory can be inserted in the accessory slot while it is powered i=68 i=78 ns=1;i=2642 IsEnabled True if this accessory slot is capable of accepting an accessory in it i=68 i=78 ns=1;i=2642 AccessorySlotStateMachine ns=1;i=2646 ns=1;i=2692 i=78 ns=1;i=2642 CurrentState ns=1;i=2647 i=2760 i=78 ns=1;i=2645 Id i=68 i=78 ns=1;i=2646 <AccessoryIdentifier> Accessory definition ns=1;i=6841 ns=1;i=6843 ns=1;i=6845 ns=1;i=6847 ns=1;i=6848 ns=1;i=2739 i=11508 ns=1;i=2642 Configuration ns=2;i=12257 i=78 ns=1;i=6820 Status ns=2;i=12257 i=78 ns=1;i=6820 FactorySettings ns=2;i=12257 i=78 ns=1;i=6820 IsHotSwappable True if this accessory can be inserted in the accessory slot while it is powered i=68 i=78 ns=1;i=6820 IsReady True if this accessory is ready for use i=68 i=78 ns=1;i=6820 AccessorySlotStateMachineType Describes the behaviour of an AccessorySlot when a physical accessory is inserted or removed. ns=1;i=2703 ns=1;i=2705 ns=1;i=2707 ns=1;i=2709 ns=1;i=2711 ns=1;i=2713 ns=1;i=4230 ns=1;i=2717 ns=1;i=2719 ns=1;i=2721 ns=1;i=2723 ns=1;i=2725 ns=1;i=2727 ns=1;i=2729 ns=1;i=2731 ns=1;i=2733 ns=1;i=2735 ns=1;i=2737 i=2771 Powerup The AccessorySlot is in its power-up sequence and cannot perform any other task. ns=1;i=2704 ns=1;i=4230 i=2309 ns=1;i=2692 StateNumber i=68 i=78 ns=1;i=2703 0 Empty This represents an AccessorySlot where no Accessory is installed. ns=1;i=2706 ns=1;i=4230 ns=1;i=2717 ns=1;i=2729 ns=1;i=2731 i=2307 ns=1;i=2692 StateNumber i=68 i=78 ns=1;i=2705 0 Inserting This represents an AccessorySlot when an Accessory is being inserted and initializing. ns=1;i=2708 ns=1;i=2717 ns=1;i=2719 ns=1;i=2719 ns=1;i=2721 ns=1;i=2723 ns=1;i=2733 i=2307 ns=1;i=2692 StateNumber i=68 i=78 ns=1;i=2707 0 Installed This represents an AccessorySlot where an Accessory is installed and ready to use. ns=1;i=2710 ns=1;i=2723 ns=1;i=2725 ns=1;i=2735 i=2307 ns=1;i=2692 StateNumber i=68 i=78 ns=1;i=2709 0 Removing This represents an AccessorySlot where no Accessory is installed. ns=1;i=2712 ns=1;i=2721 ns=1;i=2725 ns=1;i=2727 ns=1;i=2727 ns=1;i=2729 ns=1;i=2737 i=2307 ns=1;i=2692 StateNumber i=68 i=78 ns=1;i=2711 0 Shutdown The AccessorySlot is in its power-down sequence and cannot perform any other task. ns=1;i=2714 ns=1;i=2731 ns=1;i=2733 ns=1;i=2735 ns=1;i=2737 i=2307 ns=1;i=2692 StateNumber i=68 i=78 ns=1;i=2713 0 PowerupToEmptyTransition ns=1;i=4231 ns=1;i=2703 ns=1;i=2705 i=2310 ns=1;i=2692 TransitionNumber i=68 i=78 ns=1;i=4230 0 EmptyToInsertingTransition ns=1;i=2718 ns=1;i=2705 ns=1;i=2707 i=2310 ns=1;i=2692 TransitionNumber i=68 i=78 ns=1;i=2717 0 InsertingTransition ns=1;i=2720 ns=1;i=2707 ns=1;i=2707 i=2310 ns=1;i=2692 TransitionNumber i=68 i=78 ns=1;i=2719 0 InsertingToRemovingTransition ns=1;i=2722 ns=1;i=2707 ns=1;i=2711 i=2310 ns=1;i=2692 TransitionNumber i=68 i=78 ns=1;i=2721 0 InsertingToInstalledTransition ns=1;i=2724 ns=1;i=2707 ns=1;i=2709 i=2310 ns=1;i=2692 TransitionNumber i=68 i=78 ns=1;i=2723 0 InstalledToRemovingTransition ns=1;i=2726 ns=1;i=2709 ns=1;i=2711 i=2310 ns=1;i=2692 TransitionNumber i=68 i=78 ns=1;i=2725 0 RemovingTransition ns=1;i=2728 ns=1;i=2711 ns=1;i=2711 i=2310 ns=1;i=2692 TransitionNumber i=68 i=78 ns=1;i=2727 0 RemovingToEmptyTransition ns=1;i=2730 ns=1;i=2711 ns=1;i=2705 i=2310 ns=1;i=2692 TransitionNumber i=68 i=78 ns=1;i=2729 0 EmptyToShutdownTransition ns=1;i=2732 ns=1;i=2705 ns=1;i=2713 i=2310 ns=1;i=2692 TransitionNumber i=68 i=78 ns=1;i=2731 0 InsertingToShutdownTransition ns=1;i=2734 ns=1;i=2707 ns=1;i=2713 i=2310 ns=1;i=2692 TransitionNumber i=68 i=78 ns=1;i=2733 0 InstalledToShutdownTransition ns=1;i=2736 ns=1;i=2709 ns=1;i=2713 i=2310 ns=1;i=2692 TransitionNumber i=68 i=78 ns=1;i=2735 0 RemovingToShutdownTransition ns=1;i=2738 ns=1;i=2711 ns=1;i=2713 i=2310 ns=1;i=2692 TransitionNumber i=68 i=78 ns=1;i=2737 0 AccessoryType ns=1;i=2742 ns=1;i=2743 ns=1;i=2744 ns=1;i=2745 ns=1;i=2746 ns=2;i=12253 Configuration ns=2;i=12257 i=78 ns=1;i=2739 Status ns=2;i=12257 i=78 ns=1;i=2739 FactorySettings ns=2;i=12257 i=78 ns=1;i=2739 IsHotSwappable True if this accessory can be inserted in the accessory slot while it is powered i=68 i=78 ns=1;i=2739 IsReady True if this accessory is ready for use i=68 i=78 ns=1;i=2739 DetectorType ns=1;i=2739 SmartSamplingSystemType ns=1;i=2739 SourceType ns=1;i=2739 GcOvenType ns=1;i=2739 ExecutionCycleEnumeration ns=1;i=6960 i=29 Idle, no cleaning or acquisition cycle in progress Scquisition cycle collecting data for diagnostic purpose Cleaning cycle Calibration acquisition cycle Validation acquisition cycle Sample acquisition cycle Scquisition cycle collecting data for diagnostic purpose and sample is extracted from the process to be sent in control lab Cleaning cycle with or without acquisition and sample is extracted from the process to be sent in control lab Calibration acquisition cycle and sample is extracted from the process to be sent in control lab Validation acquisition cycle and sample is extracted from the process to be sent in control lab Sample acquisition cycle and sample is extracted from the process to be sent in control lab EnumValues i=68 i=78 ns=1;i=4189 i=7616 0 IDLE Idle, no cleaning or acquisition cycle in progress i=7616 1 DIAGNOSTIC Scquisition cycle collecting data for diagnostic purpose i=7616 2 CLEANING Cleaning cycle i=7616 4 CALIBRATION Calibration acquisition cycle i=7616 8 VALIDATION Validation acquisition cycle i=7616 16 SAMPLING Sample acquisition cycle i=7616 32769 DIAGNOSTIC_WITH_GRAB_SAMPLE Scquisition cycle collecting data for diagnostic purpose and sample is extracted from the process to be sent in control lab i=7616 32770 CLEANING_WITH_GRAB_SAMPLE Cleaning cycle with or without acquisition and sample is extracted from the process to be sent in control lab i=7616 32772 CALIBRATION_WITH_GRAB_SAMPLE Calibration acquisition cycle and sample is extracted from the process to be sent in control lab i=7616 32776 VALIDATION_WITH_GRAB_SAMPLE Validation acquisition cycle and sample is extracted from the process to be sent in control lab i=7616 32784 SAMPLING_WITH_GRAB_SAMPLE Sample acquisition cycle and sample is extracted from the process to be sent in control lab AcquisitionResultStatusEnumeration ns=1;i=2780 i=29 No longer used. The acquisition has been completed as requested without any error. The acquisition has been completed as requested with error. The acquisition has been completed but nothing can be said about the quality of the result. The acquisition has been partially completed as requested without any error. EnumStrings i=68 i=78 ns=1;i=2779 NOT_USED GOOD BAD UNKNOWN PARTIAL EngineeringValueType Expose key results of an analyser and the associated values that qualified it ns=1;i=6961 i=2365 <Identifier> Point to the data source i=2365 i=11508 ns=1;i=4191 ChemometricModelType Hold the descriptions of a mathematical process and associated information to convert scaled data into one or more process values. ns=1;i=2844 ns=1;i=2845 ns=1;i=2846 ns=1;i=6964 ns=1;i=6965 i=63 Name i=68 i=78 ns=1;i=2843 CreationDate i=68 i=78 ns=1;i=2843 ModelDescription i=68 i=78 ns=1;i=2843 <User defined Input#> Point to model input parameters i=62 i=11510 ns=1;i=2843 <User defined Output#> Point to model output parameters i=62 i=11510 ns=1;i=2843 ProcessVariableType Provides a stable address space view from the user point of view even if the ADI server address space changes, after the new configuration is loaded. ns=1;i=6966 i=2365 <Source> Point to source parameter i=62 i=11510 ns=1;i=2847 HasDataSource TargetNode is providing the value for the SourceNode. i=49 DataSourceOf HasInput TargetNode is providing an input value for a ChemometricModel. i=49 InputOf HasOutput TargetNode is exposing an output value of a ChemometricModel. i=49 OutputOf MVAModelType Hold the descriptions of a mathematical process and associated information to convert scaled data into one or more process values. ns=1;i=6972 ns=1;i=6973 ns=1;i=2843 <User defined Output#> Point to model output parameters ns=1;i=6976 ns=1;i=6981 i=11508 ns=1;i=6967 AlarmState i=68 i=78 ns=1;i=6972 MainDataIndex i=68 i=78 ns=1;i=6967 MVAOutputParameterType Hold the descriptions of a mathematical process and associated information to convert scaled data into one or more process values. ns=1;i=6982 ns=1;i=6983 ns=1;i=6984 ns=1;i=6985 ns=1;i=6986 i=63 WarningLimits i=68 i=80 ns=1;i=6981 AlarmLimits i=68 i=80 ns=1;i=6981 AlarmState i=68 i=78 ns=1;i=6981 VendorSpecificError i=68 i=80 ns=1;i=6981 Statistics ns=1;i=6987 ns=1;i=6988 ns=1;i=6989 ns=1;i=6990 ns=1;i=6981 i=11508 ns=1;i=6981 WarningLimits i=68 i=80 ns=1;i=6986 AlarmLimits i=68 i=80 ns=1;i=6986 AlarmState i=68 i=78 ns=1;i=6986 VendorSpecificError i=68 i=80 ns=1;i=6986 AlarmStateEnumeration ns=1;i=6992 i=29 Normal In low warning range In high warning range In warning range (low or high) or some other warning cause In low alarm range In high alarm range In alarm range (low or high) or some other alarm cause EnumValues i=68 i=78 ns=1;i=6991 i=7616 0 NORMAL_0 Normal i=7616 1 WARNING_LOW_1 In low warning range i=7616 2 WARNING_HIGH_2 In high warning range i=7616 4 WARNING_4 In warning range (low or high) or some other warning cause i=7616 8 ALARM_LOW_8 In low alarm range i=7616 16 ALARM_HIGH_16 In high alarm range i=7616 32 ALARM_32 In alarm range (low or high) or some other alarm cause Opc.Ua.Adi ns=1;i=4211 i=92 i=72 PHhzOnNjaGVtYQ0KICB4bWxuczpEST0iaHR0cDovL29wY2ZvdW5kYXRpb24ub3JnL1VBL0RJL1R5 cGVzLnhzZCINCiAgeG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIg0K ICB4bWxuczp1YT0iaHR0cDovL29wY2ZvdW5kYXRpb24ub3JnL1VBLzIwMDgvMDIvVHlwZXMueHNk Ig0KICB4bWxuczp0bnM9Imh0dHA6Ly9vcGNmb3VuZGF0aW9uLm9yZy9VQS9BREkvVHlwZXMueHNk Ig0KICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9vcGNmb3VuZGF0aW9uLm9yZy9VQS9BREkvVHlw ZXMueHNkIg0KICBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCINCj4NCiAgPHhzOmltcG9y dCBuYW1lc3BhY2U9Imh0dHA6Ly9vcGNmb3VuZGF0aW9uLm9yZy9VQS9ESS9UeXBlcy54c2QiIC8+ DQogIDx4czppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vb3BjZm91bmRhdGlvbi5vcmcvVUEvMjAw OC8wMi9UeXBlcy54c2QiIC8+DQoNCiAgPHhzOnNpbXBsZVR5cGUgIG5hbWU9IkV4ZWN1dGlvbkN5 Y2xlRW51bWVyYXRpb24iPg0KICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpzdHJpbmciPg0K ICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJJRExFXzAiIC8+DQogICAgICA8eHM6ZW51bWVy YXRpb24gdmFsdWU9IkRJQUdOT1NUSUNfMSIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1 ZT0iQ0xFQU5JTkdfMiIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iQ0FMSUJSQVRJ T05fNCIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iVkFMSURBVElPTl84IiAvPg0K ICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJTQU1QTElOR18xNiIgLz4NCiAgICAgIDx4czpl bnVtZXJhdGlvbiB2YWx1ZT0iRElBR05PU1RJQ19XSVRIX0dSQUJfU0FNUExFXzMyNzY5IiAvPg0K ICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJDTEVBTklOR19XSVRIX0dSQUJfU0FNUExFXzMy NzcwIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJDQUxJQlJBVElPTl9XSVRIX0dS QUJfU0FNUExFXzMyNzcyIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJWQUxJREFU SU9OX1dJVEhfR1JBQl9TQU1QTEVfMzI3NzYiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFs dWU9IlNBTVBMSU5HX1dJVEhfR1JBQl9TQU1QTEVfMzI3ODQiIC8+DQogICAgPC94czpyZXN0cmlj dGlvbj4NCiAgPC94czpzaW1wbGVUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJFeGVjdXRpb25D eWNsZUVudW1lcmF0aW9uIiB0eXBlPSJ0bnM6RXhlY3V0aW9uQ3ljbGVFbnVtZXJhdGlvbiIgLz4N Cg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mRXhlY3V0aW9uQ3ljbGVFbnVtZXJhdGlv biI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRXhlY3V0aW9u Q3ljbGVFbnVtZXJhdGlvbiIgdHlwZT0idG5zOkV4ZWN1dGlvbkN5Y2xlRW51bWVyYXRpb24iIG1p bk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIC8+DQogICAgPC94czpzZXF1ZW5jZT4N CiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mRXhlY3V0aW9u Q3ljbGVFbnVtZXJhdGlvbiIgdHlwZT0idG5zOkxpc3RPZkV4ZWN1dGlvbkN5Y2xlRW51bWVyYXRp b24iIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOnNpbXBsZVR5cGUgIG5h bWU9IkFjcXVpc2l0aW9uUmVzdWx0U3RhdHVzRW51bWVyYXRpb24iPg0KICAgIDx4czpyZXN0cmlj dGlvbiBiYXNlPSJ4czpzdHJpbmciPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJOT1Rf VVNFRF8wIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJHT09EXzEiIC8+DQogICAg ICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkJBRF8yIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9u IHZhbHVlPSJVTktOT1dOXzMiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlBBUlRJ QUxfNCIgLz4NCiAgICA8L3hzOnJlc3RyaWN0aW9uPg0KICA8L3hzOnNpbXBsZVR5cGU+DQogIDx4 czplbGVtZW50IG5hbWU9IkFjcXVpc2l0aW9uUmVzdWx0U3RhdHVzRW51bWVyYXRpb24iIHR5cGU9 InRuczpBY3F1aXNpdGlvblJlc3VsdFN0YXR1c0VudW1lcmF0aW9uIiAvPg0KDQogIDx4czpjb21w bGV4VHlwZSBuYW1lPSJMaXN0T2ZBY3F1aXNpdGlvblJlc3VsdFN0YXR1c0VudW1lcmF0aW9uIj4N CiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBY3F1aXNpdGlvblJl c3VsdFN0YXR1c0VudW1lcmF0aW9uIiB0eXBlPSJ0bnM6QWNxdWlzaXRpb25SZXN1bHRTdGF0dXNF bnVtZXJhdGlvbiIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgLz4NCiAgICA8 L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJM aXN0T2ZBY3F1aXNpdGlvblJlc3VsdFN0YXR1c0VudW1lcmF0aW9uIiB0eXBlPSJ0bnM6TGlzdE9m QWNxdWlzaXRpb25SZXN1bHRTdGF0dXNFbnVtZXJhdGlvbiIgbmlsbGFibGU9InRydWUiPjwveHM6 ZWxlbWVudD4NCg0KICA8eHM6c2ltcGxlVHlwZSAgbmFtZT0iQWxhcm1TdGF0ZUVudW1lcmF0aW9u Ij4NCiAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIj4NCiAgICAgIDx4czplbnVt ZXJhdGlvbiB2YWx1ZT0iTk9STUFMXzAiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9 IldBUk5JTkdfTE9XXzEiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IldBUk5JTkdf SElHSF8yIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJXQVJOSU5HXzQiIC8+DQog ICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkFMQVJNX0xPV184IiAvPg0KICAgICAgPHhzOmVu dW1lcmF0aW9uIHZhbHVlPSJBTEFSTV9ISUdIXzE2IiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9u IHZhbHVlPSJBTEFSTV8zMiIgLz4NCiAgICA8L3hzOnJlc3RyaWN0aW9uPg0KICA8L3hzOnNpbXBs ZVR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkFsYXJtU3RhdGVFbnVtZXJhdGlvbiIgdHlwZT0i dG5zOkFsYXJtU3RhdGVFbnVtZXJhdGlvbiIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0i TGlzdE9mQWxhcm1TdGF0ZUVudW1lcmF0aW9uIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8 eHM6ZWxlbWVudCBuYW1lPSJBbGFybVN0YXRlRW51bWVyYXRpb24iIHR5cGU9InRuczpBbGFybVN0 YXRlRW51bWVyYXRpb24iIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIC8+DQog ICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFt ZT0iTGlzdE9mQWxhcm1TdGF0ZUVudW1lcmF0aW9uIiB0eXBlPSJ0bnM6TGlzdE9mQWxhcm1TdGF0 ZUVudW1lcmF0aW9uIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQo8L3hzOnNjaGVt YT4= NamespaceUri A URI that uniquely identifies the dictionary. i=68 ns=1;i=4209 http://opcfoundation.org/UA/ADI/Types.xsd Opc.Ua.Adi ns=1;i=4196 i=93 i=72 PG9wYzpUeXBlRGljdGlvbmFyeQ0KICB4bWxuczpEST0iaHR0cDovL29wY2ZvdW5kYXRpb24ub3Jn L1VBL0RJLyINCiAgeG1sbnM6b3BjPSJodHRwOi8vb3BjZm91bmRhdGlvbi5vcmcvQmluYXJ5U2No ZW1hLyINCiAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0 YW5jZSINCiAgeG1sbnM6dWE9Imh0dHA6Ly9vcGNmb3VuZGF0aW9uLm9yZy9VQS8iDQogIHhtbG5z OnRucz0iaHR0cDovL29wY2ZvdW5kYXRpb24ub3JnL1VBL0FESS8iDQogIERlZmF1bHRCeXRlT3Jk ZXI9IkxpdHRsZUVuZGlhbiINCiAgVGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vb3BjZm91bmRhdGlv bi5vcmcvVUEvQURJLyINCj4NCiAgPCEtLSBUaGlzIEZpbGUgd2FzIGdlbmVyYXRlZCBvbiAyMDE1 LTA4LTExIGFuZCBzdXBwb3J0cyB0aGUgc3BlY2lmaWNhdGlvbnMgc3VwcG9ydGVkIGJ5IHZlcnNp b24gMS4yLjI2LjE2MDMyIG9mIHRoZSBPUEMgVUEgZGVsaXZlcmFibGVzLiAtLT4NCiAgPG9wYzpJ bXBvcnQgTmFtZXNwYWNlPSJodHRwOi8vb3BjZm91bmRhdGlvbi5vcmcvVUEvREkvIiBMb2NhdGlv bj0iT3BjLlVhLkRpLkJpbmFyeVNjaGVtYS5ic2QiLz4NCiAgPG9wYzpJbXBvcnQgTmFtZXNwYWNl PSJodHRwOi8vb3BjZm91bmRhdGlvbi5vcmcvVUEvIiBMb2NhdGlvbj0iT3BjLlVhLkJpbmFyeVNj aGVtYS5ic2QiLz4NCg0KICA8b3BjOkVudW1lcmF0ZWRUeXBlIE5hbWU9IkV4ZWN1dGlvbkN5Y2xl RW51bWVyYXRpb24iIExlbmd0aEluQml0cz0iMzIiPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVl IE5hbWU9IklETEUiIFZhbHVlPSIwIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9 IkRJQUdOT1NUSUMiIFZhbHVlPSIxIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9 IkNMRUFOSU5HIiBWYWx1ZT0iMiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJD QUxJQlJBVElPTiIgVmFsdWU9IjQiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0i VkFMSURBVElPTiIgVmFsdWU9IjgiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0i U0FNUExJTkciIFZhbHVlPSIxNiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJE SUFHTk9TVElDX1dJVEhfR1JBQl9TQU1QTEUiIFZhbHVlPSIzMjc2OSIgLz4NCiAgICA8b3BjOkVu dW1lcmF0ZWRWYWx1ZSBOYW1lPSJDTEVBTklOR19XSVRIX0dSQUJfU0FNUExFIiBWYWx1ZT0iMzI3 NzAiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iQ0FMSUJSQVRJT05fV0lUSF9H UkFCX1NBTVBMRSIgVmFsdWU9IjMyNzcyIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5h bWU9IlZBTElEQVRJT05fV0lUSF9HUkFCX1NBTVBMRSIgVmFsdWU9IjMyNzc2IiAvPg0KICAgIDxv cGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlNBTVBMSU5HX1dJVEhfR1JBQl9TQU1QTEUiIFZhbHVl PSIzMjc4NCIgLz4NCiAgPC9vcGM6RW51bWVyYXRlZFR5cGU+DQoNCiAgPG9wYzpFbnVtZXJhdGVk VHlwZSBOYW1lPSJBY3F1aXNpdGlvblJlc3VsdFN0YXR1c0VudW1lcmF0aW9uIiBMZW5ndGhJbkJp dHM9IjMyIj4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJOT1RfVVNFRCIgVmFsdWU9 IjAiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iR09PRCIgVmFsdWU9IjEiIC8+ DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iQkFEIiBWYWx1ZT0iMiIgLz4NCiAgICA8 b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJVTktOT1dOIiBWYWx1ZT0iMyIgLz4NCiAgICA8b3Bj OkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJQQVJUSUFMIiBWYWx1ZT0iNCIgLz4NCiAgPC9vcGM6RW51 bWVyYXRlZFR5cGU+DQoNCiAgPG9wYzpFbnVtZXJhdGVkVHlwZSBOYW1lPSJBbGFybVN0YXRlRW51 bWVyYXRpb24iIExlbmd0aEluQml0cz0iMzIiPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5h bWU9Ik5PUk1BTF8wIiBWYWx1ZT0iMCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1l PSJXQVJOSU5HX0xPV18xIiBWYWx1ZT0iMSIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBO YW1lPSJXQVJOSU5HX0hJR0hfMiIgVmFsdWU9IjIiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFs dWUgTmFtZT0iV0FSTklOR180IiBWYWx1ZT0iNCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1 ZSBOYW1lPSJBTEFSTV9MT1dfOCIgVmFsdWU9IjgiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFs dWUgTmFtZT0iQUxBUk1fSElHSF8xNiIgVmFsdWU9IjE2IiAvPg0KICAgIDxvcGM6RW51bWVyYXRl ZFZhbHVlIE5hbWU9IkFMQVJNXzMyIiBWYWx1ZT0iMzIiIC8+DQogIDwvb3BjOkVudW1lcmF0ZWRU eXBlPg0KDQo8L29wYzpUeXBlRGljdGlvbmFyeT4= NamespaceUri A URI that uniquely identifies the dictionary. i=68 ns=1;i=4194 http://opcfoundation.org/UA/ADI/ ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/XMLModels/ProblemsToReport/BrowseNameInheritedFrom0/BrowseNameInheritedFrom0.xml ================================================  http://tricycleTypeV1 i=6 i=10 i=13 i=12 i=15 i=21 i=47 i=46 i=45 i=40 i=37 i=38 i=39 i=49 ns=1;i=1 ns=1;i=3 ns=1;i=5 WheelVariableType i=63 tickness ns=1;i=33 i=63 i=78 EngineeringUnits ns=1;i=33 i=68 ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/XMLModels/ProblemsToReport/HasOrderedComponent/Opc.Ua.NodeSet2.TriCycleType_V1.1.xml ================================================ http://tricycleTypeV1 i=6 i=45 i=40 i=37 i=49 TrailerType ns=1;i=12 LoadedTricycle ns=1;i=11 i=63 i=78 VehicleType i=58 ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/XMLModels/ProblemsToReport/MachineVision/Opc.Ua.MachineVision.NodeSet2.xml ================================================ http://opcfoundation.org/UA/MachineVision i=1 i=5 i=6 i=7 i=9 i=12 i=13 i=15 i=17 i=21 i=37 i=38 i=39 i=40 i=45 i=46 i=47 i=51 i=52 i=53 i=54 i=117 i=256 i=290 i=291 i=294 i=296 i=7594 ns=1;i=3002 ns=1;i=3003 ns=1;i=3004 ns=1;i=3005 ns=1;i=3006 ns=1;i=3007 ns=1;i=3008 ns=1;i=3009 ns=1;i=3013 ns=1;i=3015 ns=1;i=3016 ns=1;i=3017 ns=1;i=3020 ns=1;i=3021 ns=1;i=3023 ns=1;i=3024 ns=1;i=4002 ns=1;i=4003 SystemStateDataType https://reference.opcfoundation.org/v104/MachineVision/v100/docs/12.21 ns=1;i=6032 i=29 Production: The vision system is currently working on a job. Stand by: The vision system is ready to accept a command but is currently not executing a job. It could for example be waiting for a Start command or a user input. Engineering: The vision system is not working and not ready to accept a command because a user is currently working on the system. This could be for editing a recipe or changing the system configuration. Scheduled downtime: The vision system is not available for production and this was planned in advance. This could be for cleaning, maintenance or calibration works. Unscheduled downtime: The vision system is not available for production due to failure and repair. This covers all kinds of error states that might occur during operation. Nonscheduled time: The vision system is not working because no production was scheduled. This also covers things like operator training on the system. EnumValues ns=1;i=3023 i=78 i=68 i=7616 1 PRD_1 Production: The vision system is currently working on a job. i=7616 2 SBY_2 Stand by: The vision system is ready to accept a command but is currently not executing a job. It could for example be waiting for a Start command or a user input. i=7616 3 ENG_3 Engineering: The vision system is not working and not ready to accept a command because a user is currently working on the system. This could be for editing a recipe or changing the system configuration. i=7616 4 SDT_4 Scheduled downtime: The vision system is not available for production and this was planned in advance. This could be for cleaning, maintenance or calibration works. i=7616 5 UDT_5 Unscheduled downtime: The vision system is not available for production due to failure and repair. This covers all kinds of error states that might occur during operation. i=7616 6 NST_6 Nonscheduled time: The vision system is not working because no production was scheduled. This also covers things like operator training on the system. TriStateBooleanDataType https://reference.opcfoundation.org/v104/MachineVision/v100/docs/12.3 ns=1;i=6367 i=29 The filtering function shall look for entities where the filtered value is FALSE. The filtering function shall look for entities where the filtered value is TRUE. The filtering function shall not take the value into account. EnumValues ns=1;i=3014 i=78 i=68 i=7616 0 FALSE_0 The filtering function shall look for entities where the filtered value is FALSE. i=7616 1 TRUE_1 The filtering function shall look for entities where the filtered value is TRUE. i=7616 2 DONTCARE_2 The filtering function shall not take the value into account. ResultStateDataType https://reference.opcfoundation.org/v104/MachineVision/v100/docs/12.19 i=6 Handle https://reference.opcfoundation.org/v104/MachineVision/v100/docs/12.1 i=7 TrimmedString https://reference.opcfoundation.org/v104/MachineVision/v100/docs/12.2 i=12 BinaryIdBaseDataType https://reference.opcfoundation.org/v104/MachineVision/v100/docs/12.8 i=22 ns=1;i=5027 ns=1;i=5271 Id is a system-wide unique name for identifying the recipe. Represents an optional version number of the identified recipe. It is recommended to be of the format Major.minor.patch.build or a subset thereof, but the actual format is implementation defined. Represents an optional hash of the binary content of the actual recipe (as it would be transmitted by the transfer methods). The hash is supposed to be provided by the environment if existing. The environment shall use the same hash function on all recipes so that a difference in the hash indicates a difference in the recipe. It is recommended to use the SHA-256 algorithm for computing the hash, however, the actual algorithm is implementation-defined. Name of the hash function used. Required if internally and externally computed hashes are to be compared. Optional short human readable description of the configuration. BinaryIdBaseDataType ns=1;i=5027 ns=1;i=6001 i=69 BinaryIdBaseDataType BinaryIdBaseDataType ns=1;i=5271 ns=1;i=6003 i=69 //xs:element[@name='BinaryIdBaseDataType'] ConfigurationIdDataType https://reference.opcfoundation.org/v104/MachineVision/v100/docs/12.13 ns=1;i=5090 ns=1;i=5091 ns=1;i=3019 ConfigurationIdDataType ns=1;i=5090 ns=1;i=6001 i=69 ConfigurationIdDataType ConfigurationIdDataType ns=1;i=5091 ns=1;i=6003 i=69 //xs:element[@name='ConfigurationIdDataType'] RecipeIdExternalDataType https://reference.opcfoundation.org/v104/MachineVision/v100/docs/12.9 ns=1;i=5002 ns=1;i=5003 ns=1;i=3019 RecipeIdExternalDataType i=69 ns=1;i=5002 ns=1;i=6001 RecipeIdExternalDataType RecipeIdExternalDataType i=69 ns=1;i=5003 ns=1;i=6003 //xs:element[@name='RecipeIdExternalDataType'] RecipeIdInternalDataType https://reference.opcfoundation.org/v104/MachineVision/v100/docs/12.10 ns=1;i=5268 ns=1;i=5269 ns=1;i=3019 RecipeIdInternalDataType i=69 ns=1;i=5268 ns=1;i=6001 RecipeIdInternalDataType RecipeIdInternalDataType i=69 ns=1;i=5269 ns=1;i=6003 //xs:element[@name='RecipeIdInternalDataType'] ConfigurationDataType https://reference.opcfoundation.org/v104/MachineVision/v100/docs/12.12 i=22 ns=1;i=5088 ns=1;i=5089 Indicates that actual content of the configuration may be transferred through temporary file transfer method. Identification of the configuration used by the environment. This argument must not be empty. System-wide unique ID for identifying a configuration. This ID is assigned by the vision system. The time and date when this configuration was last modified. ConfigurationDataType ns=1;i=5088 ns=1;i=6001 i=69 ConfigurationDataType ConfigurationDataType ns=1;i=5089 ns=1;i=6003 i=69 //xs:element[@name='ConfigurationDataType'] ConfigurationTransferOptions https://reference.opcfoundation.org/v104/MachineVision/v100/docs/12.14 i=22 ns=1;i=5246 ns=1;i=5247 The Id of the configuration to be transferred to or from the client. ConfigurationTransferOptions ns=1;i=5246 ns=1;i=6001 i=69 ConfigurationTransferOptions ConfigurationTransferOptions ns=1;i=5247 ns=1;i=6003 i=69 //xs:element[@name='ConfigurationTransferOptions'] JobIdDataType https://reference.opcfoundation.org/v104/MachineVision/v100/docs/12.7 ns=1;i=5008 ns=1;i=5026 i=22 Id is a system-wide unique identifier/name for identifying the job carried out. JobIdDataType i=69 ns=1;i=5008 ns=1;i=6001 JobIdDataType JobIdDataType i=69 ns=1;i=5026 ns=1;i=6003 //xs:element[@name='JobIdDataType'] MeasIdDataType https://reference.opcfoundation.org/v104/MachineVision/v100/docs/12.5 ns=1;i=5006 ns=1;i=5007 i=22 Id is an identifier/name for identifying the measurement operation. This identifier is passed by the client to the vision system so no assumptions can be made about its uniqueness or other properties. Optional short human readable description of the measurement. MeasIdDataType i=69 ns=1;i=5006 ns=1;i=6001 MeasIdDataType MeasIdDataType i=69 ns=1;i=5007 ns=1;i=6003 //xs:element[@name='MeasIdDataType'] PartIdDataType https://reference.opcfoundation.org/v104/MachineVision/v100/docs/12.6 ns=1;i=5013 ns=1;i=5014 i=22 Describes the connection between a unit under test and a result, which was created during the processing of a recipe applied on this unit under test. Usually passed by the client with a Start method call and not changed by the server. Optional short human readable description of the part. PartIdDataType i=69 ns=1;i=5013 ns=1;i=6001 PartIdDataType PartIdDataType i=69 ns=1;i=5014 ns=1;i=6003 //xs:element[@name='PartIdDataType'] ProcessingTimesDataType https://reference.opcfoundation.org/v104/MachineVision/v100/docs/12.4 ns=1;i=5016 ns=1;i=5017 i=22 Contains the time when the vision system started execution of the recipe. Contains the time when the vision system finished (or stopped/aborted) execution of the recipe. Time spent by the vision system acquiring images. Time spent by the vision system processing data. ProcessingTimesDataType i=69 ns=1;i=5016 ns=1;i=6001 ProcessingTimesDataType ProcessingTimesDataType i=69 ns=1;i=5017 ns=1;i=6003 //xs:element[@name='ProcessingTimesDataType'] ProductDataType https://reference.opcfoundation.org/v104/MachineVision/v100/docs/12.15 ns=1;i=5272 ns=1;i=5273 i=22 Identification of the product used by the environment. This argument must not be empty. ProductDataType i=69 ns=1;i=5272 ns=1;i=6001 ProductDataType ProductDataType i=69 ns=1;i=5273 ns=1;i=6003 //xs:element[@name='ProductDataType'] ProductIdDataType https://reference.opcfoundation.org/v104/MachineVision/v100/docs/12.16 ns=1;i=5224 ns=1;i=5225 i=22 Id is a system-wide unique identifier/name for identifying the product. Optional short human readable description of the configuration ProductIdDataType i=69 ns=1;i=5224 ns=1;i=6001 ProductIdDataType ProductIdDataType i=69 ns=1;i=5225 ns=1;i=6003 //xs:element[@name='ProductIdDataType'] RecipeTransferOptions https://reference.opcfoundation.org/v104/MachineVision/v100/docs/12.11 ns=1;i=5248 ns=1;i=5249 i=22 The InternalId of the recipe to be transferred to or from the client. RecipeTransferOptions i=69 ns=1;i=5248 ns=1;i=6001 RecipeTransferOptions RecipeTransferOptions i=69 ns=1;i=5249 ns=1;i=6003 //xs:element[@name='RecipeTransferOptions'] ResultDataType https://reference.opcfoundation.org/v104/MachineVision/v100/docs/12.17 ns=1;i=5018 ns=1;i=5019 i=22 System-wide unique identifier, which is assigned by the system. This ID can be used for fetching exactly this result using the pertinent result management methods and it is identical to the ResultId of the ResultReadyEventType. Indicates that additional data for this result can be retrieved by temporary file transfer. Indicates whether the result is the partial result of a total result. Indicates whether the system was in simulation mode when the result was created. ResultState provides information about the current state of a result and the ResultStateDataType is defined in Section 12.18. This identifier is given by the client when starting a single job or continuous execution and transmitted to the vision system. It is used to identify the respective result data generated for this job. Although the system-wide unique JobId would be sufficient to identify the job which the result belongs to, this makes for easier filtering on the part of the client without keeping track of JobIds. A PartId is given by the client when starting the job; although the system-wide unique JobId would be sufficient to identify the job which the result belongs to, this makes for easier filtering on the part of the client without keeping track of JobIds. External Id of the recipe in use which produced the result. The ExternalID is only managed by the environment. Internal Id of the recipe in use which produced the result. This ID is system-wide unique and is assigned by the vision system. productId which was used to trigger the job which created the result. External Id of the configuration in use which produced the result. The ExternalID is only managed by the environment. Internal Id of the configuration in use which produced the result. This ID is system-wide unique and is assigned by the vision system. The ID of the job, created by the transition from state Ready to state SingleExecution or to state ContinuousExecution which produced the result. CreationTime indicates the time when the result was created. Collection of different processing times that were needed to create the result. Abstract data type to be subtyped from to hold result data created by the selected recipe. ResultDataType i=69 ns=1;i=5018 ns=1;i=6001 ResultDataType ResultDataType i=69 ns=1;i=5019 ns=1;i=6003 //xs:element[@name='ResultDataType'] ResultIdDataType https://reference.opcfoundation.org/v104/MachineVision/v100/docs/12.18 ns=1;i=5274 ns=1;i=5275 i=22 Id is a system-wide unique identifier/name for identifying the generated result. ResultIdDataType i=69 ns=1;i=5274 ns=1;i=6001 ResultIdDataType ResultIdDataType i=69 ns=1;i=5275 ns=1;i=6003 //xs:element[@name='ResultIdDataType'] ResultTransferOptions https://reference.opcfoundation.org/v104/MachineVision/v100/docs/12.20 ns=1;i=5276 ns=1;i=5277 i=22 The Id of the result to be transferred to the client. ResultTransferOptions i=69 ns=1;i=5276 ns=1;i=6001 ResultTransferOptions ResultTransferOptions i=69 ns=1;i=5277 ns=1;i=6003 //xs:element[@name='ResultTransferOptions'] SystemStateDescriptionDataType https://reference.opcfoundation.org/v104/MachineVision/v100/docs/12.22 ns=1;i=5278 ns=1;i=5279 i=22 Denotes one of the basic SEMI E10 states Optional string describing the full state path, starting with the SEMI E10 state denoted by the state member; the string format is described in Section 11.5. SystemStateDescriptionDataType i=69 ns=1;i=5278 ns=1;i=6001 SystemStateDescriptionDataType SystemStateDescriptionDataType i=69 ns=1;i=5279 ns=1;i=6003 //xs:element[@name='SystemStateDescriptionDataType'] TypeDictionary Collects the data type descriptions of http://opcfoundation.org/UA/MachineVision ns=1;i=6033 ns=1;i=6352 ns=1;i=6354 ns=1;i=6125 i=72 ns=1;i=6030 ns=1;i=6028 ns=1;i=6002 ns=1;i=6072 ns=1;i=6074 ns=1;i=6037 ns=1;i=6071 ns=1;i=6021 ns=1;i=6035 ns=1;i=6188 ns=1;i=6076 ns=1;i=6039 ns=1;i=6127 ns=1;i=6130 i=93 PG9wYzpUeXBlRGljdGlvbmFyeSB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZ W1hLWluc3RhbmNlIiB4bWxuczp0bnM9Imh0dHA6Ly9vcGNmb3VuZGF0aW9uLm9yZy9VQS9NY WNoaW5lVmlzaW9uIiBEZWZhdWx0Qnl0ZU9yZGVyPSJMaXR0bGVFbmRpYW4iIHhtbG5zOm9wY z0iaHR0cDovL29wY2ZvdW5kYXRpb24ub3JnL0JpbmFyeVNjaGVtYS8iIHhtbG5zOnVhPSJod HRwOi8vb3BjZm91bmRhdGlvbi5vcmcvVUEvIiBUYXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9vc GNmb3VuZGF0aW9uLm9yZy9VQS9NYWNoaW5lVmlzaW9uIj4KIDxvcGM6SW1wb3J0IE5hbWVzc GFjZT0iaHR0cDovL29wY2ZvdW5kYXRpb24ub3JnL1VBLyIvPgogPG9wYzpTdHJ1Y3R1cmVkV HlwZSBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0IiBOYW1lPSJCaW5hcnlJZEJhc2VEY XRhVHlwZSI+CiAgPG9wYzpGaWVsZCBUeXBlTmFtZT0ib3BjOkJpdCIgTmFtZT0iVmVyc2lvb lNwZWNpZmllZCIvPgogIDxvcGM6RmllbGQgVHlwZU5hbWU9Im9wYzpCaXQiIE5hbWU9Ikhhc 2hTcGVjaWZpZWQiLz4KICA8b3BjOkZpZWxkIFR5cGVOYW1lPSJvcGM6Qml0IiBOYW1lPSJIY XNoQWxnb3JpdGhtU3BlY2lmaWVkIi8+CiAgPG9wYzpGaWVsZCBUeXBlTmFtZT0ib3BjOkJpd CIgTmFtZT0iRGVzY3JpcHRpb25TcGVjaWZpZWQiLz4KICA8b3BjOkZpZWxkIExlbmd0aD0iM jgiIFR5cGVOYW1lPSJvcGM6Qml0IiBOYW1lPSJSZXNlcnZlZDEiLz4KICA8b3BjOkZpZWxkI FR5cGVOYW1lPSJvcGM6Q2hhckFycmF5IiBOYW1lPSJJZCIvPgogIDxvcGM6RmllbGQgU3dpd GNoRmllbGQ9IlZlcnNpb25TcGVjaWZpZWQiIFR5cGVOYW1lPSJvcGM6Q2hhckFycmF5IiBOY W1lPSJWZXJzaW9uIi8+CiAgPG9wYzpGaWVsZCBTd2l0Y2hGaWVsZD0iSGFzaFNwZWNpZmllZ CIgVHlwZU5hbWU9Im9wYzpCeXRlU3RyaW5nIiBOYW1lPSJIYXNoIi8+CiAgPG9wYzpGaWVsZ CBTd2l0Y2hGaWVsZD0iSGFzaEFsZ29yaXRobVNwZWNpZmllZCIgVHlwZU5hbWU9Im9wYzpDa GFyQXJyYXkiIE5hbWU9Ikhhc2hBbGdvcml0aG0iLz4KICA8b3BjOkZpZWxkIFN3aXRjaEZpZ WxkPSJEZXNjcmlwdGlvblNwZWNpZmllZCIgVHlwZU5hbWU9InVhOkxvY2FsaXplZFRleHQiI E5hbWU9IkRlc2NyaXB0aW9uIi8+CiA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4KIDxvcGM6U3Ryd WN0dXJlZFR5cGUgQmFzZVR5cGU9InRuczpCaW5hcnlJZEJhc2VEYXRhVHlwZSIgTmFtZT0iQ 29uZmlndXJhdGlvbklkRGF0YVR5cGUiPgogIDxvcGM6RmllbGQgVHlwZU5hbWU9Im9wYzpCa XQiIE5hbWU9IlZlcnNpb25TcGVjaWZpZWQiLz4KICA8b3BjOkZpZWxkIFR5cGVOYW1lPSJvc GM6Qml0IiBOYW1lPSJIYXNoU3BlY2lmaWVkIi8+CiAgPG9wYzpGaWVsZCBUeXBlTmFtZT0ib 3BjOkJpdCIgTmFtZT0iSGFzaEFsZ29yaXRobVNwZWNpZmllZCIvPgogIDxvcGM6RmllbGQgV HlwZU5hbWU9Im9wYzpCaXQiIE5hbWU9IkRlc2NyaXB0aW9uU3BlY2lmaWVkIi8+CiAgPG9wY zpGaWVsZCBMZW5ndGg9IjI4IiBUeXBlTmFtZT0ib3BjOkJpdCIgTmFtZT0iUmVzZXJ2ZWQxI i8+CiAgPG9wYzpGaWVsZCBTb3VyY2VUeXBlPSJ0bnM6QmluYXJ5SWRCYXNlRGF0YVR5cGUiI FR5cGVOYW1lPSJvcGM6Q2hhckFycmF5IiBOYW1lPSJJZCIvPgogIDxvcGM6RmllbGQgU3dpd GNoRmllbGQ9IlZlcnNpb25TcGVjaWZpZWQiIFNvdXJjZVR5cGU9InRuczpCaW5hcnlJZEJhc 2VEYXRhVHlwZSIgVHlwZU5hbWU9Im9wYzpDaGFyQXJyYXkiIE5hbWU9IlZlcnNpb24iLz4KI CA8b3BjOkZpZWxkIFN3aXRjaEZpZWxkPSJIYXNoU3BlY2lmaWVkIiBTb3VyY2VUeXBlPSJ0b nM6QmluYXJ5SWRCYXNlRGF0YVR5cGUiIFR5cGVOYW1lPSJvcGM6Qnl0ZVN0cmluZyIgTmFtZ T0iSGFzaCIvPgogIDxvcGM6RmllbGQgU3dpdGNoRmllbGQ9Ikhhc2hBbGdvcml0aG1TcGVja WZpZWQiIFNvdXJjZVR5cGU9InRuczpCaW5hcnlJZEJhc2VEYXRhVHlwZSIgVHlwZU5hbWU9I m9wYzpDaGFyQXJyYXkiIE5hbWU9Ikhhc2hBbGdvcml0aG0iLz4KICA8b3BjOkZpZWxkIFN3a XRjaEZpZWxkPSJEZXNjcmlwdGlvblNwZWNpZmllZCIgU291cmNlVHlwZT0idG5zOkJpbmFye UlkQmFzZURhdGFUeXBlIiBUeXBlTmFtZT0idWE6TG9jYWxpemVkVGV4dCIgTmFtZT0iRGVzY 3JpcHRpb24iLz4KIDwvb3BjOlN0cnVjdHVyZWRUeXBlPgogPG9wYzpTdHJ1Y3R1cmVkVHlwZ SBCYXNlVHlwZT0idG5zOkJpbmFyeUlkQmFzZURhdGFUeXBlIiBOYW1lPSJSZWNpcGVJZEV4d GVybmFsRGF0YVR5cGUiPgogIDxvcGM6RmllbGQgVHlwZU5hbWU9Im9wYzpCaXQiIE5hbWU9I lZlcnNpb25TcGVjaWZpZWQiLz4KICA8b3BjOkZpZWxkIFR5cGVOYW1lPSJvcGM6Qml0IiBOY W1lPSJIYXNoU3BlY2lmaWVkIi8+CiAgPG9wYzpGaWVsZCBUeXBlTmFtZT0ib3BjOkJpdCIgT mFtZT0iSGFzaEFsZ29yaXRobVNwZWNpZmllZCIvPgogIDxvcGM6RmllbGQgVHlwZU5hbWU9I m9wYzpCaXQiIE5hbWU9IkRlc2NyaXB0aW9uU3BlY2lmaWVkIi8+CiAgPG9wYzpGaWVsZCBMZ W5ndGg9IjI4IiBUeXBlTmFtZT0ib3BjOkJpdCIgTmFtZT0iUmVzZXJ2ZWQxIi8+CiAgPG9wY zpGaWVsZCBTb3VyY2VUeXBlPSJ0bnM6QmluYXJ5SWRCYXNlRGF0YVR5cGUiIFR5cGVOYW1lP SJvcGM6Q2hhckFycmF5IiBOYW1lPSJJZCIvPgogIDxvcGM6RmllbGQgU3dpdGNoRmllbGQ9I lZlcnNpb25TcGVjaWZpZWQiIFNvdXJjZVR5cGU9InRuczpCaW5hcnlJZEJhc2VEYXRhVHlwZ SIgVHlwZU5hbWU9Im9wYzpDaGFyQXJyYXkiIE5hbWU9IlZlcnNpb24iLz4KICA8b3BjOkZpZ WxkIFN3aXRjaEZpZWxkPSJIYXNoU3BlY2lmaWVkIiBTb3VyY2VUeXBlPSJ0bnM6QmluYXJ5S WRCYXNlRGF0YVR5cGUiIFR5cGVOYW1lPSJvcGM6Qnl0ZVN0cmluZyIgTmFtZT0iSGFzaCIvP gogIDxvcGM6RmllbGQgU3dpdGNoRmllbGQ9Ikhhc2hBbGdvcml0aG1TcGVjaWZpZWQiIFNvd XJjZVR5cGU9InRuczpCaW5hcnlJZEJhc2VEYXRhVHlwZSIgVHlwZU5hbWU9Im9wYzpDaGFyQ XJyYXkiIE5hbWU9Ikhhc2hBbGdvcml0aG0iLz4KICA8b3BjOkZpZWxkIFN3aXRjaEZpZWxkP SJEZXNjcmlwdGlvblNwZWNpZmllZCIgU291cmNlVHlwZT0idG5zOkJpbmFyeUlkQmFzZURhd GFUeXBlIiBUeXBlTmFtZT0idWE6TG9jYWxpemVkVGV4dCIgTmFtZT0iRGVzY3JpcHRpb24iL z4KIDwvb3BjOlN0cnVjdHVyZWRUeXBlPgogPG9wYzpTdHJ1Y3R1cmVkVHlwZSBCYXNlVHlwZ T0idG5zOkJpbmFyeUlkQmFzZURhdGFUeXBlIiBOYW1lPSJSZWNpcGVJZEludGVybmFsRGF0Y VR5cGUiPgogIDxvcGM6RmllbGQgVHlwZU5hbWU9Im9wYzpCaXQiIE5hbWU9IlZlcnNpb25Tc GVjaWZpZWQiLz4KICA8b3BjOkZpZWxkIFR5cGVOYW1lPSJvcGM6Qml0IiBOYW1lPSJIYXNoU 3BlY2lmaWVkIi8+CiAgPG9wYzpGaWVsZCBUeXBlTmFtZT0ib3BjOkJpdCIgTmFtZT0iSGFza EFsZ29yaXRobVNwZWNpZmllZCIvPgogIDxvcGM6RmllbGQgVHlwZU5hbWU9Im9wYzpCaXQiI E5hbWU9IkRlc2NyaXB0aW9uU3BlY2lmaWVkIi8+CiAgPG9wYzpGaWVsZCBMZW5ndGg9IjI4I iBUeXBlTmFtZT0ib3BjOkJpdCIgTmFtZT0iUmVzZXJ2ZWQxIi8+CiAgPG9wYzpGaWVsZCBTb 3VyY2VUeXBlPSJ0bnM6QmluYXJ5SWRCYXNlRGF0YVR5cGUiIFR5cGVOYW1lPSJvcGM6Q2hhc kFycmF5IiBOYW1lPSJJZCIvPgogIDxvcGM6RmllbGQgU3dpdGNoRmllbGQ9IlZlcnNpb25Tc GVjaWZpZWQiIFNvdXJjZVR5cGU9InRuczpCaW5hcnlJZEJhc2VEYXRhVHlwZSIgVHlwZU5hb WU9Im9wYzpDaGFyQXJyYXkiIE5hbWU9IlZlcnNpb24iLz4KICA8b3BjOkZpZWxkIFN3aXRja EZpZWxkPSJIYXNoU3BlY2lmaWVkIiBTb3VyY2VUeXBlPSJ0bnM6QmluYXJ5SWRCYXNlRGF0Y VR5cGUiIFR5cGVOYW1lPSJvcGM6Qnl0ZVN0cmluZyIgTmFtZT0iSGFzaCIvPgogIDxvcGM6R mllbGQgU3dpdGNoRmllbGQ9Ikhhc2hBbGdvcml0aG1TcGVjaWZpZWQiIFNvdXJjZVR5cGU9I nRuczpCaW5hcnlJZEJhc2VEYXRhVHlwZSIgVHlwZU5hbWU9Im9wYzpDaGFyQXJyYXkiIE5hb WU9Ikhhc2hBbGdvcml0aG0iLz4KICA8b3BjOkZpZWxkIFN3aXRjaEZpZWxkPSJEZXNjcmlwd GlvblNwZWNpZmllZCIgU291cmNlVHlwZT0idG5zOkJpbmFyeUlkQmFzZURhdGFUeXBlIiBUe XBlTmFtZT0idWE6TG9jYWxpemVkVGV4dCIgTmFtZT0iRGVzY3JpcHRpb24iLz4KIDwvb3BjO lN0cnVjdHVyZWRUeXBlPgogPG9wYzpTdHJ1Y3R1cmVkVHlwZSBCYXNlVHlwZT0idWE6RXh0Z W5zaW9uT2JqZWN0IiBOYW1lPSJDb25maWd1cmF0aW9uRGF0YVR5cGUiPgogIDxvcGM6Rmllb GQgVHlwZU5hbWU9Im9wYzpCaXQiIE5hbWU9Ikhhc1RyYW5zZmVyYWJsZURhdGFPbkZpbGVTc GVjaWZpZWQiLz4KICA8b3BjOkZpZWxkIFR5cGVOYW1lPSJvcGM6Qml0IiBOYW1lPSJFeHRlc m5hbElkU3BlY2lmaWVkIi8+CiAgPG9wYzpGaWVsZCBMZW5ndGg9IjMwIiBUeXBlTmFtZT0ib 3BjOkJpdCIgTmFtZT0iUmVzZXJ2ZWQxIi8+CiAgPG9wYzpGaWVsZCBTd2l0Y2hGaWVsZD0iS GFzVHJhbnNmZXJhYmxlRGF0YU9uRmlsZVNwZWNpZmllZCIgVHlwZU5hbWU9Im9wYzpCb29sZ WFuIiBOYW1lPSJIYXNUcmFuc2ZlcmFibGVEYXRhT25GaWxlIi8+CiAgPG9wYzpGaWVsZCBTd 2l0Y2hGaWVsZD0iRXh0ZXJuYWxJZFNwZWNpZmllZCIgVHlwZU5hbWU9InRuczpDb25maWd1c mF0aW9uSWREYXRhVHlwZSIgTmFtZT0iRXh0ZXJuYWxJZCIvPgogIDxvcGM6RmllbGQgVHlwZ U5hbWU9InRuczpDb25maWd1cmF0aW9uSWREYXRhVHlwZSIgTmFtZT0iSW50ZXJuYWxJZCIvP gogIDxvcGM6RmllbGQgVHlwZU5hbWU9Im9wYzpEYXRlVGltZSIgTmFtZT0iTGFzdE1vZGlma WVkIi8+CiA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4KIDxvcGM6U3RydWN0dXJlZFR5cGUgQmFzZ VR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCIgTmFtZT0iQ29uZmlndXJhdGlvblRyYW5zZmVyT 3B0aW9ucyI+CiAgPG9wYzpGaWVsZCBUeXBlTmFtZT0idG5zOkNvbmZpZ3VyYXRpb25JZERhd GFUeXBlIiBOYW1lPSJJbnRlcm5hbElkIi8+CiA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4KIDxvc GM6U3RydWN0dXJlZFR5cGUgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCIgTmFtZT0iS m9iSWREYXRhVHlwZSI+CiAgPG9wYzpGaWVsZCBUeXBlTmFtZT0ib3BjOkNoYXJBcnJheSIgT mFtZT0iSWQiLz4KIDwvb3BjOlN0cnVjdHVyZWRUeXBlPgogPG9wYzpTdHJ1Y3R1cmVkVHlwZ SBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0IiBOYW1lPSJNZWFzSWREYXRhVHlwZSI+C iAgPG9wYzpGaWVsZCBUeXBlTmFtZT0ib3BjOkJpdCIgTmFtZT0iRGVzY3JpcHRpb25TcGVja WZpZWQiLz4KICA8b3BjOkZpZWxkIExlbmd0aD0iMzEiIFR5cGVOYW1lPSJvcGM6Qml0IiBOY W1lPSJSZXNlcnZlZDEiLz4KICA8b3BjOkZpZWxkIFR5cGVOYW1lPSJvcGM6Q2hhckFycmF5I iBOYW1lPSJJZCIvPgogIDxvcGM6RmllbGQgU3dpdGNoRmllbGQ9IkRlc2NyaXB0aW9uU3BlY 2lmaWVkIiBUeXBlTmFtZT0idWE6TG9jYWxpemVkVGV4dCIgTmFtZT0iRGVzY3JpcHRpb24iL z4KIDwvb3BjOlN0cnVjdHVyZWRUeXBlPgogPG9wYzpTdHJ1Y3R1cmVkVHlwZSBCYXNlVHlwZ T0idWE6RXh0ZW5zaW9uT2JqZWN0IiBOYW1lPSJQYXJ0SWREYXRhVHlwZSI+CiAgPG9wYzpGa WVsZCBUeXBlTmFtZT0ib3BjOkJpdCIgTmFtZT0iRGVzY3JpcHRpb25TcGVjaWZpZWQiLz4KI CA8b3BjOkZpZWxkIExlbmd0aD0iMzEiIFR5cGVOYW1lPSJvcGM6Qml0IiBOYW1lPSJSZXNlc nZlZDEiLz4KICA8b3BjOkZpZWxkIFR5cGVOYW1lPSJvcGM6Q2hhckFycmF5IiBOYW1lPSJJZ CIvPgogIDxvcGM6RmllbGQgU3dpdGNoRmllbGQ9IkRlc2NyaXB0aW9uU3BlY2lmaWVkIiBUe XBlTmFtZT0idWE6TG9jYWxpemVkVGV4dCIgTmFtZT0iRGVzY3JpcHRpb24iLz4KIDwvb3BjO lN0cnVjdHVyZWRUeXBlPgogPG9wYzpTdHJ1Y3R1cmVkVHlwZSBCYXNlVHlwZT0idWE6RXh0Z W5zaW9uT2JqZWN0IiBOYW1lPSJQcm9jZXNzaW5nVGltZXNEYXRhVHlwZSI+CiAgPG9wYzpGa WVsZCBUeXBlTmFtZT0ib3BjOkJpdCIgTmFtZT0iQWNxdWlzaXRpb25EdXJhdGlvblNwZWNpZ mllZCIvPgogIDxvcGM6RmllbGQgVHlwZU5hbWU9Im9wYzpCaXQiIE5hbWU9IlByb2Nlc3Npb mdEdXJhdGlvblNwZWNpZmllZCIvPgogIDxvcGM6RmllbGQgTGVuZ3RoPSIzMCIgVHlwZU5hb WU9Im9wYzpCaXQiIE5hbWU9IlJlc2VydmVkMSIvPgogIDxvcGM6RmllbGQgVHlwZU5hbWU9I m9wYzpEYXRlVGltZSIgTmFtZT0iU3RhcnRUaW1lIi8+CiAgPG9wYzpGaWVsZCBUeXBlTmFtZ T0ib3BjOkRhdGVUaW1lIiBOYW1lPSJFbmRUaW1lIi8+CiAgPG9wYzpGaWVsZCBTd2l0Y2hGa WVsZD0iQWNxdWlzaXRpb25EdXJhdGlvblNwZWNpZmllZCIgVHlwZU5hbWU9Im9wYzpEb3Vib GUiIE5hbWU9IkFjcXVpc2l0aW9uRHVyYXRpb24iLz4KICA8b3BjOkZpZWxkIFN3aXRjaEZpZ WxkPSJQcm9jZXNzaW5nRHVyYXRpb25TcGVjaWZpZWQiIFR5cGVOYW1lPSJvcGM6RG91YmxlI iBOYW1lPSJQcm9jZXNzaW5nRHVyYXRpb24iLz4KIDwvb3BjOlN0cnVjdHVyZWRUeXBlPgogP G9wYzpTdHJ1Y3R1cmVkVHlwZSBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0IiBOYW1lP SJQcm9kdWN0RGF0YVR5cGUiPgogIDxvcGM6RmllbGQgVHlwZU5hbWU9InRuczpQcm9kdWN0S WREYXRhVHlwZSIgTmFtZT0iRXh0ZXJuYWxJZCIvPgogPC9vcGM6U3RydWN0dXJlZFR5cGU+C iA8b3BjOlN0cnVjdHVyZWRUeXBlIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiIE5hb WU9IlByb2R1Y3RJZERhdGFUeXBlIj4KICA8b3BjOkZpZWxkIFR5cGVOYW1lPSJvcGM6Qml0I iBOYW1lPSJEZXNjcmlwdGlvblNwZWNpZmllZCIvPgogIDxvcGM6RmllbGQgTGVuZ3RoPSIzM SIgVHlwZU5hbWU9Im9wYzpCaXQiIE5hbWU9IlJlc2VydmVkMSIvPgogIDxvcGM6RmllbGQgV HlwZU5hbWU9Im9wYzpDaGFyQXJyYXkiIE5hbWU9IklkIi8+CiAgPG9wYzpGaWVsZCBTd2l0Y 2hGaWVsZD0iRGVzY3JpcHRpb25TcGVjaWZpZWQiIFR5cGVOYW1lPSJ1YTpMb2NhbGl6ZWRUZ Xh0IiBOYW1lPSJEZXNjcmlwdGlvbiIvPgogPC9vcGM6U3RydWN0dXJlZFR5cGU+CiA8b3BjO lN0cnVjdHVyZWRUeXBlIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiIE5hbWU9IlJlY 2lwZVRyYW5zZmVyT3B0aW9ucyI+CiAgPG9wYzpGaWVsZCBUeXBlTmFtZT0idG5zOlJlY2lwZ UlkSW50ZXJuYWxEYXRhVHlwZSIgTmFtZT0iSW50ZXJuYWxJZCIvPgogPC9vcGM6U3RydWN0d XJlZFR5cGU+CiA8b3BjOlN0cnVjdHVyZWRUeXBlIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PY mplY3QiIE5hbWU9IlJlc3VsdERhdGFUeXBlIj4KICA8b3BjOkZpZWxkIFR5cGVOYW1lPSJvc GM6Qml0IiBOYW1lPSJIYXNUcmFuc2ZlcmFibGVEYXRhT25GaWxlU3BlY2lmaWVkIi8+CiAgP G9wYzpGaWVsZCBUeXBlTmFtZT0ib3BjOkJpdCIgTmFtZT0iSXNTaW11bGF0ZWRTcGVjaWZpZ WQiLz4KICA8b3BjOkZpZWxkIFR5cGVOYW1lPSJvcGM6Qml0IiBOYW1lPSJNZWFzSWRTcGVja WZpZWQiLz4KICA8b3BjOkZpZWxkIFR5cGVOYW1lPSJvcGM6Qml0IiBOYW1lPSJQYXJ0SWRTc GVjaWZpZWQiLz4KICA8b3BjOkZpZWxkIFR5cGVOYW1lPSJvcGM6Qml0IiBOYW1lPSJFeHRlc m5hbFJlY2lwZUlkU3BlY2lmaWVkIi8+CiAgPG9wYzpGaWVsZCBUeXBlTmFtZT0ib3BjOkJpd CIgTmFtZT0iUHJvZHVjdElkU3BlY2lmaWVkIi8+CiAgPG9wYzpGaWVsZCBUeXBlTmFtZT0ib 3BjOkJpdCIgTmFtZT0iRXh0ZXJuYWxDb25maWd1cmF0aW9uSWRTcGVjaWZpZWQiLz4KICA8b 3BjOkZpZWxkIFR5cGVOYW1lPSJvcGM6Qml0IiBOYW1lPSJQcm9jZXNzaW5nVGltZXNTcGVja WZpZWQiLz4KICA8b3BjOkZpZWxkIFR5cGVOYW1lPSJvcGM6Qml0IiBOYW1lPSJSZXN1bHRDb 250ZW50U3BlY2lmaWVkIi8+CiAgPG9wYzpGaWVsZCBMZW5ndGg9IjIzIiBUeXBlTmFtZT0ib 3BjOkJpdCIgTmFtZT0iUmVzZXJ2ZWQxIi8+CiAgPG9wYzpGaWVsZCBUeXBlTmFtZT0idG5zO lJlc3VsdElkRGF0YVR5cGUiIE5hbWU9IlJlc3VsdElkIi8+CiAgPG9wYzpGaWVsZCBTd2l0Y 2hGaWVsZD0iSGFzVHJhbnNmZXJhYmxlRGF0YU9uRmlsZVNwZWNpZmllZCIgVHlwZU5hbWU9I m9wYzpCb29sZWFuIiBOYW1lPSJIYXNUcmFuc2ZlcmFibGVEYXRhT25GaWxlIi8+CiAgPG9wY zpGaWVsZCBUeXBlTmFtZT0ib3BjOkJvb2xlYW4iIE5hbWU9IklzUGFydGlhbCIvPgogIDxvc GM6RmllbGQgU3dpdGNoRmllbGQ9IklzU2ltdWxhdGVkU3BlY2lmaWVkIiBUeXBlTmFtZT0ib 3BjOkJvb2xlYW4iIE5hbWU9IklzU2ltdWxhdGVkIi8+CiAgPG9wYzpGaWVsZCBUeXBlTmFtZ T0ib3BjOkludDMyIiBOYW1lPSJSZXN1bHRTdGF0ZSIvPgogIDxvcGM6RmllbGQgU3dpdGNoR mllbGQ9Ik1lYXNJZFNwZWNpZmllZCIgVHlwZU5hbWU9InRuczpNZWFzSWREYXRhVHlwZSIgT mFtZT0iTWVhc0lkIi8+CiAgPG9wYzpGaWVsZCBTd2l0Y2hGaWVsZD0iUGFydElkU3BlY2lma WVkIiBUeXBlTmFtZT0idG5zOlBhcnRJZERhdGFUeXBlIiBOYW1lPSJQYXJ0SWQiLz4KICA8b 3BjOkZpZWxkIFN3aXRjaEZpZWxkPSJFeHRlcm5hbFJlY2lwZUlkU3BlY2lmaWVkIiBUeXBlT mFtZT0idG5zOlJlY2lwZUlkRXh0ZXJuYWxEYXRhVHlwZSIgTmFtZT0iRXh0ZXJuYWxSZWNpc GVJZCIvPgogIDxvcGM6RmllbGQgVHlwZU5hbWU9InRuczpSZWNpcGVJZEludGVybmFsRGF0Y VR5cGUiIE5hbWU9IkludGVybmFsUmVjaXBlSWQiLz4KICA8b3BjOkZpZWxkIFN3aXRjaEZpZ WxkPSJQcm9kdWN0SWRTcGVjaWZpZWQiIFR5cGVOYW1lPSJ0bnM6UHJvZHVjdElkRGF0YVR5c GUiIE5hbWU9IlByb2R1Y3RJZCIvPgogIDxvcGM6RmllbGQgU3dpdGNoRmllbGQ9IkV4dGVyb mFsQ29uZmlndXJhdGlvbklkU3BlY2lmaWVkIiBUeXBlTmFtZT0idG5zOkNvbmZpZ3VyYXRpb 25JZERhdGFUeXBlIiBOYW1lPSJFeHRlcm5hbENvbmZpZ3VyYXRpb25JZCIvPgogIDxvcGM6R mllbGQgVHlwZU5hbWU9InRuczpDb25maWd1cmF0aW9uSWREYXRhVHlwZSIgTmFtZT0iSW50Z XJuYWxDb25maWd1cmF0aW9uSWQiLz4KICA8b3BjOkZpZWxkIFR5cGVOYW1lPSJ0bnM6Sm9iS WREYXRhVHlwZSIgTmFtZT0iSm9iSWQiLz4KICA8b3BjOkZpZWxkIFR5cGVOYW1lPSJvcGM6R GF0ZVRpbWUiIE5hbWU9IkNyZWF0aW9uVGltZSIvPgogIDxvcGM6RmllbGQgU3dpdGNoRmllb GQ9IlByb2Nlc3NpbmdUaW1lc1NwZWNpZmllZCIgVHlwZU5hbWU9InRuczpQcm9jZXNzaW5nV GltZXNEYXRhVHlwZSIgTmFtZT0iUHJvY2Vzc2luZ1RpbWVzIi8+CiAgPG9wYzpGaWVsZCBTd 2l0Y2hGaWVsZD0iUmVzdWx0Q29udGVudFNwZWNpZmllZCIgVHlwZU5hbWU9Im9wYzpJbnQzM iIgTmFtZT0iTm9PZlJlc3VsdENvbnRlbnQiLz4KICA8b3BjOkZpZWxkIExlbmd0aEZpZWxkP SJOb09mUmVzdWx0Q29udGVudCIgU3dpdGNoRmllbGQ9IlJlc3VsdENvbnRlbnRTcGVjaWZpZ WQiIFR5cGVOYW1lPSJ1YTpWYXJpYW50IiBOYW1lPSJSZXN1bHRDb250ZW50Ii8+CiA8L29wY zpTdHJ1Y3R1cmVkVHlwZT4KIDxvcGM6U3RydWN0dXJlZFR5cGUgQmFzZVR5cGU9InVhOkV4d GVuc2lvbk9iamVjdCIgTmFtZT0iUmVzdWx0SWREYXRhVHlwZSI+CiAgPG9wYzpGaWVsZCBUe XBlTmFtZT0ib3BjOkNoYXJBcnJheSIgTmFtZT0iSWQiLz4KIDwvb3BjOlN0cnVjdHVyZWRUe XBlPgogPG9wYzpTdHJ1Y3R1cmVkVHlwZSBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0I iBOYW1lPSJSZXN1bHRUcmFuc2Zlck9wdGlvbnMiPgogIDxvcGM6RmllbGQgVHlwZU5hbWU9I nRuczpSZXN1bHRJZERhdGFUeXBlIiBOYW1lPSJJZCIvPgogPC9vcGM6U3RydWN0dXJlZFR5c GU+CiA8b3BjOlN0cnVjdHVyZWRUeXBlIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiI E5hbWU9IlN5c3RlbVN0YXRlRGVzY3JpcHRpb25EYXRhVHlwZSI+CiAgPG9wYzpGaWVsZCBUe XBlTmFtZT0ib3BjOkJpdCIgTmFtZT0iU3RhdGVEZXNjcmlwdGlvblNwZWNpZmllZCIvPgogI DxvcGM6RmllbGQgTGVuZ3RoPSIzMSIgVHlwZU5hbWU9Im9wYzpCaXQiIE5hbWU9IlJlc2Vyd mVkMSIvPgogIDxvcGM6RmllbGQgVHlwZU5hbWU9InRuczpTeXN0ZW1TdGF0ZURhdGFUeXBlI iBOYW1lPSJTdGF0ZSIvPgogIDxvcGM6RmllbGQgU3dpdGNoRmllbGQ9IlN0YXRlRGVzY3Jpc HRpb25TcGVjaWZpZWQiIFR5cGVOYW1lPSJvcGM6Q2hhckFycmF5IiBOYW1lPSJTdGF0ZURlc 2NyaXB0aW9uIi8+CiA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4KIDxvcGM6RW51bWVyYXRlZFR5c GUgTGVuZ3RoSW5CaXRzPSIzMiIgTmFtZT0iU3lzdGVtU3RhdGVEYXRhVHlwZSI+CiAgPG9wY zpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iUFJEXzEiIFZhbHVlPSIxIi8+CiAgPG9wYzpFbnVtZ XJhdGVkVmFsdWUgTmFtZT0iU0JZXzIiIFZhbHVlPSIyIi8+CiAgPG9wYzpFbnVtZXJhdGVkV mFsdWUgTmFtZT0iRU5HXzMiIFZhbHVlPSIzIi8+CiAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgT mFtZT0iU0RUXzQiIFZhbHVlPSI0Ii8+CiAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iV URUXzUiIFZhbHVlPSI1Ii8+CiAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iTlNUXzYiI FZhbHVlPSI2Ii8+CiA8L29wYzpFbnVtZXJhdGVkVHlwZT4KIDxvcGM6RW51bWVyYXRlZFR5c GUgTGVuZ3RoSW5CaXRzPSIzMiIgTmFtZT0iVHJpU3RhdGVCb29sZWFuRGF0YVR5cGUiPgogI DxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkZBTFNFXzAiIFZhbHVlPSIwIi8+CiAgPG9wY zpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iVFJVRV8xIiBWYWx1ZT0iMSIvPgogIDxvcGM6RW51b WVyYXRlZFZhbHVlIE5hbWU9IkRPTlRDQVJFXzIiIFZhbHVlPSIyIi8+CiA8L29wYzpFbnVtZ XJhdGVkVHlwZT4KPC9vcGM6VHlwZURpY3Rpb25hcnk+Cg== NamespaceUri ns=1;i=6001 i=68 http://opcfoundation.org/UA/MachineVision TypeDictionary Collects the data type descriptions of http://opcfoundation.org/UA/MachineVision ns=1;i=6034 ns=1;i=6353 ns=1;i=6355 ns=1;i=6126 i=72 ns=1;i=6031 ns=1;i=6029 ns=1;i=6020 ns=1;i=6073 ns=1;i=6075 ns=1;i=6038 ns=1;i=6093 ns=1;i=6022 ns=1;i=6036 ns=1;i=6189 ns=1;i=6077 ns=1;i=6040 ns=1;i=6128 ns=1;i=6131 i=92 PHhzOnNjaGVtYSBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgdGFyZ2V0TmFtZXNwYWNlPSJod HRwOi8vb3BjZm91bmRhdGlvbi5vcmcvVUEvTWFjaGluZVZpc2lvbi9UeXBlcy54c2QiIHhtb G5zOnRucz0iaHR0cDovL29wY2ZvdW5kYXRpb24ub3JnL1VBL01hY2hpbmVWaXNpb24vVHlwZ XMueHNkIiB4bWxuczp1YT0iaHR0cDovL29wY2ZvdW5kYXRpb24ub3JnL1VBLzIwMDgvMDIvV HlwZXMueHNkIiB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiP gogPHhzOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly9vcGNmb3VuZGF0aW9uLm9yZy9VQS8yM DA4LzAyL1R5cGVzLnhzZCIvPgogPHhzOnNpbXBsZVR5cGUgbmFtZT0iU3lzdGVtU3RhdGVEY XRhVHlwZSI+CiAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnN0cmluZyI+CiAgIDx4czplb nVtZXJhdGlvbiB2YWx1ZT0iUFJEXzFfMSIvPgogICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9I lNCWV8yXzIiLz4KICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJFTkdfM18zIi8+CiAgIDx4c zplbnVtZXJhdGlvbiB2YWx1ZT0iU0RUXzRfNCIvPgogICA8eHM6ZW51bWVyYXRpb24gdmFsd WU9IlVEVF81XzUiLz4KICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJOU1RfNl82Ii8+CiAgP C94czpyZXN0cmljdGlvbj4KIDwveHM6c2ltcGxlVHlwZT4KIDx4czplbGVtZW50IHR5cGU9I nRuczpTeXN0ZW1TdGF0ZURhdGFUeXBlIiBuYW1lPSJTeXN0ZW1TdGF0ZURhdGFUeXBlIi8+C iA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mU3lzdGVtU3RhdGVEYXRhVHlwZSI+CiAgP HhzOnNlcXVlbmNlPgogICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0id W5ib3VuZGVkIiB0eXBlPSJ0bnM6U3lzdGVtU3RhdGVEYXRhVHlwZSIgbmFtZT0iU3lzdGVtU 3RhdGVEYXRhVHlwZSIgbmlsbGFibGU9InRydWUiLz4KICA8L3hzOnNlcXVlbmNlPgogPC94c zpjb21wbGV4VHlwZT4KIDx4czplbGVtZW50IHR5cGU9InRuczpMaXN0T2ZTeXN0ZW1TdGF0Z URhdGFUeXBlIiBuYW1lPSJMaXN0T2ZTeXN0ZW1TdGF0ZURhdGFUeXBlIiBuaWxsYWJsZT0id HJ1ZSIvPgogPHhzOnNpbXBsZVR5cGUgbmFtZT0iVHJpU3RhdGVCb29sZWFuRGF0YVR5cGUiP gogIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpzdHJpbmciPgogICA8eHM6ZW51bWVyYXRpb 24gdmFsdWU9IkZBTFNFXzBfMCIvPgogICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlRSVUVfM V8xIi8+CiAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iRE9OVENBUkVfMl8yIi8+CiAgPC94c zpyZXN0cmljdGlvbj4KIDwveHM6c2ltcGxlVHlwZT4KIDx4czplbGVtZW50IHR5cGU9InRuc zpUcmlTdGF0ZUJvb2xlYW5EYXRhVHlwZSIgbmFtZT0iVHJpU3RhdGVCb29sZWFuRGF0YVR5c GUiLz4KIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZUcmlTdGF0ZUJvb2xlYW5EYXRhV HlwZSI+CiAgPHhzOnNlcXVlbmNlPgogICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1he E9jY3Vycz0idW5ib3VuZGVkIiB0eXBlPSJ0bnM6VHJpU3RhdGVCb29sZWFuRGF0YVR5cGUiI G5hbWU9IlRyaVN0YXRlQm9vbGVhbkRhdGFUeXBlIiBuaWxsYWJsZT0idHJ1ZSIvPgogIDwve HM6c2VxdWVuY2U+CiA8L3hzOmNvbXBsZXhUeXBlPgogPHhzOmVsZW1lbnQgdHlwZT0idG5zO kxpc3RPZlRyaVN0YXRlQm9vbGVhbkRhdGFUeXBlIiBuYW1lPSJMaXN0T2ZUcmlTdGF0ZUJvb 2xlYW5EYXRhVHlwZSIgbmlsbGFibGU9InRydWUiLz4KIDx4czpjb21wbGV4VHlwZSBuYW1lP SJCaW5hcnlJZEJhc2VEYXRhVHlwZSI+CiAgPHhzOnNlcXVlbmNlPgogICA8eHM6ZWxlbWVud CBtaW5PY2N1cnM9IjAiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBuYW1lPSJFbmNvZGluZ01hc 2siLz4KICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9IjEiIHR5cGU9I nhzOnN0cmluZyIgbmFtZT0iSWQiLz4KICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtY XhPY2N1cnM9IjEiIHR5cGU9InhzOnN0cmluZyIgbmFtZT0iVmVyc2lvbiIvPgogICA8eHM6Z WxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0iMSIgdHlwZT0ieHM6YmFzZTY0QmluY XJ5IiBuYW1lPSJIYXNoIi8+CiAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2Njd XJzPSIxIiB0eXBlPSJ4czpzdHJpbmciIG5hbWU9Ikhhc2hBbGdvcml0aG0iLz4KICAgPHhzO mVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9IjEiIHR5cGU9InVhOkxvY2FsaXplZ FRleHQiIG5hbWU9IkRlc2NyaXB0aW9uIi8+CiAgPC94czpzZXF1ZW5jZT4KIDwveHM6Y29tc GxleFR5cGU+CiA8eHM6ZWxlbWVudCB0eXBlPSJ0bnM6QmluYXJ5SWRCYXNlRGF0YVR5cGUiI G5hbWU9IkJpbmFyeUlkQmFzZURhdGFUeXBlIi8+CiA8eHM6Y29tcGxleFR5cGUgbmFtZT0iT GlzdE9mQmluYXJ5SWRCYXNlRGF0YVR5cGUiPgogIDx4czpzZXF1ZW5jZT4KICAgPHhzOmVsZ W1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgdHlwZT0idG5zOkJpb mFyeUlkQmFzZURhdGFUeXBlIiBuYW1lPSJCaW5hcnlJZEJhc2VEYXRhVHlwZSIgbmlsbGFib GU9InRydWUiLz4KICA8L3hzOnNlcXVlbmNlPgogPC94czpjb21wbGV4VHlwZT4KIDx4czplb GVtZW50IHR5cGU9InRuczpMaXN0T2ZCaW5hcnlJZEJhc2VEYXRhVHlwZSIgbmFtZT0iTGlzd E9mQmluYXJ5SWRCYXNlRGF0YVR5cGUiIG5pbGxhYmxlPSJ0cnVlIi8+CiA8eHM6Y29tcGxle FR5cGUgbmFtZT0iQ29uZmlndXJhdGlvbklkRGF0YVR5cGUiPgogIDx4czpjb21wbGV4Q29ud GVudCBtaXhlZD0iZmFsc2UiPgogICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpCaW5hcnlJZ EJhc2VEYXRhVHlwZSI+CiAgICA8eHM6c2VxdWVuY2UvPgogICA8L3hzOmV4dGVuc2lvbj4KI CA8L3hzOmNvbXBsZXhDb250ZW50PgogPC94czpjb21wbGV4VHlwZT4KIDx4czplbGVtZW50I HR5cGU9InRuczpDb25maWd1cmF0aW9uSWREYXRhVHlwZSIgbmFtZT0iQ29uZmlndXJhdGlvb klkRGF0YVR5cGUiLz4KIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZDb25maWd1cmF0a W9uSWREYXRhVHlwZSI+CiAgPHhzOnNlcXVlbmNlPgogICA8eHM6ZWxlbWVudCBtaW5PY2N1c nM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiB0eXBlPSJ0bnM6Q29uZmlndXJhdGlvbklkR GF0YVR5cGUiIG5hbWU9IkNvbmZpZ3VyYXRpb25JZERhdGFUeXBlIiBuaWxsYWJsZT0idHJ1Z SIvPgogIDwveHM6c2VxdWVuY2U+CiA8L3hzOmNvbXBsZXhUeXBlPgogPHhzOmVsZW1lbnQgd HlwZT0idG5zOkxpc3RPZkNvbmZpZ3VyYXRpb25JZERhdGFUeXBlIiBuYW1lPSJMaXN0T2ZDb 25maWd1cmF0aW9uSWREYXRhVHlwZSIgbmlsbGFibGU9InRydWUiLz4KIDx4czpjb21wbGV4V HlwZSBuYW1lPSJSZWNpcGVJZEV4dGVybmFsRGF0YVR5cGUiPgogIDx4czpjb21wbGV4Q29ud GVudCBtaXhlZD0iZmFsc2UiPgogICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpCaW5hcnlJZ EJhc2VEYXRhVHlwZSI+CiAgICA8eHM6c2VxdWVuY2UvPgogICA8L3hzOmV4dGVuc2lvbj4KI CA8L3hzOmNvbXBsZXhDb250ZW50PgogPC94czpjb21wbGV4VHlwZT4KIDx4czplbGVtZW50I HR5cGU9InRuczpSZWNpcGVJZEV4dGVybmFsRGF0YVR5cGUiIG5hbWU9IlJlY2lwZUlkRXh0Z XJuYWxEYXRhVHlwZSIvPgogPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZlJlY2lwZUlkR Xh0ZXJuYWxEYXRhVHlwZSI+CiAgPHhzOnNlcXVlbmNlPgogICA8eHM6ZWxlbWVudCBtaW5PY 2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiB0eXBlPSJ0bnM6UmVjaXBlSWRFeHRlc m5hbERhdGFUeXBlIiBuYW1lPSJSZWNpcGVJZEV4dGVybmFsRGF0YVR5cGUiIG5pbGxhYmxlP SJ0cnVlIi8+CiAgPC94czpzZXF1ZW5jZT4KIDwveHM6Y29tcGxleFR5cGU+CiA8eHM6ZWxlb WVudCB0eXBlPSJ0bnM6TGlzdE9mUmVjaXBlSWRFeHRlcm5hbERhdGFUeXBlIiBuYW1lPSJMa XN0T2ZSZWNpcGVJZEV4dGVybmFsRGF0YVR5cGUiIG5pbGxhYmxlPSJ0cnVlIi8+CiA8eHM6Y 29tcGxleFR5cGUgbmFtZT0iUmVjaXBlSWRJbnRlcm5hbERhdGFUeXBlIj4KICA8eHM6Y29tc GxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4KICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0bnM6Q mluYXJ5SWRCYXNlRGF0YVR5cGUiPgogICAgPHhzOnNlcXVlbmNlLz4KICAgPC94czpleHRlb nNpb24+CiAgPC94czpjb21wbGV4Q29udGVudD4KIDwveHM6Y29tcGxleFR5cGU+CiA8eHM6Z WxlbWVudCB0eXBlPSJ0bnM6UmVjaXBlSWRJbnRlcm5hbERhdGFUeXBlIiBuYW1lPSJSZWNpc GVJZEludGVybmFsRGF0YVR5cGUiLz4KIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZSZ WNpcGVJZEludGVybmFsRGF0YVR5cGUiPgogIDx4czpzZXF1ZW5jZT4KICAgPHhzOmVsZW1lb nQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgdHlwZT0idG5zOlJlY2lwZ UlkSW50ZXJuYWxEYXRhVHlwZSIgbmFtZT0iUmVjaXBlSWRJbnRlcm5hbERhdGFUeXBlIiBua WxsYWJsZT0idHJ1ZSIvPgogIDwveHM6c2VxdWVuY2U+CiA8L3hzOmNvbXBsZXhUeXBlPgogP HhzOmVsZW1lbnQgdHlwZT0idG5zOkxpc3RPZlJlY2lwZUlkSW50ZXJuYWxEYXRhVHlwZSIgb mFtZT0iTGlzdE9mUmVjaXBlSWRJbnRlcm5hbERhdGFUeXBlIiBuaWxsYWJsZT0idHJ1ZSIvP gogPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkNvbmZpZ3VyYXRpb25EYXRhVHlwZSI+CiAgPHhzO nNlcXVlbmNlPgogICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHR5cGU9InhzOnVuc2lnb mVkSW50IiBuYW1lPSJFbmNvZGluZ01hc2siLz4KICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzP SIwIiBtYXhPY2N1cnM9IjEiIHR5cGU9InhzOmJvb2xlYW4iIG5hbWU9Ikhhc1RyYW5zZmVyY WJsZURhdGFPbkZpbGUiLz4KICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1c nM9IjEiIHR5cGU9InRuczpDb25maWd1cmF0aW9uSWREYXRhVHlwZSIgbmFtZT0iRXh0ZXJuY WxJZCIvPgogICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0iMSIgdHlwZ T0idG5zOkNvbmZpZ3VyYXRpb25JZERhdGFUeXBlIiBuYW1lPSJJbnRlcm5hbElkIi8+CiAgI Dx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSIxIiB0eXBlPSJ4czpkYXRlV GltZSIgbmFtZT0iTGFzdE1vZGlmaWVkIi8+CiAgPC94czpzZXF1ZW5jZT4KIDwveHM6Y29tc GxleFR5cGU+CiA8eHM6ZWxlbWVudCB0eXBlPSJ0bnM6Q29uZmlndXJhdGlvbkRhdGFUeXBlI iBuYW1lPSJDb25maWd1cmF0aW9uRGF0YVR5cGUiLz4KIDx4czpjb21wbGV4VHlwZSBuYW1lP SJMaXN0T2ZDb25maWd1cmF0aW9uRGF0YVR5cGUiPgogIDx4czpzZXF1ZW5jZT4KICAgPHhzO mVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgdHlwZT0idG5zO kNvbmZpZ3VyYXRpb25EYXRhVHlwZSIgbmFtZT0iQ29uZmlndXJhdGlvbkRhdGFUeXBlIiBua WxsYWJsZT0idHJ1ZSIvPgogIDwveHM6c2VxdWVuY2U+CiA8L3hzOmNvbXBsZXhUeXBlPgogP HhzOmVsZW1lbnQgdHlwZT0idG5zOkxpc3RPZkNvbmZpZ3VyYXRpb25EYXRhVHlwZSIgbmFtZ T0iTGlzdE9mQ29uZmlndXJhdGlvbkRhdGFUeXBlIiBuaWxsYWJsZT0idHJ1ZSIvPgogPHhzO mNvbXBsZXhUeXBlIG5hbWU9IkNvbmZpZ3VyYXRpb25UcmFuc2Zlck9wdGlvbnMiPgogIDx4c zpzZXF1ZW5jZT4KICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9IjEiI HR5cGU9InRuczpDb25maWd1cmF0aW9uSWREYXRhVHlwZSIgbmFtZT0iSW50ZXJuYWxJZCIvP gogIDwveHM6c2VxdWVuY2U+CiA8L3hzOmNvbXBsZXhUeXBlPgogPHhzOmVsZW1lbnQgdHlwZ T0idG5zOkNvbmZpZ3VyYXRpb25UcmFuc2Zlck9wdGlvbnMiIG5hbWU9IkNvbmZpZ3VyYXRpb 25UcmFuc2Zlck9wdGlvbnMiLz4KIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZDb25ma Wd1cmF0aW9uVHJhbnNmZXJPcHRpb25zIj4KICA8eHM6c2VxdWVuY2U+CiAgIDx4czplbGVtZ W50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHR5cGU9InRuczpDb25ma Wd1cmF0aW9uVHJhbnNmZXJPcHRpb25zIiBuYW1lPSJDb25maWd1cmF0aW9uVHJhbnNmZXJPc HRpb25zIiBuaWxsYWJsZT0idHJ1ZSIvPgogIDwveHM6c2VxdWVuY2U+CiA8L3hzOmNvbXBsZ XhUeXBlPgogPHhzOmVsZW1lbnQgdHlwZT0idG5zOkxpc3RPZkNvbmZpZ3VyYXRpb25UcmFuc 2Zlck9wdGlvbnMiIG5hbWU9Ikxpc3RPZkNvbmZpZ3VyYXRpb25UcmFuc2Zlck9wdGlvbnMiI G5pbGxhYmxlPSJ0cnVlIi8+CiA8eHM6Y29tcGxleFR5cGUgbmFtZT0iSm9iSWREYXRhVHlwZ SI+CiAgPHhzOnNlcXVlbmNlPgogICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY 3Vycz0iMSIgdHlwZT0ieHM6c3RyaW5nIiBuYW1lPSJJZCIvPgogIDwveHM6c2VxdWVuY2U+C iA8L3hzOmNvbXBsZXhUeXBlPgogPHhzOmVsZW1lbnQgdHlwZT0idG5zOkpvYklkRGF0YVR5c GUiIG5hbWU9IkpvYklkRGF0YVR5cGUiLz4KIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T 2ZKb2JJZERhdGFUeXBlIj4KICA8eHM6c2VxdWVuY2U+CiAgIDx4czplbGVtZW50IG1pbk9jY 3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHR5cGU9InRuczpKb2JJZERhdGFUeXBlI iBuYW1lPSJKb2JJZERhdGFUeXBlIiBuaWxsYWJsZT0idHJ1ZSIvPgogIDwveHM6c2VxdWVuY 2U+CiA8L3hzOmNvbXBsZXhUeXBlPgogPHhzOmVsZW1lbnQgdHlwZT0idG5zOkxpc3RPZkpvY klkRGF0YVR5cGUiIG5hbWU9Ikxpc3RPZkpvYklkRGF0YVR5cGUiIG5pbGxhYmxlPSJ0cnVlI i8+CiA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTWVhc0lkRGF0YVR5cGUiPgogIDx4czpzZXF1Z W5jZT4KICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiB0eXBlPSJ4czp1bnNpZ25lZElud CIgbmFtZT0iRW5jb2RpbmdNYXNrIi8+CiAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgb WF4T2NjdXJzPSIxIiB0eXBlPSJ4czpzdHJpbmciIG5hbWU9IklkIi8+CiAgIDx4czplbGVtZ W50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSIxIiB0eXBlPSJ1YTpMb2NhbGl6ZWRUZXh0I iBuYW1lPSJEZXNjcmlwdGlvbiIvPgogIDwveHM6c2VxdWVuY2U+CiA8L3hzOmNvbXBsZXhUe XBlPgogPHhzOmVsZW1lbnQgdHlwZT0idG5zOk1lYXNJZERhdGFUeXBlIiBuYW1lPSJNZWFzS WREYXRhVHlwZSIvPgogPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZk1lYXNJZERhdGFUe XBlIj4KICA8eHM6c2VxdWVuY2U+CiAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T 2NjdXJzPSJ1bmJvdW5kZWQiIHR5cGU9InRuczpNZWFzSWREYXRhVHlwZSIgbmFtZT0iTWVhc 0lkRGF0YVR5cGUiIG5pbGxhYmxlPSJ0cnVlIi8+CiAgPC94czpzZXF1ZW5jZT4KIDwveHM6Y 29tcGxleFR5cGU+CiA8eHM6ZWxlbWVudCB0eXBlPSJ0bnM6TGlzdE9mTWVhc0lkRGF0YVR5c GUiIG5hbWU9Ikxpc3RPZk1lYXNJZERhdGFUeXBlIiBuaWxsYWJsZT0idHJ1ZSIvPgogPHhzO mNvbXBsZXhUeXBlIG5hbWU9IlBhcnRJZERhdGFUeXBlIj4KICA8eHM6c2VxdWVuY2U+CiAgI Dx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG5hbWU9I kVuY29kaW5nTWFzayIvPgogICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vyc z0iMSIgdHlwZT0ieHM6c3RyaW5nIiBuYW1lPSJJZCIvPgogICA8eHM6ZWxlbWVudCBtaW5PY 2N1cnM9IjAiIG1heE9jY3Vycz0iMSIgdHlwZT0idWE6TG9jYWxpemVkVGV4dCIgbmFtZT0iR GVzY3JpcHRpb24iLz4KICA8L3hzOnNlcXVlbmNlPgogPC94czpjb21wbGV4VHlwZT4KIDx4c zplbGVtZW50IHR5cGU9InRuczpQYXJ0SWREYXRhVHlwZSIgbmFtZT0iUGFydElkRGF0YVR5c GUiLz4KIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZQYXJ0SWREYXRhVHlwZSI+CiAgP HhzOnNlcXVlbmNlPgogICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0id W5ib3VuZGVkIiB0eXBlPSJ0bnM6UGFydElkRGF0YVR5cGUiIG5hbWU9IlBhcnRJZERhdGFUe XBlIiBuaWxsYWJsZT0idHJ1ZSIvPgogIDwveHM6c2VxdWVuY2U+CiA8L3hzOmNvbXBsZXhUe XBlPgogPHhzOmVsZW1lbnQgdHlwZT0idG5zOkxpc3RPZlBhcnRJZERhdGFUeXBlIiBuYW1lP SJMaXN0T2ZQYXJ0SWREYXRhVHlwZSIgbmlsbGFibGU9InRydWUiLz4KIDx4czpjb21wbGV4V HlwZSBuYW1lPSJQcm9jZXNzaW5nVGltZXNEYXRhVHlwZSI+CiAgPHhzOnNlcXVlbmNlPgogI CA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBuYW1lP SJFbmNvZGluZ01hc2siLz4KICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1c nM9IjEiIHR5cGU9InhzOmRhdGVUaW1lIiBuYW1lPSJTdGFydFRpbWUiLz4KICAgPHhzOmVsZ W1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9IjEiIHR5cGU9InhzOmRhdGVUaW1lIiBuY W1lPSJFbmRUaW1lIi8+CiAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzP SIxIiB0eXBlPSJ4czpkb3VibGUiIG5hbWU9IkFjcXVpc2l0aW9uRHVyYXRpb24iLz4KICAgP HhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9IjEiIHR5cGU9InhzOmRvdWJsZ SIgbmFtZT0iUHJvY2Vzc2luZ0R1cmF0aW9uIi8+CiAgPC94czpzZXF1ZW5jZT4KIDwveHM6Y 29tcGxleFR5cGU+CiA8eHM6ZWxlbWVudCB0eXBlPSJ0bnM6UHJvY2Vzc2luZ1RpbWVzRGF0Y VR5cGUiIG5hbWU9IlByb2Nlc3NpbmdUaW1lc0RhdGFUeXBlIi8+CiA8eHM6Y29tcGxleFR5c GUgbmFtZT0iTGlzdE9mUHJvY2Vzc2luZ1RpbWVzRGF0YVR5cGUiPgogIDx4czpzZXF1ZW5jZ T4KICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgd HlwZT0idG5zOlByb2Nlc3NpbmdUaW1lc0RhdGFUeXBlIiBuYW1lPSJQcm9jZXNzaW5nVGltZ XNEYXRhVHlwZSIgbmlsbGFibGU9InRydWUiLz4KICA8L3hzOnNlcXVlbmNlPgogPC94czpjb 21wbGV4VHlwZT4KIDx4czplbGVtZW50IHR5cGU9InRuczpMaXN0T2ZQcm9jZXNzaW5nVGltZ XNEYXRhVHlwZSIgbmFtZT0iTGlzdE9mUHJvY2Vzc2luZ1RpbWVzRGF0YVR5cGUiIG5pbGxhY mxlPSJ0cnVlIi8+CiA8eHM6Y29tcGxleFR5cGUgbmFtZT0iUHJvZHVjdERhdGFUeXBlIj4KI CA8eHM6c2VxdWVuY2U+CiAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzP SIxIiB0eXBlPSJ0bnM6UHJvZHVjdElkRGF0YVR5cGUiIG5hbWU9IkV4dGVybmFsSWQiLz4KI CA8L3hzOnNlcXVlbmNlPgogPC94czpjb21wbGV4VHlwZT4KIDx4czplbGVtZW50IHR5cGU9I nRuczpQcm9kdWN0RGF0YVR5cGUiIG5hbWU9IlByb2R1Y3REYXRhVHlwZSIvPgogPHhzOmNvb XBsZXhUeXBlIG5hbWU9Ikxpc3RPZlByb2R1Y3REYXRhVHlwZSI+CiAgPHhzOnNlcXVlbmNlP gogICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiB0e XBlPSJ0bnM6UHJvZHVjdERhdGFUeXBlIiBuYW1lPSJQcm9kdWN0RGF0YVR5cGUiIG5pbGxhY mxlPSJ0cnVlIi8+CiAgPC94czpzZXF1ZW5jZT4KIDwveHM6Y29tcGxleFR5cGU+CiA8eHM6Z WxlbWVudCB0eXBlPSJ0bnM6TGlzdE9mUHJvZHVjdERhdGFUeXBlIiBuYW1lPSJMaXN0T2ZQc m9kdWN0RGF0YVR5cGUiIG5pbGxhYmxlPSJ0cnVlIi8+CiA8eHM6Y29tcGxleFR5cGUgbmFtZ T0iUHJvZHVjdElkRGF0YVR5cGUiPgogIDx4czpzZXF1ZW5jZT4KICAgPHhzOmVsZW1lbnQgb WluT2NjdXJzPSIwIiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbmFtZT0iRW5jb2RpbmdNYXNrI i8+CiAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSIxIiB0eXBlPSJ4c zpzdHJpbmciIG5hbWU9IklkIi8+CiAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T 2NjdXJzPSIxIiB0eXBlPSJ1YTpMb2NhbGl6ZWRUZXh0IiBuYW1lPSJEZXNjcmlwdGlvbiIvP gogIDwveHM6c2VxdWVuY2U+CiA8L3hzOmNvbXBsZXhUeXBlPgogPHhzOmVsZW1lbnQgdHlwZ T0idG5zOlByb2R1Y3RJZERhdGFUeXBlIiBuYW1lPSJQcm9kdWN0SWREYXRhVHlwZSIvPgogP HhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZlByb2R1Y3RJZERhdGFUeXBlIj4KICA8eHM6c 2VxdWVuY2U+CiAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvd W5kZWQiIHR5cGU9InRuczpQcm9kdWN0SWREYXRhVHlwZSIgbmFtZT0iUHJvZHVjdElkRGF0Y VR5cGUiIG5pbGxhYmxlPSJ0cnVlIi8+CiAgPC94czpzZXF1ZW5jZT4KIDwveHM6Y29tcGxle FR5cGU+CiA8eHM6ZWxlbWVudCB0eXBlPSJ0bnM6TGlzdE9mUHJvZHVjdElkRGF0YVR5cGUiI G5hbWU9Ikxpc3RPZlByb2R1Y3RJZERhdGFUeXBlIiBuaWxsYWJsZT0idHJ1ZSIvPgogPHhzO mNvbXBsZXhUeXBlIG5hbWU9IlJlY2lwZVRyYW5zZmVyT3B0aW9ucyI+CiAgPHhzOnNlcXVlb mNlPgogICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0iMSIgdHlwZT0id G5zOlJlY2lwZUlkSW50ZXJuYWxEYXRhVHlwZSIgbmFtZT0iSW50ZXJuYWxJZCIvPgogIDwve HM6c2VxdWVuY2U+CiA8L3hzOmNvbXBsZXhUeXBlPgogPHhzOmVsZW1lbnQgdHlwZT0idG5zO lJlY2lwZVRyYW5zZmVyT3B0aW9ucyIgbmFtZT0iUmVjaXBlVHJhbnNmZXJPcHRpb25zIi8+C iA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mUmVjaXBlVHJhbnNmZXJPcHRpb25zIj4KI CA8eHM6c2VxdWVuY2U+CiAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzP SJ1bmJvdW5kZWQiIHR5cGU9InRuczpSZWNpcGVUcmFuc2Zlck9wdGlvbnMiIG5hbWU9IlJlY 2lwZVRyYW5zZmVyT3B0aW9ucyIgbmlsbGFibGU9InRydWUiLz4KICA8L3hzOnNlcXVlbmNlP gogPC94czpjb21wbGV4VHlwZT4KIDx4czplbGVtZW50IHR5cGU9InRuczpMaXN0T2ZSZWNpc GVUcmFuc2Zlck9wdGlvbnMiIG5hbWU9Ikxpc3RPZlJlY2lwZVRyYW5zZmVyT3B0aW9ucyIgb mlsbGFibGU9InRydWUiLz4KIDx4czpjb21wbGV4VHlwZSBuYW1lPSJSZXN1bHREYXRhVHlwZ SI+CiAgPHhzOnNlcXVlbmNlPgogICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHR5cGU9I nhzOnVuc2lnbmVkSW50IiBuYW1lPSJFbmNvZGluZ01hc2siLz4KICAgPHhzOmVsZW1lbnQgb WluT2NjdXJzPSIwIiBtYXhPY2N1cnM9IjEiIHR5cGU9InRuczpSZXN1bHRJZERhdGFUeXBlI iBuYW1lPSJSZXN1bHRJZCIvPgogICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY 3Vycz0iMSIgdHlwZT0ieHM6Ym9vbGVhbiIgbmFtZT0iSGFzVHJhbnNmZXJhYmxlRGF0YU9uR mlsZSIvPgogICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0iMSIgdHlwZ T0ieHM6Ym9vbGVhbiIgbmFtZT0iSXNQYXJ0aWFsIi8+CiAgIDx4czplbGVtZW50IG1pbk9jY 3Vycz0iMCIgbWF4T2NjdXJzPSIxIiB0eXBlPSJ4czpib29sZWFuIiBuYW1lPSJJc1NpbXVsY XRlZCIvPgogICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0iMSIgdHlwZ T0ieHM6aW50IiBuYW1lPSJSZXN1bHRTdGF0ZSIvPgogICA8eHM6ZWxlbWVudCBtaW5PY2N1c nM9IjAiIG1heE9jY3Vycz0iMSIgdHlwZT0idG5zOk1lYXNJZERhdGFUeXBlIiBuYW1lPSJNZ WFzSWQiLz4KICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9IjEiIHR5c GU9InRuczpQYXJ0SWREYXRhVHlwZSIgbmFtZT0iUGFydElkIi8+CiAgIDx4czplbGVtZW50I G1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSIxIiB0eXBlPSJ0bnM6UmVjaXBlSWRFeHRlcm5hb ERhdGFUeXBlIiBuYW1lPSJFeHRlcm5hbFJlY2lwZUlkIi8+CiAgIDx4czplbGVtZW50IG1pb k9jY3Vycz0iMCIgbWF4T2NjdXJzPSIxIiB0eXBlPSJ0bnM6UmVjaXBlSWRJbnRlcm5hbERhd GFUeXBlIiBuYW1lPSJJbnRlcm5hbFJlY2lwZUlkIi8+CiAgIDx4czplbGVtZW50IG1pbk9jY 3Vycz0iMCIgbWF4T2NjdXJzPSIxIiB0eXBlPSJ0bnM6UHJvZHVjdElkRGF0YVR5cGUiIG5hb WU9IlByb2R1Y3RJZCIvPgogICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vyc z0iMSIgdHlwZT0idG5zOkNvbmZpZ3VyYXRpb25JZERhdGFUeXBlIiBuYW1lPSJFeHRlcm5hb ENvbmZpZ3VyYXRpb25JZCIvPgogICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY 3Vycz0iMSIgdHlwZT0idG5zOkNvbmZpZ3VyYXRpb25JZERhdGFUeXBlIiBuYW1lPSJJbnRlc m5hbENvbmZpZ3VyYXRpb25JZCIvPgogICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1he E9jY3Vycz0iMSIgdHlwZT0idG5zOkpvYklkRGF0YVR5cGUiIG5hbWU9IkpvYklkIi8+CiAgI Dx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSIxIiB0eXBlPSJ4czpkYXRlV GltZSIgbmFtZT0iQ3JlYXRpb25UaW1lIi8+CiAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iM CIgbWF4T2NjdXJzPSIxIiB0eXBlPSJ0bnM6UHJvY2Vzc2luZ1RpbWVzRGF0YVR5cGUiIG5hb WU9IlByb2Nlc3NpbmdUaW1lcyIvPgogICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1he E9jY3Vycz0iMSIgdHlwZT0idWE6TGlzdE9mVmFyaWFudCIgbmFtZT0iUmVzdWx0Q29udGVud CIvPgogIDwveHM6c2VxdWVuY2U+CiA8L3hzOmNvbXBsZXhUeXBlPgogPHhzOmVsZW1lbnQgd HlwZT0idG5zOlJlc3VsdERhdGFUeXBlIiBuYW1lPSJSZXN1bHREYXRhVHlwZSIvPgogPHhzO mNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZlJlc3VsdERhdGFUeXBlIj4KICA8eHM6c2VxdWVuY 2U+CiAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiI HR5cGU9InRuczpSZXN1bHREYXRhVHlwZSIgbmFtZT0iUmVzdWx0RGF0YVR5cGUiIG5pbGxhY mxlPSJ0cnVlIi8+CiAgPC94czpzZXF1ZW5jZT4KIDwveHM6Y29tcGxleFR5cGU+CiA8eHM6Z WxlbWVudCB0eXBlPSJ0bnM6TGlzdE9mUmVzdWx0RGF0YVR5cGUiIG5hbWU9Ikxpc3RPZlJlc 3VsdERhdGFUeXBlIiBuaWxsYWJsZT0idHJ1ZSIvPgogPHhzOmNvbXBsZXhUeXBlIG5hbWU9I lJlc3VsdElkRGF0YVR5cGUiPgogIDx4czpzZXF1ZW5jZT4KICAgPHhzOmVsZW1lbnQgbWluT 2NjdXJzPSIwIiBtYXhPY2N1cnM9IjEiIHR5cGU9InhzOnN0cmluZyIgbmFtZT0iSWQiLz4KI CA8L3hzOnNlcXVlbmNlPgogPC94czpjb21wbGV4VHlwZT4KIDx4czplbGVtZW50IHR5cGU9I nRuczpSZXN1bHRJZERhdGFUeXBlIiBuYW1lPSJSZXN1bHRJZERhdGFUeXBlIi8+CiA8eHM6Y 29tcGxleFR5cGUgbmFtZT0iTGlzdE9mUmVzdWx0SWREYXRhVHlwZSI+CiAgPHhzOnNlcXVlb mNlPgogICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkI iB0eXBlPSJ0bnM6UmVzdWx0SWREYXRhVHlwZSIgbmFtZT0iUmVzdWx0SWREYXRhVHlwZSIgb mlsbGFibGU9InRydWUiLz4KICA8L3hzOnNlcXVlbmNlPgogPC94czpjb21wbGV4VHlwZT4KI Dx4czplbGVtZW50IHR5cGU9InRuczpMaXN0T2ZSZXN1bHRJZERhdGFUeXBlIiBuYW1lPSJMa XN0T2ZSZXN1bHRJZERhdGFUeXBlIiBuaWxsYWJsZT0idHJ1ZSIvPgogPHhzOmNvbXBsZXhUe XBlIG5hbWU9IlJlc3VsdFRyYW5zZmVyT3B0aW9ucyI+CiAgPHhzOnNlcXVlbmNlPgogICA8e HM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0iMSIgdHlwZT0idG5zOlJlc3Vsd ElkRGF0YVR5cGUiIG5hbWU9IklkIi8+CiAgPC94czpzZXF1ZW5jZT4KIDwveHM6Y29tcGxle FR5cGU+CiA8eHM6ZWxlbWVudCB0eXBlPSJ0bnM6UmVzdWx0VHJhbnNmZXJPcHRpb25zIiBuY W1lPSJSZXN1bHRUcmFuc2Zlck9wdGlvbnMiLz4KIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMa XN0T2ZSZXN1bHRUcmFuc2Zlck9wdGlvbnMiPgogIDx4czpzZXF1ZW5jZT4KICAgPHhzOmVsZ W1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgdHlwZT0idG5zOlJlc 3VsdFRyYW5zZmVyT3B0aW9ucyIgbmFtZT0iUmVzdWx0VHJhbnNmZXJPcHRpb25zIiBuaWxsY WJsZT0idHJ1ZSIvPgogIDwveHM6c2VxdWVuY2U+CiA8L3hzOmNvbXBsZXhUeXBlPgogPHhzO mVsZW1lbnQgdHlwZT0idG5zOkxpc3RPZlJlc3VsdFRyYW5zZmVyT3B0aW9ucyIgbmFtZT0iT GlzdE9mUmVzdWx0VHJhbnNmZXJPcHRpb25zIiBuaWxsYWJsZT0idHJ1ZSIvPgogPHhzOmNvb XBsZXhUeXBlIG5hbWU9IlN5c3RlbVN0YXRlRGVzY3JpcHRpb25EYXRhVHlwZSI+CiAgPHhzO nNlcXVlbmNlPgogICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHR5cGU9InhzOnVuc2lnb mVkSW50IiBuYW1lPSJFbmNvZGluZ01hc2siLz4KICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzP SIwIiBtYXhPY2N1cnM9IjEiIHR5cGU9InRuczpTeXN0ZW1TdGF0ZURhdGFUeXBlIiBuYW1lP SJTdGF0ZSIvPgogICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0iMSIgd HlwZT0ieHM6c3RyaW5nIiBuYW1lPSJTdGF0ZURlc2NyaXB0aW9uIi8+CiAgPC94czpzZXF1Z W5jZT4KIDwveHM6Y29tcGxleFR5cGU+CiA8eHM6ZWxlbWVudCB0eXBlPSJ0bnM6U3lzdGVtU 3RhdGVEZXNjcmlwdGlvbkRhdGFUeXBlIiBuYW1lPSJTeXN0ZW1TdGF0ZURlc2NyaXB0aW9uR GF0YVR5cGUiLz4KIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZTeXN0ZW1TdGF0ZURlc 2NyaXB0aW9uRGF0YVR5cGUiPgogIDx4czpzZXF1ZW5jZT4KICAgPHhzOmVsZW1lbnQgbWluT 2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgdHlwZT0idG5zOlN5c3RlbVN0YXRlR GVzY3JpcHRpb25EYXRhVHlwZSIgbmFtZT0iU3lzdGVtU3RhdGVEZXNjcmlwdGlvbkRhdGFUe XBlIiBuaWxsYWJsZT0idHJ1ZSIvPgogIDwveHM6c2VxdWVuY2U+CiA8L3hzOmNvbXBsZXhUe XBlPgogPHhzOmVsZW1lbnQgdHlwZT0idG5zOkxpc3RPZlN5c3RlbVN0YXRlRGVzY3JpcHRpb 25EYXRhVHlwZSIgbmFtZT0iTGlzdE9mU3lzdGVtU3RhdGVEZXNjcmlwdGlvbkRhdGFUeXBlI iBuaWxsYWJsZT0idHJ1ZSIvPgo8L3hzOnNjaGVtYT4K NamespaceUri ns=1;i=6003 i=68 http://opcfoundation.org/UA/MachineVision/Types.xsd FromTransition i=32 ToTransition i=32 ResultType https://reference.opcfoundation.org/v104/MachineVision/v100/docs/9.1 ns=1;i=6331 ns=1;i=6328 ns=1;i=6095 ns=1;i=6047 ns=1;i=6329 ns=1;i=6284 ns=1;i=6052 ns=1;i=6053 ns=1;i=6330 ns=1;i=6055 ns=1;i=6094 ns=1;i=6332 ns=1;i=6327 ns=1;i=6333 ns=1;i=6046 ns=1;i=6054 i=63 ns=1;i=5019 0 false 0 1900-01-01T00:00:00Z CreationTime i=63 ns=1;i=2002 i=78 ExternalConfigurationId i=63 ns=1;i=2002 i=80 ExternalRecipeId i=63 ns=1;i=2002 i=80 HasTransferableDataOnFile i=63 ns=1;i=2002 i=80 InternalConfigurationId i=63 ns=1;i=2002 i=78 InternalRecipeId i=63 ns=1;i=2002 i=78 IsPartial i=63 ns=1;i=2002 i=78 IsSimulated i=63 ns=1;i=2002 i=80 JobId i=63 ns=1;i=2002 i=78 MeasId i=63 ns=1;i=2002 i=80 PartId i=63 i=80 ns=1;i=2002 ProcessingTimes i=63 i=80 ns=1;i=2002 ProductId i=63 i=80 ns=1;i=2002 ResultContent i=63 i=80 ns=1;i=2002 ResultId i=63 i=78 ns=1;i=2002 ResultState i=63 i=78 ns=1;i=2002 AcquisitionDoneEventType https://reference.opcfoundation.org/v104/MachineVision/v100/docs/8.3.8/#8.3.8.5 i=2041 ns=1;i=6308 JobId ns=1;i=1025 i=78 i=68 ns=1;i=5026 VisionConditionType https://reference.opcfoundation.org/v104/MachineVision/v100/docs/11.4.4/#11.4.4.1 ns=1;i=6206 ns=1;i=6207 ns=1;i=6208 ns=1;i=6283 ns=1;i=6347 ns=1;i=6346 ns=1;i=6192 ns=1;i=6321 ns=1;i=6343 ns=1;i=6344 ns=1;i=6307 ns=1;i=6323 ns=1;i=6345 ns=1;i=6293 i=2881 BlockReaction ns=1;i=1033 i=78 i=68 CausePath ns=1;i=1033 i=80 i=68 ErrorCode ns=1;i=1033 i=80 i=68 ErrorString ns=1;i=1033 i=80 i=68 ExternalConfigurationId ns=1;i=1033 i=80 i=68 ExternalRecipeId ns=1;i=1033 i=80 i=68 InternalConfigurationId ns=1;i=1033 i=80 i=68 InternalRecipeId ns=1;i=1033 i=80 i=68 JobId ns=1;i=1033 i=80 i=68 ns=1;i=5026 MeasId ns=1;i=1033 i=80 i=68 ns=1;i=5007 0 PartId i=80 ns=1;i=1033 i=68 ns=1;i=5014 0 ProductId i=80 ns=1;i=1033 i=68 ns=1;i=5225 0 ResultId i=80 i=68 ns=1;i=1033 ns=1;i=5275 StopReaction i=78 i=68 ns=1;i=1033 VisionErrorConditionType https://reference.opcfoundation.org/v104/MachineVision/v100/docs/11.4.6 ns=1;i=1033 VisionPersistentErrorConditionType https://reference.opcfoundation.org/v104/MachineVision/v100/docs/11.4.7 ns=1;i=1033 VisionWarningConditionType https://reference.opcfoundation.org/v104/MachineVision/v100/docs/11.4.5 ns=1;i=1033 EnterStepSequenceEventType https://reference.opcfoundation.org/v104/MachineVision/v100/docs/8.4.7/#8.4.7.1 i=2041 ns=1;i=6322 ns=1;i=5083 Steps i=78 i=68 ns=1;i=1027 JobStartedEventType https://reference.opcfoundation.org/v104/MachineVision/v100/docs/8.3.8/#8.3.8.2 ns=1;i=6141 i=2041 ns=1;i=5064 ns=1;i=5065 ns=1;i=5066 ns=1;i=5067 JobId ns=1;i=1013 i=78 i=68 ns=1;i=5026 LeaveStepSequenceEventType https://reference.opcfoundation.org/v104/MachineVision/v100/docs/8.4.7/#8.4.7.3 i=2041 ns=1;i=5087 NextStepEventType https://reference.opcfoundation.org/v104/MachineVision/v100/docs/8.4.7/#8.4.7.2 i=2041 ns=1;i=6324 ns=1;i=5086 Step i=78 i=68 ns=1;i=1028 ReadyEventType https://reference.opcfoundation.org/v104/MachineVision/v100/docs/8.3.8/#8.3.8.3 ns=1;i=6294 i=2041 ns=1;i=5068 ns=1;i=5069 ns=1;i=5070 ns=1;i=5071 ns=1;i=5072 ns=1;i=5073 JobId ns=1;i=1023 i=78 i=68 ns=1;i=5026 RecipePreparedEventType https://reference.opcfoundation.org/v104/MachineVision/v100/docs/8.3.8/#8.3.8.1 ns=1;i=6291 ns=1;i=6140 ns=1;i=6292 i=2041 ns=1;i=5045 ns=1;i=5060 ExternalId ns=1;i=1022 i=80 i=68 InternalId ns=1;i=1022 i=78 i=68 ProductId i=80 ns=1;i=1022 i=68 ns=1;i=5225 0 ResultReadyEventType https://reference.opcfoundation.org/v104/MachineVision/v100/docs/8.3.8/#8.3.8.4 ns=1;i=6303 ns=1;i=6045 ns=1;i=6301 ns=1;i=6142 ns=1;i=6302 ns=1;i=6296 ns=1;i=6297 ns=1;i=6300 ns=1;i=6299 ns=1;i=6304 ns=1;i=6305 ns=1;i=6143 ns=1;i=6306 ns=1;i=6295 i=2041 ns=1;i=6298 CreationTime ns=1;i=1024 i=78 i=68 ExternalConfigurationId ns=1;i=1024 i=80 i=68 ExternalRecipeId ns=1;i=1024 i=80 i=68 InternalConfigurationId ns=1;i=1024 i=78 i=68 InternalRecipeId ns=1;i=1024 i=78 i=68 IsPartial ns=1;i=1024 i=78 i=68 IsSimulated ns=1;i=1024 i=80 i=68 JobId ns=1;i=1024 i=78 i=68 ns=1;i=5026 MeasId ns=1;i=1024 i=80 i=68 ns=1;i=5007 0 PartId i=80 ns=1;i=1024 i=68 ns=1;i=5014 0 ProcessingTimes i=80 ns=1;i=1024 i=68 ns=1;i=5017 0 1900-01-01T00:00:00Z 1900-01-01T00:00:00Z ProductId i=80 ns=1;i=1024 i=68 ns=1;i=5225 0 ResultContent i=80 i=68 ns=1;i=1024 ResultId i=78 i=68 ns=1;i=1024 ns=1;i=5275 ResultState i=78 i=68 ns=1;i=1024 ErrorEventType https://reference.opcfoundation.org/v104/MachineVision/v100/docs/8.2.9/#8.2.9.2 i=2311 ns=1;i=5034 ErrorResolvedEventType https://reference.opcfoundation.org/v104/MachineVision/v100/docs/8.2.9/#8.2.9.3 i=2311 ns=1;i=5255 StateChangedEventType https://reference.opcfoundation.org/v104/MachineVision/v100/docs/8.2.9/#8.2.9.1 i=2311 ns=1;i=5032 ns=1;i=5033 ns=1;i=5034 ns=1;i=5035 ns=1;i=5036 ns=1;i=5037 ns=1;i=5038 ns=1;i=5039 ns=1;i=5040 ns=1;i=5041 ns=1;i=5042 ns=1;i=5044 ns=1;i=5045 ns=1;i=5047 ns=1;i=5048 ns=1;i=5049 ns=1;i=5050 ns=1;i=5051 ns=1;i=5060 ns=1;i=5061 ns=1;i=5062 ns=1;i=5063 ns=1;i=5064 ns=1;i=5065 ns=1;i=5066 ns=1;i=5067 ns=1;i=5068 ns=1;i=5069 ns=1;i=5070 ns=1;i=5071 ns=1;i=5072 ns=1;i=5073 ns=1;i=5082 ns=1;i=5083 ns=1;i=5084 ns=1;i=5085 ns=1;i=5086 ns=1;i=5087 ns=1;i=5253 ns=1;i=5254 ns=1;i=5255 VisionEventType https://reference.opcfoundation.org/v104/MachineVision/v100/docs/11.4.1/#11.4.1.1 ns=1;i=6193 ns=1;i=6550 ns=1;i=6195 ns=1;i=6200 ns=1;i=6198 ns=1;i=6203 ns=1;i=6194 ns=1;i=6201 ns=1;i=6199 ns=1;i=6204 i=2041 CausePath ns=1;i=1015 i=80 i=68 ExternalConfigurationId ns=1;i=1015 i=80 i=68 ExternalRecipeId ns=1;i=1015 i=80 i=68 InternalConfigurationId ns=1;i=1015 i=80 i=68 InternalRecipeId ns=1;i=1015 i=80 i=68 JobId ns=1;i=1015 i=80 i=68 ns=1;i=5026 MeasId ns=1;i=1015 i=80 i=68 ns=1;i=5007 0 PartId i=80 ns=1;i=1015 i=68 ns=1;i=5014 0 ProductId i=80 ns=1;i=1015 i=68 ns=1;i=5225 0 ResultId i=80 i=68 ns=1;i=1015 ns=1;i=5275 VisionDiagnosticInfoEventType https://reference.opcfoundation.org/v104/MachineVision/v100/docs/11.4.2 ns=1;i=1015 VisionInformationEventType https://reference.opcfoundation.org/v104/MachineVision/v100/docs/11.4.3 ns=1;i=1015 VisionSafetyEventType https://reference.opcfoundation.org/v104/MachineVision/v100/docs/11.4.8 i=2041 ns=1;i=6050 ns=1;i=6051 VisionSafetyInformation i=78 i=68 ns=1;i=1030 VisionSafetyTriggered i=78 i=68 ns=1;i=1030 ConfigurationManagementType https://reference.opcfoundation.org/v104/MachineVision/v100/docs/7.2.1 ns=1;i=7048 ns=1;i=6132 ns=1;i=7025 i=58 ns=1;i=5010 ns=1;i=5266 ns=1;i=7041 ns=1;i=7045 ns=1;i=7046 ns=1;i=7047 ActivateConfiguration https://reference.opcfoundation.org/v104/MachineVision/v100/docs/7.2.2/#7.2.2.6 ns=1;i=1006 ns=1;i=6116 i=78 ns=1;i=6117 InputArguments i=78 i=68 ns=1;i=7048 i=297 InternalId ns=1;i=3008 -1 OutputArguments i=78 i=68 ns=1;i=7048 i=297 Error i=6 -1 ActiveConfiguration ns=1;i=1006 i=63 i=78 ns=1;i=5089 0 1900-01-01T00:00:00Z AddConfiguration https://reference.opcfoundation.org/v104/MachineVision/v100/docs/7.2.2/#7.2.2.1.1 ns=1;i=1006 ns=1;i=6096 i=80 ns=1;i=6097 InputArguments i=78 i=68 ns=1;i=7025 i=297 ExternalId ns=1;i=3008 -1 OutputArguments i=78 i=68 ns=1;i=7025 i=297 InternalId ns=1;i=3008 -1 i=297 Configuration i=17 -1 i=297 TransferRequired i=1 -1 i=297 Error i=6 -1 Configurations ns=1;i=1011 ns=1;i=1006 i=80 ConfigurationTransfer ns=1;i=6599 ns=1;i=7113 ns=1;i=1006 ns=1;i=1012 ns=1;i=7012 ns=1;i=7029 i=80 ClientProcessingTimeout ns=1;i=5266 i=78 i=68 CloseAndCommit ns=1;i=5266 ns=1;i=6600 i=78 ns=1;i=6601 InputArguments i=78 i=68 ns=1;i=7113 i=297 FileHandle i=7 -1 OutputArguments i=78 i=68 ns=1;i=7113 i=297 CompletionStateMachine i=17 -1 GenerateFileForRead ns=1;i=5266 ns=1;i=6337 i=78 ns=1;i=6338 InputArguments i=78 i=68 ns=1;i=7012 i=297 GenerateOptions ns=1;i=3011 -1 OutputArguments i=78 i=68 ns=1;i=7012 i=297 FileNodeId i=17 -1 i=297 FileHandle i=7 -1 i=297 CompletionStateMachine i=17 -1 GenerateFileForWrite ns=1;i=5266 ns=1;i=6339 i=78 ns=1;i=6340 InputArguments i=78 i=68 ns=1;i=7029 i=297 GenerateOptions ns=1;i=3011 -1 OutputArguments i=78 i=68 ns=1;i=7029 i=297 FileNodeId i=17 -1 i=297 FileHandle i=7 -1 GetConfigurationById https://reference.opcfoundation.org/v104/MachineVision/v100/docs/7.2.2/#7.2.2.2 ns=1;i=1006 ns=1;i=6100 i=78 ns=1;i=6101 InputArguments i=78 i=68 ns=1;i=7041 i=297 InternalId ns=1;i=3008 -1 i=297 Timeout i=6 -1 OutputArguments i=78 i=68 ns=1;i=7041 i=297 ConfigurationHandle ns=1;i=3018 -1 i=297 Configuration ns=1;i=3007 -1 i=297 Error i=6 -1 GetConfigurationList https://reference.opcfoundation.org/v104/MachineVision/v100/docs/7.2.2/#7.2.2.3 ns=1;i=1006 ns=1;i=6104 i=78 ns=1;i=6105 InputArguments i=78 i=68 ns=1;i=7045 i=297 MaxResults i=7 -1 i=297 StartIndex i=7 -1 i=297 Timeout i=6 -1 OutputArguments i=78 i=68 ns=1;i=7045 i=297 IsComplete i=1 -1 i=297 ResultCount i=7 -1 i=297 ConfigurationHandle ns=1;i=3018 -1 i=297 ConfigurationList ns=1;i=3007 1 i=297 Error i=6 -1 ReleaseConfigurationHandle https://reference.opcfoundation.org/v104/MachineVision/v100/docs/7.2.2/#7.2.2.4 ns=1;i=6108 i=80 ns=1;i=6109 ns=1;i=1006 InputArguments i=78 i=68 ns=1;i=7046 i=297 ConfigurationHandle ns=1;i=3018 -1 OutputArguments i=78 i=68 ns=1;i=7046 i=297 Error i=6 -1 RemoveConfiguration https://reference.opcfoundation.org/v104/MachineVision/v100/docs/7.2.2/#7.2.2.5 ns=1;i=6112 i=80 ns=1;i=6113 ns=1;i=1006 InputArguments i=78 i=68 ns=1;i=7047 i=297 InternalId ns=1;i=3008 -1 OutputArguments i=78 i=68 ns=1;i=7047 i=297 Error i=6 -1 ConfigurationFolderType https://reference.opcfoundation.org/v104/MachineVision/v100/docs/7.3 ns=1;i=6120 i=61 <Configuration> ns=1;i=1011 i=63 i=11508 ns=1;i=5089 0 1900-01-01T00:00:00Z ProductFolderType https://reference.opcfoundation.org/v104/MachineVision/v100/docs/7.9 ns=1;i=6621 i=61 <Product> ns=1;i=1010 i=63 i=11508 RecipeFolderType https://reference.opcfoundation.org/v104/MachineVision/v100/docs/7.8 ns=1;i=5270 i=61 <Recipe> ns=1;i=1008 ns=1;i=6608 ns=1;i=6609 ns=1;i=6610 ns=1;i=6611 ns=1;i=6612 ns=1;i=7076 i=11508 ns=1;i=7114 ns=1;i=1002 ns=1;i=7120 ns=1;i=7121 ExternalId Recipe ID for identifying the recipe outside the vision system. The ExternalID is only managed by the host system. ns=1;i=5270 i=80 i=68 InternalId System-wide unique ID for identifying a recipe. This ID is assigned by the vision system. ns=1;i=5270 i=78 i=68 IsPrepared ns=1;i=5270 i=78 i=68 LastModified The time when this recipe was last modified. ns=1;i=5270 i=78 i=68 LinkedProducts ns=1;i=5270 i=80 i=68 LinkProduct https://reference.opcfoundation.org/v104/MachineVision/v100/docs/7.7.2/#7.7.2.2 ns=1;i=6613 ns=1;i=5270 i=80 ns=1;i=6614 InputArguments i=78 i=68 ns=1;i=7076 i=297 ProductId ns=1;i=3003 -1 OutputArguments i=78 i=68 ns=1;i=7076 i=297 Error i=6 -1 Prepare https://reference.opcfoundation.org/v104/MachineVision/v100/docs/7.7.2/#7.7.2.4 i=78 ns=1;i=6615 ns=1;i=5270 OutputArguments i=78 i=68 ns=1;i=7114 i=297 IsCompleted i=1 -1 i=297 Error i=6 -1 UnlinkProduct https://reference.opcfoundation.org/v104/MachineVision/v100/docs/7.7.2/#7.7.2.3 ns=1;i=6616 i=80 ns=1;i=6619 ns=1;i=5270 InputArguments i=78 i=68 ns=1;i=7120 i=297 ProductId ns=1;i=3003 -1 OutputArguments i=78 i=68 ns=1;i=7120 i=297 Error i=6 -1 Unprepare https://reference.opcfoundation.org/v104/MachineVision/v100/docs/7.7.2/#7.7.2.5 i=78 ns=1;i=6620 ns=1;i=5270 OutputArguments i=78 i=68 ns=1;i=7121 i=297 Error i=6 -1 ResultFolderType https://reference.opcfoundation.org/v104/MachineVision/v100/docs/7.11 ns=1;i=6168 i=61 <ResultVariable> ns=1;i=1016 ns=1;i=6334 ns=1;i=6335 ns=1;i=6336 ns=1;i=6356 ns=1;i=6357 i=11508 ns=1;i=6379 ns=1;i=6548 ns=1;i=2002 ns=1;i=5019 0 false 0 1900-01-01T00:00:00Z CreationTime i=63 ns=1;i=6168 i=78 InternalConfigurationId i=63 ns=1;i=6168 i=78 InternalRecipeId i=63 ns=1;i=6168 i=78 IsPartial i=63 ns=1;i=6168 i=78 JobId i=63 ns=1;i=6168 i=78 ResultId i=63 i=78 ns=1;i=6168 ResultState i=63 i=78 ns=1;i=6168 RecipeManagementType https://reference.opcfoundation.org/v104/MachineVision/v100/docs/7.5.1 ns=1;i=7013 ns=1;i=7014 ns=1;i=7060 ns=1;i=7015 ns=1;i=5022 i=58 ns=1;i=5005 ns=1;i=5264 ns=1;i=7056 ns=1;i=7057 ns=1;i=7061 ns=1;i=7059 ns=1;i=7055 AddRecipe https://reference.opcfoundation.org/v104/MachineVision/v100/docs/7.5.2/#7.5.2.1.1 ns=1;i=1004 ns=1;i=6144 i=80 ns=1;i=6145 InputArguments i=78 i=68 ns=1;i=7013 i=297 ExternalId ns=1;i=3002 -1 i=297 ProductId ns=1;i=3003 -1 OutputArguments i=78 i=68 ns=1;i=7013 i=297 InternalId ns=1;i=3013 -1 i=297 Recipe i=17 -1 i=297 Product i=17 -1 i=297 TransferRequired i=1 -1 i=297 Error i=6 -1 GetRecipeListFiltered https://reference.opcfoundation.org/v104/MachineVision/v100/docs/7.5.2/#7.5.2.4 ns=1;i=1004 ns=1;i=6156 i=78 ns=1;i=6157 InputArguments i=78 i=68 ns=1;i=7014 i=297 ExternalId ns=1;i=3002 -1 i=297 ProductId ns=1;i=3003 -1 i=297 IsPrepared ns=1;i=3014 -1 i=297 MaxResults i=7 -1 i=297 StartIndex i=7 -1 i=297 Timeout i=6 -1 OutputArguments i=78 i=68 ns=1;i=7014 i=297 IsComplete i=1 -1 i=297 ResultCount i=7 -1 i=297 RecipeHandle ns=1;i=3018 -1 i=297 RecipeList ns=1;i=3013 1 i=297 Error i=6 -1 PrepareProduct https://reference.opcfoundation.org/v104/MachineVision/v100/docs/7.5.2/#7.5.2.7 ns=1;i=6172 i=80 ns=1;i=6173 ns=1;i=1004 ns=1;i=5045 InputArguments i=78 i=68 ns=1;i=7060 i=297 ProductId ns=1;i=3003 -1 OutputArguments i=78 i=68 ns=1;i=7060 i=297 InternalId ns=1;i=3013 -1 i=297 Error i=6 -1 PrepareRecipe https://reference.opcfoundation.org/v104/MachineVision/v100/docs/7.5.2/#7.5.2.2 ns=1;i=6148 i=78 ns=1;i=6149 ns=1;i=1004 ns=1;i=5060 InputArguments i=78 i=68 ns=1;i=7015 i=297 ExternalId ns=1;i=3002 -1 i=297 InternalIdIn ns=1;i=3013 -1 OutputArguments i=78 i=68 ns=1;i=7015 i=297 InternalIdOut ns=1;i=3013 -1 i=297 IsCompleted i=1 -1 i=297 Error i=6 -1 Products ns=1;i=6622 i=80 ns=1;i=1010 ns=1;i=1004 <Product> ns=1;i=5022 i=63 i=78 Recipes i=80 ns=1;i=1008 ns=1;i=1004 RecipeTransfer ns=1;i=6585 ns=1;i=7115 ns=1;i=7118 ns=1;i=7119 i=80 ns=1;i=1004 ns=1;i=1014 ClientProcessingTimeout ns=1;i=5264 i=78 i=68 CloseAndCommit ns=1;i=5264 ns=1;i=6586 i=78 ns=1;i=6587 InputArguments i=78 i=68 ns=1;i=7115 i=297 FileHandle i=7 -1 OutputArguments i=78 i=68 ns=1;i=7115 i=297 CompletionStateMachine i=17 -1 GenerateFileForRead ns=1;i=5264 ns=1;i=6186 i=78 ns=1;i=6187 InputArguments i=78 i=68 ns=1;i=7118 i=297 generateOptions ns=1;i=3012 -1 OutputArguments i=78 i=68 ns=1;i=7118 i=297 fileNodeId i=17 -1 i=297 fileHandle i=7 -1 i=297 completionStateMachine i=17 -1 GenerateFileForWrite ns=1;i=5264 ns=1;i=6588 i=78 ns=1;i=6589 InputArguments i=78 i=68 ns=1;i=7119 i=297 GenerateOptions ns=1;i=3012 -1 OutputArguments i=78 i=68 ns=1;i=7119 i=297 FileNodeId i=17 -1 i=297 FileHandle i=7 -1 ReleaseRecipeHandle https://reference.opcfoundation.org/v104/MachineVision/v100/docs/7.5.2/#7.5.2.5 ns=1;i=6160 i=80 ns=1;i=6161 ns=1;i=1004 InputArguments i=78 i=68 ns=1;i=7056 i=297 RecipeHandle ns=1;i=3018 -1 OutputArguments i=78 i=68 ns=1;i=7056 i=297 Error i=6 -1 RemoveRecipe https://reference.opcfoundation.org/v104/MachineVision/v100/docs/7.5.2/#7.5.2.6 ns=1;i=6164 i=80 ns=1;i=6165 ns=1;i=1004 InputArguments i=78 i=68 ns=1;i=7057 i=297 ExternalId ns=1;i=3002 -1 OutputArguments i=78 i=68 ns=1;i=7057 i=297 Error i=6 -1 UnlinkProduct https://reference.opcfoundation.org/v104/MachineVision/v100/docs/7.7.2/#7.7.2.3 ns=1;i=6180 i=80 ns=1;i=6181 ns=1;i=1004 InputArguments i=78 i=68 ns=1;i=7061 i=297 InternalId ns=1;i=3013 -1 i=297 ProductId ns=1;i=3003 -1 OutputArguments i=78 i=68 ns=1;i=7061 i=297 Error i=6 -1 UnprepareProduct https://reference.opcfoundation.org/v104/MachineVision/v100/docs/7.5.2/#7.5.2.8 ns=1;i=6176 i=80 ns=1;i=6177 ns=1;i=1004 ns=1;i=5044 InputArguments i=78 i=68 ns=1;i=7059 i=297 ProductId ns=1;i=3003 -1 OutputArguments i=78 i=68 ns=1;i=7059 i=297 InternalId ns=1;i=3013 -1 i=297 Error i=6 -1 UnprepareRecipe https://reference.opcfoundation.org/v104/MachineVision/v100/docs/7.5.2/#7.5.2.3 ns=1;i=6152 i=78 ns=1;i=6153 ns=1;i=1004 ns=1;i=5062 InputArguments i=78 i=68 ns=1;i=7055 i=297 ExternalId ns=1;i=3002 -1 i=297 InternalIdIn ns=1;i=3013 -1 OutputArguments i=78 i=68 ns=1;i=7055 i=297 InternalIdOut ns=1;i=3013 -1 i=297 Error i=6 -1 RecipeType https://reference.opcfoundation.org/v104/MachineVision/v100/docs/7.7.1 ns=1;i=6023 ns=1;i=5001 ns=1;i=6019 ns=1;i=6605 ns=1;i=6017 ns=1;i=6018 ns=1;i=7062 ns=1;i=7064 i=58 ns=1;i=7063 ns=1;i=7065 ExternalId Recipe ID for identifying the recipe outside the vision system. The ExternalID is only managed by the host system. ns=1;i=1002 i=80 i=68 Handle The file handle refers to the recipe data, which are teated as a BLOB, i.e. they are not interpreted outside the system. They are accessed via OPC UA file operations. ns=1;i=7001 i=11575 ns=1;i=7002 ns=1;i=1002 ns=1;i=7003 ns=1;i=6009 i=80 ns=1;i=7004 ns=1;i=7005 ns=1;i=6013 ns=1;i=6014 ns=1;i=6015 ns=1;i=7006 Close ns=1;i=5001 ns=1;i=6004 i=78 InputArguments i=78 i=68 ns=1;i=7001 i=297 FileHandle i=7 -1 GetPosition ns=1;i=5001 ns=1;i=6005 i=78 ns=1;i=6006 InputArguments i=78 i=68 ns=1;i=7002 i=297 FileHandle i=7 -1 OutputArguments i=78 i=68 ns=1;i=7002 i=297 Position i=9 -1 Open ns=1;i=6007 i=78 ns=1;i=5001 ns=1;i=6008 InputArguments i=78 i=68 ns=1;i=7003 i=297 Mode i=3 -1 OutputArguments i=78 i=68 ns=1;i=7003 i=297 FileHandle i=7 -1 OpenCount The current number of open file handles. i=78 ns=1;i=5001 i=68 Read ns=1;i=6010 i=78 ns=1;i=6011 ns=1;i=5001 InputArguments i=78 i=68 ns=1;i=7004 i=297 FileHandle i=7 -1 i=297 Length i=6 -1 OutputArguments i=78 i=68 ns=1;i=7004 i=297 Data i=15 -1 SetPosition ns=1;i=6012 i=78 ns=1;i=5001 InputArguments i=78 i=68 ns=1;i=7005 i=297 FileHandle i=7 -1 i=297 Position i=9 -1 Size The size of the file in bytes. i=78 i=68 ns=1;i=5001 UserWritable Whether the file is writable by the current user. i=78 i=68 ns=1;i=5001 Writable Whether the file is writable. i=78 i=68 ns=1;i=5001 Write ns=1;i=6016 i=78 ns=1;i=5001 InputArguments i=78 i=68 ns=1;i=7006 i=297 FileHandle i=7 -1 i=297 Data i=15 -1 InternalId System-wide unique ID for identifying a recipe. This ID is assigned by the vision system. ns=1;i=1002 i=78 i=68 IsPrepared ns=1;i=1002 i=78 i=68 LastModified The time when this recipe was last modified. ns=1;i=1002 i=78 i=68 LinkedProducts ns=1;i=1002 i=80 i=68 LinkProduct https://reference.opcfoundation.org/v104/MachineVision/v100/docs/7.7.2/#7.7.2.2 ns=1;i=6190 ns=1;i=1002 i=80 ns=1;i=6191 InputArguments i=78 i=68 ns=1;i=7062 i=297 ProductId ns=1;i=3003 -1 OutputArguments i=78 i=68 ns=1;i=7062 i=297 Error i=6 -1 Prepare https://reference.opcfoundation.org/v104/MachineVision/v100/docs/7.7.2/#7.7.2.4 i=78 ns=1;i=6202 ns=1;i=1002 OutputArguments i=78 i=68 ns=1;i=7064 i=297 IsCompleted i=1 -1 i=297 Error i=6 -1 UnlinkProduct https://reference.opcfoundation.org/v104/MachineVision/v100/docs/7.7.2/#7.7.2.3 ns=1;i=6196 i=80 ns=1;i=6197 ns=1;i=1002 InputArguments i=78 i=68 ns=1;i=7063 i=297 ProductId ns=1;i=3003 -1 OutputArguments i=78 i=68 ns=1;i=7063 i=297 Error i=6 -1 Unprepare https://reference.opcfoundation.org/v104/MachineVision/v100/docs/7.7.2/#7.7.2.5 i=78 ns=1;i=6205 ns=1;i=1002 OutputArguments i=78 i=68 ns=1;i=7065 i=297 Error i=6 -1 ResultManagementType https://reference.opcfoundation.org/v104/MachineVision/v100/docs/7.10.1 ns=1;i=7026 ns=1;i=7007 ns=1;i=7089 ns=1;i=7090 i=58 ns=1;i=5245 ns=1;i=5251 GetResultById https://reference.opcfoundation.org/v104/MachineVision/v100/docs/7.10.2/#7.10.2.2 ns=1;i=1007 ns=1;i=6209 i=78 ns=1;i=6210 InputArguments i=78 i=68 ns=1;i=7026 i=297 ResultId ns=1;i=3021 -1 i=297 Timeout i=6 -1 OutputArguments i=78 i=68 ns=1;i=7026 i=297 ResultHandle ns=1;i=3018 -1 i=297 Result ns=1;i=3006 -1 i=297 Error i=6 -1 GetResultComponentsById ns=1;i=1007 ns=1;i=6024 i=78 ns=1;i=6025 InputArguments i=78 i=68 ns=1;i=7007 i=297 ResultId ns=1;i=3021 -1 i=297 Timeout i=6 -1 OutputArguments i=78 i=68 ns=1;i=7007 i=297 HasTransferableDataOnFile i=1 -1 i=297 ResultHandle ns=1;i=3018 -1 i=297 IsPartial i=1 -1 i=297 IsSimulated i=1 -1 i=297 ResultState ns=1;i=3009 -1 i=297 MeasId ns=1;i=3015 -1 i=297 PartId ns=1;i=3004 -1 i=297 ExternalRecipeId ns=1;i=3002 -1 i=297 InternalRecipeId ns=1;i=3013 -1 i=297 ProductId ns=1;i=3003 -1 i=297 ExternalConfigurationId ns=1;i=3008 -1 i=297 InternalConfigurationId ns=1;i=3008 -1 i=297 JobId ns=1;i=3016 -1 i=297 CreationTime i=294 -1 i=297 ProcessingTimes ns=1;i=3005 -1 i=297 ResultContent i=24 1 i=297 Error i=6 -1 GetResultListFiltered https://reference.opcfoundation.org/v104/MachineVision/v100/docs/7.10.2/#7.10.2.3 ns=1;i=1007 ns=1;i=6213 i=78 ns=1;i=6214 InputArguments i=78 i=68 ns=1;i=7089 i=297 ResultState ns=1;i=3009 -1 i=297 MeasId ns=1;i=3015 -1 i=297 PartId ns=1;i=3004 -1 i=297 ExternalRecipeId ns=1;i=3002 -1 i=297 InternalRecipeId ns=1;i=3013 -1 i=297 ExternalConfigurationId ns=1;i=3008 -1 i=297 InternalConfigurationId ns=1;i=3008 -1 i=297 ProductId ns=1;i=3003 -1 i=297 JobId ns=1;i=3016 -1 i=297 MaxResults i=7 -1 i=297 StartIndex i=7 -1 i=297 Timeout i=6 -1 OutputArguments i=78 i=68 ns=1;i=7089 i=297 IsComplete i=1 -1 i=297 ResultCount i=7 -1 i=297 ResultHandle ns=1;i=3018 -1 i=297 ResultList ns=1;i=3006 1 i=297 Error i=6 -1 ReleaseResultHandle https://reference.opcfoundation.org/v104/MachineVision/v100/docs/7.10.2/#7.10.2.4 ns=1;i=6217 i=80 ns=1;i=6218 ns=1;i=1007 InputArguments i=78 i=68 ns=1;i=7090 i=297 ResultHandle ns=1;i=3018 -1 OutputArguments i=78 i=68 ns=1;i=7090 i=297 Error i=6 -1 Results i=80 ns=1;i=1016 ns=1;i=1007 ResultTransfer ns=1;i=6543 ns=1;i=7071 ns=1;i=7067 ns=1;i=7077 i=80 ns=1;i=1007 ns=1;i=1039 ClientProcessingTimeout ns=1;i=5251 i=78 i=68 CloseAndCommit ns=1;i=5251 ns=1;i=6544 i=78 ns=1;i=6545 InputArguments i=78 i=68 ns=1;i=7071 i=297 FileHandle i=7 -1 OutputArguments i=78 i=68 ns=1;i=7071 i=297 CompletionStateMachine i=17 -1 GenerateFileForRead ns=1;i=5251 ns=1;i=6541 i=78 ns=1;i=6542 InputArguments i=78 i=68 ns=1;i=7067 i=297 GenerateOptions ns=1;i=3022 -1 OutputArguments i=78 i=68 ns=1;i=7067 i=297 FileNodeId i=17 -1 i=297 FileHandle i=7 -1 i=297 CompletionStateMachine i=17 -1 GenerateFileForWrite ns=1;i=5251 ns=1;i=6546 i=78 ns=1;i=6547 InputArguments i=78 i=68 ns=1;i=7077 i=297 GenerateOptions i=24 -1 OutputArguments i=78 i=68 ns=1;i=7077 i=297 FileNodeId i=17 -1 i=297 FileHandle i=7 -1 SafetyStateManagementType https://reference.opcfoundation.org/v104/MachineVision/v100/docs/7.13.1 ns=1;i=7043 i=58 ns=1;i=6042 ns=1;i=6041 ReportSafetyState https://reference.opcfoundation.org/v104/MachineVision/v100/docs/7.13.2/#7.13.2.1 ns=1;i=6222 i=78 ns=1;i=6223 ns=1;i=1009 InputArguments i=78 i=68 ns=1;i=7043 i=297 SafetyTriggered i=1 -1 i=297 SafetyInformation i=12 -1 OutputArguments i=78 i=68 ns=1;i=7043 i=297 Error i=6 -1 VisionSafetyInformation i=63 i=78 ns=1;i=1009 VisionSafetyTriggered i=63 i=78 ns=1;i=1009 VisionAutomaticModeStateMachineType https://reference.opcfoundation.org/v104/MachineVision/v100/docs/8.3.4 ns=1;i=7097 ns=1;i=5059 ns=1;i=5021 ns=1;i=5072 ns=1;i=5073 ns=1;i=5071 ns=1;i=5056 ns=1;i=5043 ns=1;i=5061 ns=1;i=5045 ns=1;i=5060 ns=1;i=5057 ns=1;i=5046 ns=1;i=5066 ns=1;i=5067 ns=1;i=5063 ns=1;i=5044 ns=1;i=5062 ns=1;i=5064 ns=1;i=5065 ns=1;i=7100 ns=1;i=5058 ns=1;i=5052 ns=1;i=5069 ns=1;i=5070 ns=1;i=5068 ns=1;i=7009 ns=1;i=7098 ns=1;i=7096 i=2771 Abort https://reference.opcfoundation.org/v104/MachineVision/v100/docs/8.3.7/#8.3.7.3 ns=1;i=1021 ns=1;i=5069 ns=1;i=5072 ns=1;i=6285 i=78 ns=1;i=6286 InputArguments i=78 i=68 ns=1;i=7097 i=297 Cause i=6 -1 i=297 CauseDescription i=12 -1 OutputArguments i=78 i=68 ns=1;i=7097 i=297 Error i=6 -1 ContinuousExecution ns=1;i=1021 ns=1;i=5021 ns=1;i=5072 ns=1;i=5073 ns=1;i=5071 ns=1;i=5066 ns=1;i=5067 ns=1;i=6262 i=2307 ns=1;i=5066 ns=1;i=5067 ns=1;i=5071 ns=1;i=5072 ns=1;i=5073 StateNumber i=78 i=68 ns=1;i=5059 8 ContinuousExecutionStepModel ns=1;i=1021 ns=1;i=6085 i=80 ns=1;i=7024 ns=1;i=1026 ns=1;i=5059 CurrentState ns=1;i=5021 i=2760 ns=1;i=6088 i=78 Id ns=1;i=6085 i=78 i=68 Sync https://reference.opcfoundation.org/v104/MachineVision/v100/docs/8.4.6/#8.4.6.1 ns=1;i=6059 i=78 ns=1;i=6083 ns=1;i=5021 InputArguments i=78 i=68 ns=1;i=7024 i=297 Cause i=6 -1 i=297 CauseDescription i=12 -1 OutputArguments i=78 i=68 ns=1;i=7024 i=297 Error i=6 -1 ContinuousExecutionToReadyAbort ns=1;i=7097 ns=1;i=5059 ns=1;i=1021 ns=1;i=5057 ns=1;i=5059 ns=1;i=5057 ns=1;i=1023 ns=1;i=1018 ns=1;i=6275 i=2310 TransitionNumber i=78 i=68 ns=1;i=5072 862 ContinuousExecutionToReadyAuto ns=1;i=5059 ns=1;i=1021 ns=1;i=5057 ns=1;i=5059 ns=1;i=5057 ns=1;i=1023 ns=1;i=1018 ns=1;i=6276 i=2310 TransitionNumber i=78 i=68 ns=1;i=5073 860 ContinuousExecutionToReadyStop ns=1;i=5059 ns=1;i=1021 ns=1;i=5057 ns=1;i=5059 ns=1;i=5057 ns=1;i=1023 ns=1;i=1018 ns=1;i=7096 ns=1;i=6274 i=2310 TransitionNumber i=78 i=68 ns=1;i=5071 861 Initialized ns=1;i=1021 ns=1;i=5035 ns=1;i=5036 ns=1;i=5044 ns=1;i=5045 ns=1;i=5043 ns=1;i=5061 ns=1;i=5045 ns=1;i=5060 ns=1;i=5063 ns=1;i=5044 ns=1;i=5062 ns=1;i=6259 i=2307 ns=1;i=5060 ns=1;i=5061 ns=1;i=5062 ns=1;i=5063 StateNumber i=78 i=68 ns=1;i=5056 5 InitializedStepModel ns=1;i=6091 ns=1;i=1021 i=80 ns=1;i=7027 ns=1;i=1026 ns=1;i=5056 CurrentState ns=1;i=5043 i=2760 ns=1;i=6092 i=78 Id ns=1;i=6091 i=78 i=68 Sync ns=1;i=6089 i=78 ns=1;i=6090 ns=1;i=5043 InputArguments i=78 i=68 ns=1;i=7027 i=297 Cause i=6 -1 i=297 CauseDescription i=12 -1 OutputArguments i=78 i=68 ns=1;i=7027 i=297 Error i=6 -1 InitializedToReadyAuto ns=1;i=5056 ns=1;i=1021 ns=1;i=5056 ns=1;i=5057 ns=1;i=5057 ns=1;i=1018 ns=1;i=6264 i=2310 TransitionNumber i=78 i=68 ns=1;i=5061 560 InitializedToReadyProduct ns=1;i=5056 ns=1;i=1021 ns=1;i=7060 ns=1;i=5057 ns=1;i=1022 ns=1;i=1018 ns=1;i=6084 i=2310 ns=1;i=5056 ns=1;i=5057 TransitionNumber i=78 i=68 ns=1;i=5045 562 InitializedToReadyRecipe ns=1;i=5056 ns=1;i=1021 ns=1;i=5056 ns=1;i=5057 ns=1;i=7015 ns=1;i=5057 ns=1;i=1022 ns=1;i=1018 ns=1;i=6263 i=2310 TransitionNumber i=78 i=68 ns=1;i=5060 561 Ready ns=1;i=5072 ns=1;i=5073 ns=1;i=5071 ns=1;i=5061 ns=1;i=5045 ns=1;i=5060 ns=1;i=1021 ns=1;i=5044 ns=1;i=5045 ns=1;i=5046 ns=1;i=5066 ns=1;i=5067 ns=1;i=5063 ns=1;i=5044 ns=1;i=5062 ns=1;i=5064 ns=1;i=5065 ns=1;i=5069 ns=1;i=5070 ns=1;i=5068 ns=1;i=6260 i=2307 ns=1;i=5060 ns=1;i=5061 ns=1;i=5062 ns=1;i=5063 ns=1;i=5064 ns=1;i=5065 ns=1;i=5066 ns=1;i=5067 ns=1;i=5068 ns=1;i=5069 ns=1;i=5070 ns=1;i=5071 ns=1;i=5072 ns=1;i=5073 StateNumber i=78 i=68 ns=1;i=5057 6 ReadyStepModel ns=1;i=6135 i=80 ns=1;i=1021 ns=1;i=7028 ns=1;i=1026 ns=1;i=5057 CurrentState ns=1;i=5046 i=2760 ns=1;i=6136 i=78 Id ns=1;i=6135 i=78 i=68 Sync ns=1;i=6129 i=78 ns=1;i=6134 ns=1;i=5046 InputArguments i=78 i=68 ns=1;i=7028 i=297 Cause i=6 -1 i=297 CauseDescription i=12 -1 OutputArguments i=78 i=68 ns=1;i=7028 i=297 Error i=6 -1 ReadyToContinuousExecution ns=1;i=5059 ns=1;i=1013 ns=1;i=5057 ns=1;i=1021 ns=1;i=5057 ns=1;i=5059 ns=1;i=7009 ns=1;i=1018 ns=1;i=6269 i=2310 TransitionNumber i=78 i=68 ns=1;i=5066 681 ReadyToContinuousExecutionAuto ns=1;i=5059 ns=1;i=1013 ns=1;i=5057 ns=1;i=1021 ns=1;i=5057 ns=1;i=5059 ns=1;i=1018 ns=1;i=6270 i=2310 TransitionNumber i=78 i=68 ns=1;i=5067 680 ReadyToInitializedAuto ns=1;i=5056 ns=1;i=5057 ns=1;i=1021 ns=1;i=5056 ns=1;i=5057 ns=1;i=1018 ns=1;i=6266 i=2310 TransitionNumber i=78 i=68 ns=1;i=5063 650 ReadyToInitializedProduct ns=1;i=5056 ns=1;i=5057 ns=1;i=1021 ns=1;i=1018 ns=1;i=6243 i=2310 ns=1;i=7059 ns=1;i=5056 ns=1;i=5057 TransitionNumber i=78 i=68 ns=1;i=5044 652 ReadyToInitializedRecipe ns=1;i=5056 ns=1;i=5057 ns=1;i=1021 ns=1;i=5056 ns=1;i=5057 ns=1;i=1018 ns=1;i=6265 i=2310 ns=1;i=7055 TransitionNumber i=78 i=68 ns=1;i=5062 651 ReadyToSingleExecution ns=1;i=1013 ns=1;i=5057 ns=1;i=1021 ns=1;i=5057 ns=1;i=5058 ns=1;i=5058 ns=1;i=7098 ns=1;i=1018 ns=1;i=6267 i=2310 TransitionNumber i=78 i=68 ns=1;i=5064 671 ReadyToSingleExecutionAuto ns=1;i=1013 ns=1;i=5057 ns=1;i=1021 ns=1;i=5057 ns=1;i=5058 ns=1;i=5058 ns=1;i=1018 ns=1;i=6268 i=2310 TransitionNumber i=78 i=68 ns=1;i=5065 670 SimulationMode https://reference.opcfoundation.org/v104/MachineVision/v100/docs/8.3.7/#8.3.7.5 ns=1;i=6289 i=80 ns=1;i=6290 ns=1;i=1021 InputArguments i=78 i=68 ns=1;i=7100 i=297 Activate i=1 -1 i=297 Cause i=6 -1 i=297 CauseDescription i=12 -1 OutputArguments i=78 i=68 ns=1;i=7100 i=297 Error i=6 -1 SingleExecution ns=1;i=5064 ns=1;i=5065 ns=1;i=1021 ns=1;i=5052 ns=1;i=5069 ns=1;i=5070 ns=1;i=5068 ns=1;i=6261 i=2307 ns=1;i=5064 ns=1;i=5065 ns=1;i=5068 ns=1;i=5069 ns=1;i=5070 StateNumber i=78 i=68 ns=1;i=5058 7 SingleExecutionStepModel ns=1;i=6139 i=80 ns=1;i=1021 ns=1;i=7030 ns=1;i=1026 ns=1;i=5058 CurrentState ns=1;i=5052 i=2760 ns=1;i=6242 i=78 Id ns=1;i=6139 i=78 i=68 Sync ns=1;i=6137 i=78 ns=1;i=6138 ns=1;i=5052 InputArguments i=78 i=68 ns=1;i=7030 i=297 Cause i=6 -1 i=297 CauseDescription i=12 -1 OutputArguments i=78 i=68 ns=1;i=7030 i=297 Error i=6 -1 SingleExecutionToReadyAbort ns=1;i=7097 ns=1;i=5057 ns=1;i=1023 ns=1;i=5058 ns=1;i=1021 ns=1;i=5057 ns=1;i=5058 ns=1;i=1018 ns=1;i=6272 i=2310 TransitionNumber i=78 i=68 ns=1;i=5069 762 SingleExecutionToReadyAuto ns=1;i=5057 ns=1;i=1023 ns=1;i=5058 ns=1;i=1021 ns=1;i=5057 ns=1;i=5058 ns=1;i=1018 ns=1;i=6273 i=2310 TransitionNumber i=78 i=68 ns=1;i=5070 760 SingleExecutionToReadyStop ns=1;i=5057 ns=1;i=1023 ns=1;i=5058 ns=1;i=1021 ns=1;i=5057 ns=1;i=5058 ns=1;i=1018 ns=1;i=7096 ns=1;i=6271 i=2310 TransitionNumber i=78 i=68 ns=1;i=5068 761 StartContinuous https://reference.opcfoundation.org/v104/MachineVision/v100/docs/8.3.7/#8.3.7.2 ns=1;i=6086 i=78 ns=1;i=6087 ns=1;i=1021 ns=1;i=5066 InputArguments i=78 i=68 ns=1;i=7009 i=297 MeasId ns=1;i=3015 -1 i=297 PartId ns=1;i=3004 -1 i=297 RecipeId ns=1;i=3002 -1 i=297 ProductId ns=1;i=3003 -1 i=297 Parameters i=24 1 OutputArguments i=78 i=68 ns=1;i=7009 i=297 JobId ns=1;i=3016 -1 i=297 Error i=6 -1 StartSingleJob https://reference.opcfoundation.org/v104/MachineVision/v100/docs/8.3.7/#8.3.7.1 ns=1;i=6281 i=78 ns=1;i=6282 ns=1;i=1021 ns=1;i=5064 InputArguments i=78 i=68 ns=1;i=7098 i=297 MeasId ns=1;i=3015 -1 i=297 PartId ns=1;i=3004 -1 i=297 RecipeId ns=1;i=3002 -1 i=297 ProductId ns=1;i=3003 -1 i=297 Parameters i=24 1 OutputArguments i=78 i=68 ns=1;i=7098 i=297 JobId ns=1;i=3016 -1 i=297 Error i=6 -1 Stop https://reference.opcfoundation.org/v104/MachineVision/v100/docs/8.3.7/#8.3.7.4 ns=1;i=6287 i=78 ns=1;i=6288 ns=1;i=1021 ns=1;i=5068 ns=1;i=5071 InputArguments i=78 i=68 ns=1;i=7096 i=297 Cause i=6 -1 i=297 CauseDescription i=12 -1 OutputArguments i=78 i=68 ns=1;i=7096 i=297 Error i=6 -1 VisionStateMachineType https://reference.opcfoundation.org/v104/MachineVision/v100/docs/8.2.5 ns=1;i=5024 ns=1;i=7066 ns=1;i=5030 ns=1;i=5054 ns=1;i=5041 ns=1;i=5042 ns=1;i=5255 ns=1;i=5039 ns=1;i=5040 ns=1;i=7094 ns=1;i=5029 ns=1;i=5011 ns=1;i=5037 ns=1;i=5038 ns=1;i=5031 ns=1;i=5051 ns=1;i=5049 ns=1;i=5050 ns=1;i=5047 ns=1;i=5048 ns=1;i=5028 ns=1;i=5012 ns=1;i=5034 ns=1;i=5032 ns=1;i=5033 ns=1;i=5035 ns=1;i=5036 ns=1;i=5253 ns=1;i=5254 ns=1;i=7093 ns=1;i=7095 i=2771 AutomaticModeStateMachine ns=1;i=7020 ns=1;i=1017 ns=1;i=5025 ns=1;i=6080 ns=1;i=5055 i=80 ns=1;i=5074 ns=1;i=7044 ns=1;i=5092 ns=1;i=7021 ns=1;i=7022 ns=1;i=7023 ns=1;i=1021 ns=1;i=5031 Abort https://reference.opcfoundation.org/v104/MachineVision/v100/docs/8.3.7/#8.3.7.3 ns=1;i=5024 ns=1;i=6065 i=78 ns=1;i=6066 InputArguments i=78 i=68 ns=1;i=7020 i=297 Cause i=6 -1 i=297 CauseDescription i=12 -1 OutputArguments i=78 i=68 ns=1;i=7020 i=297 Error i=6 -1 ContinuousExecutionStepModel ns=1;i=5024 ns=1;i=6082 i=80 ns=1;i=7039 ns=1;i=1026 CurrentState ns=1;i=5025 i=2760 ns=1;i=6166 i=78 Id ns=1;i=6082 i=78 i=68 Sync https://reference.opcfoundation.org/v104/MachineVision/v100/docs/8.4.6/#8.4.6.1 ns=1;i=6167 i=78 ns=1;i=6174 ns=1;i=5025 InputArguments i=78 i=68 ns=1;i=7039 i=297 Cause i=6 -1 i=297 CauseDescription i=12 -1 OutputArguments i=78 i=68 ns=1;i=7039 i=297 Error i=6 -1 CurrentState ns=1;i=5024 i=2760 ns=1;i=6081 i=78 Id ns=1;i=6080 i=78 i=68 InitializedStepModel ns=1;i=6175 ns=1;i=5024 i=80 ns=1;i=7040 ns=1;i=1026 CurrentState ns=1;i=5055 i=2760 ns=1;i=6178 i=78 Id ns=1;i=6175 i=78 i=68 Sync ns=1;i=6179 i=78 ns=1;i=6182 ns=1;i=5055 InputArguments i=78 i=68 ns=1;i=7040 i=297 Cause i=6 -1 i=297 CauseDescription i=12 -1 OutputArguments i=78 i=68 ns=1;i=7040 i=297 Error i=6 -1 ReadyStepModel ns=1;i=6183 i=80 ns=1;i=5024 ns=1;i=7042 ns=1;i=1026 CurrentState ns=1;i=5074 i=2760 ns=1;i=6211 i=78 Id ns=1;i=6183 i=78 i=68 Sync ns=1;i=6212 i=78 ns=1;i=6215 ns=1;i=5074 InputArguments i=78 i=68 ns=1;i=7042 i=297 Cause i=6 -1 i=297 CauseDescription i=12 -1 OutputArguments i=78 i=68 ns=1;i=7042 i=297 Error i=6 -1 SimulationMode https://reference.opcfoundation.org/v104/MachineVision/v100/docs/8.3.7/#8.3.7.5 ns=1;i=6326 i=80 ns=1;i=6400 ns=1;i=5024 InputArguments i=78 i=68 ns=1;i=7044 i=297 Activate i=1 -1 i=297 Cause i=6 -1 i=297 CauseDescription i=12 -1 OutputArguments i=78 i=68 ns=1;i=7044 i=297 Error i=6 -1 SingleExecutionStepModel ns=1;i=6401 i=80 ns=1;i=5024 ns=1;i=7091 ns=1;i=1026 CurrentState ns=1;i=5092 i=2760 ns=1;i=6402 i=78 Id ns=1;i=6401 i=78 i=68 Sync ns=1;i=6403 i=78 ns=1;i=6404 ns=1;i=5092 InputArguments i=78 i=68 ns=1;i=7091 i=297 Cause i=6 -1 i=297 CauseDescription i=12 -1 OutputArguments i=78 i=68 ns=1;i=7091 i=297 Error i=6 -1 StartContinuous https://reference.opcfoundation.org/v104/MachineVision/v100/docs/8.3.7/#8.3.7.2 ns=1;i=6067 i=78 ns=1;i=6068 ns=1;i=5024 InputArguments i=78 i=68 ns=1;i=7021 i=297 MeasId ns=1;i=3015 -1 i=297 PartId ns=1;i=3004 -1 i=297 RecipeId ns=1;i=3002 -1 i=297 ProductId ns=1;i=3003 -1 i=297 Parameters i=24 1 OutputArguments i=78 i=68 ns=1;i=7021 i=297 JobId ns=1;i=3016 -1 i=297 Error i=6 -1 StartSingleJob https://reference.opcfoundation.org/v104/MachineVision/v100/docs/8.3.7/#8.3.7.1 ns=1;i=6069 i=78 ns=1;i=6070 ns=1;i=5024 InputArguments i=78 i=68 ns=1;i=7022 i=297 MeasId ns=1;i=3015 -1 i=297 PartId ns=1;i=3004 -1 i=297 RecipeId ns=1;i=3002 -1 i=297 ProductId ns=1;i=3003 -1 i=297 Parameters i=24 1 OutputArguments i=78 i=68 ns=1;i=7022 i=297 JobId ns=1;i=3016 -1 i=297 Error i=6 -1 Stop https://reference.opcfoundation.org/v104/MachineVision/v100/docs/8.3.7/#8.3.7.4 ns=1;i=6078 i=78 ns=1;i=6079 ns=1;i=5024 InputArguments i=78 i=68 ns=1;i=7023 i=297 Cause i=6 -1 i=297 CauseDescription i=12 -1 OutputArguments i=78 i=68 ns=1;i=7023 i=297 Error i=6 -1 ConfirmAll https://reference.opcfoundation.org/v104/MachineVision/v100/docs/8.2.8/#8.2.8.4 ns=1;i=1017 ns=1;i=6241 i=80 InputArguments i=78 i=68 ns=1;i=7066 i=297 Comment i=21 -1 Error ns=1;i=1017 ns=1;i=5054 ns=1;i=5041 ns=1;i=5042 ns=1;i=5255 ns=1;i=5039 ns=1;i=5040 ns=1;i=5051 ns=1;i=5034 ns=1;i=6228 i=2307 ns=1;i=5034 ns=1;i=5039 ns=1;i=5040 ns=1;i=5041 ns=1;i=5042 ns=1;i=5051 ns=1;i=5255 StateNumber i=78 i=68 ns=1;i=5030 3 ErrorStepModel ns=1;i=6358 ns=1;i=1017 ns=1;i=5030 i=80 ns=1;i=7019 ns=1;i=1026 CurrentState ns=1;i=5054 i=2760 ns=1;i=6390 i=78 Id ns=1;i=6358 i=78 i=68 Sync ns=1;i=6252 i=78 ns=1;i=6349 ns=1;i=5054 InputArguments i=78 i=68 ns=1;i=7019 i=297 Cause i=6 -1 i=297 CauseDescription i=12 -1 OutputArguments i=78 i=68 ns=1;i=7019 i=297 Error i=6 -1 ErrorToHalted ns=1;i=5030 ns=1;i=1017 ns=1;i=5029 ns=1;i=5030 ns=1;i=7094 ns=1;i=5029 ns=1;i=1018 ns=1;i=6239 i=2310 TransitionNumber i=78 i=68 ns=1;i=5041 321 ErrorToHaltedAuto ns=1;i=5030 ns=1;i=1017 ns=1;i=5029 ns=1;i=5030 ns=1;i=5029 ns=1;i=1018 ns=1;i=6240 i=2310 TransitionNumber i=78 i=68 ns=1;i=5042 320 ErrorToOperationalAuto ns=1;i=5030 ns=1;i=1020 ns=1;i=1017 ns=1;i=5030 ns=1;i=5031 ns=1;i=5031 ns=1;i=1018 ns=1;i=6341 i=2310 TransitionNumber i=78 i=68 ns=1;i=5255 340 ErrorToPreoperational ns=1;i=5030 ns=1;i=1017 ns=1;i=5028 ns=1;i=5030 ns=1;i=5028 ns=1;i=7093 ns=1;i=1018 ns=1;i=6237 i=2310 TransitionNumber i=78 i=68 ns=1;i=5039 311 ErrorToPreoperationalAuto ns=1;i=5030 ns=1;i=1017 ns=1;i=5028 ns=1;i=5030 ns=1;i=5028 ns=1;i=1018 ns=1;i=6238 i=2310 TransitionNumber i=78 i=68 ns=1;i=5040 310 Halt https://reference.opcfoundation.org/v104/MachineVision/v100/docs/8.2.8/#8.2.8.1 ns=1;i=1017 ns=1;i=5032 ns=1;i=5041 ns=1;i=5049 ns=1;i=6254 i=78 ns=1;i=6255 InputArguments i=78 i=68 ns=1;i=7094 i=297 Cause i=6 -1 i=297 CauseDescription i=12 -1 OutputArguments i=78 i=68 ns=1;i=7094 i=297 Error i=6 -1 Halted ns=1;i=5041 ns=1;i=5042 ns=1;i=1017 ns=1;i=5011 ns=1;i=5037 ns=1;i=5038 ns=1;i=5049 ns=1;i=5050 ns=1;i=5032 ns=1;i=5033 ns=1;i=6227 i=2307 ns=1;i=5032 ns=1;i=5033 ns=1;i=5037 ns=1;i=5038 ns=1;i=5041 ns=1;i=5042 ns=1;i=5049 ns=1;i=5050 StateNumber i=78 i=68 ns=1;i=5029 2 HaltedStepModel ns=1;i=6058 ns=1;i=1017 i=80 ns=1;i=7010 ns=1;i=1026 ns=1;i=5029 CurrentState ns=1;i=5011 i=2760 ns=1;i=6060 i=78 Id ns=1;i=6058 i=78 i=68 Sync ns=1;i=6056 i=78 ns=1;i=6057 ns=1;i=5011 InputArguments i=78 i=68 ns=1;i=7010 i=297 Cause i=6 -1 i=297 CauseDescription i=12 -1 OutputArguments i=78 i=68 ns=1;i=7010 i=297 Error i=6 -1 HaltedToPreoperational ns=1;i=5029 ns=1;i=1017 ns=1;i=5028 ns=1;i=5029 ns=1;i=5028 ns=1;i=7093 ns=1;i=1018 ns=1;i=6235 i=2310 TransitionNumber i=78 i=68 ns=1;i=5037 211 HaltedToPreoperationalAuto ns=1;i=5029 ns=1;i=1017 ns=1;i=5028 ns=1;i=5029 ns=1;i=5028 ns=1;i=1018 ns=1;i=6236 i=2310 TransitionNumber i=78 i=68 ns=1;i=5038 210 Operational ns=1;i=5024 ns=1;i=5255 ns=1;i=1017 ns=1;i=5051 ns=1;i=5049 ns=1;i=5050 ns=1;i=5047 ns=1;i=5048 ns=1;i=5253 ns=1;i=5254 ns=1;i=6229 i=2307 ns=1;i=5047 ns=1;i=5048 ns=1;i=5049 ns=1;i=5050 ns=1;i=5051 ns=1;i=5253 ns=1;i=5254 ns=1;i=5255 StateNumber i=78 i=68 ns=1;i=5031 4 OperationalToErrorAuto ns=1;i=5030 ns=1;i=5031 ns=1;i=1017 ns=1;i=5030 ns=1;i=5031 ns=1;i=1018 ns=1;i=6249 i=2310 TransitionNumber i=78 i=68 ns=1;i=5051 430 OperationalToHalted ns=1;i=7094 ns=1;i=5029 ns=1;i=5031 ns=1;i=1017 ns=1;i=5029 ns=1;i=5031 ns=1;i=1018 ns=1;i=6247 i=2310 TransitionNumber i=78 i=68 ns=1;i=5049 421 OperationalToHaltedAuto ns=1;i=5029 ns=1;i=5031 ns=1;i=1017 ns=1;i=5029 ns=1;i=5031 ns=1;i=1018 ns=1;i=6248 i=2310 TransitionNumber i=78 i=68 ns=1;i=5050 420 OperationalToPreoperational ns=1;i=5031 ns=1;i=1017 ns=1;i=5028 ns=1;i=5031 ns=1;i=5028 ns=1;i=7093 ns=1;i=1018 ns=1;i=6245 i=2310 TransitionNumber i=78 i=68 ns=1;i=5047 411 OperationalToPreoperationalAuto ns=1;i=5031 ns=1;i=1017 ns=1;i=5028 ns=1;i=5031 ns=1;i=5028 ns=1;i=1018 ns=1;i=6246 i=2310 TransitionNumber i=78 i=68 ns=1;i=5048 410 Preoperational ns=1;i=5039 ns=1;i=5040 ns=1;i=5037 ns=1;i=5038 ns=1;i=5047 ns=1;i=5048 ns=1;i=1017 ns=1;i=5012 ns=1;i=5034 ns=1;i=5032 ns=1;i=5033 ns=1;i=5035 ns=1;i=5036 ns=1;i=5253 ns=1;i=5254 ns=1;i=6226 i=2307 ns=1;i=5032 ns=1;i=5033 ns=1;i=5034 ns=1;i=5035 ns=1;i=5036 ns=1;i=5037 ns=1;i=5038 ns=1;i=5039 ns=1;i=5040 ns=1;i=5047 ns=1;i=5048 ns=1;i=5253 ns=1;i=5254 StateNumber i=78 i=68 ns=1;i=5028 1 PreoperationalStepModel ns=1;i=6063 i=80 ns=1;i=1017 ns=1;i=7011 ns=1;i=1026 ns=1;i=5028 CurrentState ns=1;i=5012 i=2760 ns=1;i=6064 i=78 Id ns=1;i=6063 i=78 i=68 Sync ns=1;i=6061 i=78 ns=1;i=6062 ns=1;i=5012 InputArguments i=78 i=68 ns=1;i=7011 i=297 Cause i=6 -1 i=297 CauseDescription i=12 -1 OutputArguments i=78 i=68 ns=1;i=7011 i=297 Error i=6 -1 PreoperationalToErrorAuto ns=1;i=5030 ns=1;i=1019 ns=1;i=5028 ns=1;i=1017 ns=1;i=5028 ns=1;i=5030 ns=1;i=1018 ns=1;i=6232 i=2310 TransitionNumber i=78 i=68 ns=1;i=5034 130 PreoperationalToHalted ns=1;i=7094 ns=1;i=5029 ns=1;i=5028 ns=1;i=1017 ns=1;i=5028 ns=1;i=5029 ns=1;i=1018 ns=1;i=6230 i=2310 TransitionNumber i=78 i=68 ns=1;i=5032 121 PreoperationalToHaltedAuto ns=1;i=5029 ns=1;i=5028 ns=1;i=1017 ns=1;i=5028 ns=1;i=5029 ns=1;i=1018 ns=1;i=6231 i=2310 TransitionNumber i=78 i=68 ns=1;i=5033 120 PreoperationalToInitialized ns=1;i=5056 ns=1;i=5028 ns=1;i=1017 ns=1;i=5028 ns=1;i=7095 ns=1;i=1018 ns=1;i=6233 i=2310 TransitionNumber i=78 i=68 ns=1;i=5035 151 PreoperationalToInitializedAuto ns=1;i=5056 ns=1;i=5028 ns=1;i=1017 ns=1;i=5028 ns=1;i=1018 ns=1;i=6234 i=2310 TransitionNumber i=78 i=68 ns=1;i=5036 150 PreoperationalToOperational ns=1;i=5031 ns=1;i=5028 ns=1;i=1017 ns=1;i=5028 ns=1;i=5031 ns=1;i=7095 ns=1;i=1018 ns=1;i=6171 i=2310 TransitionNumber i=78 i=68 ns=1;i=5253 141 PreoperationalToOperationalAuto ns=1;i=5031 ns=1;i=5028 ns=1;i=1017 ns=1;i=5028 ns=1;i=5031 ns=1;i=1018 ns=1;i=6221 i=2310 TransitionNumber i=78 i=68 ns=1;i=5254 140 Reset https://reference.opcfoundation.org/v104/MachineVision/v100/docs/8.2.8/#8.2.8.2 ns=1;i=6256 i=78 ns=1;i=6257 ns=1;i=1017 ns=1;i=5037 ns=1;i=5039 ns=1;i=5047 InputArguments i=78 i=68 ns=1;i=7093 i=297 Cause i=6 -1 i=297 CauseDescription i=12 -1 OutputArguments i=78 i=68 ns=1;i=7093 i=297 Error i=6 -1 SelectModeAutomatic https://reference.opcfoundation.org/v104/MachineVision/v100/docs/8.2.8/#8.2.8.3 i=80 ns=1;i=6258 ns=1;i=1017 ns=1;i=5035 ns=1;i=5253 OutputArguments i=78 i=68 ns=1;i=7095 i=297 Error i=6 -1 VisionStepModelStateMachineType https://reference.opcfoundation.org/v104/MachineVision/v100/docs/8.4.3 ns=1;i=5078 ns=1;i=5082 ns=1;i=5083 ns=1;i=5079 ns=1;i=5081 ns=1;i=5087 ns=1;i=5086 ns=1;i=7101 i=2771 ns=1;i=5080 ns=1;i=5084 ns=1;i=5085 Entry ns=1;i=1026 ns=1;i=5082 ns=1;i=5083 i=2309 ns=1;i=6309 ns=1;i=5082 ns=1;i=5083 StateNumber i=78 i=68 ns=1;i=5078 11 EntryToExitAuto ns=1;i=5078 ns=1;i=1026 ns=1;i=5078 ns=1;i=5079 ns=1;i=5079 ns=1;i=1018 ns=1;i=6313 i=2310 TransitionNumber i=78 i=68 ns=1;i=5082 11120 EntryToWaitAuto ns=1;i=1027 ns=1;i=5078 ns=1;i=1026 ns=1;i=5078 ns=1;i=5080 ns=1;i=1018 ns=1;i=6314 i=2310 ns=1;i=5080 TransitionNumber i=78 i=68 ns=1;i=5083 11130 Exit ns=1;i=5082 ns=1;i=1026 ns=1;i=6310 i=2307 ns=1;i=5087 ns=1;i=5082 ns=1;i=5087 StateNumber i=78 i=68 ns=1;i=5079 12 Step ns=1;i=6312 i=2307 ns=1;i=1026 ns=1;i=5087 ns=1;i=5086 ns=1;i=5084 ns=1;i=5085 ns=1;i=5084 ns=1;i=5085 ns=1;i=5086 ns=1;i=5087 StateNumber i=78 i=68 ns=1;i=5081 14 StepToExitAuto ns=1;i=5079 ns=1;i=1029 ns=1;i=1018 ns=1;i=5081 ns=1;i=1026 ns=1;i=5079 ns=1;i=5081 ns=1;i=6318 i=2310 TransitionNumber i=78 i=68 ns=1;i=5087 14120 StepToWaitAuto ns=1;i=1028 ns=1;i=1018 ns=1;i=5081 ns=1;i=1026 ns=1;i=5080 ns=1;i=5081 ns=1;i=6317 i=2310 ns=1;i=5080 TransitionNumber i=78 i=68 ns=1;i=5086 14130 Sync https://reference.opcfoundation.org/v104/MachineVision/v100/docs/8.4.6/#8.4.6.1 ns=1;i=6319 i=78 ns=1;i=6320 ns=1;i=1026 ns=1;i=5084 InputArguments i=78 i=68 ns=1;i=7101 i=297 Cause i=6 -1 i=297 CauseDescription i=12 -1 OutputArguments i=78 i=68 ns=1;i=7101 i=297 Error i=6 -1 Wait ns=1;i=5083 ns=1;i=6311 i=2307 ns=1;i=5086 ns=1;i=1026 ns=1;i=5084 ns=1;i=5085 ns=1;i=5083 ns=1;i=5084 ns=1;i=5085 ns=1;i=5086 StateNumber i=78 i=68 ns=1;i=5080 13 WaitToStep ns=1;i=1018 ns=1;i=5081 ns=1;i=7101 ns=1;i=6315 i=2310 ns=1;i=5080 ns=1;i=1026 ns=1;i=5080 ns=1;i=5081 TransitionNumber i=78 i=68 ns=1;i=5084 13141 WaitToStepAuto ns=1;i=1018 ns=1;i=5081 ns=1;i=6316 i=2310 ns=1;i=5080 ns=1;i=1026 ns=1;i=5080 ns=1;i=5081 TransitionNumber i=78 i=68 ns=1;i=5085 13140 ConfigurationTransferType https://reference.opcfoundation.org/v104/MachineVision/v100/docs/7.4.1 i=15744 ns=1;i=7129 ns=1;i=7130 GenerateFileForRead ns=1;i=1012 ns=1;i=6617 i=78 ns=1;i=6618 InputArguments i=78 i=68 ns=1;i=7129 i=297 GenerateOptions ns=1;i=3011 -1 OutputArguments i=78 i=68 ns=1;i=7129 i=297 FileNodeId i=17 -1 i=297 FileHandle i=7 -1 i=297 CompletionStateMachine i=17 -1 GenerateFileForWrite ns=1;i=1012 ns=1;i=6121 i=78 ns=1;i=6122 InputArguments i=78 i=68 ns=1;i=7130 i=297 GenerateOptions ns=1;i=3011 -1 OutputArguments i=78 i=68 ns=1;i=7130 i=297 FileNodeId i=17 -1 i=297 FileHandle i=7 -1 RecipeTransferType https://reference.opcfoundation.org/v104/MachineVision/v100/docs/7.6.1 ns=1;i=7123 ns=1;i=7124 i=15744 GenerateFileForRead ns=1;i=1014 ns=1;i=6184 i=78 ns=1;i=6185 InputArguments i=78 i=68 ns=1;i=7123 i=297 generateOptions ns=1;i=3012 -1 OutputArguments i=78 i=68 ns=1;i=7123 i=297 fileNodeId i=17 -1 i=297 fileHandle i=7 -1 i=297 completionStateMachine i=17 -1 GenerateFileForWrite ns=1;i=1014 ns=1;i=6583 i=78 ns=1;i=6584 InputArguments i=78 i=68 ns=1;i=7124 i=297 GenerateOptions ns=1;i=3012 -1 OutputArguments i=78 i=68 ns=1;i=7124 i=297 FileNodeId i=17 -1 i=297 FileHandle i=7 -1 ResultTransferType https://reference.opcfoundation.org/v104/MachineVision/v100/docs/7.12.1 ns=1;i=7058 i=15744 GenerateFileForRead ns=1;i=1039 ns=1;i=6169 i=78 ns=1;i=6170 InputArguments i=78 i=68 ns=1;i=7058 i=297 GenerateOptions ns=1;i=3022 -1 OutputArguments i=78 i=68 ns=1;i=7058 i=297 FileNodeId i=17 -1 i=297 FileHandle i=7 -1 i=297 CompletionStateMachine i=17 -1 VisionSystemType https://reference.opcfoundation.org/v104/MachineVision/v100/docs/7.1 ns=1;i=5004 ns=1;i=6048 ns=1;i=5015 ns=1;i=5020 ns=1;i=5023 ns=1;i=6049 ns=1;i=5053 i=58 ConfigurationManagement ns=1;i=7008 ns=1;i=6043 ns=1;i=7054 ns=1;i=1003 ns=1;i=1006 ns=1;i=5094 ns=1;i=5093 ns=1;i=7016 ns=1;i=7017 i=80 ns=1;i=7072 ns=1;i=7073 ActivateConfiguration https://reference.opcfoundation.org/v104/MachineVision/v100/docs/7.2.2/#7.2.2.6 ns=1;i=5004 ns=1;i=6026 i=78 ns=1;i=6027 InputArguments i=78 i=68 ns=1;i=7008 i=297 InternalId ns=1;i=3008 -1 OutputArguments i=78 i=68 ns=1;i=7008 i=297 Error i=6 -1 ActiveConfiguration ns=1;i=5004 i=63 i=78 ns=1;i=5089 0 1900-01-01T00:00:00Z AddConfiguration https://reference.opcfoundation.org/v104/MachineVision/v100/docs/7.2.2/#7.2.2.1.1 ns=1;i=5004 ns=1;i=6342 i=80 ns=1;i=6348 InputArguments i=78 i=68 ns=1;i=7054 i=297 ExternalId ns=1;i=3008 -1 OutputArguments i=78 i=68 ns=1;i=7054 i=297 InternalId ns=1;i=3008 -1 i=297 Configuration i=17 -1 i=297 TransferRequired i=1 -1 i=297 Error i=6 -1 Configurations ns=1;i=1011 ns=1;i=5004 i=80 ConfigurationTransfer ns=1;i=6350 ns=1;i=7068 ns=1;i=5004 ns=1;i=1012 ns=1;i=7069 ns=1;i=7070 i=80 ClientProcessingTimeout ns=1;i=5093 i=78 i=68 CloseAndCommit ns=1;i=5093 ns=1;i=6351 i=78 ns=1;i=6359 InputArguments i=78 i=68 ns=1;i=7068 i=297 FileHandle i=7 -1 OutputArguments i=78 i=68 ns=1;i=7068 i=297 CompletionStateMachine i=17 -1 GenerateFileForRead ns=1;i=5093 ns=1;i=6360 i=78 ns=1;i=6361 InputArguments i=78 i=68 ns=1;i=7069 i=297 GenerateOptions ns=1;i=3011 -1 OutputArguments i=78 i=68 ns=1;i=7069 i=297 FileNodeId i=17 -1 i=297 FileHandle i=7 -1 i=297 CompletionStateMachine i=17 -1 GenerateFileForWrite ns=1;i=5093 ns=1;i=6362 i=78 ns=1;i=6363 InputArguments i=78 i=68 ns=1;i=7070 i=297 GenerateOptions ns=1;i=3011 -1 OutputArguments i=78 i=68 ns=1;i=7070 i=297 FileNodeId i=17 -1 i=297 FileHandle i=7 -1 GetConfigurationById https://reference.opcfoundation.org/v104/MachineVision/v100/docs/7.2.2/#7.2.2.2 ns=1;i=5004 ns=1;i=6044 i=78 ns=1;i=6098 InputArguments i=78 i=68 ns=1;i=7016 i=297 InternalId ns=1;i=3008 -1 i=297 Timeout i=6 -1 OutputArguments i=78 i=68 ns=1;i=7016 i=297 ConfigurationHandle ns=1;i=3018 -1 i=297 Configuration ns=1;i=3007 -1 i=297 Error i=6 -1 GetConfigurationList https://reference.opcfoundation.org/v104/MachineVision/v100/docs/7.2.2/#7.2.2.3 ns=1;i=5004 ns=1;i=6099 i=78 ns=1;i=6102 InputArguments i=78 i=68 ns=1;i=7017 i=297 MaxResults i=7 -1 i=297 StartIndex i=7 -1 i=297 Timeout i=6 -1 OutputArguments i=78 i=68 ns=1;i=7017 i=297 IsComplete i=1 -1 i=297 ResultCount i=7 -1 i=297 ConfigurationHandle ns=1;i=3018 -1 i=297 ConfigurationList ns=1;i=3007 1 i=297 Error i=6 -1 ReleaseConfigurationHandle https://reference.opcfoundation.org/v104/MachineVision/v100/docs/7.2.2/#7.2.2.4 ns=1;i=6364 i=80 ns=1;i=6365 ns=1;i=5004 InputArguments i=78 i=68 ns=1;i=7072 i=297 ConfigurationHandle ns=1;i=3018 -1 OutputArguments i=78 i=68 ns=1;i=7072 i=297 Error i=6 -1 RemoveConfiguration https://reference.opcfoundation.org/v104/MachineVision/v100/docs/7.2.2/#7.2.2.5 ns=1;i=6366 i=80 ns=1;i=6368 ns=1;i=5004 InputArguments i=78 i=68 ns=1;i=7073 i=297 InternalId ns=1;i=3008 -1 OutputArguments i=78 i=68 ns=1;i=7073 i=297 Error i=6 -1 DiagnosticLevel i=63 ns=1;i=1003 i=80 RecipeManagement ns=1;i=7074 ns=1;i=7018 i=80 ns=1;i=7075 ns=1;i=7031 ns=1;i=5095 ns=1;i=1003 ns=1;i=1004 ns=1;i=5097 ns=1;i=5096 ns=1;i=7081 ns=1;i=7082 ns=1;i=7083 ns=1;i=7084 ns=1;i=7032 AddRecipe https://reference.opcfoundation.org/v104/MachineVision/v100/docs/7.5.2/#7.5.2.1.1 ns=1;i=5015 ns=1;i=6369 i=80 ns=1;i=6370 InputArguments i=78 i=68 ns=1;i=7074 i=297 ExternalId ns=1;i=3002 -1 i=297 ProductId ns=1;i=3003 -1 OutputArguments i=78 i=68 ns=1;i=7074 i=297 InternalId ns=1;i=3013 -1 i=297 Recipe i=17 -1 i=297 Product i=17 -1 i=297 TransferRequired i=1 -1 i=297 Error i=6 -1 GetRecipeListFiltered https://reference.opcfoundation.org/v104/MachineVision/v100/docs/7.5.2/#7.5.2.4 ns=1;i=5015 ns=1;i=6103 i=78 ns=1;i=6106 InputArguments i=78 i=68 ns=1;i=7018 i=297 ExternalId ns=1;i=3002 -1 i=297 ProductId ns=1;i=3003 -1 i=297 IsPrepared ns=1;i=3014 -1 i=297 MaxResults i=7 -1 i=297 StartIndex i=7 -1 i=297 Timeout i=6 -1 OutputArguments i=78 i=68 ns=1;i=7018 i=297 IsComplete i=1 -1 i=297 ResultCount i=7 -1 i=297 RecipeHandle ns=1;i=3018 -1 i=297 RecipeList ns=1;i=3013 1 i=297 Error i=6 -1 PrepareProduct https://reference.opcfoundation.org/v104/MachineVision/v100/docs/7.5.2/#7.5.2.7 ns=1;i=6371 i=80 ns=1;i=6372 ns=1;i=5015 InputArguments i=78 i=68 ns=1;i=7075 i=297 ProductId ns=1;i=3003 -1 OutputArguments i=78 i=68 ns=1;i=7075 i=297 InternalId ns=1;i=3013 -1 i=297 Error i=6 -1 PrepareRecipe https://reference.opcfoundation.org/v104/MachineVision/v100/docs/7.5.2/#7.5.2.2 ns=1;i=6107 i=78 ns=1;i=6110 ns=1;i=5015 InputArguments i=78 i=68 ns=1;i=7031 i=297 ExternalId ns=1;i=3002 -1 i=297 InternalIdIn ns=1;i=3013 -1 OutputArguments i=78 i=68 ns=1;i=7031 i=297 InternalIdOut ns=1;i=3013 -1 i=297 IsCompleted i=1 -1 i=297 Error i=6 -1 Products ns=1;i=6373 i=80 ns=1;i=1010 ns=1;i=5015 <Product> ns=1;i=5095 i=63 i=78 Recipes i=80 ns=1;i=1008 ns=1;i=5015 RecipeTransfer ns=1;i=6374 ns=1;i=7078 ns=1;i=7079 ns=1;i=7080 i=80 ns=1;i=5015 ns=1;i=1014 ClientProcessingTimeout ns=1;i=5096 i=78 i=68 CloseAndCommit ns=1;i=5096 ns=1;i=6375 i=78 ns=1;i=6376 InputArguments i=78 i=68 ns=1;i=7078 i=297 FileHandle i=7 -1 OutputArguments i=78 i=68 ns=1;i=7078 i=297 CompletionStateMachine i=17 -1 GenerateFileForRead ns=1;i=5096 ns=1;i=6377 i=78 ns=1;i=6378 InputArguments i=78 i=68 ns=1;i=7079 i=297 generateOptions ns=1;i=3012 -1 OutputArguments i=78 i=68 ns=1;i=7079 i=297 fileNodeId i=17 -1 i=297 fileHandle i=7 -1 i=297 completionStateMachine i=17 -1 GenerateFileForWrite ns=1;i=5096 ns=1;i=6380 i=78 ns=1;i=6381 InputArguments i=78 i=68 ns=1;i=7080 i=297 GenerateOptions ns=1;i=3012 -1 OutputArguments i=78 i=68 ns=1;i=7080 i=297 FileNodeId i=17 -1 i=297 FileHandle i=7 -1 ReleaseRecipeHandle https://reference.opcfoundation.org/v104/MachineVision/v100/docs/7.5.2/#7.5.2.5 ns=1;i=6382 i=80 ns=1;i=6383 ns=1;i=5015 InputArguments i=78 i=68 ns=1;i=7081 i=297 RecipeHandle ns=1;i=3018 -1 OutputArguments i=78 i=68 ns=1;i=7081 i=297 Error i=6 -1 RemoveRecipe https://reference.opcfoundation.org/v104/MachineVision/v100/docs/7.5.2/#7.5.2.6 ns=1;i=6384 i=80 ns=1;i=6385 ns=1;i=5015 InputArguments i=78 i=68 ns=1;i=7082 i=297 ExternalId ns=1;i=3002 -1 OutputArguments i=78 i=68 ns=1;i=7082 i=297 Error i=6 -1 UnlinkProduct https://reference.opcfoundation.org/v104/MachineVision/v100/docs/7.7.2/#7.7.2.3 ns=1;i=6386 i=80 ns=1;i=6387 ns=1;i=5015 InputArguments i=78 i=68 ns=1;i=7083 i=297 InternalId ns=1;i=3013 -1 i=297 ProductId ns=1;i=3003 -1 OutputArguments i=78 i=68 ns=1;i=7083 i=297 Error i=6 -1 UnprepareProduct https://reference.opcfoundation.org/v104/MachineVision/v100/docs/7.5.2/#7.5.2.8 ns=1;i=6388 i=80 ns=1;i=6389 ns=1;i=5015 InputArguments i=78 i=68 ns=1;i=7084 i=297 ProductId ns=1;i=3003 -1 OutputArguments i=78 i=68 ns=1;i=7084 i=297 InternalId ns=1;i=3013 -1 i=297 Error i=6 -1 UnprepareRecipe https://reference.opcfoundation.org/v104/MachineVision/v100/docs/7.5.2/#7.5.2.3 ns=1;i=6111 i=78 ns=1;i=6114 ns=1;i=5015 InputArguments i=78 i=68 ns=1;i=7032 i=297 ExternalId ns=1;i=3002 -1 i=297 InternalIdIn ns=1;i=3013 -1 OutputArguments i=78 i=68 ns=1;i=7032 i=297 InternalIdOut ns=1;i=3013 -1 i=297 Error i=6 -1 ResultManagement ns=1;i=7033 ns=1;i=7034 ns=1;i=7035 i=80 ns=1;i=7085 ns=1;i=1003 ns=1;i=1007 ns=1;i=5099 ns=1;i=5098 GetResultById https://reference.opcfoundation.org/v104/MachineVision/v100/docs/7.10.2/#7.10.2.2 ns=1;i=5020 ns=1;i=6115 i=78 ns=1;i=6118 InputArguments i=78 i=68 ns=1;i=7033 i=297 ResultId ns=1;i=3021 -1 i=297 Timeout i=6 -1 OutputArguments i=78 i=68 ns=1;i=7033 i=297 ResultHandle ns=1;i=3018 -1 i=297 Result ns=1;i=3006 -1 i=297 Error i=6 -1 GetResultComponentsById ns=1;i=5020 ns=1;i=6119 i=78 ns=1;i=6123 InputArguments i=78 i=68 ns=1;i=7034 i=297 ResultId ns=1;i=3021 -1 i=297 Timeout i=6 -1 OutputArguments i=78 i=68 ns=1;i=7034 i=297 HasTransferableDataOnFile i=1 -1 i=297 ResultHandle ns=1;i=3018 -1 i=297 IsPartial i=1 -1 i=297 IsSimulated i=1 -1 i=297 ResultState ns=1;i=3009 -1 i=297 MeasId ns=1;i=3015 -1 i=297 PartId ns=1;i=3004 -1 i=297 ExternalRecipeId ns=1;i=3002 -1 i=297 InternalRecipeId ns=1;i=3013 -1 i=297 ProductId ns=1;i=3003 -1 i=297 ExternalConfigurationId ns=1;i=3008 -1 i=297 InternalConfigurationId ns=1;i=3008 -1 i=297 JobId ns=1;i=3016 -1 i=297 CreationTime i=294 -1 i=297 ProcessingTimes ns=1;i=3005 -1 i=297 ResultContent i=24 1 i=297 Error i=6 -1 GetResultListFiltered https://reference.opcfoundation.org/v104/MachineVision/v100/docs/7.10.2/#7.10.2.3 ns=1;i=5020 ns=1;i=6124 i=78 ns=1;i=6133 InputArguments i=78 i=68 ns=1;i=7035 i=297 ResultState ns=1;i=3009 -1 i=297 MeasId ns=1;i=3015 -1 i=297 PartId ns=1;i=3004 -1 i=297 ExternalRecipeId ns=1;i=3002 -1 i=297 InternalRecipeId ns=1;i=3013 -1 i=297 ExternalConfigurationId ns=1;i=3008 -1 i=297 InternalConfigurationId ns=1;i=3008 -1 i=297 ProductId ns=1;i=3003 -1 i=297 JobId ns=1;i=3016 -1 i=297 MaxResults i=7 -1 i=297 StartIndex i=7 -1 i=297 Timeout i=6 -1 OutputArguments i=78 i=68 ns=1;i=7035 i=297 IsComplete i=1 -1 i=297 ResultCount i=7 -1 i=297 ResultHandle ns=1;i=3018 -1 i=297 ResultList ns=1;i=3006 1 i=297 Error i=6 -1 ReleaseResultHandle https://reference.opcfoundation.org/v104/MachineVision/v100/docs/7.10.2/#7.10.2.4 ns=1;i=6391 i=80 ns=1;i=6392 ns=1;i=5020 InputArguments i=78 i=68 ns=1;i=7085 i=297 ResultHandle ns=1;i=3018 -1 OutputArguments i=78 i=68 ns=1;i=7085 i=297 Error i=6 -1 Results i=80 ns=1;i=1016 ns=1;i=5020 ResultTransfer ns=1;i=6393 ns=1;i=7086 ns=1;i=7087 ns=1;i=7088 i=80 ns=1;i=5020 ns=1;i=1039 ClientProcessingTimeout ns=1;i=5098 i=78 i=68 CloseAndCommit ns=1;i=5098 ns=1;i=6394 i=78 ns=1;i=6395 InputArguments i=78 i=68 ns=1;i=7086 i=297 FileHandle i=7 -1 OutputArguments i=78 i=68 ns=1;i=7086 i=297 CompletionStateMachine i=17 -1 GenerateFileForRead ns=1;i=5098 ns=1;i=6396 i=78 ns=1;i=6397 InputArguments i=78 i=68 ns=1;i=7087 i=297 GenerateOptions ns=1;i=3022 -1 OutputArguments i=78 i=68 ns=1;i=7087 i=297 FileNodeId i=17 -1 i=297 FileHandle i=7 -1 i=297 CompletionStateMachine i=17 -1 GenerateFileForWrite ns=1;i=5098 ns=1;i=6398 i=78 ns=1;i=6399 InputArguments i=78 i=68 ns=1;i=7088 i=297 GenerateOptions i=24 -1 OutputArguments i=78 i=68 ns=1;i=7088 i=297 FileNodeId i=17 -1 i=297 FileHandle i=7 -1 SafetyStateManagement i=80 ns=1;i=7036 ns=1;i=1003 ns=1;i=1009 ns=1;i=6150 ns=1;i=6151 ReportSafetyState https://reference.opcfoundation.org/v104/MachineVision/v100/docs/7.13.2/#7.13.2.1 ns=1;i=6146 i=78 ns=1;i=6147 ns=1;i=5023 InputArguments i=78 i=68 ns=1;i=7036 i=297 SafetyTriggered i=1 -1 i=297 SafetyInformation i=12 -1 OutputArguments i=78 i=68 ns=1;i=7036 i=297 Error i=6 -1 VisionSafetyInformation i=63 i=78 ns=1;i=5023 VisionSafetyTriggered i=63 i=78 ns=1;i=5023 SystemState i=63 i=80 ns=1;i=1003 ns=1;i=5279 0 NST_6_6 VisionStateMachine ns=1;i=5100 ns=1;i=7049 ns=1;i=6162 ns=1;i=5107 ns=1;i=5075 ns=1;i=7037 ns=1;i=5106 ns=1;i=5076 i=78 ns=1;i=5108 ns=1;i=5101 ns=1;i=5077 ns=1;i=7038 ns=1;i=7053 ns=1;i=1003 ns=1;i=1017 AutomaticModeStateMachine ns=1;i=7092 ns=1;i=5053 ns=1;i=5102 ns=1;i=6407 ns=1;i=5103 i=80 ns=1;i=5104 ns=1;i=7107 ns=1;i=5105 ns=1;i=7099 ns=1;i=7102 ns=1;i=7103 ns=1;i=1021 Abort https://reference.opcfoundation.org/v104/MachineVision/v100/docs/8.3.7/#8.3.7.3 ns=1;i=5100 ns=1;i=6405 i=78 ns=1;i=6406 InputArguments i=78 i=68 ns=1;i=7092 i=297 Cause i=6 -1 i=297 CauseDescription i=12 -1 OutputArguments i=78 i=68 ns=1;i=7092 i=297 Error i=6 -1 ContinuousExecutionStepModel ns=1;i=5100 ns=1;i=6416 i=80 ns=1;i=7104 ns=1;i=1026 CurrentState ns=1;i=5102 i=2760 ns=1;i=6417 i=78 Id ns=1;i=6416 i=78 i=68 Sync https://reference.opcfoundation.org/v104/MachineVision/v100/docs/8.4.6/#8.4.6.1 ns=1;i=6418 i=78 ns=1;i=6419 ns=1;i=5102 InputArguments i=78 i=68 ns=1;i=7104 i=297 Cause i=6 -1 i=297 CauseDescription i=12 -1 OutputArguments i=78 i=68 ns=1;i=7104 i=297 Error i=6 -1 CurrentState ns=1;i=5100 i=2760 ns=1;i=6408 i=78 Id ns=1;i=6407 i=78 i=68 InitializedStepModel ns=1;i=6420 ns=1;i=5100 i=80 ns=1;i=7105 ns=1;i=1026 CurrentState ns=1;i=5103 i=2760 ns=1;i=6421 i=78 Id ns=1;i=6420 i=78 i=68 Sync ns=1;i=6422 i=78 ns=1;i=6423 ns=1;i=5103 InputArguments i=78 i=68 ns=1;i=7105 i=297 Cause i=6 -1 i=297 CauseDescription i=12 -1 OutputArguments i=78 i=68 ns=1;i=7105 i=297 Error i=6 -1 ReadyStepModel ns=1;i=6424 i=80 ns=1;i=5100 ns=1;i=7106 ns=1;i=1026 CurrentState ns=1;i=5104 i=2760 ns=1;i=6425 i=78 Id ns=1;i=6424 i=78 i=68 Sync ns=1;i=6426 i=78 ns=1;i=6427 ns=1;i=5104 InputArguments i=78 i=68 ns=1;i=7106 i=297 Cause i=6 -1 i=297 CauseDescription i=12 -1 OutputArguments i=78 i=68 ns=1;i=7106 i=297 Error i=6 -1 SimulationMode https://reference.opcfoundation.org/v104/MachineVision/v100/docs/8.3.7/#8.3.7.5 ns=1;i=6428 i=80 ns=1;i=6429 ns=1;i=5100 InputArguments i=78 i=68 ns=1;i=7107 i=297 Activate i=1 -1 i=297 Cause i=6 -1 i=297 CauseDescription i=12 -1 OutputArguments i=78 i=68 ns=1;i=7107 i=297 Error i=6 -1 SingleExecutionStepModel ns=1;i=6430 i=80 ns=1;i=5100 ns=1;i=7108 ns=1;i=1026 CurrentState ns=1;i=5105 i=2760 ns=1;i=6431 i=78 Id ns=1;i=6430 i=78 i=68 Sync ns=1;i=6432 i=78 ns=1;i=6433 ns=1;i=5105 InputArguments i=78 i=68 ns=1;i=7108 i=297 Cause i=6 -1 i=297 CauseDescription i=12 -1 OutputArguments i=78 i=68 ns=1;i=7108 i=297 Error i=6 -1 StartContinuous https://reference.opcfoundation.org/v104/MachineVision/v100/docs/8.3.7/#8.3.7.2 ns=1;i=6409 i=78 ns=1;i=6410 ns=1;i=5100 InputArguments i=78 i=68 ns=1;i=7099 i=297 MeasId ns=1;i=3015 -1 i=297 PartId ns=1;i=3004 -1 i=297 RecipeId ns=1;i=3002 -1 i=297 ProductId ns=1;i=3003 -1 i=297 Parameters i=24 1 OutputArguments i=78 i=68 ns=1;i=7099 i=297 JobId ns=1;i=3016 -1 i=297 Error i=6 -1 StartSingleJob https://reference.opcfoundation.org/v104/MachineVision/v100/docs/8.3.7/#8.3.7.1 ns=1;i=6411 i=78 ns=1;i=6412 ns=1;i=5100 InputArguments i=78 i=68 ns=1;i=7102 i=297 MeasId ns=1;i=3015 -1 i=297 PartId ns=1;i=3004 -1 i=297 RecipeId ns=1;i=3002 -1 i=297 ProductId ns=1;i=3003 -1 i=297 Parameters i=24 1 OutputArguments i=78 i=68 ns=1;i=7102 i=297 JobId ns=1;i=3016 -1 i=297 Error i=6 -1 Stop https://reference.opcfoundation.org/v104/MachineVision/v100/docs/8.3.7/#8.3.7.4 ns=1;i=6413 i=78 ns=1;i=6414 ns=1;i=5100 InputArguments i=78 i=68 ns=1;i=7103 i=297 Cause i=6 -1 i=297 CauseDescription i=12 -1 OutputArguments i=78 i=68 ns=1;i=7103 i=297 Error i=6 -1 ConfirmAll https://reference.opcfoundation.org/v104/MachineVision/v100/docs/8.2.8/#8.2.8.4 ns=1;i=5053 ns=1;i=6216 i=80 InputArguments i=78 i=68 ns=1;i=7049 i=297 Comment i=21 -1 CurrentState ns=1;i=5053 i=2760 ns=1;i=6163 i=78 Id ns=1;i=6162 i=78 i=68 Error ns=1;i=5053 i=78 ns=1;i=6435 i=2307 StateNumber i=78 i=68 ns=1;i=5107 3 ErrorStepModel ns=1;i=6219 ns=1;i=5053 i=80 ns=1;i=7050 ns=1;i=1026 CurrentState ns=1;i=5075 i=2760 ns=1;i=6220 i=78 Id ns=1;i=6219 i=78 i=68 Sync ns=1;i=6224 i=78 ns=1;i=6225 ns=1;i=5075 InputArguments i=78 i=68 ns=1;i=7050 i=297 Cause i=6 -1 i=297 CauseDescription i=12 -1 OutputArguments i=78 i=68 ns=1;i=7050 i=297 Error i=6 -1 Halt https://reference.opcfoundation.org/v104/MachineVision/v100/docs/8.2.8/#8.2.8.1 ns=1;i=5053 ns=1;i=6154 i=78 ns=1;i=6155 InputArguments i=78 i=68 ns=1;i=7037 i=297 Cause i=6 -1 i=297 CauseDescription i=12 -1 OutputArguments i=78 i=68 ns=1;i=7037 i=297 Error i=6 -1 Halted ns=1;i=5053 i=78 ns=1;i=6434 i=2307 StateNumber i=78 i=68 ns=1;i=5106 2 HaltedStepModel ns=1;i=6244 ns=1;i=5053 i=80 ns=1;i=7051 ns=1;i=1026 CurrentState ns=1;i=5076 i=2760 ns=1;i=6250 i=78 Id ns=1;i=6244 i=78 i=68 Sync ns=1;i=6251 i=78 ns=1;i=6253 ns=1;i=5076 InputArguments i=78 i=68 ns=1;i=7051 i=297 Cause i=6 -1 i=297 CauseDescription i=12 -1 OutputArguments i=78 i=68 ns=1;i=7051 i=297 Error i=6 -1 Operational i=78 ns=1;i=5053 ns=1;i=6436 i=2307 StateNumber i=78 i=68 ns=1;i=5108 4 Preoperational i=78 ns=1;i=5053 ns=1;i=6415 i=2307 StateNumber i=78 i=68 ns=1;i=5101 1 PreoperationalStepModel ns=1;i=6277 i=80 ns=1;i=5053 ns=1;i=7052 ns=1;i=1026 CurrentState ns=1;i=5077 i=2760 ns=1;i=6278 i=78 Id ns=1;i=6277 i=78 i=68 Sync ns=1;i=6279 i=78 ns=1;i=6280 ns=1;i=5077 InputArguments i=78 i=68 ns=1;i=7052 i=297 Cause i=6 -1 i=297 CauseDescription i=12 -1 OutputArguments i=78 i=68 ns=1;i=7052 i=297 Error i=6 -1 Reset https://reference.opcfoundation.org/v104/MachineVision/v100/docs/8.2.8/#8.2.8.2 ns=1;i=6158 i=78 ns=1;i=6159 ns=1;i=5053 InputArguments i=78 i=68 ns=1;i=7038 i=297 Cause i=6 -1 i=297 CauseDescription i=12 -1 OutputArguments i=78 i=68 ns=1;i=7038 i=297 Error i=6 -1 SelectModeAutomatic https://reference.opcfoundation.org/v104/MachineVision/v100/docs/8.2.8/#8.2.8.3 i=80 ns=1;i=6325 ns=1;i=5053 OutputArguments i=78 i=68 ns=1;i=7053 i=297 Error i=6 -1 http://opcfoundation.org/UA/MachineVision Provides the metadata for a namespace used by the server. https://reference.opcfoundation.org/v104/MachineVision/v100/docs/13.1 i=11715 ns=1;i=6549 i=11616 ns=1;i=6552 ns=1;i=6553 ns=1;i=6554 ns=1;i=6556 ns=1;i=6558 ns=1;i=6559 IsNamespaceSubset If TRUE then the server only supports a subset of the namespace. ns=1;i=5009 i=68 false NamespacePublicationDate The publication date for the namespace. ns=1;i=5009 i=68 2019-07-11T10:18:27Z NamespaceUri The URI of the namespace. ns=1;i=5009 i=68 http://opcfoundation.org/UA/MachineVision NamespaceVersion The human readable string representing version of the namespace. ns=1;i=5009 i=68 1.0.0 StaticNodeIdTypes A list of IdTypes for nodes which are the same in every server that exposes them. i=68 ns=1;i=5009 0 StaticNumericNodeIdRange A list of ranges for numeric node ids which are the same in every server that exposes them. i=68 ns=1;i=5009 StaticStringNodeIdPattern A regular expression which matches string node ids are the same in every server that exposes them. i=68 ns=1;i=5009 Default Binary i=76 ns=1;i=3002 ns=1;i=6021 Default XML i=76 ns=1;i=3002 ns=1;i=6022 Default Binary i=76 ns=1;i=3015 ns=1;i=6028 Default XML i=76 ns=1;i=3015 ns=1;i=6029 Default Binary i=76 ns=1;i=3016 ns=1;i=6030 Default Binary i=76 ns=1;i=3004 ns=1;i=6072 Default XML i=76 ns=1;i=3004 ns=1;i=6073 Default Binary i=76 ns=1;i=3005 ns=1;i=6074 Default XML i=76 ns=1;i=3005 ns=1;i=6075 Default Binary i=76 ns=1;i=3006 ns=1;i=6076 Default XML i=76 ns=1;i=3006 ns=1;i=6077 Default XML i=76 ns=1;i=3016 ns=1;i=6031 Default Binary ns=1;i=6033 i=76 ns=1;i=3019 Default Binary ns=1;i=6352 i=76 ns=1;i=3007 Default XML ns=1;i=6353 i=76 ns=1;i=3007 Default Binary ns=1;i=6354 i=76 ns=1;i=3008 Default XML ns=1;i=6355 i=76 ns=1;i=3008 Default Binary i=76 ns=1;i=3003 ns=1;i=6071 Default XML i=76 ns=1;i=3003 ns=1;i=6093 Default Binary ns=1;i=6125 i=76 ns=1;i=3011 Default XML ns=1;i=6126 i=76 ns=1;i=3011 Default Binary i=76 ns=1;i=3012 ns=1;i=6188 Default XML i=76 ns=1;i=3012 ns=1;i=6189 Default Binary i=76 ns=1;i=3013 ns=1;i=6035 Default XML i=76 ns=1;i=3013 ns=1;i=6036 Default XML ns=1;i=6034 i=76 ns=1;i=3019 Default Binary i=76 ns=1;i=3020 ns=1;i=6037 Default XML i=76 ns=1;i=3020 ns=1;i=6038 Default Binary i=76 ns=1;i=3021 ns=1;i=6039 Default XML i=76 ns=1;i=3021 ns=1;i=6040 Default Binary i=76 ns=1;i=3022 ns=1;i=6127 Default XML i=76 ns=1;i=3022 ns=1;i=6128 Default Binary i=76 ns=1;i=3024 ns=1;i=6130 Default XML i=76 ns=1;i=3024 ns=1;i=6131 ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/XMLModels/ProblemsToReport/eoursel510/DoRecoverModelDesign.cmd ================================================ ..\asp "Opc.Ua.NodeSet2.TriCycleType_V1.1.xml" -e "Opc.Ua.NodeSet2.TriCycleType_V1.1.ModelDesign.xml" -s XMLstylesheet -n "http://tricycleTypeV1" ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/XMLModels/ProblemsToReport/eoursel510/Opc.Ua.NodeSet2.TriCycleType_V1.1.ModelDesign/Prefix2.Classes.cs ================================================ /* ======================================================================== * Copyright (c) 2005-2016 The OPC Foundation, Inc. All rights reserved. * * OPC Foundation MIT License 1.00 * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, * copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following * conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. * * The complete license agreement can be found here: * http://opcfoundation.org/License/MIT/1.00/ * ======================================================================*/ using System; using System.Collections.Generic; using System.Text; using System.Xml; using System.Runtime.Serialization; using Prefix0; namespace Prefix2 { #region DataType Identifiers /// /// A class that declares constants for all DataTypes in the Model Design. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class DataTypes { /// /// The identifier for the TireEnum DataType. /// public const uint TireEnum = 1; /// /// The identifier for the TriCycleDataType DataType. /// public const uint TriCycleDataType = 3; /// /// The identifier for the WheelDataType DataType. /// public const uint WheelDataType = 4; } #endregion #region Object Identifiers /// /// A class that declares constants for all Objects in the Model Design. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class Objects { /// /// The identifier for the VehicleType_S_Owner_ Object. /// public const uint VehicleType_S_Owner_ = 47; /// /// The identifier for the TrailerType_S_Owner_ Object. /// public const uint TrailerType_S_Owner_ = 52; /// /// The identifier for the TriCycleType_S_Owner_ Object. /// public const uint TriCycleType_S_Owner_ = 57; /// /// The identifier for the TriCycleDataType_Encoding_DefaultXml Object. /// public const uint TriCycleDataType_Encoding_DefaultXml = 24; /// /// The identifier for the WheelDataType_Encoding_DefaultXml Object. /// public const uint WheelDataType_Encoding_DefaultXml = 25; /// /// The identifier for the TriCycleDataType_Encoding_DefaultBinary Object. /// public const uint TriCycleDataType_Encoding_DefaultBinary = 35; /// /// The identifier for the WheelDataType_Encoding_DefaultBinary Object. /// public const uint WheelDataType_Encoding_DefaultBinary = 36; } #endregion #region ObjectType Identifiers /// /// A class that declares constants for all ObjectTypes in the Model Design. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class ObjectTypes { /// /// The identifier for the HumanType ObjectType. /// public const uint HumanType = 5; /// /// The identifier for the VehicleType ObjectType. /// public const uint VehicleType = 10; /// /// The identifier for the TrailerType ObjectType. /// public const uint TrailerType = 9; /// /// The identifier for the TriCycleType ObjectType. /// public const uint TriCycleType = 11; } #endregion #region Variable Identifiers /// /// A class that declares constants for all Variables in the Model Design. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class Variables { /// /// The identifier for the TireEnum_EnumStrings Variable. /// public const uint TireEnum_EnumStrings = 2; /// /// The identifier for the HumanType_Name Variable. /// public const uint HumanType_Name = 6; /// /// The identifier for the HumanType_Age Variable. /// public const uint HumanType_Age = 7; /// /// The identifier for the HumanType_Gender Variable. /// public const uint HumanType_Gender = 8; /// /// The identifier for the VehicleType_buildDate Variable. /// public const uint VehicleType_buildDate = 46; /// /// The identifier for the VehicleType_S_Owner__Name Variable. /// public const uint VehicleType_S_Owner__Name = 48; /// /// The identifier for the VehicleType_S_Owner__Age Variable. /// public const uint VehicleType_S_Owner__Age = 49; /// /// The identifier for the VehicleType_S_Owner__Gender Variable. /// public const uint VehicleType_S_Owner__Gender = 50; /// /// The identifier for the TrailerType_S_Owner__Name Variable. /// public const uint TrailerType_S_Owner__Name = 53; /// /// The identifier for the TrailerType_S_Owner__Age Variable. /// public const uint TrailerType_S_Owner__Age = 54; /// /// The identifier for the TrailerType_S_Owner__Gender Variable. /// public const uint TrailerType_S_Owner__Gender = 55; /// /// The identifier for the TrailerType_LoadedTricycle Variable. /// public const uint TrailerType_LoadedTricycle = 61; /// /// The identifier for the TriCycleType_S_Owner__Name Variable. /// public const uint TriCycleType_S_Owner__Name = 58; /// /// The identifier for the TriCycleType_S_Owner__Age Variable. /// public const uint TriCycleType_S_Owner__Age = 59; /// /// The identifier for the TriCycleType_S_Owner__Gender Variable. /// public const uint TriCycleType_S_Owner__Gender = 60; /// /// The identifier for the TriCycleType_weight Variable. /// public const uint TriCycleType_weight = 12; /// /// The identifier for the TriCycleType_wheels Variable. /// public const uint TriCycleType_wheels = 13; /// /// The identifier for the TriCycleType_wheels_tickness Variable. /// public const uint TriCycleType_wheels_tickness = 14; /// /// The identifier for the TriCycleType_wheels_diameter Variable. /// public const uint TriCycleType_wheels_diameter = 15; /// /// The identifier for the TriCycleType_wheels_pressure Variable. /// public const uint TriCycleType_wheels_pressure = 16; /// /// The identifier for the TriCycleType_wheels_tiretype Variable. /// public const uint TriCycleType_wheels_tiretype = 17; /// /// The identifier for the TriCycleType_Model Variable. /// public const uint TriCycleType_Model = 18; /// /// The identifier for the WheelVariableType_tickness Variable. /// public const uint WheelVariableType_tickness = 20; /// /// The identifier for the WheelVariableType_diameter Variable. /// public const uint WheelVariableType_diameter = 21; /// /// The identifier for the WheelVariableType_pressure Variable. /// public const uint WheelVariableType_pressure = 22; /// /// The identifier for the WheelVariableType_tiretype Variable. /// public const uint WheelVariableType_tiretype = 23; /// /// The identifier for the Name2_XmlSchema Variable. /// public const uint Name2_XmlSchema = 26; /// /// The identifier for the Name2_XmlSchema_NamespaceUri Variable. /// public const uint Name2_XmlSchema_NamespaceUri = 28; /// /// The identifier for the Name2_XmlSchema_TriCycleDataType Variable. /// public const uint Name2_XmlSchema_TriCycleDataType = 29; /// /// The identifier for the Name2_XmlSchema_WheelDataType Variable. /// public const uint Name2_XmlSchema_WheelDataType = 32; /// /// The identifier for the Name2_BinarySchema Variable. /// public const uint Name2_BinarySchema = 37; /// /// The identifier for the Name2_BinarySchema_NamespaceUri Variable. /// public const uint Name2_BinarySchema_NamespaceUri = 39; /// /// The identifier for the Name2_BinarySchema_TriCycleDataType Variable. /// public const uint Name2_BinarySchema_TriCycleDataType = 40; /// /// The identifier for the Name2_BinarySchema_WheelDataType Variable. /// public const uint Name2_BinarySchema_WheelDataType = 43; } #endregion #region VariableType Identifiers /// /// A class that declares constants for all VariableTypes in the Model Design. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class VariableTypes { /// /// The identifier for the WheelVariableType VariableType. /// public const uint WheelVariableType = 19; } #endregion #region DataType Node Identifiers /// /// A class that declares constants for all DataTypes in the Model Design. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class DataTypeIds { /// /// The identifier for the TireEnum DataType. /// public static readonly ExpandedNodeId TireEnum = new ExpandedNodeId(Prefix2.DataTypes.TireEnum, Prefix2.Namespaces.Name2); /// /// The identifier for the TriCycleDataType DataType. /// public static readonly ExpandedNodeId TriCycleDataType = new ExpandedNodeId(Prefix2.DataTypes.TriCycleDataType, Prefix2.Namespaces.Name2); /// /// The identifier for the WheelDataType DataType. /// public static readonly ExpandedNodeId WheelDataType = new ExpandedNodeId(Prefix2.DataTypes.WheelDataType, Prefix2.Namespaces.Name2); } #endregion #region Object Node Identifiers /// /// A class that declares constants for all Objects in the Model Design. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class ObjectIds { /// /// The identifier for the VehicleType_S_Owner_ Object. /// public static readonly ExpandedNodeId VehicleType_S_Owner_ = new ExpandedNodeId(Prefix2.Objects.VehicleType_S_Owner_, Prefix2.Namespaces.Name2); /// /// The identifier for the TrailerType_S_Owner_ Object. /// public static readonly ExpandedNodeId TrailerType_S_Owner_ = new ExpandedNodeId(Prefix2.Objects.TrailerType_S_Owner_, Prefix2.Namespaces.Name2); /// /// The identifier for the TriCycleType_S_Owner_ Object. /// public static readonly ExpandedNodeId TriCycleType_S_Owner_ = new ExpandedNodeId(Prefix2.Objects.TriCycleType_S_Owner_, Prefix2.Namespaces.Name2); /// /// The identifier for the TriCycleDataType_Encoding_DefaultXml Object. /// public static readonly ExpandedNodeId TriCycleDataType_Encoding_DefaultXml = new ExpandedNodeId(Prefix2.Objects.TriCycleDataType_Encoding_DefaultXml, Prefix2.Namespaces.Name2); /// /// The identifier for the WheelDataType_Encoding_DefaultXml Object. /// public static readonly ExpandedNodeId WheelDataType_Encoding_DefaultXml = new ExpandedNodeId(Prefix2.Objects.WheelDataType_Encoding_DefaultXml, Prefix2.Namespaces.Name2); /// /// The identifier for the TriCycleDataType_Encoding_DefaultBinary Object. /// public static readonly ExpandedNodeId TriCycleDataType_Encoding_DefaultBinary = new ExpandedNodeId(Prefix2.Objects.TriCycleDataType_Encoding_DefaultBinary, Prefix2.Namespaces.Name2); /// /// The identifier for the WheelDataType_Encoding_DefaultBinary Object. /// public static readonly ExpandedNodeId WheelDataType_Encoding_DefaultBinary = new ExpandedNodeId(Prefix2.Objects.WheelDataType_Encoding_DefaultBinary, Prefix2.Namespaces.Name2); } #endregion #region ObjectType Node Identifiers /// /// A class that declares constants for all ObjectTypes in the Model Design. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class ObjectTypeIds { /// /// The identifier for the HumanType ObjectType. /// public static readonly ExpandedNodeId HumanType = new ExpandedNodeId(Prefix2.ObjectTypes.HumanType, Prefix2.Namespaces.Name2); /// /// The identifier for the VehicleType ObjectType. /// public static readonly ExpandedNodeId VehicleType = new ExpandedNodeId(Prefix2.ObjectTypes.VehicleType, Prefix2.Namespaces.Name2); /// /// The identifier for the TrailerType ObjectType. /// public static readonly ExpandedNodeId TrailerType = new ExpandedNodeId(Prefix2.ObjectTypes.TrailerType, Prefix2.Namespaces.Name2); /// /// The identifier for the TriCycleType ObjectType. /// public static readonly ExpandedNodeId TriCycleType = new ExpandedNodeId(Prefix2.ObjectTypes.TriCycleType, Prefix2.Namespaces.Name2); } #endregion #region Variable Node Identifiers /// /// A class that declares constants for all Variables in the Model Design. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class VariableIds { /// /// The identifier for the TireEnum_EnumStrings Variable. /// public static readonly ExpandedNodeId TireEnum_EnumStrings = new ExpandedNodeId(Prefix2.Variables.TireEnum_EnumStrings, Prefix2.Namespaces.Name2); /// /// The identifier for the HumanType_Name Variable. /// public static readonly ExpandedNodeId HumanType_Name = new ExpandedNodeId(Prefix2.Variables.HumanType_Name, Prefix2.Namespaces.Name2); /// /// The identifier for the HumanType_Age Variable. /// public static readonly ExpandedNodeId HumanType_Age = new ExpandedNodeId(Prefix2.Variables.HumanType_Age, Prefix2.Namespaces.Name2); /// /// The identifier for the HumanType_Gender Variable. /// public static readonly ExpandedNodeId HumanType_Gender = new ExpandedNodeId(Prefix2.Variables.HumanType_Gender, Prefix2.Namespaces.Name2); /// /// The identifier for the VehicleType_buildDate Variable. /// public static readonly ExpandedNodeId VehicleType_buildDate = new ExpandedNodeId(Prefix2.Variables.VehicleType_buildDate, Prefix2.Namespaces.Name2); /// /// The identifier for the VehicleType_S_Owner__Name Variable. /// public static readonly ExpandedNodeId VehicleType_S_Owner__Name = new ExpandedNodeId(Prefix2.Variables.VehicleType_S_Owner__Name, Prefix2.Namespaces.Name2); /// /// The identifier for the VehicleType_S_Owner__Age Variable. /// public static readonly ExpandedNodeId VehicleType_S_Owner__Age = new ExpandedNodeId(Prefix2.Variables.VehicleType_S_Owner__Age, Prefix2.Namespaces.Name2); /// /// The identifier for the VehicleType_S_Owner__Gender Variable. /// public static readonly ExpandedNodeId VehicleType_S_Owner__Gender = new ExpandedNodeId(Prefix2.Variables.VehicleType_S_Owner__Gender, Prefix2.Namespaces.Name2); /// /// The identifier for the TrailerType_S_Owner__Name Variable. /// public static readonly ExpandedNodeId TrailerType_S_Owner__Name = new ExpandedNodeId(Prefix2.Variables.TrailerType_S_Owner__Name, Prefix2.Namespaces.Name2); /// /// The identifier for the TrailerType_S_Owner__Age Variable. /// public static readonly ExpandedNodeId TrailerType_S_Owner__Age = new ExpandedNodeId(Prefix2.Variables.TrailerType_S_Owner__Age, Prefix2.Namespaces.Name2); /// /// The identifier for the TrailerType_S_Owner__Gender Variable. /// public static readonly ExpandedNodeId TrailerType_S_Owner__Gender = new ExpandedNodeId(Prefix2.Variables.TrailerType_S_Owner__Gender, Prefix2.Namespaces.Name2); /// /// The identifier for the TrailerType_LoadedTricycle Variable. /// public static readonly ExpandedNodeId TrailerType_LoadedTricycle = new ExpandedNodeId(Prefix2.Variables.TrailerType_LoadedTricycle, Prefix2.Namespaces.Name2); /// /// The identifier for the TriCycleType_S_Owner__Name Variable. /// public static readonly ExpandedNodeId TriCycleType_S_Owner__Name = new ExpandedNodeId(Prefix2.Variables.TriCycleType_S_Owner__Name, Prefix2.Namespaces.Name2); /// /// The identifier for the TriCycleType_S_Owner__Age Variable. /// public static readonly ExpandedNodeId TriCycleType_S_Owner__Age = new ExpandedNodeId(Prefix2.Variables.TriCycleType_S_Owner__Age, Prefix2.Namespaces.Name2); /// /// The identifier for the TriCycleType_S_Owner__Gender Variable. /// public static readonly ExpandedNodeId TriCycleType_S_Owner__Gender = new ExpandedNodeId(Prefix2.Variables.TriCycleType_S_Owner__Gender, Prefix2.Namespaces.Name2); /// /// The identifier for the TriCycleType_weight Variable. /// public static readonly ExpandedNodeId TriCycleType_weight = new ExpandedNodeId(Prefix2.Variables.TriCycleType_weight, Prefix2.Namespaces.Name2); /// /// The identifier for the TriCycleType_wheels Variable. /// public static readonly ExpandedNodeId TriCycleType_wheels = new ExpandedNodeId(Prefix2.Variables.TriCycleType_wheels, Prefix2.Namespaces.Name2); /// /// The identifier for the TriCycleType_wheels_tickness Variable. /// public static readonly ExpandedNodeId TriCycleType_wheels_tickness = new ExpandedNodeId(Prefix2.Variables.TriCycleType_wheels_tickness, Prefix2.Namespaces.Name2); /// /// The identifier for the TriCycleType_wheels_diameter Variable. /// public static readonly ExpandedNodeId TriCycleType_wheels_diameter = new ExpandedNodeId(Prefix2.Variables.TriCycleType_wheels_diameter, Prefix2.Namespaces.Name2); /// /// The identifier for the TriCycleType_wheels_pressure Variable. /// public static readonly ExpandedNodeId TriCycleType_wheels_pressure = new ExpandedNodeId(Prefix2.Variables.TriCycleType_wheels_pressure, Prefix2.Namespaces.Name2); /// /// The identifier for the TriCycleType_wheels_tiretype Variable. /// public static readonly ExpandedNodeId TriCycleType_wheels_tiretype = new ExpandedNodeId(Prefix2.Variables.TriCycleType_wheels_tiretype, Prefix2.Namespaces.Name2); /// /// The identifier for the TriCycleType_Model Variable. /// public static readonly ExpandedNodeId TriCycleType_Model = new ExpandedNodeId(Prefix2.Variables.TriCycleType_Model, Prefix2.Namespaces.Name2); /// /// The identifier for the WheelVariableType_tickness Variable. /// public static readonly ExpandedNodeId WheelVariableType_tickness = new ExpandedNodeId(Prefix2.Variables.WheelVariableType_tickness, Prefix2.Namespaces.Name2); /// /// The identifier for the WheelVariableType_diameter Variable. /// public static readonly ExpandedNodeId WheelVariableType_diameter = new ExpandedNodeId(Prefix2.Variables.WheelVariableType_diameter, Prefix2.Namespaces.Name2); /// /// The identifier for the WheelVariableType_pressure Variable. /// public static readonly ExpandedNodeId WheelVariableType_pressure = new ExpandedNodeId(Prefix2.Variables.WheelVariableType_pressure, Prefix2.Namespaces.Name2); /// /// The identifier for the WheelVariableType_tiretype Variable. /// public static readonly ExpandedNodeId WheelVariableType_tiretype = new ExpandedNodeId(Prefix2.Variables.WheelVariableType_tiretype, Prefix2.Namespaces.Name2); /// /// The identifier for the Name2_XmlSchema Variable. /// public static readonly ExpandedNodeId Name2_XmlSchema = new ExpandedNodeId(Prefix2.Variables.Name2_XmlSchema, Prefix2.Namespaces.Name2); /// /// The identifier for the Name2_XmlSchema_NamespaceUri Variable. /// public static readonly ExpandedNodeId Name2_XmlSchema_NamespaceUri = new ExpandedNodeId(Prefix2.Variables.Name2_XmlSchema_NamespaceUri, Prefix2.Namespaces.Name2); /// /// The identifier for the Name2_XmlSchema_TriCycleDataType Variable. /// public static readonly ExpandedNodeId Name2_XmlSchema_TriCycleDataType = new ExpandedNodeId(Prefix2.Variables.Name2_XmlSchema_TriCycleDataType, Prefix2.Namespaces.Name2); /// /// The identifier for the Name2_XmlSchema_WheelDataType Variable. /// public static readonly ExpandedNodeId Name2_XmlSchema_WheelDataType = new ExpandedNodeId(Prefix2.Variables.Name2_XmlSchema_WheelDataType, Prefix2.Namespaces.Name2); /// /// The identifier for the Name2_BinarySchema Variable. /// public static readonly ExpandedNodeId Name2_BinarySchema = new ExpandedNodeId(Prefix2.Variables.Name2_BinarySchema, Prefix2.Namespaces.Name2); /// /// The identifier for the Name2_BinarySchema_NamespaceUri Variable. /// public static readonly ExpandedNodeId Name2_BinarySchema_NamespaceUri = new ExpandedNodeId(Prefix2.Variables.Name2_BinarySchema_NamespaceUri, Prefix2.Namespaces.Name2); /// /// The identifier for the Name2_BinarySchema_TriCycleDataType Variable. /// public static readonly ExpandedNodeId Name2_BinarySchema_TriCycleDataType = new ExpandedNodeId(Prefix2.Variables.Name2_BinarySchema_TriCycleDataType, Prefix2.Namespaces.Name2); /// /// The identifier for the Name2_BinarySchema_WheelDataType Variable. /// public static readonly ExpandedNodeId Name2_BinarySchema_WheelDataType = new ExpandedNodeId(Prefix2.Variables.Name2_BinarySchema_WheelDataType, Prefix2.Namespaces.Name2); } #endregion #region VariableType Node Identifiers /// /// A class that declares constants for all VariableTypes in the Model Design. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class VariableTypeIds { /// /// The identifier for the WheelVariableType VariableType. /// public static readonly ExpandedNodeId WheelVariableType = new ExpandedNodeId(Prefix2.VariableTypes.WheelVariableType, Prefix2.Namespaces.Name2); } #endregion #region BrowseName Declarations /// /// Declares all of the BrowseNames used in the Model Design. /// public static partial class BrowseNames { /// /// The BrowseName for the HumanType component. /// public const string HumanType = "HumanType"; /// /// The BrowseName for the Name2_BinarySchema component. /// public const string Name2_BinarySchema = "Prefix2"; /// /// The BrowseName for the Name2_XmlSchema component. /// public const string Name2_XmlSchema = "Prefix2"; /// /// The BrowseName for the TireEnum component. /// public const string TireEnum = "TireEnum"; /// /// The BrowseName for the TrailerType component. /// public const string TrailerType = "TrailerType"; /// /// The BrowseName for the TriCycleDataType component. /// public const string TriCycleDataType = "TriCycleDataType"; /// /// The BrowseName for the TriCycleType component. /// public const string TriCycleType = "TriCycleType"; /// /// The BrowseName for the VehicleType component. /// public const string VehicleType = "VehicleType"; /// /// The BrowseName for the WheelDataType component. /// public const string WheelDataType = "WheelDataType"; /// /// The BrowseName for the WheelVariableType component. /// public const string WheelVariableType = "WheelVariableType"; } #endregion #region Namespace Declarations /// /// Defines constants for all namespaces referenced by the model design. /// public static partial class Namespaces { /// /// The URI for the Name0Xsd namespace (.NET code namespace is 'Prefix0'). /// public const string Name0Xsd = "http://opcfoundation.org/UA/"; /// /// The URI for the Name0Xsd namespace (.NET code namespace is 'Prefix0'). /// public const string Name0Xsd = "http://opcfoundation.org/UA/"; /// /// The URI for the Name2Xsd namespace (.NET code namespace is 'Prefix2'). /// public const string Name2Xsd = "http://tricycletypev1/"; /// /// The URI for the Name2Xsd namespace (.NET code namespace is 'Prefix2'). /// public const string Name2Xsd = "http://tricycletypev1/"; } #endregion #region TireEnum Enumeration #if (!OPCUA_EXCLUDE_TireEnum) /// /// A description for the TireEnum DataType. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] [DataContract(Namespace = Prefix2.Namespaces.Name2Xsd)] public enum TireEnum { /// /// A description for the Mud field. /// [EnumMember(Value = "Mud_0")] Mud = 0, /// /// A description for the Ice field. /// [EnumMember(Value = "Ice_1")] Ice = 1, /// /// A description for the Sand field. /// [EnumMember(Value = "Sand_2")] Sand = 2, } #region TireEnumCollection Class /// /// A collection of TireEnum objects. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] [CollectionDataContract(Name = "ListOfTireEnum", Namespace = Prefix2.Namespaces.Name2Xsd, ItemName = "TireEnum")] #if !NET_STANDARD public partial class TireEnumCollection : List, ICloneable #else public partial class TireEnumCollection : List #endif { #region Constructors /// /// Initializes the collection with default values. /// public TireEnumCollection() {} /// /// Initializes the collection with an initial capacity. /// public TireEnumCollection(int capacity) : base(capacity) {} /// /// Initializes the collection with another collection. /// public TireEnumCollection(IEnumerable collection) : base(collection) {} #endregion #region Static Operators /// /// Converts an array to a collection. /// public static implicit operator TireEnumCollection(TireEnum[] values) { if (values != null) { return new TireEnumCollection(values); } return new TireEnumCollection(); } /// /// Converts a collection to an array. /// public static explicit operator TireEnum[](TireEnumCollection values) { if (values != null) { return values.ToArray(); } return null; } #endregion #if !NET_STANDARD #region ICloneable Methods /// /// Creates a deep copy of the collection. /// public object Clone() { return (TireEnumCollection)this.MemberwiseClone(); } #endregion #endif /// public new object MemberwiseClone() { TireEnumCollection clone = new TireEnumCollection(this.Count); for (int ii = 0; ii < this.Count; ii++) { clone.Add((TireEnum)Utils.Clone(this[ii])); } return clone; } } #endregion #endif #endregion #region TriCycleDataType Class #if (!OPCUA_EXCLUDE_TriCycleDataType) /// /// A description for the TriCycleDataType DataType. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] [DataContract(Namespace = Prefix2.Namespaces.Name2Xsd)] public partial class TriCycleDataType : IEncodeable { #region Constructors /// /// The default constructor. /// public TriCycleDataType() { Initialize(); } /// /// Called by the .NET framework during deserialization. /// [OnDeserializing] private void Initialize(StreamingContext context) { Initialize(); } /// /// Sets private members to default values. /// private void Initialize() { m_weight = (float)0; m_wheel = new WheelDataType(); m_model = null; } #endregion #region Public Properties /// /// A description for the weight field. /// [DataMember(Name = "weight", IsRequired = false, Order = 1)] public float weight { get { return m_weight; } set { m_weight = value; } } /// /// A description for the wheel field. /// [DataMember(Name = "wheel", IsRequired = false, Order = 2)] public WheelDataType wheel { get { return m_wheel; } set { m_wheel = value; if (value == null) { m_wheel = new WheelDataType(); } } } /// /// A description for the Model field. /// [DataMember(Name = "Model", IsRequired = false, Order = 3)] public string Model { get { return m_model; } set { m_model = value; } } #endregion #region IEncodeable Members /// public virtual ExpandedNodeId TypeId { get { return DataTypeIds.TriCycleDataType; } } /// public virtual ExpandedNodeId BinaryEncodingId { get { return ObjectIds.TriCycleDataType_Encoding_DefaultBinary; } } /// public virtual ExpandedNodeId XmlEncodingId { get { return ObjectIds.TriCycleDataType_Encoding_DefaultXml; } } /// public virtual void Encode(IEncoder encoder) { encoder.PushNamespace(Prefix2.Namespaces.Name2Xsd); encoder.WriteFloat("weight", weight); encoder.WriteEncodeable("wheel", wheel, typeof(WheelDataType)); encoder.WriteString("Model", Model); encoder.PopNamespace(); } /// public virtual void Decode(IDecoder decoder) { decoder.PushNamespace(Prefix2.Namespaces.Name2Xsd); weight = decoder.ReadFloat("weight"); wheel = (WheelDataType)decoder.ReadEncodeable("wheel", typeof(WheelDataType)); Model = decoder.ReadString("Model"); decoder.PopNamespace(); } /// public virtual bool IsEqual(IEncodeable encodeable) { if (Object.ReferenceEquals(this, encodeable)) { return true; } TriCycleDataType value = encodeable as TriCycleDataType; if (value == null) { return false; } if (!Utils.IsEqual(m_weight, value.m_weight)) return false; if (!Utils.IsEqual(m_wheel, value.m_wheel)) return false; if (!Utils.IsEqual(m_model, value.m_model)) return false; return true; } #if !NET_STANDARD /// public virtual object Clone() { return (TriCycleDataType)this.MemberwiseClone(); } #endif /// public new object MemberwiseClone() { TriCycleDataType clone = (TriCycleDataType)base.MemberwiseClone(); clone.m_weight = (float)Utils.Clone(this.m_weight); clone.m_wheel = (WheelDataType)Utils.Clone(this.m_wheel); clone.m_model = (string)Utils.Clone(this.m_model); return clone; } #endregion #region Private Fields private float m_weight; private WheelDataType m_wheel; private string m_model; #endregion } #region TriCycleDataTypeCollection Class /// /// A collection of TriCycleDataType objects. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] [CollectionDataContract(Name = "ListOfTriCycleDataType", Namespace = Prefix2.Namespaces.Name2Xsd, ItemName = "TriCycleDataType")] #if !NET_STANDARD public partial class TriCycleDataTypeCollection : List, ICloneable #else public partial class TriCycleDataTypeCollection : List #endif { #region Constructors /// /// Initializes the collection with default values. /// public TriCycleDataTypeCollection() {} /// /// Initializes the collection with an initial capacity. /// public TriCycleDataTypeCollection(int capacity) : base(capacity) {} /// /// Initializes the collection with another collection. /// public TriCycleDataTypeCollection(IEnumerable collection) : base(collection) {} #endregion #region Static Operators /// /// Converts an array to a collection. /// public static implicit operator TriCycleDataTypeCollection(TriCycleDataType[] values) { if (values != null) { return new TriCycleDataTypeCollection(values); } return new TriCycleDataTypeCollection(); } /// /// Converts a collection to an array. /// public static explicit operator TriCycleDataType[](TriCycleDataTypeCollection values) { if (values != null) { return values.ToArray(); } return null; } #endregion #if !NET_STANDARD #region ICloneable Methods /// /// Creates a deep copy of the collection. /// public object Clone() { return (TriCycleDataTypeCollection)this.MemberwiseClone(); } #endregion #endif /// public new object MemberwiseClone() { TriCycleDataTypeCollection clone = new TriCycleDataTypeCollection(this.Count); for (int ii = 0; ii < this.Count; ii++) { clone.Add((TriCycleDataType)Utils.Clone(this[ii])); } return clone; } } #endregion #endif #endregion #region WheelDataType Class #if (!OPCUA_EXCLUDE_WheelDataType) /// /// Wheel datatype. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] [DataContract(Namespace = Prefix2.Namespaces.Name2Xsd)] public partial class WheelDataType : IEncodeable { #region Constructors /// /// The default constructor. /// public WheelDataType() { Initialize(); } /// /// Called by the .NET framework during deserialization. /// [OnDeserializing] private void Initialize(StreamingContext context) { Initialize(); } /// /// Sets private members to default values. /// private void Initialize() { m_tickness = (float)0; m_diameter = (float)0; m_pressure = (float)0; m_tireType = TireEnum.Mud; m_raysLen = (int)0; } #endregion #region Public Properties /// /// A description for the tickness field. /// [DataMember(Name = "tickness", IsRequired = false, Order = 1)] public float tickness { get { return m_tickness; } set { m_tickness = value; } } /// /// A description for the diameter field. /// [DataMember(Name = "diameter", IsRequired = false, Order = 2)] public float diameter { get { return m_diameter; } set { m_diameter = value; } } /// /// A description for the pressure field. /// [DataMember(Name = "pressure", IsRequired = false, Order = 3)] public float pressure { get { return m_pressure; } set { m_pressure = value; } } /// /// A description for the TireType field. /// [DataMember(Name = "TireType", IsRequired = false, Order = 4)] public TireEnum TireType { get { return m_tireType; } set { m_tireType = value; } } /// /// A description for the raysLen field. /// [DataMember(Name = "raysLen", IsRequired = false, Order = 5)] public int raysLen { get { return m_raysLen; } set { m_raysLen = value; } } #endregion #region IEncodeable Members /// public virtual ExpandedNodeId TypeId { get { return DataTypeIds.WheelDataType; } } /// public virtual ExpandedNodeId BinaryEncodingId { get { return ObjectIds.WheelDataType_Encoding_DefaultBinary; } } /// public virtual ExpandedNodeId XmlEncodingId { get { return ObjectIds.WheelDataType_Encoding_DefaultXml; } } /// public virtual void Encode(IEncoder encoder) { encoder.PushNamespace(Prefix2.Namespaces.Name2Xsd); encoder.WriteFloat("tickness", tickness); encoder.WriteFloat("diameter", diameter); encoder.WriteFloat("pressure", pressure); encoder.WriteEnumerated("TireType", TireType); encoder.WriteInt32("raysLen", raysLen); encoder.PopNamespace(); } /// public virtual void Decode(IDecoder decoder) { decoder.PushNamespace(Prefix2.Namespaces.Name2Xsd); tickness = decoder.ReadFloat("tickness"); diameter = decoder.ReadFloat("diameter"); pressure = decoder.ReadFloat("pressure"); TireType = (TireEnum)decoder.ReadEnumerated("TireType", typeof(TireEnum)); raysLen = decoder.ReadInt32("raysLen"); decoder.PopNamespace(); } /// public virtual bool IsEqual(IEncodeable encodeable) { if (Object.ReferenceEquals(this, encodeable)) { return true; } WheelDataType value = encodeable as WheelDataType; if (value == null) { return false; } if (!Utils.IsEqual(m_tickness, value.m_tickness)) return false; if (!Utils.IsEqual(m_diameter, value.m_diameter)) return false; if (!Utils.IsEqual(m_pressure, value.m_pressure)) return false; if (!Utils.IsEqual(m_tireType, value.m_tireType)) return false; if (!Utils.IsEqual(m_raysLen, value.m_raysLen)) return false; return true; } #if !NET_STANDARD /// public virtual object Clone() { return (WheelDataType)this.MemberwiseClone(); } #endif /// public new object MemberwiseClone() { WheelDataType clone = (WheelDataType)base.MemberwiseClone(); clone.m_tickness = (float)Utils.Clone(this.m_tickness); clone.m_diameter = (float)Utils.Clone(this.m_diameter); clone.m_pressure = (float)Utils.Clone(this.m_pressure); clone.m_tireType = (TireEnum)Utils.Clone(this.m_tireType); clone.m_raysLen = (int)Utils.Clone(this.m_raysLen); return clone; } #endregion #region Private Fields private float m_tickness; private float m_diameter; private float m_pressure; private TireEnum m_tireType; private int m_raysLen; #endregion } #region WheelDataTypeCollection Class /// /// A collection of WheelDataType objects. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] [CollectionDataContract(Name = "ListOfWheelDataType", Namespace = Prefix2.Namespaces.Name2Xsd, ItemName = "WheelDataType")] #if !NET_STANDARD public partial class WheelDataTypeCollection : List, ICloneable #else public partial class WheelDataTypeCollection : List #endif { #region Constructors /// /// Initializes the collection with default values. /// public WheelDataTypeCollection() {} /// /// Initializes the collection with an initial capacity. /// public WheelDataTypeCollection(int capacity) : base(capacity) {} /// /// Initializes the collection with another collection. /// public WheelDataTypeCollection(IEnumerable collection) : base(collection) {} #endregion #region Static Operators /// /// Converts an array to a collection. /// public static implicit operator WheelDataTypeCollection(WheelDataType[] values) { if (values != null) { return new WheelDataTypeCollection(values); } return new WheelDataTypeCollection(); } /// /// Converts a collection to an array. /// public static explicit operator WheelDataType[](WheelDataTypeCollection values) { if (values != null) { return values.ToArray(); } return null; } #endregion #if !NET_STANDARD #region ICloneable Methods /// /// Creates a deep copy of the collection. /// public object Clone() { return (WheelDataTypeCollection)this.MemberwiseClone(); } #endregion #endif /// public new object MemberwiseClone() { WheelDataTypeCollection clone = new WheelDataTypeCollection(this.Count); for (int ii = 0; ii < this.Count; ii++) { clone.Add((WheelDataType)Utils.Clone(this[ii])); } return clone; } } #endregion #endif #endregion #region HumanState Class #if (!OPCUA_EXCLUDE_HumanState) /// /// Stores an instance of the HumanType ObjectType. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public partial class HumanState : BaseObjectState { #region Constructors /// /// Initializes the type with its default attribute values. /// public HumanState(NodeState parent) : base(parent) { } /// /// Returns the id of the default type definition node for the instance. /// protected override NodeId GetDefaultTypeDefinitionId(NamespaceTable namespaceUris) { return Opc.Ua.NodeId.Create(Prefix2.ObjectTypes.HumanType, Prefix2.Namespaces.Name2, namespaceUris); } #if (!OPCUA_EXCLUDE_InitializationStrings) /// /// Initializes the instance. /// protected override void Initialize(ISystemContext context) { Initialize(context, InitializationString); InitializeOptionalChildren(context); } protected override void Initialize(ISystemContext context, NodeState source) { InitializeOptionalChildren(context); base.Initialize(context, source); } /// /// Initializes the any option children defined for the instance. /// protected override void InitializeOptionalChildren(ISystemContext context) { base.InitializeOptionalChildren(context); } #region Initialization String private const string InitializationString = "AQAAABYAAABodHRwOi8vdHJpY3ljbGV0eXBldjEv/////wRggAABAAAAAQARAAAASHVtYW5UeXBlSW5z" + "dGFuY2UBAQUAAQEFAP////8DAAAAFWCJCgIAAAAAAAQAAABOYW1lAQEGAAAvAD8GAAAAAAz/////AQH/" + "////AAAAABVgiQoCAAAAAAADAAAAQWdlAQEHAAAvAD8HAAAAAAb/////AQH/////AAAAABVgiQoCAAAA" + "AAAGAAAAR2VuZGVyAQEIAAAuAEQIAAAAAAz/////AQH/////AAAAAA=="; #endregion #endif #endregion #region Public Properties /// /// A description for the Name Variable. /// public BaseDataVariableState Name { get { return m_name; } set { if (!Object.ReferenceEquals(m_name, value)) { ChangeMasks |= NodeStateChangeMasks.Children; } m_name = value; } } /// /// A description for the Age Variable. /// public BaseDataVariableState Age { get { return m_age; } set { if (!Object.ReferenceEquals(m_age, value)) { ChangeMasks |= NodeStateChangeMasks.Children; } m_age = value; } } /// /// A description for the Gender Property. /// public PropertyState Gender { get { return m_gender; } set { if (!Object.ReferenceEquals(m_gender, value)) { ChangeMasks |= NodeStateChangeMasks.Children; } m_gender = value; } } #endregion #region Overridden Methods /// /// Populates a list with the children that belong to the node. /// /// The context for the system being accessed. /// The list of children to populate. public override void GetChildren( ISystemContext context, IList children) { if (m_name != null) { children.Add(m_name); } if (m_age != null) { children.Add(m_age); } if (m_gender != null) { children.Add(m_gender); } base.GetChildren(context, children); } /// /// Finds the child with the specified browse name. /// protected override BaseInstanceState FindChild( ISystemContext context, QualifiedName browseName, bool createOrReplace, BaseInstanceState replacement) { if (QualifiedName.IsNull(browseName)) { return null; } BaseInstanceState instance = null; switch (browseName.Name) { case Prefix0.BrowseNames.Name: { if (createOrReplace) { if (Name == null) { if (replacement == null) { Name = new BaseDataVariableState(this); } else { Name = (BaseDataVariableState)replacement; } } } instance = Name; break; } case Prefix0.BrowseNames.Age: { if (createOrReplace) { if (Age == null) { if (replacement == null) { Age = new BaseDataVariableState(this); } else { Age = (BaseDataVariableState)replacement; } } } instance = Age; break; } case Prefix0.BrowseNames.Gender: { if (createOrReplace) { if (Gender == null) { if (replacement == null) { Gender = new PropertyState(this); } else { Gender = (PropertyState)replacement; } } } instance = Gender; break; } } if (instance != null) { return instance; } return base.FindChild(context, browseName, createOrReplace, replacement); } #endregion #region Private Fields private BaseDataVariableState m_name; private BaseDataVariableState m_age; private PropertyState m_gender; #endregion } #endif #endregion #region VehicleState Class #if (!OPCUA_EXCLUDE_VehicleState) /// /// Stores an instance of the VehicleType ObjectType. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public partial class VehicleState : BaseObjectState { #region Constructors /// /// Initializes the type with its default attribute values. /// public VehicleState(NodeState parent) : base(parent) { } /// /// Returns the id of the default type definition node for the instance. /// protected override NodeId GetDefaultTypeDefinitionId(NamespaceTable namespaceUris) { return Opc.Ua.NodeId.Create(Prefix2.ObjectTypes.VehicleType, Prefix2.Namespaces.Name2, namespaceUris); } #if (!OPCUA_EXCLUDE_InitializationStrings) /// /// Initializes the instance. /// protected override void Initialize(ISystemContext context) { Initialize(context, InitializationString); InitializeOptionalChildren(context); } protected override void Initialize(ISystemContext context, NodeState source) { InitializeOptionalChildren(context); base.Initialize(context, source); } /// /// Initializes the any option children defined for the instance. /// protected override void InitializeOptionalChildren(ISystemContext context) { base.InitializeOptionalChildren(context); } #region Initialization String private const string InitializationString = "AQAAABYAAABodHRwOi8vdHJpY3ljbGV0eXBldjEv/////wRggAABAAAAAQATAAAAVmVoaWNsZVR5cGVJ" + "bnN0YW5jZQEBCgABAQoA/////wIAAAAVYIkKAgAAAAAACQAAAGJ1aWxkRGF0ZQEBLgAALgBELgAAAAAN" + "/////wEB/////wAAAABEYMAKAQAAAAgAAABTX093bmVyXwAABgAAAE93bmVyPgEBLwADAAAAAAcAAAA8" + "T3duZXI+AC8BAQUALwAAAP////8DAAAAFWCJCgIAAAAAAAQAAABOYW1lAQEwAAAvAD8wAAAAAAz/////" + "AQH/////AAAAABVgiQoCAAAAAAADAAAAQWdlAQExAAAvAD8xAAAAAAb/////AQH/////AAAAABVgiQoC" + "AAAAAAAGAAAAR2VuZGVyAQEyAAAuAEQyAAAAAAz/////AQH/////AAAAAA=="; #endregion #endif #endregion #region Public Properties /// /// A description for the buildDate Property. /// public PropertyState buildDate { get { return m_buildDate; } set { if (!Object.ReferenceEquals(m_buildDate, value)) { ChangeMasks |= NodeStateChangeMasks.Children; } m_buildDate = value; } } /// /// A description for the Owner> Object. /// public HumanState S_Owner_ { get { return m_s_Owner_; } set { if (!Object.ReferenceEquals(m_s_Owner_, value)) { ChangeMasks |= NodeStateChangeMasks.Children; } m_s_Owner_ = value; } } #endregion #region Overridden Methods /// /// Populates a list with the children that belong to the node. /// /// The context for the system being accessed. /// The list of children to populate. public override void GetChildren( ISystemContext context, IList children) { if (m_buildDate != null) { children.Add(m_buildDate); } if (m_s_Owner_ != null) { children.Add(m_s_Owner_); } base.GetChildren(context, children); } /// /// Finds the child with the specified browse name. /// protected override BaseInstanceState FindChild( ISystemContext context, QualifiedName browseName, bool createOrReplace, BaseInstanceState replacement) { if (QualifiedName.IsNull(browseName)) { return null; } BaseInstanceState instance = null; switch (browseName.Name) { case Prefix0.BrowseNames.buildDate: { if (createOrReplace) { if (buildDate == null) { if (replacement == null) { buildDate = new PropertyState(this); } else { buildDate = (PropertyState)replacement; } } } instance = buildDate; break; } case Prefix0.BrowseNames.S_Owner_: { if (createOrReplace) { if (S_Owner_ == null) { if (replacement == null) { S_Owner_ = new HumanState(this); } else { S_Owner_ = (HumanState)replacement; } } } instance = S_Owner_; break; } } if (instance != null) { return instance; } return base.FindChild(context, browseName, createOrReplace, replacement); } #endregion #region Private Fields private PropertyState m_buildDate; private HumanState m_s_Owner_; #endregion } #endif #endregion #region TrailerState Class #if (!OPCUA_EXCLUDE_TrailerState) /// /// Stores an instance of the TrailerType ObjectType. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public partial class TrailerState : VehicleState { #region Constructors /// /// Initializes the type with its default attribute values. /// public TrailerState(NodeState parent) : base(parent) { } /// /// Returns the id of the default type definition node for the instance. /// protected override NodeId GetDefaultTypeDefinitionId(NamespaceTable namespaceUris) { return Opc.Ua.NodeId.Create(Prefix2.ObjectTypes.TrailerType, Prefix2.Namespaces.Name2, namespaceUris); } #if (!OPCUA_EXCLUDE_InitializationStrings) /// /// Initializes the instance. /// protected override void Initialize(ISystemContext context) { Initialize(context, InitializationString); InitializeOptionalChildren(context); } protected override void Initialize(ISystemContext context, NodeState source) { InitializeOptionalChildren(context); base.Initialize(context, source); } /// /// Initializes the any option children defined for the instance. /// protected override void InitializeOptionalChildren(ISystemContext context) { base.InitializeOptionalChildren(context); } #region Initialization String private const string InitializationString = "AQAAABYAAABodHRwOi8vdHJpY3ljbGV0eXBldjEv/////wRggAABAAAAAQATAAAAVHJhaWxlclR5cGVJ" + "bnN0YW5jZQEBCQABAQkA/////wMAAAAVYIkKAgAAAAAACQAAAGJ1aWxkRGF0ZQEBMwAALgBEMwAAAAAN" + "/////wEB/////wAAAABEYMAKAQAAAAgAAABTX093bmVyXwAABgAAAE93bmVyPgEBNAADAAAAAAcAAAA8" + "T3duZXI+AC8BAQUANAAAAP////8DAAAAFWCJCgIAAAAAAAQAAABOYW1lAQE1AAAvAD81AAAAAAz/////" + "AQH/////AAAAABVgiQoCAAAAAAADAAAAQWdlAQE2AAAvAD82AAAAAAb/////AQH/////AAAAABVgiQoC" + "AAAAAAAGAAAAR2VuZGVyAQE3AAAuAEQ3AAAAAAz/////AQH/////AAAAABdgiQoCAAAAAAAOAAAATG9h" + "ZGVkVHJpY3ljbGUBAT0AADEAPz0AAAABAQMAAQAAAAEAAAAAAAAAAQH/////AAAAAA=="; #endregion #endif #endregion #region Public Properties /// /// A description for the LoadedTricycle Variable. /// public BaseDataVariableState LoadedTricycle { get { return m_loadedTricycle; } set { if (!Object.ReferenceEquals(m_loadedTricycle, value)) { ChangeMasks |= NodeStateChangeMasks.Children; } m_loadedTricycle = value; } } #endregion #region Overridden Methods /// /// Populates a list with the children that belong to the node. /// /// The context for the system being accessed. /// The list of children to populate. public override void GetChildren( ISystemContext context, IList children) { if (m_loadedTricycle != null) { children.Add(m_loadedTricycle); } base.GetChildren(context, children); } /// /// Finds the child with the specified browse name. /// protected override BaseInstanceState FindChild( ISystemContext context, QualifiedName browseName, bool createOrReplace, BaseInstanceState replacement) { if (QualifiedName.IsNull(browseName)) { return null; } BaseInstanceState instance = null; switch (browseName.Name) { case Prefix0.BrowseNames.LoadedTricycle: { if (createOrReplace) { if (LoadedTricycle == null) { if (replacement == null) { LoadedTricycle = new BaseDataVariableState(this); } else { LoadedTricycle = (BaseDataVariableState)replacement; } } } instance = LoadedTricycle; break; } } if (instance != null) { return instance; } return base.FindChild(context, browseName, createOrReplace, replacement); } #endregion #region Private Fields private BaseDataVariableState m_loadedTricycle; #endregion } #endif #endregion #region TriCycleState Class #if (!OPCUA_EXCLUDE_TriCycleState) /// /// Stores an instance of the TriCycleType ObjectType. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public partial class TriCycleState : VehicleState { #region Constructors /// /// Initializes the type with its default attribute values. /// public TriCycleState(NodeState parent) : base(parent) { } /// /// Returns the id of the default type definition node for the instance. /// protected override NodeId GetDefaultTypeDefinitionId(NamespaceTable namespaceUris) { return Opc.Ua.NodeId.Create(Prefix2.ObjectTypes.TriCycleType, Prefix2.Namespaces.Name2, namespaceUris); } #if (!OPCUA_EXCLUDE_InitializationStrings) /// /// Initializes the instance. /// protected override void Initialize(ISystemContext context) { Initialize(context, InitializationString); InitializeOptionalChildren(context); } protected override void Initialize(ISystemContext context, NodeState source) { InitializeOptionalChildren(context); base.Initialize(context, source); } /// /// Initializes the any option children defined for the instance. /// protected override void InitializeOptionalChildren(ISystemContext context) { base.InitializeOptionalChildren(context); } #region Initialization String private const string InitializationString = "AQAAABYAAABodHRwOi8vdHJpY3ljbGV0eXBldjEv/////wRggAABAAAAAQAUAAAAVHJpQ3ljbGVUeXBl" + "SW5zdGFuY2UBAQsAAQELAP////8FAAAAFWCJCgIAAAAAAAkAAABidWlsZERhdGUBATgAAC4ARDgAAAAA" + "Df////8BAf////8AAAAARGDACgEAAAAIAAAAU19Pd25lcl8AAAYAAABPd25lcj4BATkAAwAAAAAHAAAA" + "PE93bmVyPgAvAQEFADkAAAD/////AwAAABVgiQoCAAAAAAAEAAAATmFtZQEBOgAALwA/OgAAAAAM////" + "/wEB/////wAAAAAVYIkKAgAAAAAAAwAAAEFnZQEBOwAALwA/OwAAAAAG/////wEB/////wAAAAAVYIkK" + "AgAAAAAABgAAAEdlbmRlcgEBPAAALgBEPAAAAAAM/////wEB/////wAAAAAVYIkKAgAAAAAABgAAAHdl" + "aWdodAEBDAAALgBEDAAAAAAK/////wEB/////wAAAAAXYIkKAgAAAAAABgAAAHdoZWVscwEBDQAALgEB" + "EwANAAAAAQEEAAEAAAABAAAAAwAAAAEB/////wQAAAAVYIkKAgAAAAAACAAAAHRpY2tuZXNzAQEOAAAv" + "AD8OAAAAAAr/////AQH/////AAAAABVgiQoCAAAAAAAIAAAAZGlhbWV0ZXIBAQ8AAC8APw8AAAAACv//" + "//8BAf////8AAAAAFWCJCgIAAAAAAAgAAABwcmVzc3VyZQEBEAAALwA/EAAAAAAK/////wEB/////wAA" + "AAAVYIkKAgAAAAAACAAAAHRpcmV0eXBlAQERAAAvAD8RAAAAAQEBAP////8BAf////8AAAAAFWCJCgIA" + "AAAAAAUAAABNb2RlbAEBEgAALwA/EgAAAAAM/////wEB/////wAAAAA="; #endregion #endif #endregion #region Public Properties /// /// A description for the weight Property. /// public PropertyState weight { get { return m_weight; } set { if (!Object.ReferenceEquals(m_weight, value)) { ChangeMasks |= NodeStateChangeMasks.Children; } m_weight = value; } } /// /// A description for the wheels Property. /// public WheelVariableState wheels { get { return m_wheels; } set { if (!Object.ReferenceEquals(m_wheels, value)) { ChangeMasks |= NodeStateChangeMasks.Children; } m_wheels = value; } } /// /// A description for the Model Variable. /// public BaseDataVariableState Model { get { return m_model; } set { if (!Object.ReferenceEquals(m_model, value)) { ChangeMasks |= NodeStateChangeMasks.Children; } m_model = value; } } #endregion #region Overridden Methods /// /// Populates a list with the children that belong to the node. /// /// The context for the system being accessed. /// The list of children to populate. public override void GetChildren( ISystemContext context, IList children) { if (m_weight != null) { children.Add(m_weight); } if (m_wheels != null) { children.Add(m_wheels); } if (m_model != null) { children.Add(m_model); } base.GetChildren(context, children); } /// /// Finds the child with the specified browse name. /// protected override BaseInstanceState FindChild( ISystemContext context, QualifiedName browseName, bool createOrReplace, BaseInstanceState replacement) { if (QualifiedName.IsNull(browseName)) { return null; } BaseInstanceState instance = null; switch (browseName.Name) { case Prefix0.BrowseNames.weight: { if (createOrReplace) { if (weight == null) { if (replacement == null) { weight = new PropertyState(this); } else { weight = (PropertyState)replacement; } } } instance = weight; break; } case Prefix0.BrowseNames.wheels: { if (createOrReplace) { if (wheels == null) { if (replacement == null) { wheels = new WheelVariableState(this); } else { wheels = (WheelVariableState)replacement; } } } instance = wheels; break; } case Prefix0.BrowseNames.Model: { if (createOrReplace) { if (Model == null) { if (replacement == null) { Model = new BaseDataVariableState(this); } else { Model = (BaseDataVariableState)replacement; } } } instance = Model; break; } } if (instance != null) { return instance; } return base.FindChild(context, browseName, createOrReplace, replacement); } #endregion #region Private Fields private PropertyState m_weight; private WheelVariableState m_wheels; private BaseDataVariableState m_model; #endregion } #endif #endregion #region WheelVariableState Class #if (!OPCUA_EXCLUDE_WheelVariableState) /// /// Stores an instance of the WheelVariableType VariableType. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public partial class WheelVariableState : BaseDataVariableState { #region Constructors /// /// Initializes the type with its default attribute values. /// public WheelVariableState(NodeState parent) : base(parent) { } /// /// Returns the id of the default type definition node for the instance. /// protected override NodeId GetDefaultTypeDefinitionId(NamespaceTable namespaceUris) { return Opc.Ua.NodeId.Create(Prefix2.VariableTypes.WheelVariableType, Prefix2.Namespaces.Name2, namespaceUris); } /// /// Returns the id of the default data type node for the instance. /// protected override NodeId GetDefaultDataTypeId(NamespaceTable namespaceUris) { return Opc.Ua.NodeId.Create(Prefix2.DataTypes.WheelDataType, Prefix2.Namespaces.Name2, namespaceUris); } /// /// Returns the id of the default value rank for the instance. /// protected override int GetDefaultValueRank() { return ValueRanks.Scalar; } #if (!OPCUA_EXCLUDE_InitializationStrings) /// /// Initializes the instance. /// protected override void Initialize(ISystemContext context) { Initialize(context, InitializationString); InitializeOptionalChildren(context); } protected override void Initialize(ISystemContext context, NodeState source) { InitializeOptionalChildren(context); base.Initialize(context, source); } /// /// Initializes the any option children defined for the instance. /// protected override void InitializeOptionalChildren(ISystemContext context) { base.InitializeOptionalChildren(context); } #region Initialization String private const string InitializationString = "AQAAABYAAABodHRwOi8vdHJpY3ljbGV0eXBldjEv/////xVggQACAAAAAQAZAAAAV2hlZWxWYXJpYWJs" + "ZVR5cGVJbnN0YW5jZQEBEwABARMAAQEEAAEB/////wQAAAAVYIkKAgAAAAAACAAAAHRpY2tuZXNzAQEU" + "AAAvAD8UAAAAAAr/////AQH/////AAAAABVgiQoCAAAAAAAIAAAAZGlhbWV0ZXIBARUAAC8APxUAAAAA" + "Cv////8BAf////8AAAAAFWCJCgIAAAAAAAgAAABwcmVzc3VyZQEBFgAALwA/FgAAAAAK/////wEB////" + "/wAAAAAVYIkKAgAAAAAACAAAAHRpcmV0eXBlAQEXAAAvAD8XAAAAAQEBAP////8BAf////8AAAAA"; #endregion #endif #endregion #region Public Properties /// /// A description for the tickness Variable. /// public BaseDataVariableState tickness { get { return m_tickness; } set { if (!Object.ReferenceEquals(m_tickness, value)) { ChangeMasks |= NodeStateChangeMasks.Children; } m_tickness = value; } } /// /// A description for the diameter Variable. /// public BaseDataVariableState diameter { get { return m_diameter; } set { if (!Object.ReferenceEquals(m_diameter, value)) { ChangeMasks |= NodeStateChangeMasks.Children; } m_diameter = value; } } /// /// A description for the pressure Variable. /// public BaseDataVariableState pressure { get { return m_pressure; } set { if (!Object.ReferenceEquals(m_pressure, value)) { ChangeMasks |= NodeStateChangeMasks.Children; } m_pressure = value; } } /// /// A description for the tiretype Variable. /// public BaseDataVariableState tiretype { get { return m_tiretype; } set { if (!Object.ReferenceEquals(m_tiretype, value)) { ChangeMasks |= NodeStateChangeMasks.Children; } m_tiretype = value; } } #endregion #region Overridden Methods /// /// Populates a list with the children that belong to the node. /// /// The context for the system being accessed. /// The list of children to populate. public override void GetChildren( ISystemContext context, IList children) { if (m_tickness != null) { children.Add(m_tickness); } if (m_diameter != null) { children.Add(m_diameter); } if (m_pressure != null) { children.Add(m_pressure); } if (m_tiretype != null) { children.Add(m_tiretype); } base.GetChildren(context, children); } /// /// Finds the child with the specified browse name. /// protected override BaseInstanceState FindChild( ISystemContext context, QualifiedName browseName, bool createOrReplace, BaseInstanceState replacement) { if (QualifiedName.IsNull(browseName)) { return null; } BaseInstanceState instance = null; switch (browseName.Name) { case Prefix0.BrowseNames.tickness: { if (createOrReplace) { if (tickness == null) { if (replacement == null) { tickness = new BaseDataVariableState(this); } else { tickness = (BaseDataVariableState)replacement; } } } instance = tickness; break; } case Prefix0.BrowseNames.diameter: { if (createOrReplace) { if (diameter == null) { if (replacement == null) { diameter = new BaseDataVariableState(this); } else { diameter = (BaseDataVariableState)replacement; } } } instance = diameter; break; } case Prefix0.BrowseNames.pressure: { if (createOrReplace) { if (pressure == null) { if (replacement == null) { pressure = new BaseDataVariableState(this); } else { pressure = (BaseDataVariableState)replacement; } } } instance = pressure; break; } case Prefix0.BrowseNames.tiretype: { if (createOrReplace) { if (tiretype == null) { if (replacement == null) { tiretype = new BaseDataVariableState(this); } else { tiretype = (BaseDataVariableState)replacement; } } } instance = tiretype; break; } } if (instance != null) { return instance; } return base.FindChild(context, browseName, createOrReplace, replacement); } #endregion #region Private Fields private BaseDataVariableState m_tickness; private BaseDataVariableState m_diameter; private BaseDataVariableState m_pressure; private BaseDataVariableState m_tiretype; #endregion } #region WheelVariableValue Class /// /// A typed version of the _BrowseName_ variable. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public class WheelVariableValue : BaseVariableValue { #region Constructors /// /// Initializes the instance with its defalt attribute values. /// public WheelVariableValue(WheelVariableState variable, WheelDataType value, object dataLock) : base(dataLock) { m_value = value; if (m_value == null) { m_value = new WheelDataType(); } Initialize(variable); } #endregion #region Public Members /// /// The variable that the value belongs to. /// public WheelVariableState Variable { get { return m_variable; } } /// /// The value of the variable. /// public WheelDataType Value { get { return m_value; } set { m_value = value; } } #endregion #region Private Methods /// /// Initializes the object. /// private void Initialize(WheelVariableState variable) { lock (Lock) { m_variable = variable; variable.Value = m_value; variable.OnReadValue = OnReadValue; variable.OnSimpleWriteValue = OnWriteValue; BaseVariableState instance = null; List updateList = new List(); updateList.Add(variable); instance = m_variable.tickness; instance.OnReadValue = OnRead_tickness; instance.OnSimpleWriteValue = OnWrite_tickness; updateList.Add(instance); instance = m_variable.diameter; instance.OnReadValue = OnRead_diameter; instance.OnSimpleWriteValue = OnWrite_diameter; updateList.Add(instance); instance = m_variable.pressure; instance.OnReadValue = OnRead_pressure; instance.OnSimpleWriteValue = OnWrite_pressure; updateList.Add(instance); SetUpdateList(updateList); } } /// /// Reads the value of the variable. /// protected ServiceResult OnReadValue( ISystemContext context, NodeState node, NumericRange indexRange, QualifiedName dataEncoding, ref object value, ref StatusCode statusCode, ref DateTime timestamp) { lock (Lock) { DoBeforeReadProcessing(context, node); if (m_value != null) { value = m_value; } return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); } } /// /// Writes the value of the variable. /// private ServiceResult OnWriteValue(ISystemContext context, NodeState node, ref object value) { lock (Lock) { m_value = (WheelDataType)Write(value); } return ServiceResult.Good; } #region tickness Access Methods /// /// Reads the value of the variable child. /// private ServiceResult OnRead_tickness( ISystemContext context, NodeState node, NumericRange indexRange, QualifiedName dataEncoding, ref object value, ref StatusCode statusCode, ref DateTime timestamp) { lock (Lock) { DoBeforeReadProcessing(context, node); if (m_value != null) { value = m_value.tickness; } return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); } } /// /// Writes the value of the variable child. /// private ServiceResult OnWrite_tickness(ISystemContext context, NodeState node, ref object value) { lock (Lock) { m_value.tickness = (float)Write(value); } return ServiceResult.Good; } #endregion #region diameter Access Methods /// /// Reads the value of the variable child. /// private ServiceResult OnRead_diameter( ISystemContext context, NodeState node, NumericRange indexRange, QualifiedName dataEncoding, ref object value, ref StatusCode statusCode, ref DateTime timestamp) { lock (Lock) { DoBeforeReadProcessing(context, node); if (m_value != null) { value = m_value.diameter; } return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); } } /// /// Writes the value of the variable child. /// private ServiceResult OnWrite_diameter(ISystemContext context, NodeState node, ref object value) { lock (Lock) { m_value.diameter = (float)Write(value); } return ServiceResult.Good; } #endregion #region pressure Access Methods /// /// Reads the value of the variable child. /// private ServiceResult OnRead_pressure( ISystemContext context, NodeState node, NumericRange indexRange, QualifiedName dataEncoding, ref object value, ref StatusCode statusCode, ref DateTime timestamp) { lock (Lock) { DoBeforeReadProcessing(context, node); if (m_value != null) { value = m_value.pressure; } return Read(context, node, indexRange, dataEncoding, ref value, ref statusCode, ref timestamp); } } /// /// Writes the value of the variable child. /// private ServiceResult OnWrite_pressure(ISystemContext context, NodeState node, ref object value) { lock (Lock) { m_value.pressure = (float)Write(value); } return ServiceResult.Good; } #endregion #endregion #region Private Fields private WheelDataType m_value; private WheelVariableState m_variable; #endregion } #endregion #endif #endregion } ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/XMLModels/ProblemsToReport/eoursel510/Opc.Ua.NodeSet2.TriCycleType_V1.1.ModelDesign/Prefix2.NodeSet.xml ================================================  http://opcfoundation.org/UA/ http://tricycletypev1/ ns=1;i=1 DataType_64 1 TireEnum TireEnum 0 0 0 i=45 true i=29 i=46 false ns=1;i=2 false ns=1;i=2 Variable_2 0 EnumStrings EnumStrings 0 0 0 i=46 true ns=1;i=1 i=40 false i=68 i=37 false i=78 Mud Ice Sand i=21 1 1 1 0 false 0 ns=1;i=3 DataType_64 1 TriCycleDataType TriCycleDataType 0 0 0 i=45 true i=22 i=38 false ns=1;i=24 i=38 false ns=1;i=35 false ns=1;i=4 DataType_64 1 WheelDataType WheelDataType Wheel datatype. 0 0 0 i=45 true i=22 i=38 false ns=1;i=25 i=38 false ns=1;i=36 false ns=1;i=5 ObjectType_8 1 HumanType HumanType 0 0 0 i=45 true i=58 i=47 false ns=1;i=6 i=47 false ns=1;i=7 i=46 false ns=1;i=8 false ns=1;i=6 Variable_2 0 Name Name 0 0 0 i=47 true ns=1;i=5 i=40 false i=63 i=37 false i=78 i=12 -1 1 1 0 false 0 ns=1;i=7 Variable_2 0 Age Age 0 0 0 i=47 true ns=1;i=5 i=40 false i=63 i=37 false i=78 0 i=6 -1 1 1 0 false 0 ns=1;i=8 Variable_2 0 Gender Gender 0 0 0 i=46 true ns=1;i=5 i=40 false i=68 i=37 false i=78 i=12 -1 1 1 0 false 0 ns=1;i=9 ObjectType_8 1 TrailerType TrailerType 0 0 0 i=45 true ns=1;i=10 i=49 false ns=1;i=61 false ns=1;i=10 ObjectType_8 1 VehicleType VehicleType 0 0 0 i=45 true i=58 i=46 false ns=1;i=46 i=47 false ns=1;i=47 i=45 false ns=1;i=9 i=45 false ns=1;i=11 false ns=1;i=11 ObjectType_8 1 TriCycleType TriCycleType This a simple Tricycle 0 0 0 i=45 true ns=1;i=10 i=46 false ns=1;i=12 i=46 false ns=1;i=13 i=47 false ns=1;i=18 false ns=1;i=12 Variable_2 0 weight weight 0 0 0 i=46 true ns=1;i=11 i=40 false i=68 i=37 false i=78 0 i=10 -1 1 1 0 false 0 ns=1;i=13 Variable_2 0 wheels wheels 0 0 0 i=46 true ns=1;i=11 i=40 false ns=1;i=19 i=37 false i=78 i=47 false ns=1;i=14 i=47 false ns=1;i=15 i=47 false ns=1;i=16 i=47 false ns=1;i=17 ns=1;i=4 1 3 1 1 0 false 0 ns=1;i=14 Variable_2 0 tickness tickness 0 0 0 i=47 true ns=1;i=13 i=40 false i=63 i=37 false i=78 0 i=10 -1 1 1 0 false 0 ns=1;i=15 Variable_2 0 diameter diameter 0 0 0 i=47 true ns=1;i=13 i=40 false i=63 i=37 false i=78 0 i=10 -1 1 1 0 false 0 ns=1;i=16 Variable_2 0 pressure pressure 0 0 0 i=47 true ns=1;i=13 i=40 false i=63 i=37 false i=78 0 i=10 -1 1 1 0 false 0 ns=1;i=17 Variable_2 0 tiretype tiretype 0 0 0 i=47 true ns=1;i=13 i=40 false i=63 i=37 false i=78 ns=1;i=1 -1 1 1 0 false 0 ns=1;i=18 Variable_2 0 Model Model 0 0 0 i=47 true ns=1;i=11 i=40 false i=63 i=37 false i=78 i=12 -1 1 1 0 false 0 ns=1;i=19 VariableType_16 1 WheelVariableType WheelVariableType 0 0 0 i=45 true i=63 i=47 false ns=1;i=20 i=47 false ns=1;i=21 i=47 false ns=1;i=22 i=47 false ns=1;i=23 ns=1;i=4 -2 false ns=1;i=20 Variable_2 0 tickness tickness 0 0 0 i=47 true ns=1;i=19 i=40 false i=63 i=37 false i=78 0 i=10 -1 1 1 0 false 0 ns=1;i=21 Variable_2 0 diameter diameter 0 0 0 i=47 true ns=1;i=19 i=40 false i=63 i=37 false i=78 0 i=10 -1 1 1 0 false 0 ns=1;i=22 Variable_2 0 pressure pressure 0 0 0 i=47 true ns=1;i=19 i=40 false i=63 i=37 false i=78 0 i=10 -1 1 1 0 false 0 ns=1;i=23 Variable_2 0 tiretype tiretype 0 0 0 i=47 true ns=1;i=19 i=40 false i=63 i=37 false i=78 ns=1;i=1 -1 1 1 0 false 0 ns=1;i=24 Object_1 0 Default XML Default XML 0 0 0 i=40 false i=76 i=38 true ns=1;i=3 i=39 false ns=1;i=29 0 ns=1;i=25 Object_1 0 Default XML Default XML 0 0 0 i=40 false i=76 i=38 true ns=1;i=4 i=39 false ns=1;i=32 0 ns=1;i=26 Variable_2 1 Prefix2 Prefix2 0 0 0 i=40 false i=72 i=47 true i=92 i=46 false ns=1;i=28 i=47 false ns=1;i=29 i=47 false ns=1;i=32 PHhzOnNjaGVtYQ0KICB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEi DQogIHhtbG5zOnVhPSJodHRwOi8vb3BjZm91bmRhdGlvbi5vcmcvVUEvMjAwOC8wMi9UeXBlcy54 c2QiDQogIHhtbG5zOnRucz0iaHR0cDovL3RyaWN5Y2xldHlwZXYxLyINCiAgdGFyZ2V0TmFtZXNw YWNlPSJodHRwOi8vdHJpY3ljbGV0eXBldjEvIg0KICBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxp ZmllZCINCj4NCiAgPHhzOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly9vcGNmb3VuZGF0aW9uLm9y Zy9VQS8iIC8+DQoNCiAgPHhzOnNpbXBsZVR5cGUgIG5hbWU9IlRpcmVFbnVtIj4NCiAgICA8eHM6 cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIj4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1 ZT0iTXVkXzAiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkljZV8xIiAvPg0KICAg ICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJTYW5kXzIiIC8+DQogICAgPC94czpyZXN0cmljdGlv bj4NCiAgPC94czpzaW1wbGVUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJUaXJlRW51bSIgdHlw ZT0idG5zOlRpcmVFbnVtIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZUaXJl RW51bSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVGlyZUVu dW0iIHR5cGU9InRuczpUaXJlRW51bSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRl ZCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxl bWVudCBuYW1lPSJMaXN0T2ZUaXJlRW51bSIgdHlwZT0idG5zOkxpc3RPZlRpcmVFbnVtIiBuaWxs YWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJUcmlD eWNsZURhdGFUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1l PSJ3ZWlnaHQiIHR5cGU9InhzOmZsb2F0IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxl bWVudCBuYW1lPSJ3aGVlbCIgdHlwZT0idG5zOldoZWVsRGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIg bmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJNb2RlbCIgdHlwZT0i eHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2Vx dWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlRyaUN5Y2xl RGF0YVR5cGUiIHR5cGU9InRuczpUcmlDeWNsZURhdGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4 VHlwZSBuYW1lPSJMaXN0T2ZUcmlDeWNsZURhdGFUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQog ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJUcmlDeWNsZURhdGFUeXBlIiB0eXBlPSJ0bnM6VHJpQ3lj bGVEYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9 InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhz OmVsZW1lbnQgbmFtZT0iTGlzdE9mVHJpQ3ljbGVEYXRhVHlwZSIgdHlwZT0idG5zOkxpc3RPZlRy aUN5Y2xlRGF0YVR5cGUiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNv bXBsZXhUeXBlIG5hbWU9IldoZWVsRGF0YVR5cGUiPg0KICAgIDx4czphbm5vdGF0aW9uPg0KICAg ICAgPHhzOmRvY3VtZW50YXRpb24+V2hlZWwgZGF0YXR5cGUuPC94czpkb2N1bWVudGF0aW9uPg0K ICAgIDwveHM6YW5ub3RhdGlvbj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVu dCBuYW1lPSJ0aWNrbmVzcyIgdHlwZT0ieHM6ZmxvYXQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAg IDx4czplbGVtZW50IG5hbWU9ImRpYW1ldGVyIiB0eXBlPSJ4czpmbG9hdCIgbWluT2NjdXJzPSIw IiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0icHJlc3N1cmUiIHR5cGU9InhzOmZsb2F0IiBt aW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJUaXJlVHlwZSIgdHlwZT0i dG5zOlRpcmVFbnVtIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJy YXlzTGVuIiB0eXBlPSJ4czppbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICA8L3hzOnNlcXVlbmNl Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJXaGVlbERhdGFUeXBl IiB0eXBlPSJ0bnM6V2hlZWxEYXRhVHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0i TGlzdE9mV2hlZWxEYXRhVHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1l bnQgbmFtZT0iV2hlZWxEYXRhVHlwZSIgdHlwZT0idG5zOldoZWVsRGF0YVR5cGUiIG1pbk9jY3Vy cz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6 c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RP ZldoZWVsRGF0YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZXaGVlbERhdGFUeXBlIiBuaWxsYWJsZT0i dHJ1ZSI+PC94czplbGVtZW50Pg0KDQo8L3hzOnNjaGVtYT4= i=15 -1 1 1 0 false 0 ns=1;i=28 Variable_2 0 NamespaceUri NamespaceUri A URI that uniquely identifies the dictionary. 0 0 0 i=46 true ns=1;i=26 i=40 false i=68 http://tricycletypev1/ i=12 -1 1 1 0 false 0 ns=1;i=29 Variable_2 1 TriCycleDataType TriCycleDataType 0 0 0 i=47 true ns=1;i=26 i=40 false i=69 //xs:element[@name='TriCycleDataType'] i=12 -1 1 1 0 false 0 ns=1;i=32 Variable_2 1 WheelDataType WheelDataType 0 0 0 i=47 true ns=1;i=26 i=40 false i=69 //xs:element[@name='WheelDataType'] i=12 -1 1 1 0 false 0 ns=1;i=35 Object_1 0 Default Binary Default Binary 0 0 0 i=40 false i=76 i=38 true ns=1;i=3 i=39 false ns=1;i=40 0 ns=1;i=36 Object_1 0 Default Binary Default Binary 0 0 0 i=40 false i=76 i=38 true ns=1;i=4 i=39 false ns=1;i=43 0 ns=1;i=37 Variable_2 1 Prefix2 Prefix2 0 0 0 i=40 false i=72 i=47 true i=93 i=46 false ns=1;i=39 i=47 false ns=1;i=40 i=47 false ns=1;i=43 PG9wYzpUeXBlRGljdGlvbmFyeQ0KICB4bWxuczpvcGM9Imh0dHA6Ly9vcGNmb3VuZGF0aW9uLm9y Zy9CaW5hcnlTY2hlbWEvIg0KICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1M U2NoZW1hLWluc3RhbmNlIg0KICB4bWxuczp1YT0iaHR0cDovL29wY2ZvdW5kYXRpb24ub3JnL1VB LyINCiAgeG1sbnM6dG5zPSJodHRwOi8vdHJpY3ljbGV0eXBldjEvIg0KICBEZWZhdWx0Qnl0ZU9y ZGVyPSJMaXR0bGVFbmRpYW4iDQogIFRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RyaWN5Y2xldHlw ZXYxLyINCj4NCiAgPCEtLSBUaGlzIEZpbGUgd2FzIGdlbmVyYXRlZCBvbiAyMDIxLTAzLTE4IGFu ZCBzdXBwb3J0cyB0aGUgc3BlY2lmaWNhdGlvbnMgc3VwcG9ydGVkIGJ5IHZlcnNpb24gMS4xMS4z MzUuMTAgb2YgdGhlIE9QQyBVQSBkZWxpdmVyYWJsZXMuIC0tPg0KICA8b3BjOkltcG9ydCBOYW1l c3BhY2U9Imh0dHA6Ly9vcGNmb3VuZGF0aW9uLm9yZy9VQS8iIExvY2F0aW9uPSJQcmVmaXgwLkJp bmFyeVNjaGVtYS5ic2QiLz4NCg0KICA8b3BjOkVudW1lcmF0ZWRUeXBlIE5hbWU9IlRpcmVFbnVt IiBMZW5ndGhJbkJpdHM9IjMyIj4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJNdWQi IFZhbHVlPSIwIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkljZSIgVmFsdWU9 IjEiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iU2FuZCIgVmFsdWU9IjIiIC8+ DQogIDwvb3BjOkVudW1lcmF0ZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0i VHJpQ3ljbGVEYXRhVHlwZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9w YzpGaWVsZCBOYW1lPSJ3ZWlnaHQiIFR5cGVOYW1lPSJvcGM6RmxvYXQiIC8+DQogICAgPG9wYzpG aWVsZCBOYW1lPSJ3aGVlbCIgVHlwZU5hbWU9InRuczpXaGVlbERhdGFUeXBlIiAvPg0KICAgIDxv cGM6RmllbGQgTmFtZT0iTW9kZWwiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICA8L29wYzpT dHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IldoZWVsRGF0YVR5 cGUiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RG9jdW1lbnRhdGlv bj5XaGVlbCBkYXRhdHlwZS48L29wYzpEb2N1bWVudGF0aW9uPg0KICAgIDxvcGM6RmllbGQgTmFt ZT0idGlja25lc3MiIFR5cGVOYW1lPSJvcGM6RmxvYXQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1l PSJkaWFtZXRlciIgVHlwZU5hbWU9Im9wYzpGbG9hdCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 InByZXNzdXJlIiBUeXBlTmFtZT0ib3BjOkZsb2F0IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i VGlyZVR5cGUiIFR5cGVOYW1lPSJ0bnM6VGlyZUVudW0iIC8+DQogICAgPG9wYzpGaWVsZCBOYW1l PSJyYXlzTGVuIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlw ZT4NCg0KPC9vcGM6VHlwZURpY3Rpb25hcnk+ i=15 -1 1 1 0 false 0 ns=1;i=39 Variable_2 0 NamespaceUri NamespaceUri A URI that uniquely identifies the dictionary. 0 0 0 i=46 true ns=1;i=37 i=40 false i=68 http://tricycletypev1/ i=12 -1 1 1 0 false 0 ns=1;i=40 Variable_2 1 TriCycleDataType TriCycleDataType 0 0 0 i=47 true ns=1;i=37 i=40 false i=69 TriCycleDataType i=12 -1 1 1 0 false 0 ns=1;i=43 Variable_2 1 WheelDataType WheelDataType 0 0 0 i=47 true ns=1;i=37 i=40 false i=69 WheelDataType i=12 -1 1 1 0 false 0 ns=1;i=46 Variable_2 0 buildDate buildDate 0 0 0 i=46 true ns=1;i=10 i=40 false i=68 i=37 false i=78 0001-01-01T00:00:00 i=13 -1 1 1 0 false 0 ns=1;i=47 Object_1 0 Owner> <Owner> 0 0 0 i=47 true ns=1;i=10 i=40 false ns=1;i=5 i=37 false i=78 i=47 false ns=1;i=48 i=47 false ns=1;i=49 i=46 false ns=1;i=50 0 ns=1;i=48 Variable_2 0 Name Name 0 0 0 i=47 true ns=1;i=47 i=40 false i=63 i=37 false i=78 i=12 -1 1 1 0 false 0 ns=1;i=49 Variable_2 0 Age Age 0 0 0 i=47 true ns=1;i=47 i=40 false i=63 i=37 false i=78 0 i=6 -1 1 1 0 false 0 ns=1;i=50 Variable_2 0 Gender Gender 0 0 0 i=46 true ns=1;i=47 i=40 false i=68 i=37 false i=78 i=12 -1 1 1 0 false 0 ns=1;i=61 Variable_2 0 LoadedTricycle LoadedTricycle 0 0 0 i=49 true ns=1;i=9 i=40 false i=63 i=37 false i=78 ns=1;i=3 1 0 1 1 0 false 0 ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/XMLModels/ProblemsToReport/eoursel510/Opc.Ua.NodeSet2.TriCycleType_V1.1.ModelDesign/Prefix2.NodeSet2.xml ================================================  http://tricycletypev1/ i=1 i=2 i=3 i=4 i=5 i=6 i=7 i=8 i=9 i=10 i=11 i=13 i=12 i=15 i=14 i=16 i=17 i=18 i=20 i=21 i=19 i=22 i=26 i=27 i=28 i=47 i=46 i=35 i=36 i=48 i=45 i=40 i=37 i=38 i=39 TireEnum ns=1;i=2 i=29 EnumStrings i=68 i=78 ns=1;i=1 Mud Ice Sand TriCycleDataType i=22 WheelDataType Wheel datatype. i=22 HumanType ns=1;i=6 ns=1;i=7 ns=1;i=8 i=58 Name i=63 i=78 ns=1;i=5 Age i=63 i=78 ns=1;i=5 Gender i=68 i=78 ns=1;i=5 VehicleType ns=1;i=46 ns=1;i=47 i=58 buildDate i=68 i=78 ns=1;i=10 <Owner> ns=1;i=48 ns=1;i=49 ns=1;i=50 ns=1;i=5 i=78 ns=1;i=10 Name i=63 i=78 ns=1;i=47 Age i=63 i=78 ns=1;i=47 Gender i=68 i=78 ns=1;i=47 TrailerType ns=1;i=61 ns=1;i=10 LoadedTricycle i=63 i=78 ns=1;i=9 TriCycleType This a simple Tricycle ns=1;i=12 ns=1;i=13 ns=1;i=18 ns=1;i=10 weight i=68 i=78 ns=1;i=11 wheels ns=1;i=14 ns=1;i=15 ns=1;i=16 ns=1;i=17 ns=1;i=19 i=78 ns=1;i=11 tickness i=63 i=78 ns=1;i=13 diameter i=63 i=78 ns=1;i=13 pressure i=63 i=78 ns=1;i=13 tiretype i=63 i=78 ns=1;i=13 Model i=63 i=78 ns=1;i=11 WheelVariableType ns=1;i=20 ns=1;i=21 ns=1;i=22 ns=1;i=23 i=63 tickness i=63 i=78 ns=1;i=19 diameter i=63 i=78 ns=1;i=19 pressure i=63 i=78 ns=1;i=19 tiretype i=63 i=78 ns=1;i=19 Default XML ns=1;i=3 ns=1;i=29 i=76 Default XML ns=1;i=4 ns=1;i=32 i=76 Prefix2 ns=1;i=28 ns=1;i=29 ns=1;i=32 i=92 i=72 PHhzOnNjaGVtYQ0KICB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEi DQogIHhtbG5zOnVhPSJodHRwOi8vb3BjZm91bmRhdGlvbi5vcmcvVUEvMjAwOC8wMi9UeXBlcy54 c2QiDQogIHhtbG5zOnRucz0iaHR0cDovL3RyaWN5Y2xldHlwZXYxLyINCiAgdGFyZ2V0TmFtZXNw YWNlPSJodHRwOi8vdHJpY3ljbGV0eXBldjEvIg0KICBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxp ZmllZCINCj4NCiAgPHhzOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly9vcGNmb3VuZGF0aW9uLm9y Zy9VQS8iIC8+DQoNCiAgPHhzOnNpbXBsZVR5cGUgIG5hbWU9IlRpcmVFbnVtIj4NCiAgICA8eHM6 cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIj4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1 ZT0iTXVkXzAiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkljZV8xIiAvPg0KICAg ICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJTYW5kXzIiIC8+DQogICAgPC94czpyZXN0cmljdGlv bj4NCiAgPC94czpzaW1wbGVUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJUaXJlRW51bSIgdHlw ZT0idG5zOlRpcmVFbnVtIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZUaXJl RW51bSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVGlyZUVu dW0iIHR5cGU9InRuczpUaXJlRW51bSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRl ZCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxl bWVudCBuYW1lPSJMaXN0T2ZUaXJlRW51bSIgdHlwZT0idG5zOkxpc3RPZlRpcmVFbnVtIiBuaWxs YWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJUcmlD eWNsZURhdGFUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1l PSJ3ZWlnaHQiIHR5cGU9InhzOmZsb2F0IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxl bWVudCBuYW1lPSJ3aGVlbCIgdHlwZT0idG5zOldoZWVsRGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIg bmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJNb2RlbCIgdHlwZT0i eHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2Vx dWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlRyaUN5Y2xl RGF0YVR5cGUiIHR5cGU9InRuczpUcmlDeWNsZURhdGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4 VHlwZSBuYW1lPSJMaXN0T2ZUcmlDeWNsZURhdGFUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQog ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJUcmlDeWNsZURhdGFUeXBlIiB0eXBlPSJ0bnM6VHJpQ3lj bGVEYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9 InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhz OmVsZW1lbnQgbmFtZT0iTGlzdE9mVHJpQ3ljbGVEYXRhVHlwZSIgdHlwZT0idG5zOkxpc3RPZlRy aUN5Y2xlRGF0YVR5cGUiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNv bXBsZXhUeXBlIG5hbWU9IldoZWVsRGF0YVR5cGUiPg0KICAgIDx4czphbm5vdGF0aW9uPg0KICAg ICAgPHhzOmRvY3VtZW50YXRpb24+V2hlZWwgZGF0YXR5cGUuPC94czpkb2N1bWVudGF0aW9uPg0K ICAgIDwveHM6YW5ub3RhdGlvbj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVu dCBuYW1lPSJ0aWNrbmVzcyIgdHlwZT0ieHM6ZmxvYXQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAg IDx4czplbGVtZW50IG5hbWU9ImRpYW1ldGVyIiB0eXBlPSJ4czpmbG9hdCIgbWluT2NjdXJzPSIw IiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0icHJlc3N1cmUiIHR5cGU9InhzOmZsb2F0IiBt aW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJUaXJlVHlwZSIgdHlwZT0i dG5zOlRpcmVFbnVtIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJy YXlzTGVuIiB0eXBlPSJ4czppbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICA8L3hzOnNlcXVlbmNl Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJXaGVlbERhdGFUeXBl IiB0eXBlPSJ0bnM6V2hlZWxEYXRhVHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0i TGlzdE9mV2hlZWxEYXRhVHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1l bnQgbmFtZT0iV2hlZWxEYXRhVHlwZSIgdHlwZT0idG5zOldoZWVsRGF0YVR5cGUiIG1pbk9jY3Vy cz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6 c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RP ZldoZWVsRGF0YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZXaGVlbERhdGFUeXBlIiBuaWxsYWJsZT0i dHJ1ZSI+PC94czplbGVtZW50Pg0KDQo8L3hzOnNjaGVtYT4= NamespaceUri A URI that uniquely identifies the dictionary. i=68 ns=1;i=26 http://tricycletypev1/ TriCycleDataType i=69 ns=1;i=26 //xs:element[@name='TriCycleDataType'] WheelDataType i=69 ns=1;i=26 //xs:element[@name='WheelDataType'] Default Binary ns=1;i=3 ns=1;i=40 i=76 Default Binary ns=1;i=4 ns=1;i=43 i=76 Prefix2 ns=1;i=39 ns=1;i=40 ns=1;i=43 i=93 i=72 PG9wYzpUeXBlRGljdGlvbmFyeQ0KICB4bWxuczpvcGM9Imh0dHA6Ly9vcGNmb3VuZGF0aW9uLm9y Zy9CaW5hcnlTY2hlbWEvIg0KICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1M U2NoZW1hLWluc3RhbmNlIg0KICB4bWxuczp1YT0iaHR0cDovL29wY2ZvdW5kYXRpb24ub3JnL1VB LyINCiAgeG1sbnM6dG5zPSJodHRwOi8vdHJpY3ljbGV0eXBldjEvIg0KICBEZWZhdWx0Qnl0ZU9y ZGVyPSJMaXR0bGVFbmRpYW4iDQogIFRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RyaWN5Y2xldHlw ZXYxLyINCj4NCiAgPCEtLSBUaGlzIEZpbGUgd2FzIGdlbmVyYXRlZCBvbiAyMDIxLTAzLTE4IGFu ZCBzdXBwb3J0cyB0aGUgc3BlY2lmaWNhdGlvbnMgc3VwcG9ydGVkIGJ5IHZlcnNpb24gMS4xMS4z MzUuMTAgb2YgdGhlIE9QQyBVQSBkZWxpdmVyYWJsZXMuIC0tPg0KICA8b3BjOkltcG9ydCBOYW1l c3BhY2U9Imh0dHA6Ly9vcGNmb3VuZGF0aW9uLm9yZy9VQS8iIExvY2F0aW9uPSJQcmVmaXgwLkJp bmFyeVNjaGVtYS5ic2QiLz4NCg0KICA8b3BjOkVudW1lcmF0ZWRUeXBlIE5hbWU9IlRpcmVFbnVt IiBMZW5ndGhJbkJpdHM9IjMyIj4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJNdWQi IFZhbHVlPSIwIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkljZSIgVmFsdWU9 IjEiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iU2FuZCIgVmFsdWU9IjIiIC8+ DQogIDwvb3BjOkVudW1lcmF0ZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0i VHJpQ3ljbGVEYXRhVHlwZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9w YzpGaWVsZCBOYW1lPSJ3ZWlnaHQiIFR5cGVOYW1lPSJvcGM6RmxvYXQiIC8+DQogICAgPG9wYzpG aWVsZCBOYW1lPSJ3aGVlbCIgVHlwZU5hbWU9InRuczpXaGVlbERhdGFUeXBlIiAvPg0KICAgIDxv cGM6RmllbGQgTmFtZT0iTW9kZWwiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICA8L29wYzpT dHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IldoZWVsRGF0YVR5 cGUiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RG9jdW1lbnRhdGlv bj5XaGVlbCBkYXRhdHlwZS48L29wYzpEb2N1bWVudGF0aW9uPg0KICAgIDxvcGM6RmllbGQgTmFt ZT0idGlja25lc3MiIFR5cGVOYW1lPSJvcGM6RmxvYXQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1l PSJkaWFtZXRlciIgVHlwZU5hbWU9Im9wYzpGbG9hdCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 InByZXNzdXJlIiBUeXBlTmFtZT0ib3BjOkZsb2F0IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i VGlyZVR5cGUiIFR5cGVOYW1lPSJ0bnM6VGlyZUVudW0iIC8+DQogICAgPG9wYzpGaWVsZCBOYW1l PSJyYXlzTGVuIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlw ZT4NCg0KPC9vcGM6VHlwZURpY3Rpb25hcnk+ NamespaceUri A URI that uniquely identifies the dictionary. i=68 ns=1;i=37 http://tricycletypev1/ TriCycleDataType i=69 ns=1;i=37 TriCycleDataType WheelDataType i=69 ns=1;i=37 WheelDataType ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/XMLModels/ProblemsToReport/eoursel510/Opc.Ua.NodeSet2.TriCycleType_V1.1.ModelDesign/Prefix2.PredefinedNodes.xml ================================================  http://tricycletypev1/ DataType_64 ns=1;i=1 1 TireEnum i=29 Variable_2 ns=1;i=2 0 EnumStrings i=46 i=68 i=78 2 Mud Ice Sand i=21 1 1 1 DataType_64 ns=1;i=3 1 TriCycleDataType i=22 DataType_64 ns=1;i=4 1 WheelDataType Wheel datatype. i=22 ObjectType_8 ns=1;i=5 1 HumanType i=58 Variable_2 ns=1;i=6 0 Name i=47 i=63 i=78 6 i=12 -1 1 1 Variable_2 ns=1;i=7 0 Age i=47 i=63 i=78 7 i=6 -1 1 1 Variable_2 ns=1;i=8 0 Gender i=46 i=68 i=78 8 i=12 -1 1 1 ObjectType_8 ns=1;i=10 1 VehicleType i=58 Variable_2 ns=1;i=46 0 buildDate i=46 i=68 i=78 46 i=13 -1 1 1 Object_1 ns=1;i=47 0 Owner> <Owner> i=47 ns=1;i=5 i=78 47 Variable_2 ns=1;i=48 0 Name i=47 i=63 i=78 48 i=12 -1 1 1 Variable_2 ns=1;i=49 0 Age i=47 i=63 i=78 49 i=6 -1 1 1 Variable_2 ns=1;i=50 0 Gender i=46 i=68 i=78 50 i=12 -1 1 1 ObjectType_8 ns=1;i=9 1 TrailerType ns=1;i=10 Variable_2 ns=1;i=61 0 LoadedTricycle i=49 i=63 i=78 61 ns=1;i=3 1 0 1 1 ObjectType_8 ns=1;i=11 1 TriCycleType This a simple Tricycle ns=1;i=10 Variable_2 ns=1;i=12 0 weight i=46 i=68 i=78 12 i=10 -1 1 1 Variable_2 ns=1;i=13 0 wheels i=46 ns=1;i=19 i=78 13 ns=1;i=4 1 3 1 1 Variable_2 ns=1;i=14 0 tickness i=47 i=63 i=78 14 i=10 -1 1 1 Variable_2 ns=1;i=15 0 diameter i=47 i=63 i=78 15 i=10 -1 1 1 Variable_2 ns=1;i=16 0 pressure i=47 i=63 i=78 16 i=10 -1 1 1 Variable_2 ns=1;i=17 0 tiretype i=47 i=63 i=78 17 ns=1;i=1 -1 1 1 Variable_2 ns=1;i=18 0 Model i=47 i=63 i=78 18 i=12 -1 1 1 VariableType_16 ns=1;i=19 1 WheelVariableType i=63 ns=1;i=4 Variable_2 ns=1;i=20 0 tickness i=47 i=63 i=78 20 i=10 -1 1 1 Variable_2 ns=1;i=21 0 diameter i=47 i=63 i=78 21 i=10 -1 1 1 Variable_2 ns=1;i=22 0 pressure i=47 i=63 i=78 22 i=10 -1 1 1 Variable_2 ns=1;i=23 0 tiretype i=47 i=63 i=78 23 ns=1;i=1 -1 1 1 Object_1 ns=1;i=24 0 Default XML i=76 24 i=38 true ns=1;i=3 i=39 ns=1;i=29 Object_1 ns=1;i=25 0 Default XML i=76 25 i=38 true ns=1;i=4 i=39 ns=1;i=32 Variable_2 ns=1;i=26 1 Prefix2 i=72 26 PHhzOnNjaGVtYQ0KICB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEi DQogIHhtbG5zOnVhPSJodHRwOi8vb3BjZm91bmRhdGlvbi5vcmcvVUEvMjAwOC8wMi9UeXBlcy54 c2QiDQogIHhtbG5zOnRucz0iaHR0cDovL3RyaWN5Y2xldHlwZXYxLyINCiAgdGFyZ2V0TmFtZXNw YWNlPSJodHRwOi8vdHJpY3ljbGV0eXBldjEvIg0KICBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxp ZmllZCINCj4NCiAgPHhzOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly9vcGNmb3VuZGF0aW9uLm9y Zy9VQS8iIC8+DQoNCiAgPHhzOnNpbXBsZVR5cGUgIG5hbWU9IlRpcmVFbnVtIj4NCiAgICA8eHM6 cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIj4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1 ZT0iTXVkXzAiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkljZV8xIiAvPg0KICAg ICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJTYW5kXzIiIC8+DQogICAgPC94czpyZXN0cmljdGlv bj4NCiAgPC94czpzaW1wbGVUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJUaXJlRW51bSIgdHlw ZT0idG5zOlRpcmVFbnVtIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZUaXJl RW51bSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVGlyZUVu dW0iIHR5cGU9InRuczpUaXJlRW51bSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRl ZCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxl bWVudCBuYW1lPSJMaXN0T2ZUaXJlRW51bSIgdHlwZT0idG5zOkxpc3RPZlRpcmVFbnVtIiBuaWxs YWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJUcmlD eWNsZURhdGFUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1l PSJ3ZWlnaHQiIHR5cGU9InhzOmZsb2F0IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxl bWVudCBuYW1lPSJ3aGVlbCIgdHlwZT0idG5zOldoZWVsRGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIg bmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJNb2RlbCIgdHlwZT0i eHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2Vx dWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlRyaUN5Y2xl RGF0YVR5cGUiIHR5cGU9InRuczpUcmlDeWNsZURhdGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4 VHlwZSBuYW1lPSJMaXN0T2ZUcmlDeWNsZURhdGFUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQog ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJUcmlDeWNsZURhdGFUeXBlIiB0eXBlPSJ0bnM6VHJpQ3lj bGVEYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9 InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhz OmVsZW1lbnQgbmFtZT0iTGlzdE9mVHJpQ3ljbGVEYXRhVHlwZSIgdHlwZT0idG5zOkxpc3RPZlRy aUN5Y2xlRGF0YVR5cGUiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNv bXBsZXhUeXBlIG5hbWU9IldoZWVsRGF0YVR5cGUiPg0KICAgIDx4czphbm5vdGF0aW9uPg0KICAg ICAgPHhzOmRvY3VtZW50YXRpb24+V2hlZWwgZGF0YXR5cGUuPC94czpkb2N1bWVudGF0aW9uPg0K ICAgIDwveHM6YW5ub3RhdGlvbj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVu dCBuYW1lPSJ0aWNrbmVzcyIgdHlwZT0ieHM6ZmxvYXQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAg IDx4czplbGVtZW50IG5hbWU9ImRpYW1ldGVyIiB0eXBlPSJ4czpmbG9hdCIgbWluT2NjdXJzPSIw IiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0icHJlc3N1cmUiIHR5cGU9InhzOmZsb2F0IiBt aW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJUaXJlVHlwZSIgdHlwZT0i dG5zOlRpcmVFbnVtIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJy YXlzTGVuIiB0eXBlPSJ4czppbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICA8L3hzOnNlcXVlbmNl Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJXaGVlbERhdGFUeXBl IiB0eXBlPSJ0bnM6V2hlZWxEYXRhVHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0i TGlzdE9mV2hlZWxEYXRhVHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1l bnQgbmFtZT0iV2hlZWxEYXRhVHlwZSIgdHlwZT0idG5zOldoZWVsRGF0YVR5cGUiIG1pbk9jY3Vy cz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6 c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RP ZldoZWVsRGF0YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZXaGVlbERhdGFUeXBlIiBuaWxsYWJsZT0i dHJ1ZSI+PC94czplbGVtZW50Pg0KDQo8L3hzOnNjaGVtYT4= i=15 -1 1 1 i=47 true i=92 Variable_2 ns=1;i=28 0 NamespaceUri A URI that uniquely identifies the dictionary. i=46 i=68 28 http://tricycletypev1/ i=12 -1 1 1 Variable_2 ns=1;i=29 1 TriCycleDataType i=47 i=69 29 //xs:element[@name='TriCycleDataType'] i=12 -1 1 1 Variable_2 ns=1;i=32 1 WheelDataType i=47 i=69 32 //xs:element[@name='WheelDataType'] i=12 -1 1 1 Object_1 ns=1;i=35 0 Default Binary i=76 35 i=38 true ns=1;i=3 i=39 ns=1;i=40 Object_1 ns=1;i=36 0 Default Binary i=76 36 i=38 true ns=1;i=4 i=39 ns=1;i=43 Variable_2 ns=1;i=37 1 Prefix2 i=72 37 PG9wYzpUeXBlRGljdGlvbmFyeQ0KICB4bWxuczpvcGM9Imh0dHA6Ly9vcGNmb3VuZGF0aW9uLm9y Zy9CaW5hcnlTY2hlbWEvIg0KICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1M U2NoZW1hLWluc3RhbmNlIg0KICB4bWxuczp1YT0iaHR0cDovL29wY2ZvdW5kYXRpb24ub3JnL1VB LyINCiAgeG1sbnM6dG5zPSJodHRwOi8vdHJpY3ljbGV0eXBldjEvIg0KICBEZWZhdWx0Qnl0ZU9y ZGVyPSJMaXR0bGVFbmRpYW4iDQogIFRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RyaWN5Y2xldHlw ZXYxLyINCj4NCiAgPCEtLSBUaGlzIEZpbGUgd2FzIGdlbmVyYXRlZCBvbiAyMDIxLTAzLTE4IGFu ZCBzdXBwb3J0cyB0aGUgc3BlY2lmaWNhdGlvbnMgc3VwcG9ydGVkIGJ5IHZlcnNpb24gMS4xMS4z MzUuMTAgb2YgdGhlIE9QQyBVQSBkZWxpdmVyYWJsZXMuIC0tPg0KICA8b3BjOkltcG9ydCBOYW1l c3BhY2U9Imh0dHA6Ly9vcGNmb3VuZGF0aW9uLm9yZy9VQS8iIExvY2F0aW9uPSJQcmVmaXgwLkJp bmFyeVNjaGVtYS5ic2QiLz4NCg0KICA8b3BjOkVudW1lcmF0ZWRUeXBlIE5hbWU9IlRpcmVFbnVt IiBMZW5ndGhJbkJpdHM9IjMyIj4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJNdWQi IFZhbHVlPSIwIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkljZSIgVmFsdWU9 IjEiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iU2FuZCIgVmFsdWU9IjIiIC8+ DQogIDwvb3BjOkVudW1lcmF0ZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0i VHJpQ3ljbGVEYXRhVHlwZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9w YzpGaWVsZCBOYW1lPSJ3ZWlnaHQiIFR5cGVOYW1lPSJvcGM6RmxvYXQiIC8+DQogICAgPG9wYzpG aWVsZCBOYW1lPSJ3aGVlbCIgVHlwZU5hbWU9InRuczpXaGVlbERhdGFUeXBlIiAvPg0KICAgIDxv cGM6RmllbGQgTmFtZT0iTW9kZWwiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICA8L29wYzpT dHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IldoZWVsRGF0YVR5 cGUiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RG9jdW1lbnRhdGlv bj5XaGVlbCBkYXRhdHlwZS48L29wYzpEb2N1bWVudGF0aW9uPg0KICAgIDxvcGM6RmllbGQgTmFt ZT0idGlja25lc3MiIFR5cGVOYW1lPSJvcGM6RmxvYXQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1l PSJkaWFtZXRlciIgVHlwZU5hbWU9Im9wYzpGbG9hdCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 InByZXNzdXJlIiBUeXBlTmFtZT0ib3BjOkZsb2F0IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i VGlyZVR5cGUiIFR5cGVOYW1lPSJ0bnM6VGlyZUVudW0iIC8+DQogICAgPG9wYzpGaWVsZCBOYW1l PSJyYXlzTGVuIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlw ZT4NCg0KPC9vcGM6VHlwZURpY3Rpb25hcnk+ i=15 -1 1 1 i=47 true i=93 Variable_2 ns=1;i=39 0 NamespaceUri A URI that uniquely identifies the dictionary. i=46 i=68 39 http://tricycletypev1/ i=12 -1 1 1 Variable_2 ns=1;i=40 1 TriCycleDataType i=47 i=69 40 TriCycleDataType i=12 -1 1 1 Variable_2 ns=1;i=43 1 WheelDataType i=47 i=69 43 WheelDataType i=12 -1 1 1 ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/XMLModels/ProblemsToReport/eoursel510/Opc.Ua.NodeSet2.TriCycleType_V1.1.ModelDesign/Prefix2.Types.bsd ================================================ Wheel datatype. ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/XMLModels/ProblemsToReport/eoursel510/Opc.Ua.NodeSet2.TriCycleType_V1.1.ModelDesign/Prefix2.Types.xsd ================================================ Wheel datatype. ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/XMLModels/ProblemsToReport/eoursel510/Opc.Ua.NodeSet2.TriCycleType_V1.1.ModelDesign.csv ================================================ TireEnum,1,DataType TireEnum_EnumStrings,2,Variable TriCycleDataType,3,DataType WheelDataType,4,DataType HumanType,5,ObjectType HumanType_Name,6,Variable HumanType_Age,7,Variable HumanType_Gender,8,Variable TrailerType,9,ObjectType VehicleType,10,ObjectType TriCycleType,11,ObjectType TriCycleType_weight,12,Variable TriCycleType_wheels,13,Variable TriCycleType_wheels_tickness,14,Variable TriCycleType_wheels_diameter,15,Variable TriCycleType_wheels_pressure,16,Variable TriCycleType_wheels_tiretype,17,Variable TriCycleType_Model,18,Variable WheelVariableType,19,VariableType WheelVariableType_tickness,20,Variable WheelVariableType_diameter,21,Variable WheelVariableType_pressure,22,Variable WheelVariableType_tiretype,23,Variable TriCycleDataType_Encoding_DefaultXml,24,Object WheelDataType_Encoding_DefaultXml,25,Object Name2_XmlSchema,26,Variable Name2_XmlSchema_DataTypeVersion,27,Variable Name2_XmlSchema_NamespaceUri,28,Variable Name2_XmlSchema_TriCycleDataType,29,Variable Name2_XmlSchema_TriCycleDataType_DataTypeVersion,30,Variable Name2_XmlSchema_TriCycleDataType_DictionaryFragment,31,Variable Name2_XmlSchema_WheelDataType,32,Variable Name2_XmlSchema_WheelDataType_DataTypeVersion,33,Variable Name2_XmlSchema_WheelDataType_DictionaryFragment,34,Variable TriCycleDataType_Encoding_DefaultBinary,35,Object WheelDataType_Encoding_DefaultBinary,36,Object Name2_BinarySchema,37,Variable Name2_BinarySchema_DataTypeVersion,38,Variable Name2_BinarySchema_NamespaceUri,39,Variable Name2_BinarySchema_TriCycleDataType,40,Variable Name2_BinarySchema_TriCycleDataType_DataTypeVersion,41,Variable Name2_BinarySchema_TriCycleDataType_DictionaryFragment,42,Variable Name2_BinarySchema_WheelDataType,43,Variable Name2_BinarySchema_WheelDataType_DataTypeVersion,44,Variable Name2_BinarySchema_WheelDataType_DictionaryFragment,45,Variable VehicleType_buildDate,46,Variable VehicleType_S_Owner_,47,Object VehicleType_S_Owner__Name,48,Variable VehicleType_S_Owner__Age,49,Variable VehicleType_S_Owner__Gender,50,Variable TrailerType_buildDate,51,Variable TrailerType_S_Owner_,52,Object TrailerType_S_Owner__Name,53,Variable TrailerType_S_Owner__Age,54,Variable TrailerType_S_Owner__Gender,55,Variable TriCycleType_buildDate,56,Variable TriCycleType_S_Owner_,57,Object TriCycleType_S_Owner__Name,58,Variable TriCycleType_S_Owner__Age,59,Variable TriCycleType_S_Owner__Gender,60,Variable TrailerType_LoadedTricycle,61,Variable ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/XMLModels/ProblemsToReport/eoursel510/Opc.Ua.NodeSet2.TriCycleType_V1.1.ModelDesign.xml ================================================  http://opcfoundation.org/UA/ http://tricycletypev1/ en-us Mud en-us Ice en-us Sand Wheel datatype. q12:HasOrderedComponent Owner> <Owner> This a simple Tricycle ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/XMLModels/ProblemsToReport/eoursel510/Opc.Ua.NodeSet2.TriCycleType_V1.1.xml ================================================ http://tricycleTypeV1 i=6 i=10 i=13 i=12 i=15 i=21 i=47 i=46 i=45 i=40 i=37 i=38 i=39 i=49 ns=1;i=1 ns=1;i=3 ns=1;i=5 TireEnum i=29 EnumStrings ns=1;i=1 i=68 en-us Mud en-us Ice en-us Sand Default Binary i=76 ns=1;i=6008 TriCycleDataType i=22 ns=1;i=4 Default Binary i=76 ns=1;i=6009 WheelDataType Wheel datatype. i=22 ns=1;i=6 HumanType i=58 Name ns=1;i=7 i=63 i=78 Age ns=1;i=7 i=63 i=78 Gender ns=1;i=7 i=63 i=78 TrailerType ns=1;i=12 VehicleType i=58 buildDate ns=1;i=12 i=63 i=78 <Owner> ns=1;i=12 ns=1;i=7 i=78 Name ns=1;i=14 i=63 i=78 Age ns=1;i=14 i=63 i=78 Gender ns=1;i=14 i=63 i=78 buildDate ns=1;i=11 i=63 i=78 <Owner> ns=1;i=11 ns=1;i=7 i=78 Name ns=1;i=19 i=63 i=78 Age ns=1;i=19 i=63 i=78 Gender ns=1;i=19 i=63 i=78 LoadedTricycle ns=1;i=11 i=63 i=78 TriCycleType This a simple Tricycle ns=1;i=12 buildDate ns=1;i=24 i=63 i=78 <Owner> ns=1;i=24 ns=1;i=7 i=78 Name ns=1;i=26 i=63 i=78 Age ns=1;i=26 i=63 i=78 Gender ns=1;i=26 i=63 i=78 weight ns=1;i=24 i=63 i=78 wheels ns=1;i=24 ns=1;i=33 i=78 Model ns=1;i=24 i=63 i=78 WheelVariableType i=63 tickness ns=1;i=33 i=63 i=78 diameter ns=1;i=33 i=63 i=78 pressure ns=1;i=33 i=63 i=78 tiretype ns=1;i=33 i=63 i=78 buildDate i=63 <Owner> ns=1;i=7 Name ns=1;i=39 i=63 Age ns=1;i=39 i=63 Gender ns=1;i=39 i=63 diameter ns=1;i=31 i=63 i=78 pressure ns=1;i=31 i=63 i=78 tickness ns=1;i=31 i=63 i=78 tiretype ns=1;i=31 i=63 i=78 TypeDictionary Collects the data type descriptions of http://tricycleTypeV1 i=93 i=72 PG9wYzpUeXBlRGljdGlvbmFyeSB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4bWxuczp0bnM9Imh0dHA6Ly90cmljeWNsZVR5cGVWMSIgRGVmYXVsdEJ5dGVPcmRlcj0iTGl0dGxlRW5kaWFuIiB4bWxuczpvcGM9Imh0dHA6Ly9vcGNmb3VuZGF0aW9uLm9yZy9CaW5hcnlTY2hlbWEvIiB4bWxuczp1YT0iaHR0cDovL29wY2ZvdW5kYXRpb24ub3JnL1VBLyIgVGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdHJpY3ljbGVUeXBlVjEiPgogICAgPG9wYzpJbXBvcnQgTmFtZXNwYWNlPSJodHRwOi8vb3BjZm91bmRhdGlvbi5vcmcvVUEvIi8+CiAgICA8b3BjOkVudW1lcmF0ZWRUeXBlIExlbmd0aEluQml0cz0iMzIiIE5hbWU9IlRpcmVFbnVtIj4KICAgICAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJNdWQiIFZhbHVlPSIwIi8+CiAgICAgICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iSWNlIiBWYWx1ZT0iMSIvPgogICAgICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlNhbmQiIFZhbHVlPSIyIi8+CiAgICA8L29wYzpFbnVtZXJhdGVkVHlwZT4KICAgIDxvcGM6U3RydWN0dXJlZFR5cGUgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCIgTmFtZT0iVHJpQ3ljbGVEYXRhVHlwZSI+CiAgICAgICAgPG9wYzpGaWVsZCBUeXBlTmFtZT0ib3BjOkZsb2F0IiBOYW1lPSJ3ZWlnaHQiLz4KICAgICAgICA8b3BjOkZpZWxkIFR5cGVOYW1lPSJ0bnM6V2hlZWxEYXRhVHlwZSIgTmFtZT0id2hlZWwiLz4KICAgICAgICA8b3BjOkZpZWxkIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiBOYW1lPSJNb2RlbCIvPgogICAgPC9vcGM6U3RydWN0dXJlZFR5cGU+CiAgICA8b3BjOlN0cnVjdHVyZWRUeXBlIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiIE5hbWU9IldoZWVsRGF0YVR5cGUiPgogICAgICAgIDxvcGM6RmllbGQgVHlwZU5hbWU9Im9wYzpGbG9hdCIgTmFtZT0idGlja25lc3MiLz4KICAgICAgICA8b3BjOkZpZWxkIFR5cGVOYW1lPSJvcGM6RmxvYXQiIE5hbWU9ImRpYW1ldGVyIi8+CiAgICAgICAgPG9wYzpGaWVsZCBUeXBlTmFtZT0ib3BjOkZsb2F0IiBOYW1lPSJwcmVzc3VyZSIvPgogICAgICAgIDxvcGM6RmllbGQgVHlwZU5hbWU9InRuczpUaXJlRW51bSIgTmFtZT0iVGlyZVR5cGUiLz4KICAgICAgICA8b3BjOkZpZWxkIFR5cGVOYW1lPSJvcGM6SW50MzIiIE5hbWU9InJheXNMZW4iLz4KICAgIDwvb3BjOlN0cnVjdHVyZWRUeXBlPgo8L29wYzpUeXBlRGljdGlvbmFyeT4= NamespaceUri ns=1;i=6004 i=68 http://tricycleTypeV1 TypeDictionary Collects the data type descriptions of http://tricycleTypeV1 i=92 i=72 NamespaceUri ns=1;i=6006 i=68 http://tricycleTypeV1/Types.xsd TriCycleDataType ns=1;i=6004 i=69 TriCycleDataType WheelDataType ns=1;i=6004 i=69 WheelDataType TriCycleDataType ns=1;i=6006 i=69 //xs:element[@name='TriCycleDataType'] WheelDataType ns=1;i=6006 i=69 //xs:element[@name='WheelDataType'] ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/XMLModels/ProblemsToReport/eoursel510/UAModelDesignerSolution.uamdsl ================================================  Solution10 Opc.Ua.NodeSet2.TriCycleType_V1.1.ModelDesign $(ProjectFileName).csv $(ProjectFileName) Opc.Ua.NodeSet2.TriCycleType_V1.1.ModelDesign.xml ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/XMLModels/ProblemsToReport/fgolra177/Opc.Ua.Semi.NodeSet2.xml ================================================  https://agileo-automation.com/UA/Semi/ i=1 i=2 i=3 i=4 i=5 i=6 i=7 i=8 i=9 i=10 i=11 i=13 i=12 i=15 i=14 i=16 i=17 i=18 i=20 i=21 i=19 i=22 i=26 i=27 i=28 i=47 i=46 i=35 i=36 i=48 i=45 i=40 i=37 i=38 i=39 MyFolder Contains all status variables used in GEM i=85 i=61 ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/XMLModels/ProblemsToReport/fgolra177/OpcUaGemModel.xml ================================================ https://agileo-automation.com/UA/Semi/ http://opcfoundation.org/UA/ Contains all status variables used in GEM ua:Organizes ua:ObjectsFolder ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/XMLModelsCorrectModelsUnitTest.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2022, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ using Microsoft.VisualStudio.TestTools.UnitTesting; using Moq; using System; using System.Collections.Generic; using System.IO; using System.Linq; using UAOOI.SemanticData.AddressSpace.Abstractions; using UAOOI.SemanticData.BuildingErrorsHandling; using UAOOI.SemanticData.UANodeSetValidation.Helpers; using UAOOI.SemanticData.UANodeSetValidation.XML; namespace UAOOI.SemanticData.UANodeSetValidation { [TestClass] [DeploymentItem(@"XMLModels\CorrectModels", @"CorrectModels\")] public class XMLModelsCorrectModelsUnitTest { #region TestMethod [TestMethod] [TestCategory("Deployment")] [ExpectedExceptionAttribute(typeof(System.InvalidOperationException))] public void WrongFileNFormatTestMethod() { FileInfo _testDataFileInfo = new FileInfo(@"CorrectModels\ReferenceTest\ReferenceTest.NodeSet.xml"); //File not compliant with the schema. Assert.IsTrue(_testDataFileInfo.Exists); UANodeSet instance = UANodeSet.ReadModelFile(_testDataFileInfo); List _trace = new List(); Mock mockTrace = new Mock(); IAddressSpaceContext _as = new AddressSpaceContext(mockTrace.Object); _as.ImportUANodeSet(instance); } [TestMethod] [TestCategory("Correct Model")] public void UAReferenceTestMethod() { List _nodes = ValidateAndExportModelUnitTest(@"CorrectModels\ReferenceTest\ReferenceTest.NodeSet2.xml", 1, new UriBuilder("http://cas.eu/UA/CommServer/UnitTests/ReferenceTest").Uri); Assert.IsFalse(_nodes.Where(x => x.UANode == null).Any()); Assert.AreEqual(1, _nodes.Where(x => x.UANode is UAType).Count()); } [TestMethod] [TestCategory("Correct Model")] public void UAObjectTypeTestMethod() { //TODO NetworkIdentifier is missing in generated Model Design for DI model #629 //TODO The exported model doesn't contain all nodes #653 List _nodes = ValidateAndExportModelUnitTest(@"CorrectModels\ObjectTypeTest\ObjectTypeTest.NodeSet2.xml", 85, new UriBuilder("http://cas.eu/UA/CommServer/UnitTests/ObjectTypeTest").Uri); Assert.IsFalse(_nodes.Where(x => x.UANode == null).Any()); Assert.AreEqual(3, _nodes.Where(x => x.UANode is UAType).Count()); Assert.AreEqual(1, _nodes.Where(x => x.NodeIdContext == new DataSerialization.NodeId(413, 1)).Count()); } [TestMethod] [TestCategory("Correct Model")] public void UAVariableTypeTestMethod() { List _nodes = ValidateAndExportModelUnitTest(@"CorrectModels\VariableTypeTest\VariableTypeTest.NodeSet2.xml", 5, new UriBuilder("http://cas.eu/UA/CommServer/UnitTests/VariableTypeTest").Uri); Assert.IsFalse(_nodes.Where(x => x.UANode == null).Any()); Assert.AreEqual(3, _nodes.Where(x => x.UANode is UAType).Count()); } [TestMethod] [TestCategory("Correct Model")] public void UADataTypeTestMethod() { List _nodes = ValidateAndExportModelUnitTest(@"CorrectModels\DataTypeTest\DataTypeTest.NodeSet2.xml", 22, new UriBuilder("http://cas.eu/UA/CommServer/UnitTests/DataTypeTest").Uri); Assert.IsFalse(_nodes.Where(x => x.UANode == null).Any()); Assert.AreEqual(4, _nodes.Where(x => x.UANode is UAType).Count()); } #endregion TestMethod #region private private List ValidateAndExportModelUnitTest(string testDataFileInfo, int numberOfNodes, Uri model) { TracedAddressSpaceContext tracedAddressSpaceContext = new TracedAddressSpaceContext(testDataFileInfo); tracedAddressSpaceContext.Clear(); tracedAddressSpaceContext.TestConsistency(0); tracedAddressSpaceContext.UTAddressSpaceCheckConsistency(x => { Assert.Fail(); }); tracedAddressSpaceContext.UTReferencesCheckConsistency((x, y, z, v) => Assert.Fail()); IEnumerable _nodes = null; tracedAddressSpaceContext.UTValidateAndExportModel(1, x => _nodes = x); Assert.AreEqual(numberOfNodes, _nodes.Count()); tracedAddressSpaceContext.ValidateAndExportModel(model); tracedAddressSpaceContext.TestConsistency(0); return _nodes.ToList(); } #endregion private } } ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/XMLModelsModelsWithErrorsUnitTest.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2022, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ using Microsoft.VisualStudio.TestTools.UnitTesting; using System; using System.IO; using System.Linq; using UAOOI.SemanticData.BuildingErrorsHandling; using UAOOI.SemanticData.UANodeSetValidation.Helpers; namespace UAOOI.SemanticData.UANodeSetValidation { [TestClass] [DeploymentItem(@"XMLModels\ModelsWithErrors\", @"ModelsWithErrors\")] public class XMLModelsModelsWithErrorsUnitTest { #region TestMethod [TestMethod] [TestCategory("Incorrect Model")] public void ObjectEventNotifierOutOfRangeTestMethod() { TracedAddressSpaceContext _log = new TracedAddressSpaceContext(@"ModelsWithErrors\WrongEventNotifier.xml"); _log.TestConsistency(1); Assert.AreEqual(BuildError.ModelsCannotBeNull.Identifier, _log[0].BuildError.Identifier); _log.Clear(); _log.ValidateAndExportModel(m_NameSpace); _log.TestConsistency(2); Assert.AreEqual(BuildError.WrongEventNotifier.Identifier, _log[0].BuildError.Identifier); Assert.AreEqual(BuildError.NonCategorized.Identifier, _log[1].BuildError.Identifier); } [TestMethod] [TestCategory("Incorrect Model")] public void WrongReference2PropertyTestMethod() { TracedAddressSpaceContext _log = new TracedAddressSpaceContext(@"ModelsWithErrors\WrongReference2Property.xml"); _log.TestConsistency(1); _log.Clear(); _log.ValidateAndExportModel(m_NameSpace); _log.TestConsistency(2); //TODO The exported model doesn't contain all nodes #653 review WrongReference2PropertyTestMethod Assert.AreEqual(BuildError.WrongReference2Property.Identifier, _log[0].BuildError.Identifier); Assert.AreEqual(BuildError.NonCategorized.Identifier, _log[1].BuildError.Identifier); } [TestMethod] [TestCategory("Incorrect Model")] public void WrongValueRankTestMethod() { TracedAddressSpaceContext _log = new TracedAddressSpaceContext(@"ModelsWithErrors\WrongValueRank.xml"); _log.TestConsistency(1); _log.Clear(); _log.ValidateAndExportModel(m_NameSpace); _log.TestConsistency(3); Assert.AreEqual(BuildError.WrongValueRank.Identifier, _log[0].BuildError.Identifier); Assert.AreEqual(BuildError.WrongValueRank.Identifier, _log[1].BuildError.Identifier); Assert.AreEqual(_log[0].Message, _log[1].Message); //Duplicated log entry Assert.AreEqual("The value -4 is not supported", _log[0].Message); Assert.AreEqual(BuildError.NonCategorized.Identifier, _log[2].BuildError.Identifier); } [TestMethod] [TestCategory("Incorrect Model")] public void WrongAccessLevelTestMethod() { TracedAddressSpaceContext _log = new TracedAddressSpaceContext(@"ModelsWithErrors\WrongAccessLevel.xml"); _log.TestConsistency(1); Assert.AreEqual(BuildError.ModelsCannotBeNull.Identifier, _log[0].BuildError.Identifier); _log.Clear(); _log.ValidateAndExportModel(m_NameSpace); _log.TestConsistency(2); Assert.AreEqual(BuildError.WrongAccessLevel.Identifier, _log[0].BuildError.Identifier); Assert.AreEqual(BuildError.NonCategorized.Identifier, _log[1].BuildError.Identifier); } [TestMethod] [TestCategory("Incorrect Model")] public void WrongInverseNameTestMethod() { TracedAddressSpaceContext _log = new TracedAddressSpaceContext(@"ModelsWithErrors\WrongInverseName.xml"); _log.TestConsistency(1); Assert.AreEqual(BuildError.ModelsCannotBeNull.Identifier, _log[0].BuildError.Identifier); _log.Clear(); _log.ValidateAndExportModel(m_NameSpace); _log.TestConsistency(4); Assert.AreEqual(BuildError.WrongInverseName.Identifier, _log[0].BuildError.Identifier); Assert.AreEqual(BuildError.WrongInverseName.Identifier, _log[1].BuildError.Identifier); Assert.AreEqual(BuildError.WrongInverseName.Identifier, _log[2].BuildError.Identifier); Assert.AreEqual(BuildError.NonCategorized.Identifier, _log[3].BuildError.Identifier); } [TestMethod] [TestCategory("Incorrect Model")] public void DuplicatedNodeIdTestMethod() { TracedAddressSpaceContext _log = new TracedAddressSpaceContext(@"ModelsWithErrors\DuplicatedNodeId.xml"); _log.TestConsistency(2); Assert.AreEqual(BuildError.ModelsCannotBeNull.Identifier, _log[0].BuildError.Identifier); Assert.AreEqual(BuildError.NodeIdDuplicated.Identifier, _log[1].BuildError.Identifier); _log.Clear(); _log.ValidateAndExportModel(m_NameSpace); _log.TestConsistency(0); } [TestMethod] [TestCategory("Incorrect Model")] public void WrongDisplayNameLength() { TracedAddressSpaceContext _log = new TracedAddressSpaceContext(@"ModelsWithErrors\WrongDisplayNameLength.xml"); _log.TestConsistency(1); Assert.AreEqual(BuildError.ModelsCannotBeNull.Identifier, _log[0].BuildError.Identifier); _log.Clear(); _log.ValidateAndExportModel(m_NameSpace); _log.TestConsistency(2); Assert.AreEqual(BuildError.WrongDisplayNameLength.Identifier, _log[0].BuildError.Identifier); Assert.AreEqual(BuildError.NonCategorized.Identifier, _log[1].BuildError.Identifier); } [TestMethod] [TestCategory("Incorrect Model")] public void WrongWriteMaskValue() { TracedAddressSpaceContext _log = new TracedAddressSpaceContext(@"ModelsWithErrors\WrongWriteMask.xml"); _log.TestConsistency(1); Assert.AreEqual(BuildError.ModelsCannotBeNull.Identifier, _log[0].BuildError.Identifier); _log.Clear(); _log.ValidateAndExportModel(m_NameSpace); _log.TestConsistency(3); Assert.AreEqual(BuildError.WrongWriteMaskValue.Identifier, _log[0].BuildError.Identifier); Assert.AreEqual(BuildError.WrongWriteMaskValue.Identifier, _log[1].BuildError.Identifier); Assert.AreEqual(BuildError.NonCategorized.Identifier, _log[2].BuildError.Identifier); } [TestMethod] [TestCategory("Incorrect Model")] public void NotSupportedFeature() { TracedAddressSpaceContext _log = new TracedAddressSpaceContext(@"ModelsWithErrors\NotSupportedFeature.xml"); _log.TestConsistency(1); Assert.AreEqual(BuildError.ModelsCannotBeNull.Identifier, _log[0].BuildError.Identifier); _log.Clear(); _log.ValidateAndExportModel(m_NameSpace); _log.TestConsistency(0); //Assert.AreEqual(0, _log.Where(x => x.BuildError.Focus != Focus.Diagnostic).Count()); } [TestMethod] [TestCategory("Incorrect Model")] public void WrongBrowseName() { TracedAddressSpaceContext _log = new TracedAddressSpaceContext(@"ModelsWithErrors\WrongBrowseName.xml"); _log.TestConsistency(2); Assert.AreEqual(BuildError.ModelsCannotBeNull.Identifier, _log[0].BuildError.Identifier); Assert.AreEqual(BuildError.EmptyBrowseName.Identifier, _log[1].BuildError.Identifier); _log.Clear(); _log.ValidateAndExportModel(m_NameSpace); Assert.AreEqual(BuildError.WrongSymbolicName.Identifier, _log[0].BuildError.Identifier); Assert.AreEqual(BuildError.NonCategorized.Identifier, _log[1].BuildError.Identifier); } [TestMethod] [TestCategory("Incorrect Model")] public void WrongNodeId() { TracedAddressSpaceContext _log = new TracedAddressSpaceContext(@"ModelsWithErrors\WrongNodeId.xml"); _log.TestConsistency(1); Assert.AreEqual(BuildError.ModelsCannotBeNull.Identifier, _log[0].BuildError.Identifier); _log.Clear(); _log.ValidateAndExportModel(m_NameSpace); _log.TestConsistency(2); Assert.AreEqual(BuildError.NodeIdNotDefined.Identifier, _log[0].BuildError.Identifier); Assert.AreEqual(BuildError.NonCategorized.Identifier, _log[1].BuildError.Identifier); } [TestMethod] [TestCategory("Incorrect Model")] public void UndefinedHasSubtypeTestMethod() { TracedAddressSpaceContext _log = new TracedAddressSpaceContext(@"ModelsWithErrors\UndefinedHasSubtype.xml"); _log.TestConsistency(1); Assert.AreEqual(BuildError.ModelsCannotBeNull.Identifier, _log[0].BuildError.Identifier); _log.Clear(); _log.ValidateAndExportModel(m_NameSpace); _log.TestConsistency(2); Assert.AreEqual(BuildError.UndefinedHasSubtypeTarget.Identifier, _log[0].BuildError.Identifier); Assert.AreEqual(BuildError.NonCategorized.Identifier, _log[1].BuildError.Identifier); } [TestMethod] [TestCategory("Incorrect Model")] public void UndefinedHasTypeDefinitionTestMethod() { FileInfo _testDataFileInfo = new FileInfo(@"ModelsWithErrors\UndefinedHasTypeDefinition.xml"); TracedAddressSpaceContext _log = new TracedAddressSpaceContext(@"ModelsWithErrors\UndefinedHasTypeDefinition.xml"); _log.TestConsistency(1); Assert.AreEqual(BuildError.ModelsCannotBeNull.Identifier, _log[0].BuildError.Identifier); _log.Clear(); _log.ValidateAndExportModel(m_NameSpace); _log.TestConsistency(0); //TODO Recognize problems with P3.7.13 HasTypeDefinition ReferenceType #39 } /// /// Class UndefinedHasComponentTargetTestClass: Handle HasComponent ReferenceType errors. #42 /// [TestMethod] [TestCategory("Incorrect Model")] public void UndefinedHasComponentTargetTestMethod() { TracedAddressSpaceContext _log = new TracedAddressSpaceContext(@"ModelsWithErrors\UndefinedHasChildren.xml"); _log.TestConsistency(1); Assert.AreEqual(BuildError.ModelsCannotBeNull.Identifier, _log[0].BuildError.Identifier); _log.Clear(); _log.ValidateAndExportModel(m_NameSpace); _log.TestConsistency(5); Assert.AreEqual(BuildError.NodeCannotBeNull.Identifier, _log[0].BuildError.Identifier); Assert.AreEqual(BuildError.NodeCannotBeNull.Identifier, _log[1].BuildError.Identifier); Assert.AreEqual(BuildError.DanglingReferenceTarget.Identifier, _log[2].BuildError.Identifier); Assert.AreEqual(BuildError.DanglingReferenceTarget.Identifier, _log[3].BuildError.Identifier); Assert.AreEqual(BuildError.NonCategorized.Identifier, _log[4].BuildError.Identifier); } #endregion TestMethod #region private private readonly Uri m_NameSpace = new Uri(@"http://commsvr.com/OOIUA/SemanticData/UnitTest/UANodeSetValidationUnitTestProject"); #endregion private } } ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/XMLModelsProblemsToReportUnitTest.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2022, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ using Microsoft.VisualStudio.TestTools.UnitTesting; using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using UAOOI.SemanticData.AddressSpace.Abstractions; using UAOOI.SemanticData.BuildingErrorsHandling; using UAOOI.SemanticData.UANodeSetValidation.Helpers; using UAOOI.SemanticData.UANodeSetValidation.ModelFactoryTestingFixture; namespace UAOOI.SemanticData.UANodeSetValidation { [TestClass] [DeploymentItem(@"XMLModels\ProblemsToReport", @"ProblemsToReport\")] public class XMLModelsProblemsToReportUnitTest { //[TestMethod] public void ADITest() { TracedAddressSpaceContext traceContext = new TracedAddressSpaceContext(@"ProblemsToReport\ADI#509\Opc.Ua.Adi.NodeSet2.xml"); traceContext.TestConsistency(1); Assert.AreEqual(BuildError.ModelsCannotBeNull.Identifier, traceContext[0].BuildError.Identifier); traceContext.Clear(); traceContext.ValidateAndExportModel(new UriBuilder("http://opcfoundation.org/UA/ADI/").Uri); traceContext.TestConsistency(48); Assert.AreEqual(0, traceContext.Where(x => x.BuildError.Focus == Focus.DataEncoding)); Assert.AreEqual(0, traceContext.Where(x => x.BuildError.Focus == Focus.DataType)); Assert.AreEqual(0, traceContext.Where(x => x.BuildError.Focus == Focus.Naming)); Assert.AreEqual(24, traceContext.Where(x => x.BuildError.Focus == Focus.NodeClass)); Assert.AreEqual(0, traceContext.Where(x => x.BuildError.Focus == Focus.NonCategorized)); Assert.AreEqual(23, traceContext.Where(x => x.BuildError.Focus == Focus.Reference)); Assert.AreEqual(2, traceContext.Where(x => x.BuildError.Focus == Focus.XML)); //errors Assert.AreEqual(3, traceContext.Where(x => x.BuildError.Identifier == BuildError.NodeIdNotDefined.Identifier)); Assert.AreEqual(5, traceContext.Where(x => x.BuildError.Identifier == BuildError.UndefinedHasSubtypeTarget.Identifier)); Assert.AreEqual(18, traceContext.Where(x => x.BuildError.Identifier == BuildError.UndefinedHasTypeDefinition.Identifier)); } [TestMethod] public void NameInheritedFrom0Test() { TracedAddressSpaceContext traceContext = new TracedAddressSpaceContext(@"ProblemsToReport\BrowseNameInheritedFrom0\BrowseNameInheritedFrom0.xml"); IAddressSpaceContext addressSpace = traceContext.AddressSpace; InformationModelFactoryBase testingModelFixture = new InformationModelFactoryBase(); traceContext.TestConsistency(0); traceContext.Clear(); traceContext.ValidateAndExportModel(new UriBuilder("http://tricycleTypeV1").Uri, testingModelFixture); traceContext.TestConsistency(2); IEnumerable nodes = testingModelFixture.Export(); Assert.AreEqual(3, nodes.Count()); Dictionary nodesDictionary = nodes.ToDictionary(x => x.SymbolicName.Name); AddressSpaceContext asContext = addressSpace as AddressSpaceContext; IEnumerable allNodes = null; asContext.UTValidateAndExportModel(1, x => allNodes = x); Assert.IsNotNull(allNodes); List orphanedNodes = new List(); List processedNodes = new List(); foreach (IUANodeContext item in allNodes) { if (!nodesDictionary.ContainsKey(item.UANode.BrowseName.Name)) { orphanedNodes.Add(item); Debug.WriteLine($"The following node has been removed from the model: {item.ToString()}"); } else processedNodes.Add(item); } Debug.WriteLine($"The recovered information model contains {nodesDictionary.Count} nodes"); Debug.WriteLine($"The source information model contains {allNodes.Count()} nodes"); Debug.WriteLine($"Number of nodes not considered for export {orphanedNodes.Count}"); Debug.WriteLine($"Number of processed nodes {processedNodes.Count}"); } [TestMethod] public void eoursel510Test() { TracedAddressSpaceContext traceContext = new TracedAddressSpaceContext(@"ProblemsToReport\eoursel510\Opc.Ua.NodeSet2.TriCycleType_V1.1.xml"); IAddressSpaceContext addressSpace = traceContext.AddressSpace; ModelFactoryTestingFixture.InformationModelFactoryBase testingModelFixture = new InformationModelFactoryBase(); traceContext.TestConsistency(0); traceContext.Clear(); traceContext.ValidateAndExportModel(new UriBuilder("http://tricycleTypeV1").Uri, testingModelFixture); traceContext.TestConsistency(0); IEnumerable nodes = testingModelFixture.Export(); Assert.AreEqual(22, nodes.Count()); Dictionary nodesDictionary = nodes.ToDictionary(x => x.SymbolicName.Name); AddressSpaceContext asContext = addressSpace as AddressSpaceContext; IEnumerable allNodes = null; asContext.UTValidateAndExportModel(1, x => allNodes = x); Assert.IsNotNull(allNodes); List orphanedNodes = new List(); List processedNodes = new List(); foreach (IUANodeContext item in allNodes) { if (!nodesDictionary.ContainsKey(item.UANode.BrowseName.Name)) { orphanedNodes.Add(item); Debug.WriteLine($"The following node has been removed from the model: {item.ToString()}"); } else processedNodes.Add(item); } Debug.WriteLine($"The recovered information model contains {nodesDictionary.Count} nodes"); Debug.WriteLine($"The source information model contains {allNodes.Count()} nodes"); Debug.WriteLine($"Number of nodes not considered for export {orphanedNodes.Count}"); Debug.WriteLine($"Number of processed nodes {processedNodes.Count}"); } [TestMethod] public void fgolra177Test() { TracedAddressSpaceContext traceContext = new TracedAddressSpaceContext(@"ProblemsToReport\fgolra177\Opc.Ua.Semi.NodeSet2.xml"); traceContext.TestConsistency(0); traceContext.Clear(); traceContext.ValidateAndExportModel(new UriBuilder("https://agileo-automation.com/UA/Semi/").Uri); traceContext.TestConsistency(0); } [TestMethod] public void HasOrderedComponentTest() { TracedAddressSpaceContext traceContext = new TracedAddressSpaceContext(@"ProblemsToReport\HasOrderedComponent\Opc.Ua.NodeSet2.TriCycleType_V1.1.xml"); traceContext.TestConsistency(0); traceContext.Clear(); traceContext.ValidateAndExportModel(new UriBuilder("http://tricycleTypeV1").Uri); traceContext.TestConsistency(0); } //[TestMethod] public void MachineVisionTest() { TracedAddressSpaceContext traceContext = new TracedAddressSpaceContext(@"ProblemsToReport\MachineVision\Opc.Ua.MachineVision.NodeSet2.xml"); traceContext.TestConsistency(0); traceContext.Clear(); traceContext.ValidateAndExportModel(new UriBuilder("http://opcfoundation.org/UA/MachineVision").Uri); traceContext.TestConsistency(2); Assert.AreEqual(BuildError.WrongInverseName.Identifier, traceContext[0].BuildError.Identifier); Assert.AreEqual(BuildError.WrongInverseName.Identifier, traceContext[1].BuildError.Identifier); } } } ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/app.config ================================================  ================================================ FILE: SemanticData/Tests/USNodeSetValidationUnitTestProject/packages.config ================================================  ================================================ FILE: SemanticData/UAModelDesignExport/DataTypeDefinitionFactoryBase.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Xml; using UAOOI.SemanticData.BuildingErrorsHandling; using UAOOI.SemanticData.InformationModelFactory; namespace UAOOI.SemanticData.UAModelDesignExport { /// /// Class DataTypeDefinitionFactoryBase. /// Implements the /// /// internal class DataTypeDefinitionFactoryBase : IDataTypeDefinitionFactory { #region constructor /// /// Initializes a new instance of the class. /// /// The trace event. public DataTypeDefinitionFactoryBase(Action traceEvent) { Debug.Assert(traceEvent != null); m_TraceEvent = traceEvent; } #endregion #region IDataTypeDefinitionFactory /// /// Creates new field and provides an object of type encapsulating /// information about the field data type. It is assumed that the structure has a sequential layout.For enumerations, the fields are simply a list of values. /// /// Returns new instance of the . public IDataTypeFieldFactory NewField() { DataTypeFieldFactoryBase _new = new DataTypeFieldFactoryBase(m_TraceEvent); m_ListOfDataTypeFieldFactoryBase.Add(_new); return _new; } /// /// Sets a unique name of the DataType. This field is only specified for nested DataTypeDefinitions. /// The BrowseName of the DataType Node is used otherwise. /// This field is only specified for nested DataTypeDefinitions. The SymbolicName of the DataType Node is used otherwise. /// /// /// TODO Mantis Not supported by the UA Model Design /// /// The name represented as . public XmlQualifiedName Name { set; private get; } /// /// A symbolic name for the data type. It should only be specified if the Name cannot be used for this purpose. /// Only letters, digits or the underscore (‘_’) are permitted. /// /// /// TODO Mantis Not supported by the UA Model Design /// /// The symbolic name of thi entity. public string SymbolicName { set; private get; } /// /// Sets a value indicating whether this instance is option set. This flag indicates that the data type defines the OptionSetValues Property. /// This field is optional.The default value is false. /// /// true if this instance is option set; otherwise, false. public bool IsOptionSet { set; private get; } /// /// Sets a value indicating whether this instance is union. /// Only one of the Fields defined for the data type is encoded into a value. /// This field is optional.The default value is false. If this value is true, the first field is the switch value. /// /// /// TODO Mantis Not supported by the UA Model Design /// /// true if this instance is union; otherwise, false. public bool IsUnion { set; private get; } #endregion #region internal API internal XML.DataTypeDesign Export() { return new XML.DataTypeDesign() { Fields = m_ListOfDataTypeFieldFactoryBase.Select(x => x.Export()).ToArray(), Encodings = null, //Not supported NoArraysAllowed = false, //Not supported IsOptionSet = IsOptionSet, }; } #endregion #region private private readonly Action m_TraceEvent = null; private List m_ListOfDataTypeFieldFactoryBase = new List(); #endregion } } ================================================ FILE: SemanticData/UAModelDesignExport/DataTypeFactoryBase.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System; using System.Collections.Generic; using System.Diagnostics; using UAOOI.SemanticData.BuildingErrorsHandling; using UAOOI.SemanticData.InformationModelFactory; using UAOOI.SemanticData.UAModelDesignExport.XML; namespace UAOOI.SemanticData.UAModelDesignExport { internal class DataTypeFactoryBase : TypeFactoryBase, IDataTypeFactory { /// /// Initializes a new instance of the class. /// /// The trace event. public DataTypeFactoryBase(Action traceEvent) : base(traceEvent) { } //IDataTypeFactory public IDataTypeDefinitionFactory NewDefinition() { Debug.Assert(m_DataTypeDefinitionFactoryBase == null); m_DataTypeDefinitionFactoryBase = new DataTypeDefinitionFactoryBase(TraceEvent); return m_DataTypeDefinitionFactoryBase; } //internal API internal override NodeDesign Export(List path, Action> createInstanceType) { DataTypeDesign _new = m_DataTypeDefinitionFactoryBase.Export(); base.Update(_new, path, createInstanceType); return _new; } //private private DataTypeDefinitionFactoryBase m_DataTypeDefinitionFactoryBase = null; } } ================================================ FILE: SemanticData/UAModelDesignExport/DataTypeFieldFactoryBase.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System; using System.Diagnostics; using System.Xml; using UAOOI.SemanticData.InformationModelFactory; using TraceMessage = UAOOI.SemanticData.BuildingErrorsHandling.TraceMessage; namespace UAOOI.SemanticData.UAModelDesignExport { /// /// Class DataTypeFieldFactoryBase. /// Implements the /// /// internal class DataTypeFieldFactoryBase : IDataTypeFieldFactory { #region constructors /// /// Initializes a new instance of the class. /// /// The trace event. internal DataTypeFieldFactoryBase(Action traceEvent) { Debug.Assert(traceEvent != null); TraceEvent = traceEvent; } #endregion #region IDataTypeFieldFactory /// /// Sets the DataType name. /// /// The type of the data. /// This field is not specified for subtypes of Enumeration. public XmlQualifiedName DataType { set; private get; } /// /// Sets the name for the field that is unique within the . /// /// The name for the field. public string Name { set; private get; } /// /// Sets the value rank. It shall be Scalar (-1) or a fixed rank Array (>=1). This field is not specified for subtypes of Enumeration. /// /// The value rank. public int? ValueRank { set; private get; } /// /// The value associated with the field. This field is only specified for subtypes of Enumeration. /// For OptionSets the value is the number of the bit associated with the field. /// /// The value. public int Value { set; private get; } /// /// Sets the symbolic name of the field. A symbolic name for the field that can be used in auto-generated code. It should only be /// specified if the Name cannot be used for this purpose. Only letters, digits or the underscore (‘_’) are permitted. /// This value is not exposed in the OPC UA Address Space /// /// The symbolic name to be used by the tool. public string SymbolicName { set; private get; } /// /// Adds the description for the field in multiple locales /// /// The locale field specified as a string that is composed of a language component and a country/region component as specified by RFC 3066. /// The localized text. public void AddDescription(string localeField, string valueField) { Extensions.AddLocalizedText(localeField, valueField, ref m_Description, TraceEvent); } /// /// Adds the display name. /// /// The locale field specified as a string that is composed of a language component and a country/region component as specified by RFC 3066. /// The localized text. public void AddDisplayName(string localeField, string valueField) { Extensions.AddLocalizedText(localeField, valueField, ref m_Description, TraceEvent); } /// /// Gets the array dimensions. /// /// The array dimensions. /// The maximum length of an array. This field is a comma separated list of unsigned integer values.The list has a number of elements equal to the ValueRank. /// The value is 0 if the maximum is not known for a dimension. This field is not specified if the ValueRank less or equal 0. /// This field is not specified for subtypes of Enumeration or for DataTypes public string ArrayDimensions { set; private get; } /// /// Sets the maximum length of the string. /// /// The maximum length of the string. /// The maximum length of a String or ByteString value. If not known the value is 0. The value is 0 if the DataType is not String or ByteString. /// If the ValueRank > 0 the maximum applies to each element in the array. This field is not specified for subtypes of Enumeration or for DataTypes with /// the OptionSetValues Property. public uint MaxStringLength { set; private get; } /// /// Sets a value indicating whether this instance is optional. /// /// true if this instance is optional; otherwise, false. /// The field indicates if a data type field in a structure is optional. This field is optional.The default value is false. This field is not specified for subtypes of Enumeration and Union. public bool IsOptional { set; private get; } #endregion #region internal API /// /// Exports this instance to . /// /// XML.Parameter. internal XML.Parameter Export() { bool _ValueRankSpecified; XML.Parameter _newParameter = new XML.Parameter() { DataType = DataType, Description = m_Description, Identifier = Value, IdentifierSpecified = Value != -1, Name = Name, ValueRank = ValueRank.GetValueRank(x => _ValueRankSpecified = x, TraceEvent), ArrayDimensions = ArrayDimensions, BitMask = string.Empty, }; return _newParameter; } #endregion #region private private Action TraceEvent { get; set; } private XML.LocalizedText m_Description = null; #endregion } } ================================================ FILE: SemanticData/UAModelDesignExport/Diagnostic/AssemblyTraceSource.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2021, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ using System.Diagnostics; using UAOOI.Common.Infrastructure.Diagnostic; using UAOOI.SemanticData.BuildingErrorsHandling; namespace UAOOI.SemanticData.UAModelDesignExport.Diagnostic { /// /// Class AssemblyTraceSource. Implements the /// /// internal class AssemblyTraceSource : ITraceSource { /// /// Initializes a new instance of the class using the default of the . /// internal AssemblyTraceSource() { traceSource = new TraceSourceBase("UAModelDesignExport"); } /// /// Initializes a new instance of the class using a provided implementation of the . /// /// The provided implementation of the . internal AssemblyTraceSource(ITraceSource traceEvent) { traceSource = traceEvent; } /// /// Writes the trace message. /// /// The trace message. internal void WriteTraceMessage(TraceMessage traceMessage) { traceSource.TraceData(traceMessage.TraceLevel, 39445735, traceMessage.ToString()); } #region ITraceSource /// /// Writes trace data to the trace listeners in the collection using the specified , /// event identifier , and trace . /// /// One of the enumeration values that specifies the event type of the trace data. /// A numeric identifier for the event. /// The trace data. public void TraceData(TraceEventType eventType, int id, object data) { traceSource.TraceData(eventType, id, data); } #endregion ITraceSource private readonly ITraceSource traceSource; } } ================================================ FILE: SemanticData/UAModelDesignExport/Extensions.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System; using System.Collections.Generic; using UAOOI.SemanticData.BuildingErrorsHandling; using UAOOI.SemanticData.InformationModelFactory; using UAOOI.SemanticData.InformationModelFactory.UAConstants; namespace UAOOI.SemanticData.UAModelDesignExport { /// /// Class Extensions - provides helper extension functions /// internal static class Extensions { /// /// Creates symbolics the name joining symbolic names on the path. /// /// The path. /// System.String. internal static string SymbolicName(this List path) { path.Reverse(); return String.Join("_", path.ToArray()); } internal static void AddLocalizedText(string keyField, string valueField, ref XML.LocalizedText description, Action traceEvent) { if (description != null) { traceEvent(TraceMessage.BuildErrorTraceMessage(BuildError.NotSupportedFeature, "Parameter.Description does not supports array. The description is skipped.")); return; } description = new XML.LocalizedText() { Key = keyField, Value = valueField, }; } /// /// Gets the value rank. /// /// The value rank. /// if set to true the parameter is specified. /// An delegate is used to trace event as the . /// Returns value of . internal static XML.ValueRank GetValueRank(this int? valueRank, Action specified, Action traceEvent) { XML.ValueRank _vr = XML.ValueRank.Scalar; if (!valueRank.HasValue) { specified(false); return _vr; } specified(true); if (valueRank < -2) traceEvent(TraceMessage.BuildErrorTraceMessage(BuildError.WrongValueRank, String.Format("The value {0} is not supported", valueRank))); else if (valueRank == -3) traceEvent(TraceMessage.BuildErrorTraceMessage(BuildError.WrongValueRank, String.Format("The value {0} is not supported", valueRank))); //_vr = ModelDesign.ValueRank.ScalarOrOneDimension; else if (valueRank == -2) _vr = XML.ValueRank.ScalarOrArray; else if (valueRank == -1) { _vr = XML.ValueRank.Scalar; specified(false); } else if (valueRank == 0) _vr = XML.ValueRank.OneOrMoreDimensions; else if (valueRank == 1) _vr = XML.ValueRank.Array; else _vr = XML.ValueRank.OneOrMoreDimensions; return _vr; } internal static XML.AccessLevel GetAccessLevel(this uint? accessLevel, Action accessLevelSpecified, Action traceEvent) { XML.AccessLevel _ret = XML.AccessLevel.None; if (!accessLevel.HasValue) { accessLevelSpecified(false); return _ret; } if (accessLevel == AccessLevels.CurrentReadOrWrite) _ret = XML.AccessLevel.ReadWrite; else if (accessLevel == AccessLevels.CurrentRead) _ret = XML.AccessLevel.Read; else if (accessLevel == AccessLevels.CurrentWrite) _ret = XML.AccessLevel.Write; else traceEvent(TraceMessage.BuildErrorTraceMessage(BuildError.NotSupportedFeature, String.Format("The AccessLevel value {0:X} is not supported", accessLevel))); accessLevelSpecified((int)_ret != 1); return _ret; } internal static string Key(this XML.Reference value) { return $"{ value.ReferenceType.ToString()} {value.TargetId.ToString()} IsInverse={value.IsInverse}"; } //Extensions for UAOOI internal static XML.Parameter ExportArgument(this Parameter argument, Action traceEvent) { bool _ValueRankSpecified = false; XML.ValueRank _ValueRank = argument.ValueRank.GetValueRank(x => _ValueRankSpecified = x, traceEvent); return new XML.Parameter() { DataType = argument.DataType, Description = argument.Descriptions == null || argument.Descriptions.Count == 0 ? null : new XML.LocalizedText() { Key = argument.Descriptions[0].Locale, Value = argument.Descriptions[0].Text }, Identifier = 0, IdentifierSpecified = false, Name = argument.Name, ValueRank = _ValueRank, }; } internal static XML.ModellingRule ConvertModellingRule(this ModelingRules? modellingRule, Action isSpecified) { XML.ModellingRule _ret = default(XML.ModellingRule); if (!modellingRule.HasValue) { isSpecified(false); return _ret; } switch (modellingRule) { case ModelingRules.Mandatory: _ret = XML.ModellingRule.Mandatory; break; case ModelingRules.Optional: _ret = XML.ModellingRule.Optional; break; case ModelingRules.MandatoryPlaceholder: _ret = XML.ModellingRule.MandatoryPlaceholder; break; case ModelingRules.OptionalPlaceholder: _ret = XML.ModellingRule.OptionalPlaceholder; break; case ModelingRules.ExposesItsArray: _ret = XML.ModellingRule.ExposesItsArray; break; } isSpecified(true); return _ret; } internal static XML.ReleaseStatus ConvertToReleaseStatus(this ReleaseStatus releaseStatus) { XML.ReleaseStatus _status = XML.ReleaseStatus.Released; switch (releaseStatus) { case ReleaseStatus.Released: _status = XML.ReleaseStatus.Released; break; case ReleaseStatus.Draft: _status = XML.ReleaseStatus.Draft; break; case ReleaseStatus.Deprecated: _status = XML.ReleaseStatus.Deprecated; break; } return _status; } internal static XML.DataTypePurpose ConvertToDataTypePurpose(this DataTypePurpose releaseStatus) { XML.DataTypePurpose _status = XML.DataTypePurpose.Normal; switch (releaseStatus) { case DataTypePurpose.CodeGenerator: _status = XML.DataTypePurpose.CodeGenerator; break; case DataTypePurpose.Normal: _status = XML.DataTypePurpose.Normal; break; case DataTypePurpose.ServicesOnly: _status = XML.DataTypePurpose.ServicesOnly; break; } return _status; } } } ================================================ FILE: SemanticData/UAModelDesignExport/IModelDesignExport.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2021, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ using UAOOI.SemanticData.InformationModelFactory; using UAOOI.SemanticData.UAModelDesignExport.XML; namespace UAOOI.SemanticData.UAModelDesignExport { /// /// Interface IModelDesignExport - abstract API of the UAModelDesignExport. /// public interface IModelDesignExport { /// /// Gets the factory. /// /// An instance of the to be used to generate the OPC UA Information Model captured as the . IModelFactory GetFactory(); /// /// Serializes the already generated model using the interface and writes the XML document to a file. /// /// A relative or absolute path for the file containing the serialized object. /// Name of the stylesheet document. void ExportToXMLFile(string outputFilePtah, string stylesheetName); /// /// Serializes the already generated model using the interface and writes the XML document to a file. /// /// A relative or absolute path for the file containing the serialized object. void ExportToXMLFile(string outputFilePtah); /// /// Convert the UA Information Model to graph of objects /// /// Returns an instance of the type . ModelDesign ExportToObject(); } } ================================================ FILE: SemanticData/UAModelDesignExport/InstanceFactoryBase.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System; using System.Collections.Generic; using System.Xml; using UAOOI.SemanticData.BuildingErrorsHandling; using UAOOI.SemanticData.InformationModelFactory; using UAOOI.SemanticData.UAModelDesignExport.XML; namespace UAOOI.SemanticData.UAModelDesignExport { /// /// Class InstanceFactoryBase. /// Implements the /// Implements the /// /// /// internal abstract class InstanceFactoryBase : NodeFactoryBase, IInstanceFactory { /// /// Initializes a new instance of the class. /// /// The trace event. public InstanceFactoryBase(Action traceEvent) : base(traceEvent) {} /// /// Sets the modeling rule, which defines whether the component of a complex type are instantiated. /// This value is defined by processing the object pointed by the HasModelingRule reference. /// /// The modeling rule. public ModelingRules? ModelingRule { set; private get; } /// /// Sets the type definition. /// /// The type definition. public XmlQualifiedName TypeDefinition { set; private get; } /// /// Sets the type of the reference if it is component of a complex definition. /// /// The type of the reference used for parent child relationship. public XmlQualifiedName ReferenceType { set; private get; } /// /// Updates the instance. /// /// The node design. /// The path. /// The trace event. /// Type of the create instance. protected void UpdateInstance(InstanceDesign nodeDesign, List path, System.Action traceEvent, Action> createInstanceType) { nodeDesign.Declaration = null; nodeDesign.MaxCardinality = 0; nodeDesign.MinCardinality = 0; nodeDesign.ModellingRule = this.ModelingRule.ConvertModellingRule(x => nodeDesign.ModellingRuleSpecified = x); nodeDesign.PreserveDefaultAttributes = false; nodeDesign.ReferenceType = this.ReferenceType; nodeDesign.TypeDefinition = this.TypeDefinition; base.UpdateNode(nodeDesign, path, createInstanceType); } } } ================================================ FILE: SemanticData/UAModelDesignExport/MethodInstanceFactoryBase.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System; using System.Collections.Generic; using System.Linq; using System.Xml; using UAOOI.SemanticData.BuildingErrorsHandling; using UAOOI.SemanticData.InformationModelFactory; using UAOOI.SemanticData.InformationModelFactory.UAConstants; namespace UAOOI.SemanticData.UAModelDesignExport { /// /// Class MethodInstanceFactoryBase. /// Implements the /// Implements the /// /// /// internal class MethodInstanceFactoryBase : InstanceFactoryBase, IMethodInstanceFactory { /// /// Initializes a new instance of the class. /// /// The trace event. public MethodInstanceFactoryBase(Action traceEvent) : base(traceEvent) { } #region IMethodInstanceFactory /// /// Sets a value indicating whether the Method node is executable (“False” means not executable, “True” means executable), not taking user access rights into account. /// If the server cannot get the executable information from the underlying system, it should state that it is executable. If a Method is called, the server should transfer /// this request and return the corresponding StatusCode if such a request is rejected. /// /// true if executable; otherwise, false. Default value is true public bool? Executable { set; private get; } /// /// Sets a value indicating whether the Method is currently executable taking user access rights into account (“False” means not executable, “True” means executable). /// /// true if executable by current user; otherwise, false. Default value is true public bool? UserExecutable { set; private get; } /// /// Gets or sets the method declaration identifier defined in Part 6 F.9. May be specified for Method Nodes that are a target of a HasComponent reference from a single Object Node. /// It is the NodeId of the UAMethod with the same BrowseName contained in the TypeDefinition associated with the Object Node. /// If the TypeDefinition overrides a Method inherited from a base ObjectType then this attribute shall reference the Method Node in the subtype. /// /// The method declaration identifier. public string MethodDeclarationId { set; private get; } /// /// Adds the input arguments. The InputArgument specify the input argument of the Method. The Method contains an array of the Argument data type. /// An empty array indicates that there are no input arguments for the Method. /// /// Encapsulates a method used to convert Argument represented as . public void AddInputArguments(Func argument) { m_InputArguments = RemoveArguments(BrowseNames.InputArguments, argument); } /// /// Adds the output argument. The OutputArgument specifies the output argument of the Method. The Method contains an array of the Argument data type. /// An empty array indicates that there are no output arguments for the Method. /// /// Encapsulates a method used to convert Argument represented as . public void AddOutputArguments(Func argument) { m_OutputArguments = RemoveArguments(BrowseNames.OutputArguments, argument); } /// /// Adds the argument description. /// /// The name. /// The locale. /// The value. /// public void AddArgumentDescription(string name, string locale, string value) { if (m_ArgumentsDescription.ContainsKey(name)) m_ArgumentsDescription[name].Add(new XML.LocalizedText() { Key = locale, Value = value }); else m_ArgumentsDescription.Add(name, new List() { new XML.LocalizedText() { Key = locale, Value = value } }); } #endregion //internal API /// /// Exports the an instance of . /// /// The path. /// Type of the create instance. /// XML.NodeDesign. internal override XML.NodeDesign Export(List path, Action> createInstanceType) { XML.MethodDesign _new = new XML.MethodDesign() { InputArguments = GetArguments(m_InputArguments), OutputArguments = GetArguments(m_OutputArguments), NonExecutable = Executable.GetValueOrDefault(false), NonExecutableSpecified = Executable.HasValue }; string MethodDeclarationId = this.MethodDeclarationId; //TODO it is not present in the XML.MethodDesign base.UpdateInstance(_new, path, TraceEvent, createInstanceType); createInstanceType(_new, path); return _new; } #region private //var private IEnumerable m_InputArguments = null; private IEnumerable m_OutputArguments = null; private Dictionary> m_ArgumentsDescription = new Dictionary>(); //method private XML.Parameter[] GetArguments(IEnumerable parameter) { XML.Parameter[] _arguments = parameter?.Select(x => x.ExportArgument(TraceEvent)).ToArray(); if (_arguments != null) foreach (XML.Parameter _item in _arguments) { if (m_ArgumentsDescription.ContainsKey(_item.Name)) { List _argumentDescription = m_ArgumentsDescription[_item.Name]; _argumentDescription.Add(_item.Description); //TODO Report error - the model design doesn't support array of localized descriptions. _item.Description = _argumentDescription.ToArray()[0]; } } return _arguments; } private IEnumerable RemoveArguments(string parameterKind, Func getParameters) { Parameter[] _parameters = null; List _newChildrenCollection = new List(); foreach (NodeFactoryBase _item in m_Nodes) { if (_item.SymbolicName.Equals(new XmlQualifiedName(parameterKind, Namespaces.OpcUa))) { PropertyInstanceFactoryBase _arg = (PropertyInstanceFactoryBase)_item; _parameters = getParameters(_arg.DefaultValue); } else _newChildrenCollection.Add(_item); } m_Nodes = _newChildrenCollection; return _parameters == null || _parameters.Length == 0 ? null : _parameters.AsEnumerable(); } #endregion } } ================================================ FILE: SemanticData/UAModelDesignExport/ModelDesignExport.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2021, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ using System; using System.Diagnostics; using System.IO; using UAOOI.Common.Infrastructure.Diagnostic; using UAOOI.Common.Infrastructure.Serializers; using UAOOI.SemanticData.InformationModelFactory; using UAOOI.SemanticData.UAModelDesignExport.Diagnostic; namespace UAOOI.SemanticData.UAModelDesignExport { /// /// Class ModelDesignExport - captures functionality supporting export functionality of the OPC UA Information Model represented by an XML file compliant with UA Model Design. /// public abstract class ModelDesignExportAPI { #region factory /// /// Gets the model design export. /// /// An instance capturing model design export implemented using the interface. public static IModelDesignExport GetModelDesignExport() { return new ModelDesignExport(); } internal static IModelDesignExport GetModelDesignExport(ITraceSource traceSource) { return new ModelDesignExport(traceSource); } #endregion factory private class ModelDesignExport : IModelDesignExport { #region IModelDesignExport /// /// Gets the factory. /// /// An instance of the to be used to generate the OPC UA Information Model captured as the . public IModelFactory GetFactory() { m_Model = new ModelFactory(m_traceEvent.WriteTraceMessage); return m_Model; } /// /// Serializes the already generated model using the interface and writes the XML document to a file. /// /// A relative or absolute path for the file containing the serialized object. public void ExportToXMLFile(string outputFilePtah) { ExportToXMLFile(outputFilePtah, string.Empty); } /// /// Serializes the already generated model using the interface and writes the XML document to a file. /// /// A relative or absolute path for the file containing the serialized object. /// Name of the stylesheet document. public void ExportToXMLFile(string outputFilePtah, string stylesheetName) { if (m_Model == null) throw new ArgumentNullException("UAModelDesign", "The model must be generated first."); if (string.IsNullOrEmpty(outputFilePtah)) throw new ArgumentNullException(nameof(outputFilePtah), $"{nameof(outputFilePtah)} must be a valid file path."); XML.ModelDesign _model = m_Model.Export(); XmlFile.WriteXmlFile(_model, outputFilePtah, FileMode.Create, stylesheetName); m_traceEvent.TraceData(TraceEventType.Information, 279330276, $"The ModelDesign XML has been saved to file {outputFilePtah} and decorated with the stylesheet {stylesheetName}"); } /// /// Convert the UA Information Model to graph of objects /// /// Returns an instance of the type . public XML.ModelDesign ExportToObject() { m_traceEvent.TraceData(TraceEventType.Information, 52892026, $"The ModelDesign a graph of objects is exporting"); return m_Model.Export(); } #endregion IModelDesignExport #region private private ModelFactory m_Model = null; private readonly AssemblyTraceSource m_traceEvent; internal ModelDesignExport(ITraceSource traceEvent) { m_traceEvent = new AssemblyTraceSource(traceEvent); } internal ModelDesignExport() { m_traceEvent = new AssemblyTraceSource(); } #endregion private } } } ================================================ FILE: SemanticData/UAModelDesignExport/ModelFactory.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2022, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ using System; using System.Collections.Generic; using System.Linq; using System.Xml; using UAOOI.SemanticData.InformationModelFactory; using UAOOI.SemanticData.UAModelDesignExport.XML; using TraceMessage = UAOOI.SemanticData.BuildingErrorsHandling.TraceMessage; namespace UAOOI.SemanticData.UAModelDesignExport { /// /// Class ModelFactory. /// Implements the /// Implements the /// /// /// internal class ModelFactory : NodesContainer, IModelFactory { /// /// Initializes a new instance of the class. /// /// The trace event. public ModelFactory(Action traceEvent) : base(traceEvent) { } //IModelFactory /// /// Creates the namespace description for the provided . /// /// The . /// The publication - when the model was published. This value is used for comparisons if the Model is defined in multiple files. /// The of the model. This is a human readable string and not intended for programmatic comparisons. /// The set of objects that the OPC Unified Architecture server makes available to clients is referred to as its Address Space. The namespace is provided to make the BrowseName unique in the Address Space. void IModelFactory.CreateNamespace(Uri uri, DateTime? publicationDate, Version version) { string uriString = uri == null ? string.Empty : uri.ToString(); Namespace _new = new Namespace() { FilePath = string.Empty, InternalPrefix = uriString, Name = string.Format("Name{0}", m_Count), Prefix = string.Format("Prefix{0}", m_Count++), Value = uriString, XmlNamespace = uriString, XmlPrefix = string.Format("Prefix{0}", m_Count++), PublicationDate = publicationDate.HasValue ? XmlConvert.ToString(publicationDate.Value, XmlDateTimeSerializationMode.Utc): null, Version = version == null ? String.Empty : version.ToString() }; m_Namespaces.Add(_new); } //internal API /// /// Exports this instance. /// /// ModelDesign. internal ModelDesign Export() { List _mdNodes = new List(); List path = new List(); base.ExportNodes(_mdNodes, path, (x, y) => CreateInstanceType(x, y, _mdNodes)); return new ModelDesign() { Items = _mdNodes.ToArray(), Namespaces = m_Namespaces.ToArray(), TargetNamespace = m_Namespaces[1].Value, AnyAttr = null, DefaultLocale = null, TargetPublicationDate = DateTime.Today, TargetPublicationDateSpecified = true, TargetVersion = string.Empty, TargetXmlNamespace = null }; } //private private List m_Namespaces = new List(); private static int m_Count = 0; private void CreateInstanceType(InstanceDesign instance, List browsePath, List mdNodes) { return; } } } ================================================ FILE: SemanticData/UAModelDesignExport/NodeFactoryBase.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System; using System.Collections.Generic; using System.Linq; using System.Xml; using UAOOI.SemanticData.InformationModelFactory; using UAOOI.SemanticData.InformationModelFactory.UAConstants; using TraceMessage = UAOOI.SemanticData.BuildingErrorsHandling.TraceMessage; namespace UAOOI.SemanticData.UAModelDesignExport { internal abstract class NodeFactoryBase : NodesContainer, INodeFactory { /// /// Initializes a new instance of the class. /// /// Encapsulates an action used to trace events and model errors. public NodeFactoryBase(Action traceEvent) : base(traceEvent) { } #region INodeFactory /// /// It holds the value of the BrowseName attribute of modes in the Address Space. /// /// The BrowseName of the node. public string BrowseName { set; private get; } /// /// Add new reference to the references collection of the node. This collection represents all the references defined by the selected Information Model including /// references to the instance declarations nodes. The References list specifies references that must be created for the node during Address Space instantiation. /// The reference can be forward or inverse. /// /// IReferenceFactory. public IReferenceFactory NewReference() { ReferenceFactoryBase _ret = new ReferenceFactoryBase(); m_References.Add(_ret); return _ret; } /// /// Sets the a symbolic name for the node that can be used as a class/field name by a design tools to enhance auto-generated code. /// It should only be specified if the BrowseName cannot be used for this purpose. This field is not used directly to instantiate /// Address Space and is intended for use by design tools. Only letters, digits or the underscore (‘_’) are permitted. /// This attribute is not exposed in the Address Space. /// /// The symbolic name for the node. public XmlQualifiedName SymbolicName { set; internal get; } /// /// Sets the write mask. The optional WriteMask attribute represents the WriteMask attribute of the Basic NodeClass, which exposes the possibilities of a client /// to write the attributes of the node. The WriteMask attribute does not take any user access rights into account, that is, although an attribute is writable /// this may be restricted to a certain user/user group. /// /// The write access. /// Default Value "0" public uint WriteAccess { set; private get; } /// /// Sets the access restrictions. /// /// The access restrictions. /// The AccessRestrictions that apply to the Node. public AccessRestrictions AccessRestrictions { set; private get; } /// /// Sets the release status of the node. /// /// The release status. /// It is not exposed in the address space. /// Added in the Rel 1.04 to the specification. public ReleaseStatus ReleaseStatus { set; private get; } /// /// Sets the data type purpose. /// /// The data type purpose. /// /// Not defined in the specification Part 2, 5, 6 and Errata Release 1.04.2 September 25, 2018 public DataTypePurpose DataTypePurpose { set; private get; } = DataTypePurpose.Normal; /// /// Sets the category. A list of identifiers used to group related UANodes together for use by tools that create/edit UANodeSet files. /// /// /// In the UA Model Design it is a comment separated list of categories assigned to the node (e.g. Part4/Services or Part5/StateMachines). /// /// The category. public string[] Category { set; private get; } = null; /// /// Adds new value for the Description. The optional Description element shall explain the meaning of the node in a localized text using the same mechanisms /// for localization as described for the DisplayName. /// /// The locale field. /// The value field. public void AddDescription(string localeField, string valueField) { Extensions.AddLocalizedText(localeField, valueField, ref m_Description, TraceEvent); } /// /// Adds new value for the DisplayName. The DisplayName attribute contains the localized name of the node. /// Clients should use this attribute if they want to display the name of the node to the user. They should not use /// the BrowseName for this purpose. The server may maintain one or more localized representations for each DisplayName. /// Clients negotiate the locale to be returned when they open a session with the server. The section DisplayName defines the structure of the DisplayName. /// The string part of the DisplayName is restricted to 512 characters. /// /// The locale field. /// The value field. public void AddDisplayName(string localeField, string valueField) { Extensions.AddLocalizedText(localeField, valueField, ref m_DisplayName, TraceEvent); } #endregion #region internal API /// /// Exports an instance of . /// /// The path. /// Type of the create instance. /// NodeDesign. internal abstract XML.NodeDesign Export(List path, Action> createInstanceType); #endregion #region private protected void UpdateNode(XML.NodeDesign nodeDesign, List path, Action> createInstanceType) { string _defaultDisplay = string.IsNullOrEmpty(BrowseName) ? SymbolicName.Name : BrowseName; nodeDesign.BrowseName = BrowseName == SymbolicName.Name ? null : BrowseName; List _Members = new List(); path.Add(SymbolicName.Name); base.ExportNodes(_Members, path, createInstanceType); XML.InstanceDesign[] _items = _Members.Cast().ToArray(); nodeDesign.Category = Category == null ? null : string.Join(", ", Category); nodeDesign.Children = _items == null || _items.Length == 0 ? null : new XML.ListOfChildren() { Items = _items }; nodeDesign.Description = m_Description; nodeDesign.DisplayName = m_DisplayName == null || m_DisplayName.Value == _defaultDisplay ? null : m_DisplayName; nodeDesign.IsDeclaration = false; nodeDesign.NotInAddressSpace = false; nodeDesign.NumericId = 0; nodeDesign.NumericIdSpecified = false; nodeDesign.PartNo = 0; nodeDesign.Purpose = DataTypePurpose.ConvertToDataTypePurpose(); nodeDesign.References = m_References.Count == 0 ? null : m_References.Select(x => x.Export()).ToArray(); nodeDesign.ReleaseStatus = ReleaseStatus.ConvertToReleaseStatus(); nodeDesign.StringId = null; nodeDesign.SymbolicId = null; nodeDesign.SymbolicName = SymbolicName; nodeDesign.WriteAccess = WriteAccess; // AccessRestrictions _access = AccessRestrictions; model design doesn't support AccessRestrictions } private XML.LocalizedText m_Description = null; private XML.LocalizedText m_DisplayName = null; private List m_References = new List(); #endregion } } ================================================ FILE: SemanticData/UAModelDesignExport/NodesContainer.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System; using System.Collections.Generic; using System.Diagnostics; using UAOOI.SemanticData.BuildingErrorsHandling; using UAOOI.SemanticData.InformationModelFactory; using UAOOI.SemanticData.UAModelDesignExport.XML; namespace UAOOI.SemanticData.UAModelDesignExport { /// /// Class NodesContainer. /// Implements the /// /// internal abstract class NodesContainer : INodeContainer { /// /// Initializes a new instance of the class. /// /// The trace event. internal NodesContainer(Action traceEvent) { Debug.Assert(traceEvent != null); this.TraceEvent = traceEvent; } //INodeContainer /// /// Creates and adds a new node instance of the . /// /// The type of the node factory must inherit from . /// Returns new object implementing . /// public NodeFactory AddNodeFactory() where NodeFactory : INodeFactory { NodeFactoryBase _df = default(NodeFactoryBase); if (typeof(NodeFactory) == typeof(IReferenceTypeFactory)) _df = new ReferenceTypeFactoryBase(TraceEvent); else if (typeof(NodeFactory) == typeof(IObjectTypeFactory)) _df = new ObjectTypeFactoryBase(TraceEvent); else if (typeof(NodeFactory) == typeof(IVariableTypeFactory)) _df = new VariableTypeFactoryBase(TraceEvent); else if (typeof(NodeFactory) == typeof(IDataTypeFactory)) _df = new DataTypeFactoryBase(TraceEvent); else if (typeof(NodeFactory) == typeof(IObjectInstanceFactory)) _df = new ObjectInstanceFactoryBase(TraceEvent); else if (typeof(NodeFactory) == typeof(IPropertyInstanceFactory)) _df = new PropertyInstanceFactoryBase(TraceEvent); else if (typeof(NodeFactory) == typeof(IVariableInstanceFactory)) _df = new VariableInstanceFactoryBase(TraceEvent); else if (typeof(NodeFactory) == typeof(IMethodInstanceFactory)) _df = new MethodInstanceFactoryBase(TraceEvent); else if (typeof(NodeFactory) == typeof(IViewInstanceFactory)) _df = new ViewInstanceFactoryBase(TraceEvent); else throw new NotImplementedException(); m_Nodes.Add(_df); return (NodeFactory)(INodeFactory)_df; } //private protected void ExportNodes(List members, List path, Action> createInstanceType) { NodeFactoryBase _currItem = null; foreach (NodeFactoryBase _item in m_Nodes) { try { _currItem = _item; NodeDesign _newNode = _item.Export(new List(path), createInstanceType); members.Add(_newNode); } catch (Exception _ex) { string _msg = String.Format("Error caught while processing the node {0}. The message: {1} at {2}.", _currItem.SymbolicName, _ex.Message, _ex.StackTrace); TraceEvent(TraceMessage.BuildErrorTraceMessage(BuildError.NonCategorized, _msg)); } } } protected Action TraceEvent { get; private set; } protected List m_Nodes = new List(); } } ================================================ FILE: SemanticData/UAModelDesignExport/ObjectInstanceFactoryBase.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System; using System.Collections.Generic; using UAOOI.SemanticData.InformationModelFactory; using UAOOI.SemanticData.UAModelDesignExport.XML; using TraceMessage = UAOOI.SemanticData.BuildingErrorsHandling.TraceMessage; namespace UAOOI.SemanticData.UAModelDesignExport { /// /// Class ObjectInstanceFactoryBase. /// Implements the /// Implements the /// /// /// internal class ObjectInstanceFactoryBase : InstanceFactoryBase, IObjectInstanceFactory { /// /// Initializes a new instance of the class. /// /// The trace event. public ObjectInstanceFactoryBase(Action traceEvent) : base(traceEvent) { } #region IObjectInstanceFactory /// /// Sets a value indicating whether the node supports events. /// /// null if supports events contains no value, true if [supports events]; otherwise, false. public bool? SupportsEvents { set; private get; } #endregion #region internal API internal override NodeDesign Export(List path, Action> createInstanceType) { ObjectDesign _ret = new ObjectDesign() { SupportsEvents = this.SupportsEvents.GetValueOrDefault(), SupportsEventsSpecified = this.SupportsEvents.HasValue }; base.UpdateInstance(_ret, path, TraceEvent, createInstanceType); return _ret; } #endregion } } ================================================ FILE: SemanticData/UAModelDesignExport/ObjectTypeFactoryBase.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) Year of Copyright, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System; using System.Collections.Generic; using UAOOI.SemanticData.BuildingErrorsHandling; using UAOOI.SemanticData.InformationModelFactory; using UAOOI.SemanticData.UAModelDesignExport.XML; namespace UAOOI.SemanticData.UAModelDesignExport { internal class ObjectTypeFactoryBase : TypeFactoryBase, IObjectTypeFactory { /// /// Initializes a new instance of the class. /// /// The trace event. public ObjectTypeFactoryBase(Action traceEvent) : base(traceEvent) { } //internal API internal override NodeDesign Export(List path, Action> createInstanceType) { ObjectTypeDesign _ret = new ObjectTypeDesign() { SupportsEvents = false, SupportsEventsSpecified = false }; base.Update(_ret, path, createInstanceType); return _ret; } } } ================================================ FILE: SemanticData/UAModelDesignExport/Properties/AssemblyInfo.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2021, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ using System.Runtime.CompilerServices; [assembly: InternalsVisibleTo( "UAOOI.SemanticData.UAModelDesignExport.UnitTest, PublicKey=" + "00240000048000009400000006020000002400005253413100040000010001005b97a0972ff6b13a" + "8a9ff9c09503aea0e5e2fe29cb2275a0c0942182f4c3431814b6bc9a556d9fe0d7e7823439c1ba28" + "521f6318e4c936c4461604ef668e9686c2021571b093e1bfba071b373bc56a07a3afdc120c5313d3" + "9a935cda64b759f857ebb3db483641444a5347e1564f8ba6d4fad2f968d3caf9991a4fa6aa019ebe" )] ================================================ FILE: SemanticData/UAModelDesignExport/Properties/UAModelDesignExport.Nuget.nuspec ================================================  UAOOI.SemanticData.UAModelDesignExport 6.5.6-Oscar Semantic-Data UAModelDesign Export Mariusz Postol Mariusz Postol false MIT https://commsvr.gitbook.io/ooi/semantic-data-processing/addressspacecompliancetesttool/uamodeldesignexport Logo64.PNG This library provides an implementation of the export functionality of an XML file compliant with the UAModelDeign schema. By design, the UAModelDeign schema describes the syntax of an XML document representing the OPC UA Information Model that is used as the input for the https://github.com/OPCFoundation/UA-ModelCompiler. Object-Oriented Internet Semantic-Data UAModelDesign Export Library. Copyright (C) 2022 Mariusz Postol LODZ POLAND Object Oriented Internet, OOI, OPC UA, Information Model, IoT, M2M, DOA Updated against OPC UA Rel 1.04 Copyright (C) 2022 Mariusz Postol LODZ POLAND ================================================ FILE: SemanticData/UAModelDesignExport/Properties/UAModelDesignExport.Nuget.tt ================================================ <#@ template debug="false" hostspecific="false" language="C#" #> <#@ output extension=".nuspec" #> <#=m_AssemblyTitle#> <#= SemanticDataUAModelDesignExportVersion #><#= SemanticDataUAModelDesignExportPrerelease #> Semantic-Data UAModelDesign Export <#=Authors#> <#=Owner#> false MIT https://commsvr.gitbook.io/ooi/semantic-data-processing/addressspacecompliancetesttool/uamodeldesignexport Logo64.PNG This library provides an implementation of the export functionality of an XML file compliant with the UAModelDeign schema. By design, the UAModelDeign schema describes the syntax of an XML document representing the OPC UA Information Model that is used as the input for the https://github.com/OPCFoundation/UA-ModelCompiler. Object-Oriented Internet Semantic-Data UAModelDesign Export Library. <#=AssemblyCopyright#> Object Oriented Internet, OOI, OPC UA, Information Model, IoT, M2M, DOA Updated against OPC UA Rel 1.04 <#=AssemblyCopyright#> <#@ include file = "..\..\..\CommonResources\T4Definitions\Model.t4" #> <#+ string m_AssemblyTitle = "UAOOI.SemanticData.UAModelDesignExport"; #> ================================================ FILE: SemanticData/UAModelDesignExport/PropertyInstanceFactoryBase.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System; using System.Collections.Generic; using UAOOI.SemanticData.BuildingErrorsHandling; using UAOOI.SemanticData.InformationModelFactory; using UAOOI.SemanticData.UAModelDesignExport.XML; namespace UAOOI.SemanticData.UAModelDesignExport { /// /// Class PropertyInstanceFactoryBase. /// internal class PropertyInstanceFactoryBase : VariableInstanceFactoryBase, IPropertyInstanceFactory { /// /// Initializes a new instance of the class. /// /// The trace event. public PropertyInstanceFactoryBase(Action traceEvent) : base(traceEvent) { } //internal API internal override NodeDesign Export(List path, Action> createInstanceType) { PropertyDesign _ret = new PropertyDesign(); base.Update(_ret, path, createInstanceType); return _ret; } } } ================================================ FILE: SemanticData/UAModelDesignExport/README.md ================================================ # `UAModelDesignExport` Library ## Preface The Address Space concept based on types can be a foundation for exposing any process information. The main role of the Address Space is a selective replication of an underlying process, i.e.copying of data from a real process to one Address Space so that all users share the same process state and behavior description. Using the Address Space concept implementation (services) users could also control the underlying process. It is worth stressing that by design the replica hides selected details, hence we can recognize it as an abstract representation of the underlying process. The Address Space is also a cache of the real process data.The data stored in a cache might be the result of an earlier computation or a copy of data stored elsewhere. Concluding, it is a component that stores data so that future requests for that data can be served in a unified and more efficient way. To make the Address Space a meaningful representation of the real process for a variety of generic data users it must expose data of the real process in the context of metadata. The Address Space is a collection of nodes that are instances of predefined types (`NodeClass`). Each `NodeClass` is defined as an invariable set of named attributes and a collection of references that shall be assigned (given) values when the node is instantiated. Numerous elements contribute to the overall process of creating and managing real process replication using the Address Space concept. A detailed description of this topic is covered by the section [Information Models Development](../../SemanticData/InformationModelsDevelopment.md). In general, two scenarios can be applied to create an instance of the Address Space: 1. **step-by-step**: users manage it using services available by the API (Application Program Interface) 2. **en block**: a hosting software application instantiates the Address Space as one whole using a formal description At run-time, the step-by-step approach can be applied using `NodeManagement Service Set` defined in [OPC UA Part 4: Services][Opc.UA.Part4]. This Service Set defines functionality to add and delete nodes and references between them in the Address Space that is part of the OPC UA Server application. Because the step-by-step approach shall be recognized as the run-time custom approach where the Address Space nodes graph depends on the behavior of users functionality it will need a migration path targeting generation of reusable deliverables (subsection *How to reuse models created in a step-by-step scenario*). To promote en block scenario and to create all nodes all together in a united group making up the Address Space content there is a need for a standard syntax that can be used to represent it in a form that can be read by a computer program. The [OPC UA Part 6 - Mappings][Opc.UA.Part6] defines an XML-based schema for this purpose: > `http://opcfoundation.org/UA/2011/03/UANodeSet.xsd` The XML documents compliant with this schema are called `UANodeSet`. This schema can also be used to serialize (i.e. import or export) an arbitrary set of Nodes in the Server Address Space. This serialized form can be used to save Server state for use by the Server later or to exchange with other applications (e.g. to support out-of-band configuration by a Client). The `UANodeSet` documents could also be obtained as an output of a compiler processing OPC UA Information Model as the input. > Regardless of the method applied to the generation of the `UANodeSet` manual modification of the document compliant with this schema is impractical or even impossible. To promote reusability, the publication of process real-time data and metadata in the Address Space requires a prior model development at design-time. From the section [Address Space Model Life-cycle][ASMLC], we can learn that design, development, deployment, and maintenance is a multi-phase engineering process. Moreover, the model deployment process varies depending on the server implementation. From this section, we can learn that there is a need for a domain-specific language that can be used to represent the OPC UA Information Model in a form that can be suitable for a selected development environment helping architects, engineers, and developers accomplish the above-mentioned tasks and follow the best practice rules. A domain-specific language is developed to meet a specific need. In this sense, a domain is a narrow area of interest, i.e. representation of the OPC UA Information Model. A language, domain-specific or not, consist of the following main ingredients: - **alphabet**: a set of readable letters or symbols in a fixed order - **syntax**: defines the notation with which users can express the relevant information (in this case the OPC UA Information Model). It may be textual, graphical, tabular or a mix of these - **semantics**: a set of rules that can be used to assign the meaning to the notation that is valid against syntax rules The [OPC UA Part 3][Opc.UA.Part3] defines a graphical notation for this purpose. It is normative, however, it is not required to be used. Graphical languages have the following drawbacks: 1. the drawing becomes huge and hard to maintain in case of complex models 2. it is impractical or even impossible to track the model modifications 3. the graphical representation is hard to be processed by computers Additionally, according to the specification, this graphical notation provides no mechanism to represent some important information required by a generic OPC UA Information Model representation. In some development environment, the Unified Modeling Language (UML) is also used instead. It is a standardized modeling language enabling developers to specify, visualize, construct and document artifacts of any information processing system. Because it is a generic language it doesn't have any related to the OPC UA Information Model well-defined semantics rules, so the association of the diagrams and their meaning must be based on intuition limiting the possibility to share the models. > Therefore instead of graphical notation, a textual `UAModelDesign` notation is commonly used as the domain-specific language supporting OPC UA Information Model design. ## `UAModelDesign` - what's this This library provides an implementation of the functionality aimed at the generation of the XML files compliant with the following schema > `http://opcfoundation.org/UA/ModelDesign.xsd` The documents compliant with this schema are referred to as `ModelDeign`. The schema definition is in the local file [UA Model Design.xsd](XML/UA%20Model%20Design.xsd) attached to the project. By design, the `UAModelDesign` schema describes the syntax of XML documents that are to be a representation of the OPC UA Information Model. These models may be defined by standardization organizations, vendors or end-users. More on designing and deploying OPC UA Information Model is covered by the section [Information Models Development](../../SemanticData/InformationModelsDevelopment.md). ## `UAModelDesign` - how to use it ### Introduction From the above, we can learn that design, development, deployment, and maintenance of the OPC UA Information Model is a multi-phase engineering process. Moreover, the model deployment varies depending on the server implementation. All of that causes that configuration, behavior and process data binding of the server is a complex task and that is why a development environment is required to help architects, engineers, and developers accomplish this task following the best practice rules. This development tools should support all aspects of the model deployment process including edition, validation, visualization, behavior/data binding definition, and generation of all files allowing the server to expose real-time process data in the context of metadata. Before nodes making up the Address Space can be instantiated by the server, the Address Space must be designed first. Model designing is a process aimed at defining a set of types and their associations and, next, creating an Address Space representation in a format appropriate for implementation. The `UAModelDesign` files are used by many tools to help: 1. Design and instantiate the Address Space 2. Add custom behavior represented in the Address Space by Method nodes 3. Bidirectionally bind Variable nodes Value attribute with a real process data A more detailed description of this topic is captured in the section [Address Space Model Life-cycle][ASMLC] In the next sections, two tools supporting the OPC UA Information Model deployment process are described. Both use the `UAModelDesign` files format as the input for further processing. ### UA-ModelCompiler XML documents compliant with the `UAModelDesign` schema may be used as the input for the compiler tool [OPC UA Information Model Compiler][OPC.UA.ModelCompiler]. This compiler generates XML files that may be used to instantiate the UA Address Space complaint wit the [OPC UA Part 3][Opc.UA.Part3]. It also creates the C# and ANSI C source code files which include the UA Services, data-types, error codes, etc.; and variety of the CSV files that contain NodeIds, error codes, and attributes, etc. Visit the above-mentioned home page of this tool to learn more. It is command-line tools and doesn't provide any UA Information Model design functionality. ### Address Space Model Designer The main challenge of the project [OPC UA Address Space Model Designer (ASMD)][CAS.ASMD] is to offer the designers a user-friendly tool supporting all aspects of the OPC UA Address Space model designing process. It brings together: designing, learning, and deploying. Description of the main features of the tool is covered by the section [Design and Deployment Support][DDSupport]. To make this tool as useful as possible, the definition of the created Address Space can be saved to the XML file compatible with the `UAModelDesign` schema used by the OPC UA Software Development Kit released by the OPC Foundation. The [ASMD][CAS.ASMD] implements conceptual containers called solutions and projects to apply their settings. Any solution contains one or more projects and it manages the way the designer configures, builds, and deploys sets of related projects. Any project includes source files containing the model representation and related metadata such as properties and references to other projects. The designer integrated development environment provides tools that help you edit and manipulate models, namespaces, and add references to external resources. Documents compliant with the `UAModelDesign` schema may be opened as an existing project. Visit the help documentation to learn how to manage the solution [OPC UA Address Space Model Designer Online Help][ASMD.Help]. ## How to get started Figure 1 visualizes dependencies across the code available in the `SemanticData` solution folder on the code map. This code map helps you see how the code fits together without reading through files and lines of code. ![Figure 1 Architecture](../../CommonResources/Media/SemanticData/UAOOI.SemanticData.Architecture.png) > For the sake of simplicity the unit tests have been removed from the diagram. The library `UAOOI.SemanticData.UAModelDesignExport.dll` (`UAModelDesignExport`) is used by the `asp.exe` (`asp`) tool to export `UAModelDesign` files using the `UAOOI.SemanticData.UANodeSetValidation.dll` (`UANodeSetValidation`). The `UANodeSetValidation` implements functionality of the `Address Space Management` described in the section [Semantic-Data Processing Architecture][SDPA]. The following code snippet contains the most relevant lines of code copied from `asp.exe` that could help you to get started development of a custom application based on this library. ``` C# IAddressSpaceContext _as = AddressSpaceFactory.AddressSpace; //Creates Address Space infrastructure exposed to the API clients using default messages handler. ModelDesignExport _exporter = new ModelDesignExport(); //creates new instance of the ModelDesignExport class that captures functionality supporting export of the OPC UA Information Model represented by an xml file compliant with UAModelDesign schema. ... _as.InformationModelFactory = _exporter.GetFactory(options.ModelDesignFileName, BuildErrorsHandling.Log.TraceEvent); //Sets the information model factory, which can be used to export a part of the OPC UA Address Space. ... _as.ImportUANodeSet(_fileToRead); //Imports a part of the OPC UA Address Space contained in the file compliant with the `UANodeSet` schema. ... _as.ValidateAndExportModel(options.IMNamespace); //Validates and exports the selected model. ... _exporter.ExportToXMLFile(options.Stylesheet); //Serializes the already generated model and writes the XML document to a file. ``` ## How to install the library using NuGet package This library is available as the NuGet package `UAOOI.SemanticData.UAModelDesignExport`. NuGet packages contain reusable code that other developers make available to you for use in your projects. See [What is NuGet?][nuget-intro] for background. Packages are installed into a Visual Studio project using the Package Manager UI or the Package Manager Console. The article [Quick start: Install and use a package in Visual Studio][nuget-install] demonstrates the process. ## How to reuse models created in a step-by-step scenario 1. Generate `UANodeSet` file using your favorite Software Development Kit (SDK) - instantiate Address Space using the available functionality or custom code - export the Address Space to `UANodeSet` file 2. Generate `UAModelDesign` file using [Address Space Prototyping Tool (ASP) tool][asp.exe] - import the already generated `UANodeSet` - export the UA Information Model to `UAModelDesign` file 3. Continue the model design using [ASMD tool][CAS.ASMD] - create new or reuse existing solution - open the `UAModelDesign` as the existing project 4. You are ready to modify the model according to your needs using [ASMD tool][CAS.ASMD] 5. If done generate all required files using build functionality offered by the [ASMD tool][CAS.ASMD] ## How to reuse models designed in UML 1. Design the UML model according to your needs - using a favorite tool design UML diagrams representing expected OPC UA Information Model - export the model to a suitable form supported as input by `UANodeSet` a custom generating tool - generate `UANodeSet` using the custom `UANodeSet` generating tool 2. Generate `UAModelDesign` file using [ASP tool][asp.exe] - import the already generated `UANodeSet` - export the UA Information Model to `UAModelDesign` file 3. Continue the model design using [ASMD tool][CAS.ASMD] - create a new or open existing solution - open the `UAModelDesign` as the existing project 4. You are ready to modify the model according to your needs using [ASMD tool][CAS.ASMD] 5. If done generate all required files using build functionality offered by the [ASMD tool][CAS.ASMD] ## XML External resources - [Index of /UA/schemas/1.04](https://opcfoundation.org/UA/schemas/1.04/) - [UAModelDesignExport](https://github.com/mpostol/OPC-UA-OOI/tree/master/SemanticData/UAModelDesignExport) - [OPC UA Information Model Compiler][OPC.UA.ModelCompiler] # TODO ## See also - [OPC Unified Architecture Specification Part 3: Address Space Model, OPC Foundation, Rel. 1.04, 2017-11-22][Opc.UA.Part3] - [OPC Unified Architecture Specification Part 4: Services, OPC Foundation, Rel. 1.04, 2017-11-22][Opc.UA.Part4] - [OPC Unified Architecture Specification Part 6: Mappings, OPC Foundation, Rel. 1.04, 2017-11-22][OPC.UA.Part6] - [Information Models Development](../../SemanticData/InformationModelsDevelopment.md) - [An introduction to NuGet][nuget-intro] - [Quick start: Install and use a package in Visual Studio][nuget-install] - [Address Space Model Life-cycle][ASMLC] - [Design and Deployment Support][DDSupport] - [OPC UA Address Space Model Designer tool][CAS.ASMD] - [OPC UA Address Space Model Designer WIKI][ASMD.Help] - [Semantic-Data Processing Architecture][SDPA] - [Address Space Prototyping Tool (ase.exe)][asp.exe] [asp.exe]:../../SemanticData/AddressSpaceComplianceTestTool/README.md [SDPA]:../README.MD [ASMD.Help]:https://github.com/mpostol/ASMD/wiki [CAS.ASMD]: https://github.com/mpostol/ASMD [nuget-intro]:https://docs.microsoft.com/en-us/nuget/what-is-nuget [nuget-install]:https://docs.microsoft.com/en-us/nuget/quickstart/install-and-use-a-package-in-visual-studio [ASMLC]:../InformationModelLifecycle.md [Opc.UA.Part3]:https://opcfoundation.org/developer-tools/specifications-unified-architecture/part-3-address-space-model/ [Opc.UA.Part6]:https://opcfoundation.org/developer-tools/specifications-unified-architecture/part-6-mappings/ [Opc.UA.Part4]:https://opcfoundation.org/developer-tools/specifications-unified-architecture/part-4-services/ [DDSupport]:../../SemanticData/DesignDeploymentSupport.md [OPC.UA.ModelCompiler]:https://github.com/mpostol/UA-ModelCompiler#opc-ua-information-model-compiler- ================================================ FILE: SemanticData/UAModelDesignExport/ReferenceFactoryBase.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System.Xml; using UAOOI.SemanticData.InformationModelFactory; using UAOOI.SemanticData.UAModelDesignExport.XML; namespace UAOOI.SemanticData.UAModelDesignExport { internal class ReferenceFactoryBase : IReferenceFactory { #region IReferenceFactory /// /// Sets the type of the reference. /// /// The type of the reference. public XmlQualifiedName ReferenceType { set; private get; } /// /// Sets the target identifier. /// /// The target identifier. public XmlQualifiedName TargetId { set; private get; } /// /// Sets a value indicating whether this instance is inverse. /// /// true if this instance is inverse; otherwise, false. public bool IsInverse { set; private get; } #endregion #region internal API internal Reference Export() { return new Reference() { IsInverse = this.IsInverse, IsOneWay = false, //Not supported ReferenceType = this.ReferenceType, TargetId = TargetId }; } #endregion } } ================================================ FILE: SemanticData/UAModelDesignExport/ReferenceTypeFactoryBase.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System; using System.Collections.Generic; using UAOOI.SemanticData.BuildingErrorsHandling; using UAOOI.SemanticData.InformationModelFactory; using UAOOI.SemanticData.UAModelDesignExport.XML; namespace UAOOI.SemanticData.UAModelDesignExport { /// /// Class ReferenceTypeFactoryBase. /// Implements the /// Implements the /// /// /// internal class ReferenceTypeFactoryBase : TypeFactoryBase, IReferenceTypeFactory { /// /// Initializes a new instance of the class. /// /// The trace event. public ReferenceTypeFactoryBase(Action traceEvent) : base(traceEvent) { } //IReferenceTypeFactory /// /// Sets a value indicating whether this is symmetric. The Symmetric attribute is used to indicate whether or not the meaning of the reference type is the same for both the source and target nodes. /// If a reference type is symmetric, the InverseName attribute shall be omitted.Examples of symmetric reference types are “Connects To” and “Communicates With”. Both imply the same semantic coming from the source node or the target node. /// If the ReferenceType is non-symmetric and not abstract, the InverseName attribute shall be set. The optional InverseName attribute of LocalizedText ia a inverse name of the reference, /// i.e.the meaning of the type as seen from the target node. Examples of non-symmetric reference types include “Contains” and “Contained In”, and “Receives From” and “Sends To”. /// /// true if symmetric; otherwise, false. /// Default Value is false public bool Symmetric { set; private get; } /// /// Adds a new inverse name. /// /// The locale field. /// The value field. public void AddInverseName(string localeField, string valueField) { Extensions.AddLocalizedText(localeField, valueField, ref m_InverseName, TraceEvent); } //internal API internal override NodeDesign Export(List path, Action> createInstanceType) { ReferenceTypeDesign _ret = new ReferenceTypeDesign() { InverseName = m_InverseName, Symmetric = this.Symmetric, SymmetricSpecified = this.Symmetric }; Update(_ret, path, createInstanceType); return _ret; } //private private LocalizedText m_InverseName; } } ================================================ FILE: SemanticData/UAModelDesignExport/SemanticData.UAModelDesignExport.csproj ================================================ netstandard2.0 UAOOI.SemanticData.UAModelDesignExport UAOOI.SemanticData.UAModelDesignExport This library provides implementation o f the export an XML file compliant with the UAModelDeign schema. By design The UAModelDeign schema describes the structure of an XML document representing the OPC UA Information Model that is used as the input for the [`UA-ModelCompiler`](https://github.com/OPCFoundation/UA-ModelCompiler). GitHub Copyright (C) 2022 Mariusz Postol LODZ POLAND Mariusz Postol commsvr.com Object Oriented Internet MIT https://commsvr.gitbook.io/ooi/readme https://github.com/mpostol/OPC-UA-OOI GitHub Object Oriented Internet, OPC UA, Information Model, IoT, M2M, DOA true OPCUAOOIKey.snk Library 6.4.6 6.5.0 6.5.0 https://github.com/mpostol/OPC-UA-OOI/blob/master/CommonResources/Media/Logo64.PNG?raw=true Object-Oriented Internet Semantic-Data UAModelDesign Export false bin\Debug\netstandard2.0\UAOOI.SemanticData.UAModelDesignExport.xml bin\Debug\netstandard2.0\ 1701;1702;IDE0001 bin\UAOOI.SemanticData.UAModelDesignExport.xml True True UAModelDesignExport.Nuget.tt TextTemplatingFileGenerator UAModelDesignExport.Nuget.nuspec ================================================ FILE: SemanticData/UAModelDesignExport/TypeFactoryBase.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System; using System.Collections.Generic; using System.Xml; using UAOOI.SemanticData.BuildingErrorsHandling; using UAOOI.SemanticData.InformationModelFactory; using UAOOI.SemanticData.UAModelDesignExport.XML; namespace UAOOI.SemanticData.UAModelDesignExport { /// /// Class TypeFactoryBase. /// Implements the /// Implements the /// /// /// internal abstract class TypeFactoryBase : NodeFactoryBase, ITypeFactory { /// /// Initializes a new instance of the class. /// /// The trace event. public TypeFactoryBase(Action traceEvent) : base(traceEvent) { } #region ITypeFactory /// /// Sets the base type of the node. /// /// The base type represented by the . public XmlQualifiedName BaseType { set; private get; } /// /// Sets a value indicating whether this instance is abstract. /// /// true if this instance is abstract; otherwise, false. /// Default Value is false public bool IsAbstract { set; private get; } #endregion //internal API internal void Update(TypeDesign nodeDesign, List path, Action> createInstanceType) { nodeDesign.BaseType = this.BaseType; nodeDesign.ClassName = String.Empty; nodeDesign.IsAbstract = this.IsAbstract; nodeDesign.NoClassGeneration = false; base.UpdateNode(nodeDesign, path, createInstanceType); } } } ================================================ FILE: SemanticData/UAModelDesignExport/VariableInstanceFactoryBase.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System; using System.Collections.Generic; using System.Xml; using UAOOI.SemanticData.BuildingErrorsHandling; using UAOOI.SemanticData.InformationModelFactory; using UAOOI.SemanticData.UAModelDesignExport.XML; namespace UAOOI.SemanticData.UAModelDesignExport { internal class VariableInstanceFactoryBase : InstanceFactoryBase, IVariableInstanceFactory { /// /// Initializes a new instance of the class. /// /// The trace event. public VariableInstanceFactoryBase(System.Action traceEvent) : base(traceEvent) { } #region IVariableInstanceFactory /// /// Sets the access level. The AccessLevel attribute indicates the accessibility of the Value of a Variable node not taking user access rights into account and /// applies only to a UAVariable element. The AccessLevel attribute is used to indicate how the Value of a Variable node can be accessed (read/write) and /// if it contains current and/or historic data. The AccessLevel does not take any user access rights into account, i.e. although the Variable is writable this /// may be restricted to a certain user / user group. /// /// The access level. public uint? AccessLevel { set; private get; } /// /// Sets the array dimensions. This property specifies the length of each dimension for an array value. It is intended to describe the capability of the Variable, not the current size. /// The number of elements shall be equal to the value defined by the ValueRank. It shall be null if ValueRank ≤ 0. The value of 0 for an individual dimension indicates that the dimension has /// a variable length. For example, if a Variable is defined by the following C array: /// Int32 myArray[346]; /// then the DataType would point to an Int32, the ValueRank has the value 1 and the ArrayDimensions is an array with one entry having the value 346. /// Note that the maximum length of an array transferred on the wire is 2147483647 (max Int32) and a multidimensional array is encoded as a one dimensional array. /// /// The array dimensions. /// ArrayDimensions is ignored if ValueRank is not equal to the OneOrMoreDimensions. public string ArrayDimensions { set; private get; } /// /// Sets the type of the data. of the DataType definition for the Value. It is not required that the pointed out element is defined in the same document. /// If that is the case many documents must be combined to resolve and validate this reference. /// /// The type of the data. public XmlQualifiedName DataType { set; private get; } /// /// Sets the default value. The value of the Variable node that the server assigns while instantiating the node. Its data type is defined by the DataType field. /// /// The default value. public XmlElement DefaultValue { set; internal get; } /// /// Sets a value indicating whether this is historizing. The Historizing attribute indicates whether the server is actively /// collecting data for the history of the Variable node. This differs from the AccessLevel which identifies if the Variable has any historical data. A value of true /// indicates that the server is actively collecting data. A value of false indicates that the server is not actively collecting data. Default value is false. /// /// true if historizing; otherwise, false. public bool? Historizing { set; private get; } /// /// Sets the minimum sampling interval. The MinimumSamplingInterval attribute indicates how “current” the Value of the Variable NodeClass will be kept. /// It specifies (in milliseconds) how fast the server can reasonably sample the value for changes. The accuracy of this value (the ability of the server to attain /// “best case” performance) can be greatly affected by the system load and other factors. A MinimumSamplingInterval of 0 indicates that the server is to monitor the /// item continuously. A MinimumSamplingInterval of -1 means indeterminate value. /// /// The minimum sampling interval. public int? MinimumSamplingInterval { set; private get; } /// /// Sets the user access level. The UserAccessLevel attribute is used to indicate how the Value attribute of a Variable NodeClass can be accessed (read/write) /// and if it contains current or historic data taking user access rights into account. It applies only to a UAVariable element. If the OPC UA Server does not /// have the ability to get any user access rights related information from the underlying system it should use the same bit mask as used in the AccessLevel attribute. /// The UserAccessLevel attribute can restrict the accessibility indicated by the AccessLevel, but not exceed it. /// /// The user access level. public byte? UserAccessLevel { set; private get; } /// /// Sets the value rank. This property indicates whether the value is an array and how many dimensions the array has. /// It may have the following values: /// - n > 1: the Value is an array with the specified number of dimensions. /// - >OneDimension (1): The value is an array with one dimension. /// - OneOrMoreDimensions (0): The value is an array with one or more dimensions. /// - Scalar (−1): The value is not an array. /// - Any (−2): The value can be a scalar or an array with any number of dimensions. /// - ScalarOrOneDimension (−3): The value can be a scalar or a one dimensional array. /// NOTE: All build in DataTypes are considered to be scalar, even if they have array-like semantics like ByteString and String. /// /// The value rank. public int? ValueRank { set; private get; } #endregion //internal API internal override NodeDesign Export(List path, Action> createInstanceType) { VariableDesign _ret = new VariableDesign() { }; Update(_ret, path, createInstanceType); return _ret; } //private protected void Update(VariableDesign node, List path, Action> createInstanceType) { node.AccessLevel = this.AccessLevel.GetAccessLevel(x => node.AccessLevelSpecified = x, TraceEvent); node.ValueRank = this.ValueRank.GetValueRank(x => node.ValueRankSpecified = x, TraceEvent); node.ArrayDimensions = this.ArrayDimensions; node.DataType = this.DataType; //TODO must be DataType, must not be abstract node.DefaultValue = this.DefaultValue; //TODO must be of type defined by DataType node.Historizing = this.Historizing.GetValueOrDefault(); node.HistorizingSpecified = this.Historizing.HasValue; node.MinimumSamplingInterval = this.MinimumSamplingInterval.GetValueOrDefault(); node.MinimumSamplingIntervalSpecified = this.MinimumSamplingInterval.HasValue; base.UpdateInstance(node, path, TraceEvent, createInstanceType); } } } ================================================ FILE: SemanticData/UAModelDesignExport/VariableTypeFactoryBase.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System; using System.Collections.Generic; using System.Xml; using UAOOI.SemanticData.BuildingErrorsHandling; using UAOOI.SemanticData.InformationModelFactory; using UAOOI.SemanticData.UAModelDesignExport.XML; namespace UAOOI.SemanticData.UAModelDesignExport { /// /// Class VariableTypeFactoryBase. /// Implements the /// Implements the /// /// /// internal class VariableTypeFactoryBase : TypeFactoryBase, IVariableTypeFactory { /// /// Initializes a new instance of the class. /// /// The trace event. public VariableTypeFactoryBase(Action traceEvent) : base(traceEvent) { } #region IVariableTypeFactory /// /// Sets the default value. The value of the Variable node that the server assigns while instantiating the node. Its data type is defined by the . /// /// The default value. public XmlElement DefaultValue { set; private get; } /// /// Sets the type of the data. of the DataType definition for the Value. It is not required that the pointed out element is defined in the same document. /// If that is the case many documents must be combined to resolve and validate this reference. /// /// The type of the data. public XmlQualifiedName DataType { set; private get; } /// /// Sets the value rank. This property indicates whether the value is an array and how many dimensions the array has. /// It may have the following values: /// - n > 1: the Value is an array with the specified number of dimensions. /// - >OneDimension (1): The value is an array with one dimension. /// - OneOrMoreDimensions (0): The value is an array with one or more dimensions. /// - Scalar (−1): The value is not an array. /// - Any (−2): The value can be a scalar or an array with any number of dimensions. /// - ScalarOrOneDimension (−3): The value can be a scalar or a one dimensional array. /// NOTE: All build in DataTypes are considered to be scalar, even if they have array-like semantics like ByteString and String. /// /// The value rank. public int? ValueRank { set; private get; } /// /// Sets the array dimensions. This property specifies the length of each dimension for an array value. It is intended to describe the capability of the Variable, not the current size. /// The number of elements shall be equal to the value defined by the ValueRank. It shall be null if ValueRank ≤ 0. The value of 0 for an individual dimension indicates that the dimension has /// a variable length. For example, if a Variable is defined by the following C array: /// Int32 myArray[346]; /// then the DataType would point to an Int32, the ValueRank has the value 1 and the ArrayDimensions is an array with one entry having the value 346. /// Note that the maximum length of an array transferred on the wire is 2147483647 (max Int32) and a multidimensional array is encoded as a one dimensional array. /// /// The array dimensions. /// ArrayDimensions is ignored if ValueRank is not equal to the OneOrMoreDimensions. public string ArrayDimensions { set; private get; } #endregion //internal API internal override NodeDesign Export(List path, Action> createInstanceType) { VariableTypeDesign _ret = new VariableTypeDesign() { ArrayDimensions = this.ArrayDimensions, DataType = this.DataType, DefaultValue = this.DefaultValue, //Not supported by the VariableType NodeClass ExposesItsChildren = false, AccessLevel = AccessLevel.ReadWrite, AccessLevelSpecified = false, Historizing = false, HistorizingSpecified = false, MinimumSamplingInterval = 0, MinimumSamplingIntervalSpecified = false, }; _ret.ValueRank = this.ValueRank.GetValueRank(x => _ret.ValueRankSpecified = x, TraceEvent); base.Update(_ret, path, createInstanceType); return _ret; } } } ================================================ FILE: SemanticData/UAModelDesignExport/ViewInstanceFactoryBase.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System; using System.Collections.Generic; using UAOOI.SemanticData.BuildingErrorsHandling; using UAOOI.SemanticData.InformationModelFactory; using UAOOI.SemanticData.UAModelDesignExport.XML; namespace UAOOI.SemanticData.UAModelDesignExport { /// /// Class ViewInstanceFactoryBase. /// Implements the /// Implements the /// /// /// internal class ViewInstanceFactoryBase : InstanceFactoryBase, IViewInstanceFactory { /// /// Initializes a new instance of the class. /// /// The trace event. public ViewInstanceFactoryBase(Action traceEvent) : base(traceEvent) { } //IViewInstanceFactory /// /// Sets a value indicating whether the events are supported. /// /// null if it contains no value, true if events are supported; otherwise, false. public bool? SupportsEvents { set; private get; } /// /// Sets a value indicating whether the part of the Address Space represented by View contains no loops. /// The mandatory ContainsNoLoops attribute is set to false if the server is not able to identify if the view contains loops or not. /// /// true if the part of the Address Space represented by View contains no loops; otherwise, false. public bool ContainsNoLoops { set; private get; } //internal API internal override NodeDesign Export(List path, Action> createInstanceType) { ViewDesign _ret = new ViewDesign() { ContainsNoLoops = this.ContainsNoLoops, //TODO test against the loops. SupportsEvents = this.SupportsEvents.GetValueOrDefault(), }; UpdateInstance(_ret, path, TraceEvent, createInstanceType); return _ret; } } } ================================================ FILE: SemanticData/UAModelDesignExport/XML/Resource.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2021, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ using System; using System.Globalization; using System.IO; using System.Reflection; using UAOOI.Common.Infrastructure.Serializers; namespace UAOOI.SemanticData.UAModelDesignExport.XML { /// /// Resources management helper class /// public static class UAResources { /// /// Loads the OPC UA defined types. /// /// An instance of representing UA defined types public static ModelDesign LoadUADefinedTypes() { try { Assembly assembly = Assembly.GetExecutingAssembly(); using (Stream stream = assembly.GetManifestResourceStream(UADefinedTypesName)) return XmlFile.ReadXmlFile(stream); } catch (Exception e) { throw new FileNotFoundException(string.Format(CultureInfo.InvariantCulture, "Could not load resource '{0}' because the exception {1} reports the error {2}.", UADefinedTypesName, e.GetType().Name, e.Message), e); } } private static string UADefinedTypesName => $"{typeof(UAResources).Namespace}.UA Defined Types.xml"; } } ================================================ FILE: SemanticData/UAModelDesignExport/XML/UA Defined Types.xml ================================================  http://opcfoundation.org/UA/ Default Binary The default binary encoding for a data type. Default XML The default XML encoding for a data type. Describes a value that can have any valid DataType. Describes a value that can have any numeric DataType. Describes a value that can have any integer DataType. Describes a value that can have any unsigned integer DataType. Describes a value that is an enumerated DataType. Describes a value that is either TRUE or FALSE. Describes a value that is an integer between -128 and 127. Describes a value that is an integer between 0 and 255. Describes a value that is an integer between −32,768 and 32,767. Describes a value that is an integer between 0 and 65535. Describes a value that is an integer between −2,147,483,648 and 2,147,483,647. Describes a value that is an integer between 0 and 4,294,967,295. Describes a value that is an integer between −9,223,372,036,854,775,808 and 9,223,372,036,854,775,807. Describes a value that is an integer between 0 and 18,446,744,073,709,551,615. Describes a value that is an IEEE 754-1985 single precision floating point number. Describes a value that is an IEEE 754-1985 double precision floating point number. Describes a value that is a sequence of printable Unicode characters. Describes a value that is a Gregorian calender date and time. Describes a value that is a 128-bit globally unique identifier. Describes a value that is a sequence of bytes. Describes a value that is an XML element. Describes a value that is an identifier for a node within a Server address space. Describes a value that is an absolute identifier for a node. Describes a value that is a code representing the outcome of an operation by a Server. Describes a value that is a name qualified by a namespace. Describes a value that is human readable Unicode text with a locale identifier. Describes a value that is any type of structure that can be described with a data encoding. Describes a value that is a structure containing a value, a status code and timestamps. Describes a value that is a structure containing diagnostics associated with a StatusCode. Describes a value that is an image encoded as a string of bytes. Describes an arbitrary precision decimal value. The abstract base type for all references. The abstract base type for all non-hierarchical references. The abstract base type for all hierarchical references. The abstract base type for all non-looping hierarchical references. ChildOf The type for hierarchical references that are used to organize nodes. OrganizedBy The type for non-looping hierarchical references that are used to organize event sources. EventSourceOf The type for references from instance declarations to modelling rule nodes. ModellingRuleOf The type for references from data type nodes to to data type encoding nodes. EncodingOf The type for references from data type encoding nodes to data type description nodes. DescriptionOf The type for references from a instance node its type defintion node. TypeDefinitionOf The type for references from a node to an event type that is raised by node. GeneratedBy The type for references from a node to an event type that is always raised by node. AlwaysGeneratedBy The type for non-looping hierarchical references that are used to aggregate nodes into complex types. AggregatedBy The type for non-looping hierarchical references that are used to define sub types. SubtypeOf The type for non-looping hierarchical reference from a node to its property. PropertyOf The type for non-looping hierarchical reference from a node to its component. ComponentOf The type for non-looping hierarchical references that are used to indicate how events propagate from node to node. NotifierOf The type for non-looping hierarchical reference from a node to its component when the order of references matters. OrderedComponentOf The type for a reference to the state before a transition. ToTransition The type for a reference to the state after a transition. FromTransition The type for a reference to a method that can cause a transition to occur. MayBeCausedBy The type for a reference to an event that may be raised when a transition occurs. MayBeEffectedBy The type for a reference to a substate for a state. SubStateMachineOf The type for a reference to the historical configuration for a data variable. HistoricalConfigurationOf The base type for all object nodes. The type for objects that organize other nodes. The abstract base type for all variable nodes. The type for variable that represents a process value. The type for variable that represents a property of another node. The type for variable that represents the description of a data type encoding. The version number for the data type description. A fragment of a data type dictionary that defines the data type. The type for variable that represents the collection of data type decriptions. The version number for the data type dictionary. A URI that uniquely identifies the dictionary. Indicates that all of the definitions for the dictionary are available through a DataTypeDefinition Attribute. Describes a value that specifies the significance of the BrowseName for an instance declaration. The BrowseName must appear in all instances of the type. The BrowseName may appear in an instance of the type. The modelling rule defines a constraint and the BrowseName is not used in an instance of the type. The type for an object that describes how an instance declaration is used when a type is instantiated. 1 Mandatory Specifies that an instance with the attributes and references of the instance declaration must appear when a type is instantiated. 1 Optional Specifies that an instance with the attributes and references of the instance declaration may appear when a type is instantiated. 2 ExposesItsArray Specifies that an instance appears for each element of the containing array variable. 3 OptionalPlaceholder Specifies that zero or more instances with the attributes and references of the instance declaration may appear when a type is instantiated. 2 MandatoryPlaceholder Specifies that one or more instances with the attributes and references of the instance declaration must appear when a type is instantiated. 1 Root The root of the server address space. Objects The browse entry point when looking for objects in the server address space. tns:Organizes tns:RootFolder Types The browse entry point when looking for types in the server address space. tns:Organizes tns:RootFolder Views The browse entry point when looking for views in the server address space. tns:Organizes tns:RootFolder ObjectTypes The browse entry point when looking for object types in the server address space. tns:Organizes tns:TypesFolder tns:Organizes tns:BaseObjectType VariableTypes The browse entry point when looking for variable types in the server address space. tns:Organizes tns:TypesFolder tns:Organizes tns:BaseVariableType DataTypes The browse entry point when looking for data types in the server address space. tns:Organizes tns:TypesFolder tns:Organizes tns:BaseDataType ReferenceTypes The browse entry point when looking for reference types in the server address space. tns:Organizes tns:TypesFolder tns:Organizes tns:References XML Schema A type system which uses XML schema to describe the encoding of data types. tns:Organizes tns:DataTypesFolder OPC Binary A type system which uses OPC binary schema to describe the encoding of data types. tns:Organizes tns:DataTypesFolder ArgumentDescriptionOf OptionalInputArgumentDescriptionOf http://opcfoundation.org/UA/ http://opcfoundation.org/UA/ 1.04.10 2021-09-15T00:00:00 false 0 1:65535 tns:HasComponent tns:Server_Namespaces The version number of the node (used to indicate changes to references of the owning node). The version number of the view. A small image representing the object. The local time where the owning variable value was collected. Whether the value of the owning variable is allowed to be null. The string representation of the current value for a variable with an enumerated data type. The maximum number of bytes supported by the DataVariable. The maximum number of Unicode characters supported by the DataVariable. The maximum length for a byte string that can be stored in the owning variable. The maximum length for an array that can be stored in the owning variable. The engineering units for the value of the owning variable. The human readable strings associated with the values of an enumerated value (when values are sequential). The human readable strings associated with the values of an enumerated value (when values have no sequence). Contains the human-readable representation for each bit of the bit mask. The input arguments for a method. The output arguments for a method. Allows the definition of BrowseName on an ObjectType that all instances should use by default. An image encoded in BMP format. An image encoded in GIF format. An image encoded in JPEG format. An image encoded in PNG format. An image encoded in PNG format. This abstract DataType is the base DataType for all union DataTypes. Specifies the current status and capabilities of the server. The list of server URIs used by the server. The list of namespace URIs used by the server. Defines the version of the ServerArray and the NamespaceArray. The current status of the server. A value indicating the level of service the server can provide. 255 indicates the best. A flag indicating whether the server is currently generating audit events. Indicates the time at which the Server is expected to be available in the state RUNNING. Indicates the time zone the Server is is running in. Describes capabilities supported by the server. Reports diagnostics about the server. Server information provided by the vendor. Describes the redundancy capabilities of the server. Describes the namespaces supported by the server. Returns the monitored items for a subscription. Resends the last values cached for each data monitored item in the subscription. Sets the durable state for the subscription. Requests a state change in the server. ServerObject Describes the capabilities supported by the server. A list of profiles supported by the server. A list of locales supported by the server. The minimum sampling interval supported by the server. The maximum number of continuation points for Browse operations per session. The maximum number of continuation points for Query operations per session. The maximum number of continuation points for ReadHistory operations per session. The software certificates owned by the server. The maximum length for an array value supported by the server. The maximum length for a string value supported by the server. The maximum length for a byte string value supported by the server. Defines the limits supported by the server for different operations. A folder for the modelling rules supported by the server. A folder for the real time aggregates supported by the server. <VendorCapability> Describes the roles supported by the server. The diagnostics information for a server. A summary of server level diagnostics. A list of diagnostics for each sampling interval supported by the server. A list of diagnostics for each active subscription. A summary of session level diagnostics. If TRUE the diagnostics collection is enabled. Provides a summary of session level diagnostics. A list of diagnostics for each active session. A list of security related diagnostics for each active session. <ClientName> A container for session level diagnostics information. Diagnostics information for an active session. Security related diagnostics information for an active session. A list of diagnostics for each subscription owned by the session. A base type for vendor specific server information. A base type for an object that describe how a server supports redundancy. Indicates what style of redundancy is supported by the server. Identifies the capabilties of server that supports transparent redundancy. The ID of the server that is currently in use. A list of servers in the same redundant set. Identifies the capabilties of server that supports non-transparent redundancy. A list of servers in the same redundant set. Identifies the operation limits imposed by the server. The maximum number of operations in a single Read request. The maximum number of operations in a single data HistoryRead request. The maximum number of operations in a single event HistoryRead request. The maximum number of operations in a single Write request. The maximum number of operations in a single data HistoryUpdate request. The maximum number of operations in a single event HistoryUpdate request. The maximum number of operations in a single Call request. The maximum number of operations in a single Browse request. The maximum number of operations in a single RegisterNodes request. The maximum number of operations in a single TranslateBrowsePathsToNodeIds request. The maximum number of operations in a single AddNodes, AddReferences, DeleteNodes or DeleteReferences request. The maximum number of operations in a single MonitoredItem related request. An object that represents a file that can be accessed via the server. A file used to store a namespace exported from the server. Updates the file by exporting the server namespace. Provides the metadata for a namespace used by the server. The URI of the namespace. The human readable string representing version of the namespace. The publication date for the namespace. If TRUE then the server only supports a subset of the namespace. A list of IdTypes for nodes which are the same in every server that exposes them. A list of ranges for numeric node ids which are the same in every server that exposes them. A regular expression which matches string node ids are the same in every server that exposes them. A file containing the nodes of the namespace. A container for the namespace metadata provided by the server. <NamespaceIdentifier> The base type for all events. A globally unique identifier for the event. The identifier for the event type. The source of the event. A description of the source of the event. When the event occurred. When the server received the event from the underlying system. Information about the local time where the event originated. A localized description of the event. Indicates how urgent an event is. A base type for events used to track client initiated changes to the server state. When the action triggering the event occurred. If TRUE the action was performed. If FALSE the action failed and the server state did not change. The unique identifier for the server generating the event. The log entry id provided in the request that initiated the action. The user identity associated with the session that initiated the action. A base type for events used to track security related changes. A base type for events used to track related changes to a secure channel. The identifier for the secure channel that was changed. An event that is raised when a secure channel is opened. The certificate provided by the client. The thumbprint for certificate provided by the client. The type of request (NEW or RENEW). The security policy used by the channel. The security mode used by the channel. The lifetime of the channel requested by the client. A base type for events used to track related changes to a session. The unique identifier for the session,. An event that is raised when a session is created. The secure channel associated with the session. The certificate provided by the client. The thumbprint of the certificate provided by the client. The timeout for the session. BuildInfoVariable EventTypes tns:Organizes tns:TypesFolder tns:Organizes tns:BaseEventType tns:Organizes tns:ObjectsFolder CurrentServerId RedundantServerArray ServerUriArray ServerNetworkGroups HistoryServerCapabilities tns:HasComponent tns:Server_ServerCapabilities A mask of 32 bits that can be updated individually by using the top 32 bits as a mask. StateMachineState StateMachineInitialState StateMachineTransition StateMachineChoiceStateType GuardOf 3DVectorType 3DCartesianCoordinatesType 3DOrientationType 3DFrameType 3DVector 3DCartesianCoordinates 3DOrientation 3DFrame <FileDirectoryName> tns:Organizes <FileName> tns:Organizes Delete <TransferState> 1 2 3 4 5 12 tns:FromState tns:FileTransferStateMachineType_Idle tns:ToState tns:FileTransferStateMachineType_ReadPrepare tns:HasEffect tns:TransitionEventType 23 tns:FromState tns:FileTransferStateMachineType_ReadPrepare tns:ToState tns:FileTransferStateMachineType_ReadTransfer tns:HasEffect tns:TransitionEventType 31 tns:FromState tns:FileTransferStateMachineType_ReadTransfer tns:ToState tns:FileTransferStateMachineType_Idle tns:HasEffect tns:TransitionEventType 14 tns:FromState tns:FileTransferStateMachineType_Idle tns:ToState tns:FileTransferStateMachineType_ApplyWrite tns:HasEffect tns:TransitionEventType 41 tns:FromState tns:FileTransferStateMachineType_ApplyWrite tns:ToState tns:FileTransferStateMachineType_Idle tns:HasEffect tns:TransitionEventType 25 tns:FromState tns:FileTransferStateMachineType_ReadPrepare tns:ToState tns:FileTransferStateMachineType_Error tns:HasEffect tns:TransitionEventType 35 tns:FromState tns:FileTransferStateMachineType_ReadTransfer tns:ToState tns:FileTransferStateMachineType_Error tns:HasEffect tns:TransitionEventType 45 tns:FromState tns:FileTransferStateMachineType_ApplyWrite tns:ToState tns:FileTransferStateMachineType_Error tns:HasEffect tns:TransitionEventType 51 tns:FromState tns:FileTransferStateMachineType_Error tns:ToState tns:FileTransferStateMachineType_Idle tns:HasEffect tns:TransitionEventType A container for the roles supported by the server. <RoleName> Anonymous Anonymous The Role has very limited access for use when a Session has anonymous credentials. tns:HasComponent tns:Server_ServerCapabilities_RoleSet AuthenticatedUser AuthenticatedUser The Role has limited access for use when a Session has valid non-anonymous credentials but has not been explicity granted access to a Role. tns:HasComponent tns:Server_ServerCapabilities_RoleSet Observer Observer The Role is allowed to browse, read live data, read historical data/events or subscribe to data/events. tns:HasComponent tns:Server_ServerCapabilities_RoleSet Operator Operator The Role is allowed to browse, read live data, read historical data/events or subscribe to data/events. tns:HasComponent tns:Server_ServerCapabilities_RoleSet Engineer Engineer The Role is allowed to browse, read live data, read and update historical data/events, call methods or subscribe to data/events. tns:HasComponent tns:Server_ServerCapabilities_RoleSet Supervisor Supervisor The Role is allowed to browse, read live data, read and historical data/events, call methods or subscribe to data/events. tns:HasComponent tns:Server_ServerCapabilities_RoleSet ConfigureAdmin ConfigureAdmin The Role is allowed to change the non-security related configuration settings. tns:HasComponent tns:Server_ServerCapabilities_RoleSet SecurityAdmin SecurityAdmin The Role is allowed to change security related settings. tns:HasComponent tns:Server_ServerCapabilities_RoleSet <DictionaryEntryName> <DictionaryFolderName> <DictionaryEntryName> tns:HasComponent tns:Server DictionaryEntryOf tns:Organizes tns:BaseInterfaceType tns:Organizes tns:TypesFolder InterfaceOf AddInOf <OrderedObject> tns:HasInterface tns:IOrderedObjectType tns:HasOrderedComponent tns:GeneratesEvent tns:GeneralModelChangeEventType A variable that contains live automation data. A vendor-specific, human readable string that specifies how the value of this DataItem is calculated. The maximum precision that the server can maintain for the item based on restrictions in the target environment. IsTrueSubStateOf IsFalseSubStateOf IsAlarmSuppressionGroupOf MemberOfAlarmGroup en Enabled en Disabled tns:AlwaysGeneratesEvent tns:AuditConditionEnableEventType tns:AlwaysGeneratesEvent tns:AuditConditionEnableEventType tns:AlwaysGeneratesEvent tns:AuditConditionCommentEventType tns:AlwaysGeneratesEvent tns:RefreshStartEventType tns:AlwaysGeneratesEvent tns:RefreshEndEventType tns:AlwaysGeneratesEvent tns:RefreshStartEventType tns:AlwaysGeneratesEvent tns:RefreshEndEventType The identifier for the subscription to refresh. The identifier for the monitored item to refresh. The identifier for the subscription to refresh. The identifier for the event to comment. The comment to add to the condition. tns:HasTrueSubState tns:DialogConditionType_DialogState en Active en Inactive tns:AlwaysGeneratesEvent tns:AuditConditionRespondEventType The response to the dialog condition. tns:HasTrueSubState tns:AcknowledgeableConditionType_AckedState tns:HasTrueSubState tns:AcknowledgeableConditionType_ConfirmedState en Acknowledged en Unacknowledged en Confirmed en Unconfirmed tns:AlwaysGeneratesEvent tns:AuditConditionAcknowledgeEventType tns:AlwaysGeneratesEvent tns:AuditConditionConfirmEventType tns:HasTrueSubState tns:AlarmConditionType_ActiveState tns:HasTrueSubState tns:AlarmConditionType_SuppressedState tns:HasTrueSubState tns:AlarmConditionType_ShelvingState en Active en Inactive en Suppressed en Unsuppressed en Out of Service en In Service en Silenced en Not Silenced en Latched en Unlatched <AlarmGroup> tns:HasAlarmSuppressionGroup tns:AlwaysGeneratesEvent tns:AuditConditionSilenceEventType tns:AlwaysGeneratesEvent tns:AuditConditionSuppressionEventType tns:AlwaysGeneratesEvent tns:AuditConditionSuppressionEventType tns:AlwaysGeneratesEvent tns:AuditConditionOutOfServiceEventType tns:AlwaysGeneratesEvent tns:AuditConditionOutOfServiceEventType tns:AlwaysGeneratesEvent tns:AuditConditionResetEventType <AlarmConditionInstance> tns:AlarmGroupMember 1 2 3 12 tns:FromState tns:ShelvedStateMachineType_Unshelved tns:ToState tns:ShelvedStateMachineType_TimedShelved tns:HasEffect tns:AlarmConditionType tns:HasCause tns:ShelvedStateMachineType_TimedShelve 13 tns:FromState tns:ShelvedStateMachineType_Unshelved tns:ToState tns:ShelvedStateMachineType_OneShotShelved tns:HasEffect tns:AlarmConditionType tns:HasCause tns:ShelvedStateMachineType_OneShotShelve 21 tns:FromState tns:ShelvedStateMachineType_TimedShelved tns:ToState tns:ShelvedStateMachineType_Unshelved tns:HasEffect tns:AlarmConditionType tns:HasCause tns:ShelvedStateMachineType_Unshelve 23 tns:FromState tns:ShelvedStateMachineType_TimedShelved tns:ToState tns:ShelvedStateMachineType_OneShotShelved tns:HasEffect tns:AlarmConditionType tns:HasCause tns:ShelvedStateMachineType_OneShotShelve 31 tns:FromState tns:ShelvedStateMachineType_OneShotShelved tns:ToState tns:ShelvedStateMachineType_Unshelved tns:HasEffect tns:AlarmConditionType tns:HasCause tns:ShelvedStateMachineType_Unshelve 32 tns:FromState tns:ShelvedStateMachineType_OneShotShelved tns:ToState tns:ShelvedStateMachineType_TimedShelved tns:HasEffect tns:AlarmConditionType tns:HasCause tns:ShelvedStateMachineType_TimedShelve tns:AlwaysGeneratesEvent tns:AuditConditionShelvingEventType tns:AlwaysGeneratesEvent tns:AuditConditionShelvingEventType tns:AlwaysGeneratesEvent tns:AuditConditionShelvingEventType If not 0, this parameter specifies a fixed time for which the Alarm is to be shelved. 1 2 3 4 43 tns:FromState tns:ExclusiveLimitStateMachineType_LowLow tns:ToState tns:ExclusiveLimitStateMachineType_Low 34 tns:FromState tns:ExclusiveLimitStateMachineType_Low tns:ToState tns:ExclusiveLimitStateMachineType_LowLow 12 tns:FromState tns:ExclusiveLimitStateMachineType_HighHigh tns:ToState tns:ExclusiveLimitStateMachineType_High 21 tns:FromState tns:ExclusiveLimitStateMachineType_High tns:ToState tns:ExclusiveLimitStateMachineType_HighHigh tns:HasTrueSubState tns:ExclusiveLimitAlarmType_LimitState tns:HasTrueSubState tns:NonExclusiveLimitAlarmType_HighHighState tns:HasTrueSubState tns:NonExclusiveLimitAlarmType_HighState tns:HasTrueSubState tns:NonExclusiveLimitAlarmType_LowState tns:HasTrueSubState tns:NonExclusiveLimitAlarmType_LowLowState en HighHigh active en HighHigh inactive en High active en High inactive en Low active en Low inactive en LowLow active en LowLow inactive IsConditionOf MayBeDisabledBy MayBeEnabledBy MayBeSuppressedBy MayBeUnsuppressedBy tns:AlwaysGeneratesEvent tns:AuditUpdateMethodEventType A state machine for a program. The Program is in a terminal or failed state, and it cannot be started or resumed without being reset. 11 The Program is properly initialized and may be started. 12 The Program is executing making progress towards completion. 13 The Program has been stopped prior to reaching a terminal state but may be resumed. 14 1 tns:FromState tns:ProgramStateMachineType_Halted tns:ToState tns:ProgramStateMachineType_Ready tns:HasCause tns:ProgramStateMachineType_Reset tns:HasEffect tns:ProgramTransitionEventType 2 tns:FromState tns:ProgramStateMachineType_Ready tns:ToState tns:ProgramStateMachineType_Running tns:HasCause tns:ProgramStateMachineType_Start tns:HasEffect tns:ProgramTransitionEventType 3 tns:FromState tns:ProgramStateMachineType_Running tns:ToState tns:ProgramStateMachineType_Halted tns:HasCause tns:ProgramStateMachineType_Halt tns:HasEffect tns:ProgramTransitionEventType 4 tns:FromState tns:ProgramStateMachineType_Running tns:ToState tns:ProgramStateMachineType_Ready tns:HasEffect tns:ProgramTransitionEventType 5 tns:FromState tns:ProgramStateMachineType_Running tns:ToState tns:ProgramStateMachineType_Suspended tns:HasCause tns:ProgramStateMachineType_Suspend tns:HasEffect tns:ProgramTransitionEventType 6 tns:FromState tns:ProgramStateMachineType_Suspended tns:ToState tns:ProgramStateMachineType_Running tns:HasCause tns:ProgramStateMachineType_Resume tns:HasEffect tns:ProgramTransitionEventType 7 tns:FromState tns:ProgramStateMachineType_Suspended tns:ToState tns:ProgramStateMachineType_Halted tns:HasCause tns:ProgramStateMachineType_Halt tns:HasEffect tns:ProgramTransitionEventType 8 tns:FromState tns:ProgramStateMachineType_Suspended tns:ToState tns:ProgramStateMachineType_Ready tns:HasEffect tns:ProgramTransitionEventType 9 tns:FromState tns:ProgramStateMachineType_Ready tns:ToState tns:ProgramStateMachineType_Halted tns:HasCause tns:ProgramStateMachineType_Halt tns:HasEffect tns:ProgramTransitionEventType Causes the Program to transition from the Ready state to the Running state. Causes the Program to transition from the Running state to the Suspended state. Causes the Program to transition from the Suspended state to the Running state. Causes the Program to transition from the Ready, Running or Suspended state to the Halted state. Causes the Program to transition from the Halted state to the Ready state. Annotations HA Configuration HistoricalEventFilter <AdditionalGroup> tns:Organizes tns:HasComponent tns:HasComponent tns:Server <ServiceName> tns:HasComponent tns:HasComponent tns:ServerConfiguration <ServiceName> tns:Organizes tns:HasComponent tns:ServerConfiguration Interpolative At the beginning of each interval, retrieve the calculated value from the data points on either side of the requested timestamp. Average Retrieve the average value of the data over the interval. TimeAverage Retrieve the time weighted average data over the interval using Interpolated Bounding Values. TimeAverage2 Retrieve the time weighted average data over the interval using Simple Bounding Values. Total Retrieve the total (time integral) of the data over the interval using Interpolated Bounding Values. Total2 Retrieve the total (time integral) of the data over the interval using Simple Bounding Values. Minimum Retrieve the minimum raw value in the interval with the timestamp of the start of the interval. Maximum Retrieve the maximum raw value in the interval with the timestamp of the start of the interval. MinimumActualTime Retrieve the minimum value in the interval and the Timestamp of the minimum value. MaximumActualTime Retrieve the maximum value in the interval and the Timestamp of the maximum value. Range Retrieve the difference between the minimum and maximum Value over the interval. Minimum2 Retrieve the minimum value in the interval including the Simple Bounding Values. Maximum2 Retrieve the maximum value in the interval including the Simple Bounding Values. MinimumActualTime2 Retrieve the minimum value with the actual timestamp including the Simple Bounding Values. MaximumActualTime2 Retrieve the maximum value with the actual timestamp including the Simple Bounding Values. Range2 Retrieve the difference between the Minimum2 and Maximum2 value over the interval. AnnotationCount Retrieve the number of Annotations in the interval. Count Retrieve the number of raw values over the interval. DurationInStateZero Retrieve the time a Boolean or numeric was in a zero state using Simple Bounding Values. DurationInStateNonZero Retrieve the time a Boolean or numeric was in a non-zero state using Simple Bounding Values. NumberOfTransitions Retrieve the number of changes between zero and non-zero that a Boolean or Numeric value experienced in the interval. Start Retrieve the value at the beginning of the interval using Interpolated Bounding Values. End Retrieve the value at the end of the interval using Interpolated Bounding Values. Delta Retrieve the difference between the Start and End value in the interval. StartBound Retrieve the value at the beginning of the interval using Simple Bounding Values. EndBound Retrieve the value at the end of the interval using Simple Bounding Values. DeltaBounds Retrieve the difference between the StartBound and EndBound value in the interval. DurationGood Retrieve the total duration of time in the interval during which the data is good. DurationBad Retrieve the total duration of time in the interval during which the data is bad. PercentGood Retrieve the percent of data (0 to 100) in the interval which has a good StatusCode. PercentBad Retrieve the percent of data (0 to 100) in the interval which has a bad StatusCode. WorstQuality Retrieve the worst StatusCode of data in the interval. WorstQuality2 Retrieve the worst StatusCode of data in the interval including the Simple Bounding Values. StandardDeviationSample Retrieve the standard deviation for the interval for a sample of the population (n-1). StandardDeviationPopulation Retrieve the standard deviation for the interval for a complete population (n) which includes Simple Bounding Values. VarianceSample Retrieve the variance for the interval as calculated by the StandardDeviationSample. VariancePopulation Retrieve the variance for the interval as calculated by the StandardDeviationPopulation which includes Simple Bounding Values. <SecurityGroupFolderName> tns:Organizes <SecurityGroupName> <ConnectionName> tns:HasPubSubConnection tns:HasComponent tns:Server PubSubConnectionOf <DataSetWriterName> tns:DataSetToWriter <ExtensionFieldName> WriterToDataSet EventNotifier <DataSetFolderName> tns:Organizes <PublishedDataSetName> <WriterGroupName> tns:HasWriterGroup <ReaderGroupName> tns:HasReaderGroup <DataSetWriterName> tns:HasDataSetWriter IsWriterInGroup IsWriterGroupOf <DataSetReaderName> tns:HasDataSetReader IsReaderInGroup IsReaderGroupOf 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1 0 0 2 2 0 0 1 1 1 1 0 0 1 0 2 2 2 2 1 0 1 1 2 2 2 2 2 2 <Alias> tns:Organizes <SubAliasNameCategories> tns:Organizes HasAlias Aliases tns:Organizes tns:ObjectsFolder TagVariables tns:Organizes tns:Aliases Topics tns:Organizes tns:Aliases i=888 http://www.opcfoundation.org/UA/units/un/cefact 4337968 en bit/s en bit per second i=888 http://www.opcfoundation.org/UA/units/un/cefact 4534832 en Mbit/s en megabit per second Full duplex. Half duplex. Link is currently disconnected or initializing. Ready to pass packets. Not ready to pass packets and not in some test mode. In some test mode. Ready to pass packets. The interface does not pass any packets. In some test mode. No operational packets can be passed. Status cannot be determined for some reason. Waiting for some external event. Some component (typically hardware) is missing. Down due to state of lower-layer interface(s). The auto-negotiation protocol is running and negotiation is currently in-progress. The auto-negotiation protocol has completed successfully. The auto-negotiation protocol has failed. The auto-negotiation status is not currently known, this could be because it is still negotiating or the protocol cannot run (e.g., if no medium is present). No auto-negotiation is executed. The auto-negotiation function is either not supported on this interface or has not been enabled. No failure Insufficient bandwidth Insufficient bridge resources Insufficient bandwidth for Traffic Class StreamID in use by another Talker Stream destination address already in use Stream pre-empted by higher rank Reported latency has changed Egress port is not AVBCapable Use a different destination address Out of MSRP resources Out of MMRP resources Cannot store destination address Requested priority is not an SR Class priority MaxFrameSize is too large for media MaxFanInPorts limit has been reached Changes in FirstValue for a registered StreamID VLAN is blocked on this egress port (Registration Forbidden) VLAN tagging is disabled on this egress port (untagged set) SR class priority mismatch Enhanced feature cannot be propagated to original Port MaxLatency exceeded Nearest Bridge cannot provide network identification for stream transformation Stream transformation not supported Stream identification type not supported for stream transformation Enhanced feature cannot be supported without a CNC The related TSN Stream is currently disabled. The related TSN Stream is in the process of receiving configuration parameters from the TSN Control Layer. The related TSN Stream has successfully received and applied the configuration from the TSN Control Layer. The related TSN Stream is not fully operational as long as local preconditions (e.g. synchronization state) are not valid. The related TSN Stream object is configured and all other required preconditions (e.g. synchronization state) for sending / receiving data are valid. The related TSN Stream object is in an error state. No Talker detected. Talker ready (configured). Talker failed. No Listener detected. Listener ready (configured). One or more Listeners ready, and one or more Listeners failed. Listener failed. tns:HasComponent tns:Server tns:Organizes tns:Resources tns:Organizes tns:Communication tns:Organizes tns:Communication tns:Organizes tns:Communication tns:Organizes tns:Streams tns:Organizes tns:Streams false ================================================ FILE: SemanticData/UAModelDesignExport/XML/UA Model Design.cs ================================================ //------------------------------------------------------------------------------ // // This code was generated by a tool. // Runtime Version:4.0.30319.42000 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. // //------------------------------------------------------------------------------ #pragma warning disable 1591 // // This source code was auto-generated by xsd, Version=4.6.1055.0. // namespace UAOOI.SemanticData.UAModelDesignExport.XML { using System.Xml.Serialization; /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true, Namespace="http://opcfoundation.org/UA/ModelDesign.xsd")] [System.Xml.Serialization.XmlRootAttribute(Namespace="http://opcfoundation.org/UA/ModelDesign.xsd", IsNullable=false)] public partial class ModelDesign { private Namespace[] namespacesField; private NodeDesign[] itemsField; private string targetNamespaceField; private string targetVersionField; private System.DateTime targetPublicationDateField; private bool targetPublicationDateFieldSpecified; private string targetXmlNamespaceField; private string defaultLocaleField; private System.Xml.XmlAttribute[] anyAttrField; public ModelDesign() { this.defaultLocaleField = "en"; } /// [System.Xml.Serialization.XmlArrayItemAttribute(IsNullable=false)] public Namespace[] Namespaces { get { return this.namespacesField; } set { this.namespacesField = value; } } /// [System.Xml.Serialization.XmlElementAttribute("DataType", typeof(DataTypeDesign))] [System.Xml.Serialization.XmlElementAttribute("Dictionary", typeof(DictionaryDesign))] [System.Xml.Serialization.XmlElementAttribute("Method", typeof(MethodDesign))] [System.Xml.Serialization.XmlElementAttribute("Object", typeof(ObjectDesign))] [System.Xml.Serialization.XmlElementAttribute("ObjectType", typeof(ObjectTypeDesign))] [System.Xml.Serialization.XmlElementAttribute("Property", typeof(PropertyDesign))] [System.Xml.Serialization.XmlElementAttribute("ReferenceType", typeof(ReferenceTypeDesign))] [System.Xml.Serialization.XmlElementAttribute("Variable", typeof(VariableDesign))] [System.Xml.Serialization.XmlElementAttribute("VariableType", typeof(VariableTypeDesign))] [System.Xml.Serialization.XmlElementAttribute("View", typeof(ViewDesign))] public NodeDesign[] Items { get { return this.itemsField; } set { this.itemsField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] public string TargetNamespace { get { return this.targetNamespaceField; } set { this.targetNamespaceField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] public string TargetVersion { get { return this.targetVersionField; } set { this.targetVersionField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] public System.DateTime TargetPublicationDate { get { return this.targetPublicationDateField; } set { this.targetPublicationDateField = value; } } /// [System.Xml.Serialization.XmlIgnoreAttribute()] public bool TargetPublicationDateSpecified { get { return this.targetPublicationDateFieldSpecified; } set { this.targetPublicationDateFieldSpecified = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] public string TargetXmlNamespace { get { return this.targetXmlNamespaceField; } set { this.targetXmlNamespaceField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] [System.ComponentModel.DefaultValueAttribute("en")] public string DefaultLocale { get { return this.defaultLocaleField; } set { this.defaultLocaleField = value; } } /// [System.Xml.Serialization.XmlAnyAttributeAttribute()] public System.Xml.XmlAttribute[] AnyAttr { get { return this.anyAttrField; } set { this.anyAttrField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://opcfoundation.org/UA/ModelDesign.xsd")] public partial class Namespace { private string nameField; private string prefixField; private string internalPrefixField; private string xmlNamespaceField; private string xmlPrefixField; private string filePathField; private string versionField; private string publicationDateField; private string valueField; /// [System.Xml.Serialization.XmlAttributeAttribute()] public string Name { get { return this.nameField; } set { this.nameField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] public string Prefix { get { return this.prefixField; } set { this.prefixField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] public string InternalPrefix { get { return this.internalPrefixField; } set { this.internalPrefixField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] public string XmlNamespace { get { return this.xmlNamespaceField; } set { this.xmlNamespaceField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] public string XmlPrefix { get { return this.xmlPrefixField; } set { this.xmlPrefixField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] public string FilePath { get { return this.filePathField; } set { this.filePathField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] public string Version { get { return this.versionField; } set { this.versionField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] public string PublicationDate { get { return this.publicationDateField; } set { this.publicationDateField = value; } } /// [System.Xml.Serialization.XmlTextAttribute()] public string Value { get { return this.valueField; } set { this.valueField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://opcfoundation.org/UA/ModelDesign.xsd")] public partial class Reference { private System.Xml.XmlQualifiedName referenceTypeField; private System.Xml.XmlQualifiedName targetIdField; private bool isInverseField; private bool isOneWayField; public Reference() { this.isInverseField = false; this.isOneWayField = false; } /// public System.Xml.XmlQualifiedName ReferenceType { get { return this.referenceTypeField; } set { this.referenceTypeField = value; } } /// public System.Xml.XmlQualifiedName TargetId { get { return this.targetIdField; } set { this.targetIdField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] [System.ComponentModel.DefaultValueAttribute(false)] public bool IsInverse { get { return this.isInverseField; } set { this.isInverseField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] [System.ComponentModel.DefaultValueAttribute(false)] public bool IsOneWay { get { return this.isOneWayField; } set { this.isOneWayField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://opcfoundation.org/UA/ModelDesign.xsd")] public partial class Parameter { private LocalizedText descriptionField; private string nameField; private int identifierField; private bool identifierFieldSpecified; private string bitMaskField; private System.Xml.XmlQualifiedName dataTypeField; private ValueRank valueRankField; private string arrayDimensionsField; public Parameter() { this.valueRankField = ValueRank.Scalar; } /// public LocalizedText Description { get { return this.descriptionField; } set { this.descriptionField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] public string Name { get { return this.nameField; } set { this.nameField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] public int Identifier { get { return this.identifierField; } set { this.identifierField = value; } } /// [System.Xml.Serialization.XmlIgnoreAttribute()] public bool IdentifierSpecified { get { return this.identifierFieldSpecified; } set { this.identifierFieldSpecified = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] public string BitMask { get { return this.bitMaskField; } set { this.bitMaskField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] public System.Xml.XmlQualifiedName DataType { get { return this.dataTypeField; } set { this.dataTypeField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] [System.ComponentModel.DefaultValueAttribute(ValueRank.Scalar)] public ValueRank ValueRank { get { return this.valueRankField; } set { this.valueRankField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] public string ArrayDimensions { get { return this.arrayDimensionsField; } set { this.arrayDimensionsField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://opcfoundation.org/UA/ModelDesign.xsd")] public partial class LocalizedText { private string keyField; private string valueField; public LocalizedText() { this.keyField = ""; } /// [System.Xml.Serialization.XmlAttributeAttribute()] [System.ComponentModel.DefaultValueAttribute("")] public string Key { get { return this.keyField; } set { this.keyField = value; } } /// [System.Xml.Serialization.XmlTextAttribute()] public string Value { get { return this.valueField; } set { this.valueField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] [System.SerializableAttribute()] [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://opcfoundation.org/UA/ModelDesign.xsd")] public enum ValueRank { /// Scalar, /// Array, /// ScalarOrArray, /// OneOrMoreDimensions, } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://opcfoundation.org/UA/ModelDesign.xsd")] public partial class ListOfChildren { private InstanceDesign[] itemsField; /// [System.Xml.Serialization.XmlElementAttribute("Method", typeof(MethodDesign))] [System.Xml.Serialization.XmlElementAttribute("Object", typeof(ObjectDesign))] [System.Xml.Serialization.XmlElementAttribute("Property", typeof(PropertyDesign))] [System.Xml.Serialization.XmlElementAttribute("Variable", typeof(VariableDesign))] public InstanceDesign[] Items { get { return this.itemsField; } set { this.itemsField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://opcfoundation.org/UA/ModelDesign.xsd")] public partial class MethodDesign : InstanceDesign { private Parameter[] inputArgumentsField; private Parameter[] outputArgumentsField; private bool nonExecutableField; private bool nonExecutableFieldSpecified; /// [System.Xml.Serialization.XmlArrayItemAttribute("Argument", IsNullable=false)] public Parameter[] InputArguments { get { return this.inputArgumentsField; } set { this.inputArgumentsField = value; } } /// [System.Xml.Serialization.XmlArrayItemAttribute("Argument", IsNullable=false)] public Parameter[] OutputArguments { get { return this.outputArgumentsField; } set { this.outputArgumentsField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] public bool NonExecutable { get { return this.nonExecutableField; } set { this.nonExecutableField = value; } } /// [System.Xml.Serialization.XmlIgnoreAttribute()] public bool NonExecutableSpecified { get { return this.nonExecutableFieldSpecified; } set { this.nonExecutableFieldSpecified = value; } } } /// [System.Xml.Serialization.XmlIncludeAttribute(typeof(MethodDesign))] [System.Xml.Serialization.XmlIncludeAttribute(typeof(VariableDesign))] [System.Xml.Serialization.XmlIncludeAttribute(typeof(DictionaryDesign))] [System.Xml.Serialization.XmlIncludeAttribute(typeof(PropertyDesign))] [System.Xml.Serialization.XmlIncludeAttribute(typeof(ObjectDesign))] [System.Xml.Serialization.XmlIncludeAttribute(typeof(EncodingDesign))] [System.Xml.Serialization.XmlIncludeAttribute(typeof(ViewDesign))] [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://opcfoundation.org/UA/ModelDesign.xsd")] public partial class InstanceDesign : NodeDesign { private System.Xml.XmlQualifiedName referenceTypeField; private System.Xml.XmlQualifiedName declarationField; private System.Xml.XmlQualifiedName typeDefinitionField; private ModellingRule modellingRuleField; private bool modellingRuleFieldSpecified; private uint minCardinalityField; private uint maxCardinalityField; private bool preserveDefaultAttributesField; public InstanceDesign() { this.minCardinalityField = ((uint)(0)); this.maxCardinalityField = ((uint)(0)); this.preserveDefaultAttributesField = false; } /// public System.Xml.XmlQualifiedName ReferenceType { get { return this.referenceTypeField; } set { this.referenceTypeField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] public System.Xml.XmlQualifiedName Declaration { get { return this.declarationField; } set { this.declarationField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] public System.Xml.XmlQualifiedName TypeDefinition { get { return this.typeDefinitionField; } set { this.typeDefinitionField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] public ModellingRule ModellingRule { get { return this.modellingRuleField; } set { this.modellingRuleField = value; } } /// [System.Xml.Serialization.XmlIgnoreAttribute()] public bool ModellingRuleSpecified { get { return this.modellingRuleFieldSpecified; } set { this.modellingRuleFieldSpecified = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] [System.ComponentModel.DefaultValueAttribute(typeof(uint), "0")] public uint MinCardinality { get { return this.minCardinalityField; } set { this.minCardinalityField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] [System.ComponentModel.DefaultValueAttribute(typeof(uint), "0")] public uint MaxCardinality { get { return this.maxCardinalityField; } set { this.maxCardinalityField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] [System.ComponentModel.DefaultValueAttribute(false)] public bool PreserveDefaultAttributes { get { return this.preserveDefaultAttributesField; } set { this.preserveDefaultAttributesField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] [System.SerializableAttribute()] [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://opcfoundation.org/UA/ModelDesign.xsd")] public enum ModellingRule { /// None, /// Mandatory, /// Optional, /// ExposesItsArray, /// CardinalityRestriction, /// MandatoryShared, /// OptionalPlaceholder, /// MandatoryPlaceholder, } /// [System.Xml.Serialization.XmlIncludeAttribute(typeof(TypeDesign))] [System.Xml.Serialization.XmlIncludeAttribute(typeof(ReferenceTypeDesign))] [System.Xml.Serialization.XmlIncludeAttribute(typeof(DataTypeDesign))] [System.Xml.Serialization.XmlIncludeAttribute(typeof(VariableTypeDesign))] [System.Xml.Serialization.XmlIncludeAttribute(typeof(ObjectTypeDesign))] [System.Xml.Serialization.XmlIncludeAttribute(typeof(InstanceDesign))] [System.Xml.Serialization.XmlIncludeAttribute(typeof(MethodDesign))] [System.Xml.Serialization.XmlIncludeAttribute(typeof(VariableDesign))] [System.Xml.Serialization.XmlIncludeAttribute(typeof(DictionaryDesign))] [System.Xml.Serialization.XmlIncludeAttribute(typeof(PropertyDesign))] [System.Xml.Serialization.XmlIncludeAttribute(typeof(ObjectDesign))] [System.Xml.Serialization.XmlIncludeAttribute(typeof(EncodingDesign))] [System.Xml.Serialization.XmlIncludeAttribute(typeof(ViewDesign))] [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://opcfoundation.org/UA/ModelDesign.xsd")] public partial class NodeDesign { private string browseNameField; private LocalizedText displayNameField; private LocalizedText descriptionField; private ListOfChildren childrenField; private Reference[] referencesField; private System.Xml.XmlQualifiedName symbolicNameField; private System.Xml.XmlQualifiedName symbolicIdField; private bool isDeclarationField; private uint numericIdField; private bool numericIdFieldSpecified; private string stringIdField; private uint writeAccessField; private uint partNoField; private string categoryField; private bool notInAddressSpaceField; private ReleaseStatus releaseStatusField; private DataTypePurpose purposeField; public NodeDesign() { this.isDeclarationField = false; this.writeAccessField = ((uint)(0)); this.partNoField = ((uint)(0)); this.categoryField = ""; this.notInAddressSpaceField = false; this.releaseStatusField = ReleaseStatus.Released; this.purposeField = DataTypePurpose.Normal; } /// public string BrowseName { get { return this.browseNameField; } set { this.browseNameField = value; } } /// public LocalizedText DisplayName { get { return this.displayNameField; } set { this.displayNameField = value; } } /// public LocalizedText Description { get { return this.descriptionField; } set { this.descriptionField = value; } } /// public ListOfChildren Children { get { return this.childrenField; } set { this.childrenField = value; } } /// [System.Xml.Serialization.XmlArrayItemAttribute(IsNullable=false)] public Reference[] References { get { return this.referencesField; } set { this.referencesField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] public System.Xml.XmlQualifiedName SymbolicName { get { return this.symbolicNameField; } set { this.symbolicNameField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] public System.Xml.XmlQualifiedName SymbolicId { get { return this.symbolicIdField; } set { this.symbolicIdField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] [System.ComponentModel.DefaultValueAttribute(false)] public bool IsDeclaration { get { return this.isDeclarationField; } set { this.isDeclarationField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] public uint NumericId { get { return this.numericIdField; } set { this.numericIdField = value; } } /// [System.Xml.Serialization.XmlIgnoreAttribute()] public bool NumericIdSpecified { get { return this.numericIdFieldSpecified; } set { this.numericIdFieldSpecified = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] public string StringId { get { return this.stringIdField; } set { this.stringIdField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] [System.ComponentModel.DefaultValueAttribute(typeof(uint), "0")] public uint WriteAccess { get { return this.writeAccessField; } set { this.writeAccessField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] [System.ComponentModel.DefaultValueAttribute(typeof(uint), "0")] public uint PartNo { get { return this.partNoField; } set { this.partNoField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] [System.ComponentModel.DefaultValueAttribute("")] public string Category { get { return this.categoryField; } set { this.categoryField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] [System.ComponentModel.DefaultValueAttribute(false)] public bool NotInAddressSpace { get { return this.notInAddressSpaceField; } set { this.notInAddressSpaceField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] [System.ComponentModel.DefaultValueAttribute(ReleaseStatus.Released)] public ReleaseStatus ReleaseStatus { get { return this.releaseStatusField; } set { this.releaseStatusField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] [System.ComponentModel.DefaultValueAttribute(DataTypePurpose.Normal)] public DataTypePurpose Purpose { get { return this.purposeField; } set { this.purposeField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] [System.SerializableAttribute()] [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://opcfoundation.org/UA/ModelDesign.xsd")] public enum ReleaseStatus { /// Released, /// Draft, /// Deprecated, } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] [System.SerializableAttribute()] [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://opcfoundation.org/UA/ModelDesign.xsd")] public enum DataTypePurpose { /// Normal, /// ServicesOnly, /// CodeGenerator, } /// [System.Xml.Serialization.XmlIncludeAttribute(typeof(ReferenceTypeDesign))] [System.Xml.Serialization.XmlIncludeAttribute(typeof(DataTypeDesign))] [System.Xml.Serialization.XmlIncludeAttribute(typeof(VariableTypeDesign))] [System.Xml.Serialization.XmlIncludeAttribute(typeof(ObjectTypeDesign))] [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://opcfoundation.org/UA/ModelDesign.xsd")] public partial class TypeDesign : NodeDesign { private string classNameField; private System.Xml.XmlQualifiedName baseTypeField; private bool isAbstractField; private bool noClassGenerationField; public TypeDesign() { this.isAbstractField = false; this.noClassGenerationField = false; } /// public string ClassName { get { return this.classNameField; } set { this.classNameField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] public System.Xml.XmlQualifiedName BaseType { get { return this.baseTypeField; } set { this.baseTypeField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] [System.ComponentModel.DefaultValueAttribute(false)] public bool IsAbstract { get { return this.isAbstractField; } set { this.isAbstractField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] [System.ComponentModel.DefaultValueAttribute(false)] public bool NoClassGeneration { get { return this.noClassGenerationField; } set { this.noClassGenerationField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://opcfoundation.org/UA/ModelDesign.xsd")] public partial class ReferenceTypeDesign : TypeDesign { private LocalizedText inverseNameField; private bool symmetricField; private bool symmetricFieldSpecified; /// public LocalizedText InverseName { get { return this.inverseNameField; } set { this.inverseNameField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] public bool Symmetric { get { return this.symmetricField; } set { this.symmetricField = value; } } /// [System.Xml.Serialization.XmlIgnoreAttribute()] public bool SymmetricSpecified { get { return this.symmetricFieldSpecified; } set { this.symmetricFieldSpecified = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://opcfoundation.org/UA/ModelDesign.xsd")] public partial class DataTypeDesign : TypeDesign { private Parameter[] fieldsField; private EncodingDesign[] encodingsField; private bool isOptionSetField; private bool noArraysAllowedField; public DataTypeDesign() { this.isOptionSetField = false; this.noArraysAllowedField = false; } /// [System.Xml.Serialization.XmlArrayItemAttribute("Field", IsNullable=false)] public Parameter[] Fields { get { return this.fieldsField; } set { this.fieldsField = value; } } /// [System.Xml.Serialization.XmlArrayItemAttribute("Encoding", IsNullable=false)] public EncodingDesign[] Encodings { get { return this.encodingsField; } set { this.encodingsField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] [System.ComponentModel.DefaultValueAttribute(false)] public bool IsOptionSet { get { return this.isOptionSetField; } set { this.isOptionSetField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] [System.ComponentModel.DefaultValueAttribute(false)] public bool NoArraysAllowed { get { return this.noArraysAllowedField; } set { this.noArraysAllowedField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://opcfoundation.org/UA/ModelDesign.xsd")] public partial class EncodingDesign : ObjectDesign { } /// [System.Xml.Serialization.XmlIncludeAttribute(typeof(EncodingDesign))] [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://opcfoundation.org/UA/ModelDesign.xsd")] public partial class ObjectDesign : InstanceDesign { private bool supportsEventsField; private bool supportsEventsFieldSpecified; /// [System.Xml.Serialization.XmlAttributeAttribute()] public bool SupportsEvents { get { return this.supportsEventsField; } set { this.supportsEventsField = value; } } /// [System.Xml.Serialization.XmlIgnoreAttribute()] public bool SupportsEventsSpecified { get { return this.supportsEventsFieldSpecified; } set { this.supportsEventsFieldSpecified = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://opcfoundation.org/UA/ModelDesign.xsd")] public partial class VariableTypeDesign : TypeDesign { private System.Xml.XmlElement defaultValueField; private System.Xml.XmlQualifiedName dataTypeField; private ValueRank valueRankField; private bool valueRankFieldSpecified; private string arrayDimensionsField; private AccessLevel accessLevelField; private bool accessLevelFieldSpecified; private int minimumSamplingIntervalField; private bool minimumSamplingIntervalFieldSpecified; private bool historizingField; private bool historizingFieldSpecified; private bool exposesItsChildrenField; public VariableTypeDesign() { this.exposesItsChildrenField = false; } /// public System.Xml.XmlElement DefaultValue { get { return this.defaultValueField; } set { this.defaultValueField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] public System.Xml.XmlQualifiedName DataType { get { return this.dataTypeField; } set { this.dataTypeField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] public ValueRank ValueRank { get { return this.valueRankField; } set { this.valueRankField = value; } } /// [System.Xml.Serialization.XmlIgnoreAttribute()] public bool ValueRankSpecified { get { return this.valueRankFieldSpecified; } set { this.valueRankFieldSpecified = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] public string ArrayDimensions { get { return this.arrayDimensionsField; } set { this.arrayDimensionsField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] public AccessLevel AccessLevel { get { return this.accessLevelField; } set { this.accessLevelField = value; } } /// [System.Xml.Serialization.XmlIgnoreAttribute()] public bool AccessLevelSpecified { get { return this.accessLevelFieldSpecified; } set { this.accessLevelFieldSpecified = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] public int MinimumSamplingInterval { get { return this.minimumSamplingIntervalField; } set { this.minimumSamplingIntervalField = value; } } /// [System.Xml.Serialization.XmlIgnoreAttribute()] public bool MinimumSamplingIntervalSpecified { get { return this.minimumSamplingIntervalFieldSpecified; } set { this.minimumSamplingIntervalFieldSpecified = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] public bool Historizing { get { return this.historizingField; } set { this.historizingField = value; } } /// [System.Xml.Serialization.XmlIgnoreAttribute()] public bool HistorizingSpecified { get { return this.historizingFieldSpecified; } set { this.historizingFieldSpecified = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] [System.ComponentModel.DefaultValueAttribute(false)] public bool ExposesItsChildren { get { return this.exposesItsChildrenField; } set { this.exposesItsChildrenField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] [System.SerializableAttribute()] [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://opcfoundation.org/UA/ModelDesign.xsd")] public enum AccessLevel { /// None, /// Read, /// Write, /// ReadWrite, /// HistoryRead, /// HistoryWrite, /// HistoryReadWrite, } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://opcfoundation.org/UA/ModelDesign.xsd")] public partial class ObjectTypeDesign : TypeDesign { private bool supportsEventsField; private bool supportsEventsFieldSpecified; /// [System.Xml.Serialization.XmlAttributeAttribute()] public bool SupportsEvents { get { return this.supportsEventsField; } set { this.supportsEventsField = value; } } /// [System.Xml.Serialization.XmlIgnoreAttribute()] public bool SupportsEventsSpecified { get { return this.supportsEventsFieldSpecified; } set { this.supportsEventsFieldSpecified = value; } } } /// [System.Xml.Serialization.XmlIncludeAttribute(typeof(DictionaryDesign))] [System.Xml.Serialization.XmlIncludeAttribute(typeof(PropertyDesign))] [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://opcfoundation.org/UA/ModelDesign.xsd")] public partial class VariableDesign : InstanceDesign { private System.Xml.XmlElement defaultValueField; private System.Xml.XmlQualifiedName dataTypeField; private ValueRank valueRankField; private bool valueRankFieldSpecified; private string arrayDimensionsField; private AccessLevel accessLevelField; private bool accessLevelFieldSpecified; private int minimumSamplingIntervalField; private bool minimumSamplingIntervalFieldSpecified; private bool historizingField; private bool historizingFieldSpecified; /// public System.Xml.XmlElement DefaultValue { get { return this.defaultValueField; } set { this.defaultValueField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] public System.Xml.XmlQualifiedName DataType { get { return this.dataTypeField; } set { this.dataTypeField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] public ValueRank ValueRank { get { return this.valueRankField; } set { this.valueRankField = value; } } /// [System.Xml.Serialization.XmlIgnoreAttribute()] public bool ValueRankSpecified { get { return this.valueRankFieldSpecified; } set { this.valueRankFieldSpecified = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] public string ArrayDimensions { get { return this.arrayDimensionsField; } set { this.arrayDimensionsField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] public AccessLevel AccessLevel { get { return this.accessLevelField; } set { this.accessLevelField = value; } } /// [System.Xml.Serialization.XmlIgnoreAttribute()] public bool AccessLevelSpecified { get { return this.accessLevelFieldSpecified; } set { this.accessLevelFieldSpecified = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] public int MinimumSamplingInterval { get { return this.minimumSamplingIntervalField; } set { this.minimumSamplingIntervalField = value; } } /// [System.Xml.Serialization.XmlIgnoreAttribute()] public bool MinimumSamplingIntervalSpecified { get { return this.minimumSamplingIntervalFieldSpecified; } set { this.minimumSamplingIntervalFieldSpecified = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] public bool Historizing { get { return this.historizingField; } set { this.historizingField = value; } } /// [System.Xml.Serialization.XmlIgnoreAttribute()] public bool HistorizingSpecified { get { return this.historizingFieldSpecified; } set { this.historizingFieldSpecified = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://opcfoundation.org/UA/ModelDesign.xsd")] public partial class DictionaryDesign : VariableDesign { private System.Xml.XmlQualifiedName encodingNameField; /// [System.Xml.Serialization.XmlAttributeAttribute()] public System.Xml.XmlQualifiedName EncodingName { get { return this.encodingNameField; } set { this.encodingNameField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://opcfoundation.org/UA/ModelDesign.xsd")] public partial class PropertyDesign : VariableDesign { } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://opcfoundation.org/UA/ModelDesign.xsd")] public partial class ViewDesign : InstanceDesign { private bool supportsEventsField; private bool containsNoLoopsField; public ViewDesign() { this.supportsEventsField = false; this.containsNoLoopsField = false; } /// [System.Xml.Serialization.XmlAttributeAttribute()] [System.ComponentModel.DefaultValueAttribute(false)] public bool SupportsEvents { get { return this.supportsEventsField; } set { this.supportsEventsField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] [System.ComponentModel.DefaultValueAttribute(false)] public bool ContainsNoLoops { get { return this.containsNoLoopsField; } set { this.containsNoLoopsField = value; } } } } #pragma warning restore 1591 ================================================ FILE: SemanticData/UAModelDesignExport/XML/UA Model Design.md ================================================ # UA Model Design Semantics ## `ModelDesign` The root element for the information model. This scheme allows information model designers to define UA types and instances in a machine readable form. This definition can be used to generate code and documentation. The file is expected to contain a number of types and their instance declarations. Objects which are unique in the address space can also be defined. A validator is available verify consistency of the model generator and to create suitable values or optional information. Once the design is validated it can be passed to a generator which creates different types of code or documentation. This XSD File contains comments describing the available scheme for defining models. The comments provide an explanation of the scheme, they do not explain the concept that is being model. It is assumed that the designer is familiar with these concepts via the UA specifications. A XML file used for generating a model must start with a Model definition. The below list is a list of the valid constructs where each construct map to a model concept in UA definition using these construct must be assigned to a UA namespace, by the use of the TargetNamespace attribute, they can further be assigned to an XML namespace and have a default Locale assigned. ## `NamespaceTable` This defines the namespaces used in the model. Each namespace listed should also have a namespace prefix defined in the `xs:schema` element. The order of the namespaces is significant and used to assigned a numeric index to namespaces when they are used in BrowsePaths specified in the ModelDesign. ## `Namespace` element Defines a single namespace along with identifiers for the namespace. The following table contains an explanation of the attributes. | Attribute | description | | --------- | ----------- | |`Name` | A symbolic name for the namespace that can be used as a variable name. The Name is used to create a program constant for the URL.| |`Prefix` | The .NET namespace used for the classes produced by the generator. The `Prefix` is the C# namespace that qualifies the generated types. |`InternalPrefix` | The .NET namespace used for classes that are only used within a server application. The `InternalPrefix` is an optional C# namespace that qualifies the generated types used only by the server. |`XmlNamespace` | The URI for the XML namespace to which the data types belong if it is different from the URI for the model namespace. |`XmlPrefix` | The prefix to be used in the XML file for the XML namespace to which the data types belong. Used only XmlNamespace is set. |`FilePath` | The path to the file containing the design file for the namespace. | `Version` | no description | `PublicationDate` | no description ## NodeDesign The base type of all node designs. ## BrowseName The BrowseName is the name used in the information model. The validator will create the BrowseName automatically from the SymbolicName. The BrowseName is qualified by the namespace used for the SymbolicName. ## DisplayName The DisplayName human readable name for the Node. This element includes an optional key that can be used to look up the display name for other locales in a resource DB. The validator automatically creates the DisplayName from the BrowseName. ## Description The Description the value of the Description attribute for the Node. This element includes an optional key that can be used to look up the Description for other locales in a resource DB. The validator automatically creates a generic Description from the BrowseName and NodeClass. ## Children The Children are the Properties or Components of a Node. ## References The References specify additional references from the Node. These references may refer to other children of the same Node or children of other Nodes defined in the ModelDesign. ## SymbolicName The SymbolicName identifies the Node within the the ModelDesign or within the containing Node. The SymbolicName should always be specified. It is used to create the BrowseName and SymbolicId if they are not specified. ## SymbolicId The SymbolicId is a globally unique identifier for the Node. The validator will create the SymbolicId automatically from the SymbolicName if it is not specified. ## IsDeclaration The `IsDeclaration` flag indicates that the Node is defined elsewhere and no code will be generated. Nodes that are declarations do not need to be completely defined. They only need to have the information required to generate code for nodes that reference it (e.g. the BaseType). ## NumericId The `NumericId` specifies the unique numeric id for the Node. It is filled in automatically by reading a CSV file containing the `SymbolicIds` and an associated UInt32. The validator will automatically assign a unique id if no CSV input is provided. The `NumericId` or `StringId` are combined with the `Namespace` used for the SymbolicId to create the well known UA NodeId for the Node. The generator will create programmatic constants that can be used to reference the Node in code. ## StringId The StringId is an alternate unique identifer for the node. It is used instead of the NumericId if it is specified in the CSV input file. ## WriteAccess The bit mask which indicates which attributes are writeable. ## PartNo The part that defines the node. ## Category A coma separated list of categories assigned to the node (e.g. Part4/Services or Part5/StateMachines). ## TypeDesign A base type for all Type Nodes (ObjectType, VariableType, DataType and ReferenceType). ### ClassName This is the name for the instance of the type. If not specified the validator creates it by removing the 'Type' suffix from the SymbolicName for the Node. ### BaseType The SymbolicId for the BaseType. ### IsAbstract Whether the Type is abstract. ### NoClassGeneration Whether to suppress class generation for the type. ## ObjectTypeDesign `ObjectTypes` define structure of an Object in the information model. ## VariableTypeDesign VariableTypes define structure of a Variable in the information model. ## DataTypeDesign DataTypes define structure of a Value for Variables in the information model. ## ReferenceTypeDesign ReferenceType define typed references between Nodes. ## InstanceDesign A base type for all Instance Nodes (Object, Variable, and Method). ## ViewDesign A View Node. ### SupportsEvents Whether the View generates events. ### ContainsNoLoops Specifies that the View contains a non-looping hierarchy. ## ObjectDesign Defines the structure of an Object in the information model. ## VariableDesign Defines the structure of a Variable in the information model. ## MethodDesign Defines the a Method in the information model. ## PropertyDesign Defines a Variable which is a Property for a Node. ## EncodingDesign Defines an `Object` which is a `DataTypeEncoding` for a `DataType`. ## DictionaryDesign Defines an Variable which is a DataTypeDictionary. ## Reference Defines a reference between two nodes. The SourceId is the `SymbolicId` of the Node that contains the Reference. The SourcePath and TargetPath are RelativePaths specified using the syntax defined in Part 4. The order of the Namespaces defined in the Namespaces element is used to determine the namespace index used in the RelativePaths. ## Parameter Defines a Field in a DataType or Argument of a Method. ================================================ FILE: SemanticData/UAModelDesignExport/XML/UA Model Design.xsd ================================================ The root element for the information model. This scheme allows information modellers to defined UA type in a machine readable form. This definition can be used to generate code and documentation. The file is expected to contain a number of types and their instance declarations. Objects which are unique in the address space can also be defined. A validator is available verify consistancy of the model generator and to create suitable values for optional information. Once the design is validated it can be passed to a generator which creates different types of code or documentation. This XSD File contains comments describing the available scheme for defining models. the comments provide an explination of the scheme, they do not explain the concept that is being model. It is assumed that the modeller is familur with thiese concepts via the UA specifications. A XML file used for generating a model must start with a Model definition The below list is a list of the valid constructs where each construct map to a model concept in UA definition using these construct must be assigned to a UA namespace, by the use of the TargetNamespace attribute, they can further be assigned to an XML namespace and have a default Locale assigned. This defines the namespaces used in the model. Each namespace listed should also have a namespace prefix defined in the xs:schema element. The order of the namespaces is significant and used to assigned a numeric index to namespaces when they are used in BrowsePaths specified in the ModelDesign. Defines a single namespace along with identifiers for the namespace. The Name is used to create a progam constant for the URL. The Prefix is the C# namespace which qualifies the generated types. The InternalPrefix is an optional C# namespace which qualifies the generated types used only by the server. The XmlNamespace is The FilePath is A symbolic name for the namespace that can used as a variable name. The .NET namespace used for the classes produced by the generator. The .NET namespace used for classes that are only used within a server application. The URI for the XML namespace which the data types belong to if it is different from the URI for the model namespace. The prefix to be used in the XML file for the XML namespace which the data types belong to. Used only XmlNamespace is set. The path to the file containing the design file for the namespace. The base type of all node designs. The BrowseName is the name used in the information model. The validator will create the BrowseName automatically from the SymbolicName. The BrowseName is qualified by the namespace used for the SymbolicName. The DisplayName human readable name for the Node. This element includes an optional key that can be used to look up the display name for other locales in a resource DB. The validator automatically creates the DisplayName from the BrowseName. The Description the value of the Description attribute for the Node. This element includes an optional key that can be used to look up the Description for other locales in a resource DB. The validator automatically creates a generic Description from the BrowseName and NodeClass. The Children are the Properties or Components of a Node. The References specify additional references from the Node. These references may refer to other children of the same Node or children of other Nodes defined in the ModelDesign. The SymbolicName identifies the Node within the the ModelDesign or within the containing Node. The SymbolicName should always be specified. It is used to create the BrowseName and SymbolicId if they are not specified. The SymbolicId is a globally unique identifier for the Node. The validator will create the SymbolicId automatically from the SymbolicName if it is not specified. The IsDeclaration flag indicates that the Node is defined elsewhere and no code will be generated. Nodes that are declarations do not need to be completely defined. They only need to have the information required to generate code for nodes that reference it (e.g. the BaseType). The NumericId specifies the unique numeric id for the Node. It is filled in automatically by reading a CSV file containing the SymbolicIds and an associated UInt32. The validator will automatically assign a unique id if no CSV input is provided. The NumericId or StringId are combined with the Namespace used for the SymbolicId to create the well known UA NodeId for the Node. The generator will create programmatic constants that can be used to reference the Node in code. The StringId is an alternate unique identfier for the node. It is used instead of the NumericId if it is specified in the CSV input file. The bit mask which indicates which attributes are writeable. The part that defines the node. A comment seperated list of categories assigned to the node (e.g. Part4/Services or Part5/StateMachines). A base type for all Type Nodes (ObjectType, VariableType, DataType and ReferenceType). This is the name for the instance of the type. If not specified the validator creates it by removing the 'Type' suffix from the SymbolicName for the Node. The SymbolicId for the BaseType. Whether the Type is abstract. Whether to supress class generation for the type. ObjectTypes define structure of an Object in the information model. VariableTypes define structure of a Variable in the information model. DataTypes define structure of a Value for Variables in the information model. ReferenceType define typed references between Nodes. A base type for all Instance Nodes (Object, Variable, and Method). A View Node. Whether the View generates events. Specifies that the View contains a non-looping hierarchy. Defines the structure of an Object in the information model. Defines the structure of a Variable in the information model. Defines the a Method in the information model. Defines a Variable which is a Property for a Node. Defines an Object which is a DataTypeEncoding for a DataType. Defines an Variable which is a DataTypeDictionary. Defines a reference between two nodes. The SourceId is the SymbolicId of the Node that contains the Reference. The SourcePath and TargetPath are RelativePaths specified using the syntax defined in Part 4. The order of the Namespaces defined in the Namespaces element is used to determine the namespace index used in the RelativePaths. Defines a Field in a DataType or Argument of a Method. ================================================ FILE: SemanticData/UAModelDesignExport/XML/UA Model Design.xsd.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2021, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ using System.Collections.Generic; using System.Xml; using UAOOI.Common.Infrastructure.Serializers; namespace UAOOI.SemanticData.UAModelDesignExport.XML { public partial class ModelDesign : INamespaces { /// /// Gets the namespaces that is to be used to parametrize XML document. /// /// An instance of IEnumerable[XmlQualifiedName] containing the XML namespaces and prefixes that a serializer uses to generate qualified names in an XML-document instance. public IEnumerable GetNamespaces() { List ret = new List { new XmlQualifiedName("xsd", "http://www.w3.org/2001/XMLSchema"), new XmlQualifiedName("xsi", "http://www.w3.org/2001/XMLSchema-instance"), new XmlQualifiedName("uax", "http://opcfoundation.org/UA/2008/02/Types.xsd") }; foreach (Namespace item in Namespaces) ret.Add(new XmlQualifiedName(item.XmlPrefix, item.Value)); return ret; } } } ================================================ FILE: SemanticData/UAModelDesignExport/XML/UA_Model_Design.GoCS.cmd ================================================ :: convert the scheme DomainDescriptor.xsd to cs code xsd.exe "UA Model Design.xsd" /N:UAOOI.SemanticData.UAModelDesignExport.XML /c ================================================ FILE: SemanticData/UAModelDesignExport.UnitTest/DataTypeDefinitionFactoryBaseUnitTest.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using Microsoft.VisualStudio.TestTools.UnitTesting; using System.Linq; using System.Xml; using UAOOI.SemanticData.InformationModelFactory; namespace UAOOI.SemanticData.UAModelDesignExport { [TestClass] public class DataTypeDefinitionFactoryBaseUnitTest { [TestMethod] public void ConstructorTest() { DataTypeDefinitionFactoryBase _newInstance = new DataTypeDefinitionFactoryBase(x => { }) { IsOptionSet = true, IsUnion = true, //Is not supported by the UA Model Design Name = new XmlQualifiedName("XmlQualifiedName"), // Is not supported by the UA Model Design SymbolicName = "SymbolicName" // Is not supported by the UA Model Design }; XML.DataTypeDesign _dataType = _newInstance.Export(); Assert.IsNotNull(_dataType); Assert.IsNotNull(_dataType.Fields); Assert.AreEqual(0, _dataType.Fields.Count()); Assert.IsNull(_dataType.Encodings); Assert.IsTrue(_dataType.IsOptionSet); Assert.IsFalse(_dataType.NoArraysAllowed); } [TestMethod] public void NewFieldTest() { DataTypeDefinitionFactoryBase _newInstance = new DataTypeDefinitionFactoryBase(x => { }) { }; IDataTypeFieldFactory _newField = _newInstance.NewField(); XML.DataTypeDesign _dataType = _newInstance.Export(); Assert.IsNotNull(_dataType); Assert.IsNotNull(_dataType.Fields); Assert.AreEqual(1, _dataType.Fields.Count()); } } } ================================================ FILE: SemanticData/UAModelDesignExport.UnitTest/ExtensionsUnitTest.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using Microsoft.VisualStudio.TestTools.UnitTesting; using System.Xml; using UAOOI.SemanticData.UAModelDesignExport.XML; namespace UAOOI.SemanticData.UAModelDesignExport { [TestClass] public class ExtensionsUnitTest { [TestMethod] public void AddLocalizedTextTestMethod() { LocalizedText _description = null; int _counter = 0; Extensions.AddLocalizedText("localeField1", "valueField1", ref _description, x => _counter++); Assert.AreEqual(0, _counter); Assert.IsNotNull(_description); Assert.AreEqual("localeField1", _description.Key); Assert.AreEqual("valueField1", _description.Value); LocalizedText _descriptionCopy = _description; Extensions.AddLocalizedText("localeField1", "valueField1", ref _description, x => _counter++); Assert.AreEqual(1, _counter); Assert.IsNotNull(_description); Assert.AreSame(_descriptionCopy, _description); } [TestMethod] public void KeyTest() { Reference value1 = new Reference() { IsInverse = false, IsOneWay = true, ReferenceType = new XmlQualifiedName("Type Name"), TargetId = new XmlQualifiedName("TargetId") }; Reference value2 = new Reference() { IsInverse = true, IsOneWay = true, ReferenceType = new XmlQualifiedName("Type Name"), TargetId = new XmlQualifiedName("TargetId") }; Assert.AreNotEqual(value1.Key(), value2.Key()); } } } ================================================ FILE: SemanticData/UAModelDesignExport.UnitTest/Instrumentation/Extensions.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2021, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System; namespace UAOOI.SemanticData.UAModelDesignExport.Instrumentation { internal static class Extensions { internal static bool AreEqual(this string first, string second) { if (String.IsNullOrEmpty(first)) return String.IsNullOrEmpty(second); return String.Compare(first, second) == 0; } } } ================================================ FILE: SemanticData/UAModelDesignExport.UnitTest/Instrumentation/IStylesheetNameProvider.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ namespace UAOOI.SemanticData.UAModelDesignExport.Instrumentation { /// /// Represents XML file style sheet name provider /// public interface IStylesheetNameProvider { /// /// The style sheet name /// string StylesheetName { get; } } } ================================================ FILE: SemanticData/UAModelDesignExport.UnitTest/Instrumentation/TracedAddressSpaceContext.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2022, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using UAOOI.SemanticData.AddressSpace.Abstractions; using UAOOI.SemanticData.BuildingErrorsHandling; using UAOOI.SemanticData.UAModelDesignExport.XML; using UAOOI.SemanticData.UANodeSetValidation; using UAOOI.SemanticData.UANodeSetValidation.Diagnostic; using UAOOI.SemanticData.UANodeSetValidation.XML; namespace UAOOI.SemanticData.UAModelDesignExport.Instrumentation { internal class TracedAddressSpaceContext : IBuildErrorsHandling, IDisposable { public ModelDesign CreateInstance(FileInfo filePath, string URI) { if (!filePath.Exists) throw new FileNotFoundException("The imported file does not exist", filePath.FullName); IUANodeSet iUANodeSet = UANodeSet.ReadModelFile(filePath); IAddressSpaceContext _as = new AddressSpaceContext(this); IUANodeSet uaDefinedTypes = UANodeSet.ReadUADefinedTypes(); ModelFactory _factory = new ModelFactory(WriteTraceMessage); _as.ImportUANodeSet(uaDefinedTypes); _as.ImportUANodeSet(iUANodeSet); _as.ValidateAndExportModel(new Uri(URI), _factory); return _factory.Export(); } internal readonly List TraceList = new List(); public void Dispose() { } internal void Clear() { Errors = 0; TraceList.Clear(); } #region IBuildErrorsHandling public int Errors { get; private set; } public void WriteTraceMessage(TraceMessage traceMessage) { Debug.WriteLine(traceMessage.ToString()); if (traceMessage.BuildError.Focus == Focus.Diagnostic) return; Errors++; TraceList.Add(traceMessage); } public void TraceData(TraceEventType eventType, int id, object data) { throw new NotImplementedException("It is intentionally not implemented"); if ((eventType == TraceEventType.Verbose) || (eventType == TraceEventType.Information)) Errors++; else { string message = $"Unexpected error: eventType = {eventType} id = {id} data = {data}"; Debug.WriteLine(message); //throw new ApplicationException(message); } } #endregion IBuildErrorsHandling } } ================================================ FILE: SemanticData/UAModelDesignExport.UnitTest/Instrumentation/UnitTestsExtensions.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using Microsoft.VisualStudio.TestTools.UnitTesting; using UAOOI.SemanticData.UAModelDesignExport.XML; namespace UAOOI.SemanticData.UAModelDesignExport.Instrumentation { internal static class UnitTestsExtensions { internal static void Compare(this LocalizedText expected, LocalizedText actual) { if (expected == null && actual == null) return; Assert.IsNotNull(expected); Assert.IsNotNull(actual); Assert.AreEqual(expected.Key, actual.Key); Assert.AreEqual(expected.Value.Trim(), actual.Value.Trim()); } } } ================================================ FILE: SemanticData/UAModelDesignExport.UnitTest/ModelDesignExportUnitTest.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2021, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ using Microsoft.VisualStudio.TestTools.UnitTesting; using Moq; using System; using System.Diagnostics; using System.IO; using UAOOI.Common.Infrastructure.Diagnostic; using UAOOI.SemanticData.InformationModelFactory; namespace UAOOI.SemanticData.UAModelDesignExport { [TestClass] public class ModelDesignExportUnitTest { [TestMethod] public void ConstructorTestMethod() { Mock mock = new Mock(); mock.Setup(x => x.TraceData(It.IsAny(), It.IsAny(), It.IsAny())); IModelDesignExport _exporter = ModelDesignExportAPI.GetModelDesignExport(mock.Object); string _filePath = "ConstructorTestMethodPtah.xml"; IModelFactory _factory = _exporter.GetFactory(); _factory.CreateNamespace(new Uri("NameSpace1", UriKind.Relative), DateTime.UtcNow, null); _factory.CreateNamespace(new Uri("NameSpace2", UriKind.Relative), DateTime.UtcNow, null); _exporter.ExportToXMLFile(_filePath); FileInfo _outputFile = new FileInfo(_filePath); Assert.IsTrue(_outputFile.Exists); mock.Verify(x => x.TraceData(It.IsAny(), It.IsAny(), It.IsAny()), Times.Once); Assert.IsTrue(670 < _outputFile.Length, $"File length is {_outputFile.Length}"); } } } ================================================ FILE: SemanticData/UAModelDesignExport.UnitTest/ModelDesignUnitTest.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using Microsoft.VisualStudio.TestTools.UnitTesting; using UAOOI.SemanticData.UAModelDesignExport.XML; namespace UAOOI.SemanticData.UAModelDesignExport { [TestClass] public class ModelDesignUnitTest { [TestMethod] public void ConstructorTest() { ModelDesign _newInstance = new ModelDesign(); Assert.IsNull(_newInstance.AnyAttr); } } } ================================================ FILE: SemanticData/UAModelDesignExport.UnitTest/ModelFactoryUnitTest.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2022, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ using Microsoft.VisualStudio.TestTools.UnitTesting; using System; using System.Collections.Generic; using System.Xml; using UAOOI.SemanticData.BuildingErrorsHandling; using UAOOI.SemanticData.InformationModelFactory; using UAOOI.SemanticData.UAModelDesignExport.XML; namespace UAOOI.SemanticData.UAModelDesignExport { [TestClass] public class ModelFactoryUnitTest { [TestMethod] [ExpectedException(typeof(ArgumentOutOfRangeException))] public void EEmptyModelTest() { ModelFactory _instance = new ModelFactory(_message => { }); ModelDesign _createdModel = _instance.Export(); } [TestMethod] public void NamespaceTest() { List _traceBuffer = new List(); ModelFactory _instance = new ModelFactory(_message => _traceBuffer.Add(_message)); ((IModelFactory)_instance).CreateNamespace(new Uri("NameSpace1", UriKind.Relative), DateTime.UtcNow, null); ((IModelFactory)_instance).CreateNamespace(new Uri("NameSpace2", UriKind.Relative), DateTime.UtcNow, null); ModelDesign _createdModel = _instance.Export(); Assert.IsNotNull(_createdModel); Assert.IsNotNull(_createdModel.Items); Assert.IsNull(_createdModel.AnyAttr); Assert.AreEqual(0, _createdModel.Items.Length); Assert.AreEqual(2, _createdModel.Namespaces.Length); Assert.AreEqual("NameSpace2", _createdModel.TargetNamespace); Assert.AreEqual(DateTime.Now.Date, _createdModel.TargetPublicationDate.Date); Assert.IsTrue(_createdModel.TargetPublicationDateSpecified); Assert.AreEqual(0, _traceBuffer.Count); } [TestMethod] public void NamespacesVersionTest() { List _traceBuffer = new List(); ModelFactory _instance = new ModelFactory(_message => _traceBuffer.Add(_message)); ((IModelFactory)_instance).CreateNamespace(new Uri("NameSpace1", UriKind.Relative), DateTime.UtcNow, new Version(1, 0, 0)); ((IModelFactory)_instance).CreateNamespace(new Uri("NameSpace2", UriKind.Relative), DateTime.UtcNow, new Version(1, 0, 0)); ModelDesign model = _instance.Export(); Assert.AreEqual(2, model.Namespaces.Length); Assert.AreEqual(0, _traceBuffer.Count); Assert.AreEqual("1.0.0", model.Namespaces[0].Version); Assert.AreEqual("1.0.0", model.Namespaces[1].Version); } [TestMethod] public void ChildrenGeneration() { List _traceBuffer = new List(); ModelFactory _instance = new ModelFactory(_message => _traceBuffer.Add(_message)); ((IModelFactory)_instance).CreateNamespace(new Uri("NameSpace1", UriKind.Relative), DateTime.UtcNow, new Version(1, 0, 0)); ((IModelFactory)_instance).CreateNamespace(new Uri("NameSpace2", UriKind.Relative), DateTime.UtcNow, new Version(1, 0, 0)); IObjectInstanceFactory objectInstanceFactory = ((IModelFactory)_instance).AddNodeFactory(); objectInstanceFactory.SymbolicName = new XmlQualifiedName("objectInstanceFactory", "http://a.b.c"); IVariableInstanceFactory variableInstanceFactory = objectInstanceFactory.AddNodeFactory(); variableInstanceFactory.SymbolicName = new XmlQualifiedName("variableInstanceFactory", "http://a.b.c"); IObjectTypeFactory objectTypeFactory = ((IModelFactory)_instance).AddNodeFactory(); objectTypeFactory.SymbolicName = new XmlQualifiedName("objectTypeFactory", "http://a.b.c"); ModelDesign model = _instance.Export(); Assert.AreEqual(2, model.Items.Length); Assert.AreEqual(2, model.Namespaces.Length); Assert.AreEqual(0, _traceBuffer.Count); } } } ================================================ FILE: SemanticData/UAModelDesignExport.UnitTest/Models/DataTypeTest/DataTypeTest.Classes.cs ================================================ /* ======================================================================== * Copyright (c) 2005-2021 The OPC Foundation, Inc. All rights reserved. * * OPC Foundation MIT License 1.00 * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, * copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following * conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. * * The complete license agreement can be found here: * http://opcfoundation.org/License/MIT/1.00/ * ======================================================================*/ using System; using System.Collections.Generic; using System.Text; using System.Xml; using System.Runtime.Serialization; using ; namespace DataTypeTest { } ================================================ FILE: SemanticData/UAModelDesignExport.UnitTest/Models/DataTypeTest/DataTypeTest.Constants.cs ================================================ /* ======================================================================== * Copyright (c) 2005-2021 The OPC Foundation, Inc. All rights reserved. * * OPC Foundation MIT License 1.00 * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, * copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following * conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. * * The complete license agreement can be found here: * http://opcfoundation.org/License/MIT/1.00/ * ======================================================================*/ using System; using System.Collections.Generic; using System.Text; using System.Reflection; using System.Xml; using System.Runtime.Serialization; using ; namespace DataTypeTest { #region DataType Identifiers /// /// A class that declares constants for all DataTypes in the Model Design. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class DataTypes { /// /// The identifier for the AbstractEnumerationDataType DataType. /// public const uint AbstractEnumerationDataType = 9; /// /// The identifier for the EnumerationDataType DataType. /// public const uint EnumerationDataType = 11; /// /// The identifier for the AbstractStructure DataType. /// public const uint AbstractStructure = 13; /// /// The identifier for the DerivedStructure DataType. /// public const uint DerivedStructure = 22; } #endregion #region Object Identifiers /// /// A class that declares constants for all Objects in the Model Design. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class Objects { /// /// The identifier for the AbstractStructure_Encoding_DefaultBinary Object. /// public const uint AbstractStructure_Encoding_DefaultBinary = 18; /// /// The identifier for the DerivedStructure_Encoding_DefaultBinary Object. /// public const uint DerivedStructure_Encoding_DefaultBinary = 27; /// /// The identifier for the AbstractStructure_Encoding_DefaultXml Object. /// public const uint AbstractStructure_Encoding_DefaultXml = 14; /// /// The identifier for the DerivedStructure_Encoding_DefaultXml Object. /// public const uint DerivedStructure_Encoding_DefaultXml = 23; /// /// The identifier for the AbstractStructure_Encoding_DefaultJson Object. /// public const uint AbstractStructure_Encoding_DefaultJson = 31; /// /// The identifier for the DerivedStructure_Encoding_DefaultJson Object. /// public const uint DerivedStructure_Encoding_DefaultJson = 32; } #endregion #region Variable Identifiers /// /// A class that declares constants for all Variables in the Model Design. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class Variables { /// /// The identifier for the AbstractEnumerationDataType_EnumStrings Variable. /// public const uint AbstractEnumerationDataType_EnumStrings = 10; /// /// The identifier for the EnumerationDataType_EnumValues Variable. /// public const uint EnumerationDataType_EnumValues = 12; /// /// The identifier for the cas_BinarySchema Variable. /// public const uint cas_BinarySchema = 5; /// /// The identifier for the cas_BinarySchema_NamespaceUri Variable. /// public const uint cas_BinarySchema_NamespaceUri = 7; /// /// The identifier for the cas_BinarySchema_Deprecated Variable. /// public const uint cas_BinarySchema_Deprecated = 1; /// /// The identifier for the cas_BinarySchema_AbstractStructure Variable. /// public const uint cas_BinarySchema_AbstractStructure = 19; /// /// The identifier for the cas_BinarySchema_DerivedStructure Variable. /// public const uint cas_BinarySchema_DerivedStructure = 28; /// /// The identifier for the cas_XmlSchema Variable. /// public const uint cas_XmlSchema = 2; /// /// The identifier for the cas_XmlSchema_NamespaceUri Variable. /// public const uint cas_XmlSchema_NamespaceUri = 4; /// /// The identifier for the cas_XmlSchema_Deprecated Variable. /// public const uint cas_XmlSchema_Deprecated = 8; /// /// The identifier for the cas_XmlSchema_AbstractStructure Variable. /// public const uint cas_XmlSchema_AbstractStructure = 15; /// /// The identifier for the cas_XmlSchema_DerivedStructure Variable. /// public const uint cas_XmlSchema_DerivedStructure = 24; } #endregion #region DataType Node Identifiers /// /// A class that declares constants for all DataTypes in the Model Design. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class DataTypeIds { /// /// The identifier for the AbstractEnumerationDataType DataType. /// public static readonly ExpandedNodeId AbstractEnumerationDataType = new ExpandedNodeId(DataTypeTest.DataTypes.AbstractEnumerationDataType, DataTypeTest.Namespaces.cas); /// /// The identifier for the EnumerationDataType DataType. /// public static readonly ExpandedNodeId EnumerationDataType = new ExpandedNodeId(DataTypeTest.DataTypes.EnumerationDataType, DataTypeTest.Namespaces.cas); /// /// The identifier for the AbstractStructure DataType. /// public static readonly ExpandedNodeId AbstractStructure = new ExpandedNodeId(DataTypeTest.DataTypes.AbstractStructure, DataTypeTest.Namespaces.cas); /// /// The identifier for the DerivedStructure DataType. /// public static readonly ExpandedNodeId DerivedStructure = new ExpandedNodeId(DataTypeTest.DataTypes.DerivedStructure, DataTypeTest.Namespaces.cas); } #endregion #region Object Node Identifiers /// /// A class that declares constants for all Objects in the Model Design. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class ObjectIds { /// /// The identifier for the AbstractStructure_Encoding_DefaultBinary Object. /// public static readonly ExpandedNodeId AbstractStructure_Encoding_DefaultBinary = new ExpandedNodeId(DataTypeTest.Objects.AbstractStructure_Encoding_DefaultBinary, DataTypeTest.Namespaces.cas); /// /// The identifier for the DerivedStructure_Encoding_DefaultBinary Object. /// public static readonly ExpandedNodeId DerivedStructure_Encoding_DefaultBinary = new ExpandedNodeId(DataTypeTest.Objects.DerivedStructure_Encoding_DefaultBinary, DataTypeTest.Namespaces.cas); /// /// The identifier for the AbstractStructure_Encoding_DefaultXml Object. /// public static readonly ExpandedNodeId AbstractStructure_Encoding_DefaultXml = new ExpandedNodeId(DataTypeTest.Objects.AbstractStructure_Encoding_DefaultXml, DataTypeTest.Namespaces.cas); /// /// The identifier for the DerivedStructure_Encoding_DefaultXml Object. /// public static readonly ExpandedNodeId DerivedStructure_Encoding_DefaultXml = new ExpandedNodeId(DataTypeTest.Objects.DerivedStructure_Encoding_DefaultXml, DataTypeTest.Namespaces.cas); /// /// The identifier for the AbstractStructure_Encoding_DefaultJson Object. /// public static readonly ExpandedNodeId AbstractStructure_Encoding_DefaultJson = new ExpandedNodeId(DataTypeTest.Objects.AbstractStructure_Encoding_DefaultJson, DataTypeTest.Namespaces.cas); /// /// The identifier for the DerivedStructure_Encoding_DefaultJson Object. /// public static readonly ExpandedNodeId DerivedStructure_Encoding_DefaultJson = new ExpandedNodeId(DataTypeTest.Objects.DerivedStructure_Encoding_DefaultJson, DataTypeTest.Namespaces.cas); } #endregion #region Variable Node Identifiers /// /// A class that declares constants for all Variables in the Model Design. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class VariableIds { /// /// The identifier for the AbstractEnumerationDataType_EnumStrings Variable. /// public static readonly ExpandedNodeId AbstractEnumerationDataType_EnumStrings = new ExpandedNodeId(DataTypeTest.Variables.AbstractEnumerationDataType_EnumStrings, DataTypeTest.Namespaces.cas); /// /// The identifier for the EnumerationDataType_EnumValues Variable. /// public static readonly ExpandedNodeId EnumerationDataType_EnumValues = new ExpandedNodeId(DataTypeTest.Variables.EnumerationDataType_EnumValues, DataTypeTest.Namespaces.cas); /// /// The identifier for the cas_BinarySchema Variable. /// public static readonly ExpandedNodeId cas_BinarySchema = new ExpandedNodeId(DataTypeTest.Variables.cas_BinarySchema, DataTypeTest.Namespaces.cas); /// /// The identifier for the cas_BinarySchema_NamespaceUri Variable. /// public static readonly ExpandedNodeId cas_BinarySchema_NamespaceUri = new ExpandedNodeId(DataTypeTest.Variables.cas_BinarySchema_NamespaceUri, DataTypeTest.Namespaces.cas); /// /// The identifier for the cas_BinarySchema_Deprecated Variable. /// public static readonly ExpandedNodeId cas_BinarySchema_Deprecated = new ExpandedNodeId(DataTypeTest.Variables.cas_BinarySchema_Deprecated, DataTypeTest.Namespaces.cas); /// /// The identifier for the cas_BinarySchema_AbstractStructure Variable. /// public static readonly ExpandedNodeId cas_BinarySchema_AbstractStructure = new ExpandedNodeId(DataTypeTest.Variables.cas_BinarySchema_AbstractStructure, DataTypeTest.Namespaces.cas); /// /// The identifier for the cas_BinarySchema_DerivedStructure Variable. /// public static readonly ExpandedNodeId cas_BinarySchema_DerivedStructure = new ExpandedNodeId(DataTypeTest.Variables.cas_BinarySchema_DerivedStructure, DataTypeTest.Namespaces.cas); /// /// The identifier for the cas_XmlSchema Variable. /// public static readonly ExpandedNodeId cas_XmlSchema = new ExpandedNodeId(DataTypeTest.Variables.cas_XmlSchema, DataTypeTest.Namespaces.cas); /// /// The identifier for the cas_XmlSchema_NamespaceUri Variable. /// public static readonly ExpandedNodeId cas_XmlSchema_NamespaceUri = new ExpandedNodeId(DataTypeTest.Variables.cas_XmlSchema_NamespaceUri, DataTypeTest.Namespaces.cas); /// /// The identifier for the cas_XmlSchema_Deprecated Variable. /// public static readonly ExpandedNodeId cas_XmlSchema_Deprecated = new ExpandedNodeId(DataTypeTest.Variables.cas_XmlSchema_Deprecated, DataTypeTest.Namespaces.cas); /// /// The identifier for the cas_XmlSchema_AbstractStructure Variable. /// public static readonly ExpandedNodeId cas_XmlSchema_AbstractStructure = new ExpandedNodeId(DataTypeTest.Variables.cas_XmlSchema_AbstractStructure, DataTypeTest.Namespaces.cas); /// /// The identifier for the cas_XmlSchema_DerivedStructure Variable. /// public static readonly ExpandedNodeId cas_XmlSchema_DerivedStructure = new ExpandedNodeId(DataTypeTest.Variables.cas_XmlSchema_DerivedStructure, DataTypeTest.Namespaces.cas); } #endregion #region BrowseName Declarations /// /// Declares all of the BrowseNames used in the Model Design. /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class BrowseNames { /// /// The BrowseName for the AbstractEnumerationDataType component. /// public const string AbstractEnumerationDataType = "AbstractEnumerationDataType"; /// /// The BrowseName for the AbstractStructure component. /// public const string AbstractStructure = "AbstractStructure"; /// /// The BrowseName for the cas_BinarySchema component. /// public const string cas_BinarySchema = "DataTypeTest"; /// /// The BrowseName for the cas_XmlSchema component. /// public const string cas_XmlSchema = "DataTypeTest"; /// /// The BrowseName for the DerivedStructure component. /// public const string DerivedStructure = "DerivedStructure"; /// /// The BrowseName for the EnumerationDataType component. /// public const string EnumerationDataType = "EnumerationDataType"; } #endregion #region Namespace Declarations /// /// Defines constants for all namespaces referenced by the model design. /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class Namespaces { /// /// The URI for the cas namespace (.NET code namespace is 'DataTypeTest'). /// public const string cas = "http://cas.eu/UA/CommServer/UnitTests/DataTypeTest"; /// /// The URI for the ua namespace (.NET code namespace is ''). /// public const string ua = "http://opcfoundation.org/UA/"; } #endregion } ================================================ FILE: SemanticData/UAModelDesignExport.UnitTest/Models/DataTypeTest/DataTypeTest.DataTypes.cs ================================================ /* ======================================================================== * Copyright (c) 2005-2021 The OPC Foundation, Inc. All rights reserved. * * OPC Foundation MIT License 1.00 * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, * copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following * conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. * * The complete license agreement can be found here: * http://opcfoundation.org/License/MIT/1.00/ * ======================================================================*/ using System; using System.Collections.Generic; using System.Text; using System.Xml; using System.Runtime.Serialization; using ; namespace DataTypeTest { #region AbstractEnumerationDataType Enumeration #if (!OPCUA_EXCLUDE_AbstractEnumerationDataType) /// /// /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] [DataContract(Namespace = DataTypeTest.Namespaces.cas)] public enum AbstractEnumerationDataType { /// [EnumMember(Value = "Field1_0")] Field1 = 0, /// [EnumMember(Value = "Field2_1")] Field2 = 1, } #region AbstractEnumerationDataTypeCollection Class /// /// A collection of AbstractEnumerationDataType objects. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] [CollectionDataContract(Name = "ListOfAbstractEnumerationDataType", Namespace = DataTypeTest.Namespaces.cas, ItemName = "AbstractEnumerationDataType")] #if !NET_STANDARD public partial class AbstractEnumerationDataTypeCollection : List, ICloneable #else public partial class AbstractEnumerationDataTypeCollection : List #endif { #region Constructors /// /// Initializes the collection with default values. /// public AbstractEnumerationDataTypeCollection() {} /// /// Initializes the collection with an initial capacity. /// public AbstractEnumerationDataTypeCollection(int capacity) : base(capacity) {} /// /// Initializes the collection with another collection. /// public AbstractEnumerationDataTypeCollection(IEnumerable collection) : base(collection) {} #endregion #region Static Operators /// /// Converts an array to a collection. /// public static implicit operator AbstractEnumerationDataTypeCollection(AbstractEnumerationDataType[] values) { if (values != null) { return new AbstractEnumerationDataTypeCollection(values); } return new AbstractEnumerationDataTypeCollection(); } /// /// Converts a collection to an array. /// public static explicit operator AbstractEnumerationDataType[](AbstractEnumerationDataTypeCollection values) { if (values != null) { return values.ToArray(); } return null; } #endregion #if !NET_STANDARD #region ICloneable Methods /// /// Creates a deep copy of the collection. /// public object Clone() { return (AbstractEnumerationDataTypeCollection)this.MemberwiseClone(); } #endregion #endif /// public new object MemberwiseClone() { AbstractEnumerationDataTypeCollection clone = new AbstractEnumerationDataTypeCollection(this.Count); for (int ii = 0; ii < this.Count; ii++) { clone.Add((AbstractEnumerationDataType)Utils.Clone(this[ii])); } return clone; } } #endregion #endif #endregion #region EnumerationDataType Enumeration #if (!OPCUA_EXCLUDE_EnumerationDataType) /// /// Enumeration DataType derived from abstract type /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] [DataContract(Namespace = DataTypeTest.Namespaces.cas)] public enum EnumerationDataType { /// [EnumMember(Value = "Field3_1")] Field3 = 1, } #region EnumerationDataTypeCollection Class /// /// A collection of EnumerationDataType objects. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] [CollectionDataContract(Name = "ListOfEnumerationDataType", Namespace = DataTypeTest.Namespaces.cas, ItemName = "EnumerationDataType")] #if !NET_STANDARD public partial class EnumerationDataTypeCollection : List, ICloneable #else public partial class EnumerationDataTypeCollection : List #endif { #region Constructors /// /// Initializes the collection with default values. /// public EnumerationDataTypeCollection() {} /// /// Initializes the collection with an initial capacity. /// public EnumerationDataTypeCollection(int capacity) : base(capacity) {} /// /// Initializes the collection with another collection. /// public EnumerationDataTypeCollection(IEnumerable collection) : base(collection) {} #endregion #region Static Operators /// /// Converts an array to a collection. /// public static implicit operator EnumerationDataTypeCollection(EnumerationDataType[] values) { if (values != null) { return new EnumerationDataTypeCollection(values); } return new EnumerationDataTypeCollection(); } /// /// Converts a collection to an array. /// public static explicit operator EnumerationDataType[](EnumerationDataTypeCollection values) { if (values != null) { return values.ToArray(); } return null; } #endregion #if !NET_STANDARD #region ICloneable Methods /// /// Creates a deep copy of the collection. /// public object Clone() { return (EnumerationDataTypeCollection)this.MemberwiseClone(); } #endregion #endif /// public new object MemberwiseClone() { EnumerationDataTypeCollection clone = new EnumerationDataTypeCollection(this.Count); for (int ii = 0; ii < this.Count; ii++) { clone.Add((EnumerationDataType)Utils.Clone(this[ii])); } return clone; } } #endregion #endif #endregion #region AbstractStructure Class #if (!OPCUA_EXCLUDE_AbstractStructure) /// /// Abstract structure /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] [DataContract(Namespace = DataTypeTest.Namespaces.cas)] public partial class AbstractStructure : IEncodeable { #region Constructors /// /// The default constructor. /// public AbstractStructure() { Initialize(); } /// /// Called by the .NET framework during deserialization. /// [OnDeserializing] private void Initialize(StreamingContext context) { Initialize(); } /// /// Sets private members to default values. /// private void Initialize() { m_number = (double)0; } #endregion #region Public Properties /// [DataMember(Name = "Number", IsRequired = false, Order = 1)] public Variant Number { get { return m_number; } set { m_number = value; } } #endregion #region IEncodeable Members /// public virtual ExpandedNodeId TypeId { get { return DataTypeIds.AbstractStructure; } } /// public virtual ExpandedNodeId BinaryEncodingId { get { return ObjectIds.AbstractStructure_Encoding_DefaultBinary; } } /// public virtual ExpandedNodeId XmlEncodingId { get { return ObjectIds.AbstractStructure_Encoding_DefaultXml; } } /// public virtual void Encode(IEncoder encoder) { encoder.PushNamespace(DataTypeTest.Namespaces.cas); encoder.WriteVariant("Number", Number); encoder.PopNamespace(); } /// public virtual void Decode(IDecoder decoder) { decoder.PushNamespace(DataTypeTest.Namespaces.cas); Number = decoder.ReadVariant("Number"); decoder.PopNamespace(); } /// public virtual bool IsEqual(IEncodeable encodeable) { if (Object.ReferenceEquals(this, encodeable)) { return true; } AbstractStructure value = encodeable as AbstractStructure; if (value == null) { return false; } if (!Utils.IsEqual(m_number, value.m_number)) return false; return true; } #if !NET_STANDARD /// public virtual object Clone() { return (AbstractStructure)this.MemberwiseClone(); } #endif /// public new object MemberwiseClone() { AbstractStructure clone = (AbstractStructure)base.MemberwiseClone(); clone.m_number = (Variant)Utils.Clone(this.m_number); return clone; } #endregion #region Private Fields private Variant m_number; #endregion } #region AbstractStructureCollection Class /// /// A collection of AbstractStructure objects. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] [CollectionDataContract(Name = "ListOfAbstractStructure", Namespace = DataTypeTest.Namespaces.cas, ItemName = "AbstractStructure")] #if !NET_STANDARD public partial class AbstractStructureCollection : List, ICloneable #else public partial class AbstractStructureCollection : List #endif { #region Constructors /// /// Initializes the collection with default values. /// public AbstractStructureCollection() {} /// /// Initializes the collection with an initial capacity. /// public AbstractStructureCollection(int capacity) : base(capacity) {} /// /// Initializes the collection with another collection. /// public AbstractStructureCollection(IEnumerable collection) : base(collection) {} #endregion #region Static Operators /// /// Converts an array to a collection. /// public static implicit operator AbstractStructureCollection(AbstractStructure[] values) { if (values != null) { return new AbstractStructureCollection(values); } return new AbstractStructureCollection(); } /// /// Converts a collection to an array. /// public static explicit operator AbstractStructure[](AbstractStructureCollection values) { if (values != null) { return values.ToArray(); } return null; } #endregion #if !NET_STANDARD #region ICloneable Methods /// /// Creates a deep copy of the collection. /// public object Clone() { return (AbstractStructureCollection)this.MemberwiseClone(); } #endregion #endif /// public new object MemberwiseClone() { AbstractStructureCollection clone = new AbstractStructureCollection(this.Count); for (int ii = 0; ii < this.Count; ii++) { clone.Add((AbstractStructure)Utils.Clone(this[ii])); } return clone; } } #endregion #endif #endregion #region DerivedStructure Class #if (!OPCUA_EXCLUDE_DerivedStructure) /// /// /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] [DataContract(Namespace = DataTypeTest.Namespaces.cas)] public partial class DerivedStructure : AbstractStructure { #region Constructors /// /// The default constructor. /// public DerivedStructure() { Initialize(); } /// /// Called by the .NET framework during deserialization. /// [OnDeserializing] private void Initialize(StreamingContext context) { Initialize(); } /// /// Sets private members to default values. /// private void Initialize() { m_number = (int)0; } #endregion #region Public Properties /// [DataMember(Name = "Number", IsRequired = false, Order = 1)] public int Number { get { return m_number; } set { m_number = value; } } #endregion #region IEncodeable Members /// public override ExpandedNodeId TypeId { get { return DataTypeIds.DerivedStructure; } } /// public override ExpandedNodeId BinaryEncodingId { get { return ObjectIds.DerivedStructure_Encoding_DefaultBinary; } } /// public override ExpandedNodeId XmlEncodingId { get { return ObjectIds.DerivedStructure_Encoding_DefaultXml; } } /// public override void Encode(IEncoder encoder) { base.Encode(encoder); encoder.PushNamespace(DataTypeTest.Namespaces.cas); encoder.WriteInt32("Number", Number); encoder.PopNamespace(); } /// public override void Decode(IDecoder decoder) { base.Decode(decoder); decoder.PushNamespace(DataTypeTest.Namespaces.cas); Number = decoder.ReadInt32("Number"); decoder.PopNamespace(); } /// public override bool IsEqual(IEncodeable encodeable) { if (Object.ReferenceEquals(this, encodeable)) { return true; } DerivedStructure value = encodeable as DerivedStructure; if (value == null) { return false; } if (!base.IsEqual(encodeable)) return false; if (!Utils.IsEqual(m_number, value.m_number)) return false; return true; } #if !NET_STANDARD /// public override object Clone() { return (DerivedStructure)this.MemberwiseClone(); } #endif /// public new object MemberwiseClone() { DerivedStructure clone = (DerivedStructure)base.MemberwiseClone(); clone.m_number = (int)Utils.Clone(this.m_number); return clone; } #endregion #region Private Fields private int m_number; #endregion } #region DerivedStructureCollection Class /// /// A collection of DerivedStructure objects. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] [CollectionDataContract(Name = "ListOfDerivedStructure", Namespace = DataTypeTest.Namespaces.cas, ItemName = "DerivedStructure")] #if !NET_STANDARD public partial class DerivedStructureCollection : List, ICloneable #else public partial class DerivedStructureCollection : List #endif { #region Constructors /// /// Initializes the collection with default values. /// public DerivedStructureCollection() {} /// /// Initializes the collection with an initial capacity. /// public DerivedStructureCollection(int capacity) : base(capacity) {} /// /// Initializes the collection with another collection. /// public DerivedStructureCollection(IEnumerable collection) : base(collection) {} #endregion #region Static Operators /// /// Converts an array to a collection. /// public static implicit operator DerivedStructureCollection(DerivedStructure[] values) { if (values != null) { return new DerivedStructureCollection(values); } return new DerivedStructureCollection(); } /// /// Converts a collection to an array. /// public static explicit operator DerivedStructure[](DerivedStructureCollection values) { if (values != null) { return values.ToArray(); } return null; } #endregion #if !NET_STANDARD #region ICloneable Methods /// /// Creates a deep copy of the collection. /// public object Clone() { return (DerivedStructureCollection)this.MemberwiseClone(); } #endregion #endif /// public new object MemberwiseClone() { DerivedStructureCollection clone = new DerivedStructureCollection(this.Count); for (int ii = 0; ii < this.Count; ii++) { clone.Add((DerivedStructure)Utils.Clone(this[ii])); } return clone; } } #endregion #endif #endregion } ================================================ FILE: SemanticData/UAModelDesignExport.UnitTest/Models/DataTypeTest/DataTypeTest.NodeIds.csv ================================================ AbstractEnumerationDataType,9,DataType AbstractStructure,13,DataType AbstractStructure_Encoding_DefaultBinary,18,Object AbstractStructure_Encoding_DefaultJson,31,Object AbstractStructure_Encoding_DefaultXml,14,Object cas_BinarySchema,5,Variable cas_XmlSchema,2,Variable DerivedStructure,22,DataType DerivedStructure_Encoding_DefaultBinary,27,Object DerivedStructure_Encoding_DefaultJson,32,Object DerivedStructure_Encoding_DefaultXml,23,Object EnumerationDataType,11,DataType ================================================ FILE: SemanticData/UAModelDesignExport.UnitTest/Models/DataTypeTest/DataTypeTest.NodeSet.xml ================================================  http://opcfoundation.org/UA/ http://cas.eu/UA/CommServer/UnitTests/DataTypeTest ns=1;i=1 Variable_2 0 Deprecated Deprecated 0 0 0 i=46 true ns=1;i=5 i=40 false i=68 true i=1 -1 1 1 0 false 0 ns=1;i=2 Variable_2 1 DataTypeTest DataTypeTest 0 0 0 i=40 false i=72 i=47 true i=92 i=46 false ns=1;i=4 i=46 false ns=1;i=8 i=47 false ns=1;i=15 i=47 false ns=1;i=24 PHhzOnNjaGVtYQ0KICB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEi DQogIHhtbG5zOnVhPSJodHRwOi8vb3BjZm91bmRhdGlvbi5vcmcvVUEvMjAwOC8wMi9UeXBlcy54 c2QiDQogIHhtbG5zOnRucz0iaHR0cDovL2Nhcy5ldS9VQS9Db21tU2VydmVyL1VuaXRUZXN0cy9E YXRhVHlwZVRlc3QiDQogIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2Nhcy5ldS9VQS9Db21tU2Vy dmVyL1VuaXRUZXN0cy9EYXRhVHlwZVRlc3QiDQogIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlm aWVkIg0KPg0KICA8eHM6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL29wY2ZvdW5kYXRpb24ub3Jn L1VBLyIgLz4NCg0KICA8eHM6c2ltcGxlVHlwZSAgbmFtZT0iQWJzdHJhY3RFbnVtZXJhdGlvbkRh dGFUeXBlIj4NCiAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIj4NCiAgICAgIDx4 czplbnVtZXJhdGlvbiB2YWx1ZT0iRmllbGQxXzAiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24g dmFsdWU9IkZpZWxkMl8xIiAvPg0KICAgIDwveHM6cmVzdHJpY3Rpb24+DQogIDwveHM6c2ltcGxl VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iQWJzdHJhY3RFbnVtZXJhdGlvbkRhdGFUeXBlIiB0 eXBlPSJ0bnM6QWJzdHJhY3RFbnVtZXJhdGlvbkRhdGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4 VHlwZSBuYW1lPSJMaXN0T2ZBYnN0cmFjdEVudW1lcmF0aW9uRGF0YVR5cGUiPg0KICAgIDx4czpz ZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkFic3RyYWN0RW51bWVyYXRpb25EYXRh VHlwZSIgdHlwZT0idG5zOkFic3RyYWN0RW51bWVyYXRpb25EYXRhVHlwZSIgbWluT2NjdXJzPSIw IiBtYXhPY2N1cnM9InVuYm91bmRlZCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNv bXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZBYnN0cmFjdEVudW1lcmF0aW9u RGF0YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZBYnN0cmFjdEVudW1lcmF0aW9uRGF0YVR5cGUiIG5p bGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOnNpbXBsZVR5cGUgIG5hbWU9IkVu dW1lcmF0aW9uRGF0YVR5cGUiPg0KICAgIDx4czphbm5vdGF0aW9uPg0KICAgICAgPHhzOmRvY3Vt ZW50YXRpb24+RW51bWVyYXRpb24gRGF0YVR5cGUgZGVyaXZlZCBmcm9tIGFic3RyYWN0IHR5cGU8 L3hzOmRvY3VtZW50YXRpb24+DQogICAgPC94czphbm5vdGF0aW9uPg0KICAgIDx4czpyZXN0cmlj dGlvbiBiYXNlPSJ4czpzdHJpbmciPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJGaWVs ZDNfMSIgLz4NCiAgICA8L3hzOnJlc3RyaWN0aW9uPg0KICA8L3hzOnNpbXBsZVR5cGU+DQogIDx4 czplbGVtZW50IG5hbWU9IkVudW1lcmF0aW9uRGF0YVR5cGUiIHR5cGU9InRuczpFbnVtZXJhdGlv bkRhdGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZFbnVtZXJhdGlv bkRhdGFUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJF bnVtZXJhdGlvbkRhdGFUeXBlIiB0eXBlPSJ0bnM6RW51bWVyYXRpb25EYXRhVHlwZSIgbWluT2Nj dXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8 L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZFbnVtZXJhdGlvbkRh dGFUeXBlIiB0eXBlPSJ0bnM6TGlzdE9mRW51bWVyYXRpb25EYXRhVHlwZSIgbmlsbGFibGU9InRy dWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iQWJzdHJhY3RTdHJ1 Y3R1cmUiPg0KICAgIDx4czphbm5vdGF0aW9uPg0KICAgICAgPHhzOmRvY3VtZW50YXRpb24+QWJz dHJhY3Qgc3RydWN0dXJlPC94czpkb2N1bWVudGF0aW9uPg0KICAgIDwveHM6YW5ub3RhdGlvbj4N CiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJOdW1iZXIiIHR5cGU9 InVhOlZhcmlhbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hz OmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJBYnN0cmFjdFN0cnVjdHVyZSIgdHlw ZT0idG5zOkFic3RyYWN0U3RydWN0dXJlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJM aXN0T2ZBYnN0cmFjdFN0cnVjdHVyZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVs ZW1lbnQgbmFtZT0iQWJzdHJhY3RTdHJ1Y3R1cmUiIHR5cGU9InRuczpBYnN0cmFjdFN0cnVjdHVy ZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+ DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQg bmFtZT0iTGlzdE9mQWJzdHJhY3RTdHJ1Y3R1cmUiIHR5cGU9InRuczpMaXN0T2ZBYnN0cmFjdFN0 cnVjdHVyZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5 cGUgbmFtZT0iRGVyaXZlZFN0cnVjdHVyZSI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVk PSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpBYnN0cmFjdFN0cnVjdHVy ZSI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJO dW1iZXIiIHR5cGU9InhzOmludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICA8L3hzOnNlcXVl bmNlPg0KICAgICAgPC94czpleHRlbnNpb24+DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAg PC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iRGVyaXZlZFN0cnVjdHVyZSIg dHlwZT0idG5zOkRlcml2ZWRTdHJ1Y3R1cmUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9 Ikxpc3RPZkRlcml2ZWRTdHJ1Y3R1cmUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czpl bGVtZW50IG5hbWU9IkRlcml2ZWRTdHJ1Y3R1cmUiIHR5cGU9InRuczpEZXJpdmVkU3RydWN0dXJl IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4N CiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBu YW1lPSJMaXN0T2ZEZXJpdmVkU3RydWN0dXJlIiB0eXBlPSJ0bnM6TGlzdE9mRGVyaXZlZFN0cnVj dHVyZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KPC94czpzY2hlbWE+ i=15 -1 1 1 0 false 0 ns=1;i=4 Variable_2 0 NamespaceUri NamespaceUri 0 0 0 i=46 true ns=1;i=2 i=40 false i=68 http://cas.eu/UA/CommServer/UnitTests/DataTypeTest i=12 -1 1 1 0 false 0 ns=1;i=5 Variable_2 1 DataTypeTest DataTypeTest 0 0 0 i=40 false i=72 i=47 true i=93 i=46 false ns=1;i=7 i=46 false ns=1;i=1 i=47 false ns=1;i=19 i=47 false ns=1;i=28 PG9wYzpUeXBlRGljdGlvbmFyeQ0KICB4bWxuczpvcGM9Imh0dHA6Ly9vcGNmb3VuZGF0aW9uLm9y Zy9CaW5hcnlTY2hlbWEvIg0KICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1M U2NoZW1hLWluc3RhbmNlIg0KICB4bWxuczp1YT0iaHR0cDovL29wY2ZvdW5kYXRpb24ub3JnL1VB LyINCiAgeG1sbnM6dG5zPSJodHRwOi8vY2FzLmV1L1VBL0NvbW1TZXJ2ZXIvVW5pdFRlc3RzL0Rh dGFUeXBlVGVzdCINCiAgRGVmYXVsdEJ5dGVPcmRlcj0iTGl0dGxlRW5kaWFuIg0KICBUYXJnZXRO YW1lc3BhY2U9Imh0dHA6Ly9jYXMuZXUvVUEvQ29tbVNlcnZlci9Vbml0VGVzdHMvRGF0YVR5cGVU ZXN0Ig0KPg0KICA8b3BjOkltcG9ydCBOYW1lc3BhY2U9Imh0dHA6Ly9vcGNmb3VuZGF0aW9uLm9y Zy9VQS8iIExvY2F0aW9uPSIuQmluYXJ5U2NoZW1hLmJzZCIvPg0KDQogIDxvcGM6RW51bWVyYXRl ZFR5cGUgTmFtZT0iQWJzdHJhY3RFbnVtZXJhdGlvbkRhdGFUeXBlIiBMZW5ndGhJbkJpdHM9IjMy Ij4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJGaWVsZDEiIFZhbHVlPSIwIiAvPg0K ICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkZpZWxkMiIgVmFsdWU9IjEiIC8+DQogIDwv b3BjOkVudW1lcmF0ZWRUeXBlPg0KDQogIDxvcGM6RW51bWVyYXRlZFR5cGUgTmFtZT0iRW51bWVy YXRpb25EYXRhVHlwZSIgTGVuZ3RoSW5CaXRzPSIzMiI+DQogICAgPG9wYzpEb2N1bWVudGF0aW9u PkVudW1lcmF0aW9uIERhdGFUeXBlIGRlcml2ZWQgZnJvbSBhYnN0cmFjdCB0eXBlPC9vcGM6RG9j dW1lbnRhdGlvbj4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJGaWVsZDEiIFZhbHVl PSIwIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkZpZWxkMiIgVmFsdWU9IjEi IC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iRmllbGQzIiBWYWx1ZT0iMSIgLz4N CiAgPC9vcGM6RW51bWVyYXRlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJB YnN0cmFjdFN0cnVjdHVyZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9w YzpEb2N1bWVudGF0aW9uPkFic3RyYWN0IHN0cnVjdHVyZTwvb3BjOkRvY3VtZW50YXRpb24+DQog ICAgPG9wYzpGaWVsZCBOYW1lPSJOdW1iZXIiIFR5cGVOYW1lPSJ1YTpWYXJpYW50IiAvPg0KICA8 L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkRlcml2 ZWRTdHJ1Y3R1cmUiIEJhc2VUeXBlPSJ0bnM6QWJzdHJhY3RTdHJ1Y3R1cmUiPg0KICAgIDxvcGM6 RmllbGQgTmFtZT0iTnVtYmVyIiBUeXBlTmFtZT0idWE6VmFyaWFudCIgU291cmNlVHlwZT0idG5z OkFic3RyYWN0U3RydWN0dXJlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTnVtYmVyIiBUeXBl TmFtZT0ib3BjOkludDMyIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KPC9vcGM6VHlw ZURpY3Rpb25hcnk+ i=15 -1 1 1 0 false 0 ns=1;i=7 Variable_2 0 NamespaceUri NamespaceUri 0 0 0 i=46 true ns=1;i=5 i=40 false i=68 http://cas.eu/UA/CommServer/UnitTests/DataTypeTest i=12 -1 1 1 0 false 0 ns=1;i=8 Variable_2 0 Deprecated Deprecated 0 0 0 i=46 true ns=1;i=2 i=40 false i=68 true i=1 -1 1 1 0 false 0 ns=1;i=9 DataType_64 1 AbstractEnumerationDataType AbstractEnumerationDataType 0 0 0 i=45 true i=29 i=46 false ns=1;i=10 i=45 false ns=1;i=11 true ns=1;i=10 Variable_2 0 EnumStrings EnumStrings 0 0 0 i=46 true ns=1;i=9 i=40 false i=68 Field1 Field2 i=21 1 0 1 1 0 false 0 ns=1;i=11 DataType_64 1 EnumerationDataType EnumerationDataType Enumeration DataType derived from abstract type 0 0 0 i=45 true ns=1;i=9 i=46 false ns=1;i=12 false ns=1;i=12 Variable_2 0 EnumValues EnumValues 0 0 0 i=46 true ns=1;i=11 i=40 false i=68 i=7616 1 Field3 i=7594 1 0 1 1 0 false 0 ns=1;i=13 DataType_64 1 AbstractStructure AbstractStructure Abstract structure 0 0 0 i=45 true i=22 i=45 false ns=1;i=22 i=38 false ns=1;i=18 i=38 false ns=1;i=14 i=38 false ns=1;i=31 true ns=1;i=14 Object_1 0 Default XML Default XML 0 0 0 i=40 false i=76 i=38 true ns=1;i=13 i=39 false ns=1;i=15 0 ns=1;i=15 Variable_2 1 AbstractStructure AbstractStructure 0 0 0 i=47 true ns=1;i=2 i=40 false i=69 //xs:element[@name='AbstractStructure'] i=12 -1 1 1 0 false 0 ns=1;i=18 Object_1 0 Default Binary Default Binary 0 0 0 i=40 false i=76 i=38 true ns=1;i=13 i=39 false ns=1;i=19 0 ns=1;i=19 Variable_2 1 AbstractStructure AbstractStructure 0 0 0 i=47 true ns=1;i=5 i=40 false i=69 AbstractStructure i=12 -1 1 1 0 false 0 ns=1;i=22 DataType_64 1 DerivedStructure DerivedStructure 0 0 0 i=45 true ns=1;i=13 i=38 false ns=1;i=27 i=38 false ns=1;i=23 i=38 false ns=1;i=32 false ns=1;i=23 Object_1 0 Default XML Default XML 0 0 0 i=40 false i=76 i=38 true ns=1;i=22 i=39 false ns=1;i=24 0 ns=1;i=24 Variable_2 1 DerivedStructure DerivedStructure 0 0 0 i=47 true ns=1;i=2 i=40 false i=69 //xs:element[@name='DerivedStructure'] i=12 -1 1 1 0 false 0 ns=1;i=27 Object_1 0 Default Binary Default Binary 0 0 0 i=40 false i=76 i=38 true ns=1;i=22 i=39 false ns=1;i=28 0 ns=1;i=28 Variable_2 1 DerivedStructure DerivedStructure 0 0 0 i=47 true ns=1;i=5 i=40 false i=69 DerivedStructure i=12 -1 1 1 0 false 0 ns=1;i=31 Object_1 0 Default JSON Default JSON 0 0 0 i=40 false i=76 i=38 true ns=1;i=13 0 ns=1;i=32 Object_1 0 Default JSON Default JSON 0 0 0 i=40 false i=76 i=38 true ns=1;i=22 0 ================================================ FILE: SemanticData/UAModelDesignExport.UnitTest/Models/DataTypeTest/DataTypeTest.NodeSet2.xml ================================================  http://cas.eu/UA/CommServer/UnitTests/DataTypeTest i=1 i=2 i=3 i=4 i=5 i=6 i=7 i=8 i=9 i=10 i=11 i=13 i=12 i=15 i=14 i=16 i=17 i=18 i=20 i=21 i=19 i=22 i=26 i=27 i=28 i=47 i=46 i=35 i=36 i=48 i=45 i=40 i=37 i=38 i=39 i=53 i=52 i=51 i=54 i=9004 i=9005 i=17597 i=9006 i=15112 i=17604 i=17603 AbstractEnumerationDataType ns=1;i=10 i=29 EnumStrings i=68 ns=1;i=9 Field1 Field2 EnumerationDataType Enumeration DataType derived from abstract type ns=1;i=12 ns=1;i=9 EnumValues i=68 ns=1;i=11 i=7616 1 Field3 AbstractStructure Abstract structure i=22 DerivedStructure ns=1;i=13 Derived from Number Default Binary ns=1;i=13 ns=1;i=19 i=76 Default Binary ns=1;i=22 ns=1;i=28 i=76 DataTypeTest ns=1;i=7 ns=1;i=1 ns=1;i=19 ns=1;i=28 i=93 i=72 PG9wYzpUeXBlRGljdGlvbmFyeQ0KICB4bWxuczpvcGM9Imh0dHA6Ly9vcGNmb3VuZGF0aW9uLm9y Zy9CaW5hcnlTY2hlbWEvIg0KICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1M U2NoZW1hLWluc3RhbmNlIg0KICB4bWxuczp1YT0iaHR0cDovL29wY2ZvdW5kYXRpb24ub3JnL1VB LyINCiAgeG1sbnM6dG5zPSJodHRwOi8vY2FzLmV1L1VBL0NvbW1TZXJ2ZXIvVW5pdFRlc3RzL0Rh dGFUeXBlVGVzdCINCiAgRGVmYXVsdEJ5dGVPcmRlcj0iTGl0dGxlRW5kaWFuIg0KICBUYXJnZXRO YW1lc3BhY2U9Imh0dHA6Ly9jYXMuZXUvVUEvQ29tbVNlcnZlci9Vbml0VGVzdHMvRGF0YVR5cGVU ZXN0Ig0KPg0KICA8b3BjOkltcG9ydCBOYW1lc3BhY2U9Imh0dHA6Ly9vcGNmb3VuZGF0aW9uLm9y Zy9VQS8iIExvY2F0aW9uPSIuQmluYXJ5U2NoZW1hLmJzZCIvPg0KDQogIDxvcGM6RW51bWVyYXRl ZFR5cGUgTmFtZT0iQWJzdHJhY3RFbnVtZXJhdGlvbkRhdGFUeXBlIiBMZW5ndGhJbkJpdHM9IjMy Ij4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJGaWVsZDEiIFZhbHVlPSIwIiAvPg0K ICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkZpZWxkMiIgVmFsdWU9IjEiIC8+DQogIDwv b3BjOkVudW1lcmF0ZWRUeXBlPg0KDQogIDxvcGM6RW51bWVyYXRlZFR5cGUgTmFtZT0iRW51bWVy YXRpb25EYXRhVHlwZSIgTGVuZ3RoSW5CaXRzPSIzMiI+DQogICAgPG9wYzpEb2N1bWVudGF0aW9u PkVudW1lcmF0aW9uIERhdGFUeXBlIGRlcml2ZWQgZnJvbSBhYnN0cmFjdCB0eXBlPC9vcGM6RG9j dW1lbnRhdGlvbj4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJGaWVsZDEiIFZhbHVl PSIwIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkZpZWxkMiIgVmFsdWU9IjEi IC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iRmllbGQzIiBWYWx1ZT0iMSIgLz4N CiAgPC9vcGM6RW51bWVyYXRlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJB YnN0cmFjdFN0cnVjdHVyZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9w YzpEb2N1bWVudGF0aW9uPkFic3RyYWN0IHN0cnVjdHVyZTwvb3BjOkRvY3VtZW50YXRpb24+DQog ICAgPG9wYzpGaWVsZCBOYW1lPSJOdW1iZXIiIFR5cGVOYW1lPSJ1YTpWYXJpYW50IiAvPg0KICA8 L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkRlcml2 ZWRTdHJ1Y3R1cmUiIEJhc2VUeXBlPSJ0bnM6QWJzdHJhY3RTdHJ1Y3R1cmUiPg0KICAgIDxvcGM6 RmllbGQgTmFtZT0iTnVtYmVyIiBUeXBlTmFtZT0idWE6VmFyaWFudCIgU291cmNlVHlwZT0idG5z OkFic3RyYWN0U3RydWN0dXJlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTnVtYmVyIiBUeXBl TmFtZT0ib3BjOkludDMyIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KPC9vcGM6VHlw ZURpY3Rpb25hcnk+ NamespaceUri i=68 ns=1;i=5 http://cas.eu/UA/CommServer/UnitTests/DataTypeTest Deprecated i=68 ns=1;i=5 true AbstractStructure i=69 ns=1;i=5 AbstractStructure DerivedStructure i=69 ns=1;i=5 DerivedStructure Default XML ns=1;i=13 ns=1;i=15 i=76 Default XML ns=1;i=22 ns=1;i=24 i=76 DataTypeTest ns=1;i=4 ns=1;i=8 ns=1;i=15 ns=1;i=24 i=92 i=72 PHhzOnNjaGVtYQ0KICB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEi DQogIHhtbG5zOnVhPSJodHRwOi8vb3BjZm91bmRhdGlvbi5vcmcvVUEvMjAwOC8wMi9UeXBlcy54 c2QiDQogIHhtbG5zOnRucz0iaHR0cDovL2Nhcy5ldS9VQS9Db21tU2VydmVyL1VuaXRUZXN0cy9E YXRhVHlwZVRlc3QiDQogIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2Nhcy5ldS9VQS9Db21tU2Vy dmVyL1VuaXRUZXN0cy9EYXRhVHlwZVRlc3QiDQogIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlm aWVkIg0KPg0KICA8eHM6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL29wY2ZvdW5kYXRpb24ub3Jn L1VBLyIgLz4NCg0KICA8eHM6c2ltcGxlVHlwZSAgbmFtZT0iQWJzdHJhY3RFbnVtZXJhdGlvbkRh dGFUeXBlIj4NCiAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIj4NCiAgICAgIDx4 czplbnVtZXJhdGlvbiB2YWx1ZT0iRmllbGQxXzAiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24g dmFsdWU9IkZpZWxkMl8xIiAvPg0KICAgIDwveHM6cmVzdHJpY3Rpb24+DQogIDwveHM6c2ltcGxl VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iQWJzdHJhY3RFbnVtZXJhdGlvbkRhdGFUeXBlIiB0 eXBlPSJ0bnM6QWJzdHJhY3RFbnVtZXJhdGlvbkRhdGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4 VHlwZSBuYW1lPSJMaXN0T2ZBYnN0cmFjdEVudW1lcmF0aW9uRGF0YVR5cGUiPg0KICAgIDx4czpz ZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkFic3RyYWN0RW51bWVyYXRpb25EYXRh VHlwZSIgdHlwZT0idG5zOkFic3RyYWN0RW51bWVyYXRpb25EYXRhVHlwZSIgbWluT2NjdXJzPSIw IiBtYXhPY2N1cnM9InVuYm91bmRlZCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNv bXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZBYnN0cmFjdEVudW1lcmF0aW9u RGF0YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZBYnN0cmFjdEVudW1lcmF0aW9uRGF0YVR5cGUiIG5p bGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOnNpbXBsZVR5cGUgIG5hbWU9IkVu dW1lcmF0aW9uRGF0YVR5cGUiPg0KICAgIDx4czphbm5vdGF0aW9uPg0KICAgICAgPHhzOmRvY3Vt ZW50YXRpb24+RW51bWVyYXRpb24gRGF0YVR5cGUgZGVyaXZlZCBmcm9tIGFic3RyYWN0IHR5cGU8 L3hzOmRvY3VtZW50YXRpb24+DQogICAgPC94czphbm5vdGF0aW9uPg0KICAgIDx4czpyZXN0cmlj dGlvbiBiYXNlPSJ4czpzdHJpbmciPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJGaWVs ZDNfMSIgLz4NCiAgICA8L3hzOnJlc3RyaWN0aW9uPg0KICA8L3hzOnNpbXBsZVR5cGU+DQogIDx4 czplbGVtZW50IG5hbWU9IkVudW1lcmF0aW9uRGF0YVR5cGUiIHR5cGU9InRuczpFbnVtZXJhdGlv bkRhdGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZFbnVtZXJhdGlv bkRhdGFUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJF bnVtZXJhdGlvbkRhdGFUeXBlIiB0eXBlPSJ0bnM6RW51bWVyYXRpb25EYXRhVHlwZSIgbWluT2Nj dXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8 L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZFbnVtZXJhdGlvbkRh dGFUeXBlIiB0eXBlPSJ0bnM6TGlzdE9mRW51bWVyYXRpb25EYXRhVHlwZSIgbmlsbGFibGU9InRy dWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iQWJzdHJhY3RTdHJ1 Y3R1cmUiPg0KICAgIDx4czphbm5vdGF0aW9uPg0KICAgICAgPHhzOmRvY3VtZW50YXRpb24+QWJz dHJhY3Qgc3RydWN0dXJlPC94czpkb2N1bWVudGF0aW9uPg0KICAgIDwveHM6YW5ub3RhdGlvbj4N CiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJOdW1iZXIiIHR5cGU9 InVhOlZhcmlhbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hz OmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJBYnN0cmFjdFN0cnVjdHVyZSIgdHlw ZT0idG5zOkFic3RyYWN0U3RydWN0dXJlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJM aXN0T2ZBYnN0cmFjdFN0cnVjdHVyZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVs ZW1lbnQgbmFtZT0iQWJzdHJhY3RTdHJ1Y3R1cmUiIHR5cGU9InRuczpBYnN0cmFjdFN0cnVjdHVy ZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+ DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQg bmFtZT0iTGlzdE9mQWJzdHJhY3RTdHJ1Y3R1cmUiIHR5cGU9InRuczpMaXN0T2ZBYnN0cmFjdFN0 cnVjdHVyZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5 cGUgbmFtZT0iRGVyaXZlZFN0cnVjdHVyZSI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVk PSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpBYnN0cmFjdFN0cnVjdHVy ZSI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJO dW1iZXIiIHR5cGU9InhzOmludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICA8L3hzOnNlcXVl bmNlPg0KICAgICAgPC94czpleHRlbnNpb24+DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAg PC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iRGVyaXZlZFN0cnVjdHVyZSIg dHlwZT0idG5zOkRlcml2ZWRTdHJ1Y3R1cmUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9 Ikxpc3RPZkRlcml2ZWRTdHJ1Y3R1cmUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czpl bGVtZW50IG5hbWU9IkRlcml2ZWRTdHJ1Y3R1cmUiIHR5cGU9InRuczpEZXJpdmVkU3RydWN0dXJl IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4N CiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBu YW1lPSJMaXN0T2ZEZXJpdmVkU3RydWN0dXJlIiB0eXBlPSJ0bnM6TGlzdE9mRGVyaXZlZFN0cnVj dHVyZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KPC94czpzY2hlbWE+ NamespaceUri i=68 ns=1;i=2 http://cas.eu/UA/CommServer/UnitTests/DataTypeTest Deprecated i=68 ns=1;i=2 true AbstractStructure i=69 ns=1;i=2 //xs:element[@name='AbstractStructure'] DerivedStructure i=69 ns=1;i=2 //xs:element[@name='DerivedStructure'] Default JSON ns=1;i=13 i=76 Default JSON ns=1;i=22 i=76 ================================================ FILE: SemanticData/UAModelDesignExport.UnitTest/Models/DataTypeTest/DataTypeTest.PredefinedNodes.xml ================================================  http://cas.eu/UA/CommServer/UnitTests/DataTypeTest DataType_64 ns=1;i=9 1 AbstractEnumerationDataType i=29 true i=14799 0 Field1 Field1 1 Field2 Field2 Variable_2 ns=1;i=10 0 EnumStrings i=46 i=68 10 Field1 Field2 i=21 1 0 1 1 DataType_64 ns=1;i=11 1 EnumerationDataType Enumeration DataType derived from abstract type ns=1;i=9 i=14799 1 Field3 Field3 Variable_2 ns=1;i=12 0 EnumValues i=46 i=68 12 i=7616 1 Field3 i=7594 1 0 1 1 DataType_64 ns=1;i=13 1 AbstractStructure Abstract structure i=22 true i=14798 i=22 Structure_0 Number i=26 -1 0 false DataType_64 ns=1;i=22 1 DerivedStructure ns=1;i=13 i=14798 ns=1;i=13 Structure_0 Number i=26 -1 0 false Number Derived from Number i=6 -1 0 false Object_1 ns=1;i=18 0 Default Binary i=76 18 i=38 true ns=1;i=13 i=39 ns=1;i=19 Object_1 ns=1;i=27 0 Default Binary i=76 27 i=38 true ns=1;i=22 i=39 ns=1;i=28 Variable_2 ns=1;i=5 1 DataTypeTest i=72 5 PG9wYzpUeXBlRGljdGlvbmFyeQ0KICB4bWxuczpvcGM9Imh0dHA6Ly9vcGNmb3VuZGF0aW9uLm9y Zy9CaW5hcnlTY2hlbWEvIg0KICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1M U2NoZW1hLWluc3RhbmNlIg0KICB4bWxuczp1YT0iaHR0cDovL29wY2ZvdW5kYXRpb24ub3JnL1VB LyINCiAgeG1sbnM6dG5zPSJodHRwOi8vY2FzLmV1L1VBL0NvbW1TZXJ2ZXIvVW5pdFRlc3RzL0Rh dGFUeXBlVGVzdCINCiAgRGVmYXVsdEJ5dGVPcmRlcj0iTGl0dGxlRW5kaWFuIg0KICBUYXJnZXRO YW1lc3BhY2U9Imh0dHA6Ly9jYXMuZXUvVUEvQ29tbVNlcnZlci9Vbml0VGVzdHMvRGF0YVR5cGVU ZXN0Ig0KPg0KICA8b3BjOkltcG9ydCBOYW1lc3BhY2U9Imh0dHA6Ly9vcGNmb3VuZGF0aW9uLm9y Zy9VQS8iIExvY2F0aW9uPSIuQmluYXJ5U2NoZW1hLmJzZCIvPg0KDQogIDxvcGM6RW51bWVyYXRl ZFR5cGUgTmFtZT0iQWJzdHJhY3RFbnVtZXJhdGlvbkRhdGFUeXBlIiBMZW5ndGhJbkJpdHM9IjMy Ij4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJGaWVsZDEiIFZhbHVlPSIwIiAvPg0K ICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkZpZWxkMiIgVmFsdWU9IjEiIC8+DQogIDwv b3BjOkVudW1lcmF0ZWRUeXBlPg0KDQogIDxvcGM6RW51bWVyYXRlZFR5cGUgTmFtZT0iRW51bWVy YXRpb25EYXRhVHlwZSIgTGVuZ3RoSW5CaXRzPSIzMiI+DQogICAgPG9wYzpEb2N1bWVudGF0aW9u PkVudW1lcmF0aW9uIERhdGFUeXBlIGRlcml2ZWQgZnJvbSBhYnN0cmFjdCB0eXBlPC9vcGM6RG9j dW1lbnRhdGlvbj4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJGaWVsZDEiIFZhbHVl PSIwIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkZpZWxkMiIgVmFsdWU9IjEi IC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iRmllbGQzIiBWYWx1ZT0iMSIgLz4N CiAgPC9vcGM6RW51bWVyYXRlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJB YnN0cmFjdFN0cnVjdHVyZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9w YzpEb2N1bWVudGF0aW9uPkFic3RyYWN0IHN0cnVjdHVyZTwvb3BjOkRvY3VtZW50YXRpb24+DQog ICAgPG9wYzpGaWVsZCBOYW1lPSJOdW1iZXIiIFR5cGVOYW1lPSJ1YTpWYXJpYW50IiAvPg0KICA8 L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkRlcml2 ZWRTdHJ1Y3R1cmUiIEJhc2VUeXBlPSJ0bnM6QWJzdHJhY3RTdHJ1Y3R1cmUiPg0KICAgIDxvcGM6 RmllbGQgTmFtZT0iTnVtYmVyIiBUeXBlTmFtZT0idWE6VmFyaWFudCIgU291cmNlVHlwZT0idG5z OkFic3RyYWN0U3RydWN0dXJlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTnVtYmVyIiBUeXBl TmFtZT0ib3BjOkludDMyIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KPC9vcGM6VHlw ZURpY3Rpb25hcnk+ i=15 -1 1 1 i=47 true i=93 Variable_2 ns=1;i=7 0 NamespaceUri i=46 i=68 7 http://cas.eu/UA/CommServer/UnitTests/DataTypeTest i=12 -1 1 1 Variable_2 ns=1;i=1 0 Deprecated i=46 i=68 1 true i=1 -1 1 1 Variable_2 ns=1;i=19 1 AbstractStructure i=47 i=69 19 AbstractStructure i=12 -1 1 1 Variable_2 ns=1;i=28 1 DerivedStructure i=47 i=69 28 DerivedStructure i=12 -1 1 1 Object_1 ns=1;i=14 0 Default XML i=76 14 i=38 true ns=1;i=13 i=39 ns=1;i=15 Object_1 ns=1;i=23 0 Default XML i=76 23 i=38 true ns=1;i=22 i=39 ns=1;i=24 Variable_2 ns=1;i=2 1 DataTypeTest i=72 2 PHhzOnNjaGVtYQ0KICB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEi DQogIHhtbG5zOnVhPSJodHRwOi8vb3BjZm91bmRhdGlvbi5vcmcvVUEvMjAwOC8wMi9UeXBlcy54 c2QiDQogIHhtbG5zOnRucz0iaHR0cDovL2Nhcy5ldS9VQS9Db21tU2VydmVyL1VuaXRUZXN0cy9E YXRhVHlwZVRlc3QiDQogIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2Nhcy5ldS9VQS9Db21tU2Vy dmVyL1VuaXRUZXN0cy9EYXRhVHlwZVRlc3QiDQogIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlm aWVkIg0KPg0KICA8eHM6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL29wY2ZvdW5kYXRpb24ub3Jn L1VBLyIgLz4NCg0KICA8eHM6c2ltcGxlVHlwZSAgbmFtZT0iQWJzdHJhY3RFbnVtZXJhdGlvbkRh dGFUeXBlIj4NCiAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIj4NCiAgICAgIDx4 czplbnVtZXJhdGlvbiB2YWx1ZT0iRmllbGQxXzAiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24g dmFsdWU9IkZpZWxkMl8xIiAvPg0KICAgIDwveHM6cmVzdHJpY3Rpb24+DQogIDwveHM6c2ltcGxl VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iQWJzdHJhY3RFbnVtZXJhdGlvbkRhdGFUeXBlIiB0 eXBlPSJ0bnM6QWJzdHJhY3RFbnVtZXJhdGlvbkRhdGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4 VHlwZSBuYW1lPSJMaXN0T2ZBYnN0cmFjdEVudW1lcmF0aW9uRGF0YVR5cGUiPg0KICAgIDx4czpz ZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkFic3RyYWN0RW51bWVyYXRpb25EYXRh VHlwZSIgdHlwZT0idG5zOkFic3RyYWN0RW51bWVyYXRpb25EYXRhVHlwZSIgbWluT2NjdXJzPSIw IiBtYXhPY2N1cnM9InVuYm91bmRlZCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNv bXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZBYnN0cmFjdEVudW1lcmF0aW9u RGF0YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZBYnN0cmFjdEVudW1lcmF0aW9uRGF0YVR5cGUiIG5p bGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOnNpbXBsZVR5cGUgIG5hbWU9IkVu dW1lcmF0aW9uRGF0YVR5cGUiPg0KICAgIDx4czphbm5vdGF0aW9uPg0KICAgICAgPHhzOmRvY3Vt ZW50YXRpb24+RW51bWVyYXRpb24gRGF0YVR5cGUgZGVyaXZlZCBmcm9tIGFic3RyYWN0IHR5cGU8 L3hzOmRvY3VtZW50YXRpb24+DQogICAgPC94czphbm5vdGF0aW9uPg0KICAgIDx4czpyZXN0cmlj dGlvbiBiYXNlPSJ4czpzdHJpbmciPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJGaWVs ZDNfMSIgLz4NCiAgICA8L3hzOnJlc3RyaWN0aW9uPg0KICA8L3hzOnNpbXBsZVR5cGU+DQogIDx4 czplbGVtZW50IG5hbWU9IkVudW1lcmF0aW9uRGF0YVR5cGUiIHR5cGU9InRuczpFbnVtZXJhdGlv bkRhdGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZFbnVtZXJhdGlv bkRhdGFUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJF bnVtZXJhdGlvbkRhdGFUeXBlIiB0eXBlPSJ0bnM6RW51bWVyYXRpb25EYXRhVHlwZSIgbWluT2Nj dXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8 L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZFbnVtZXJhdGlvbkRh dGFUeXBlIiB0eXBlPSJ0bnM6TGlzdE9mRW51bWVyYXRpb25EYXRhVHlwZSIgbmlsbGFibGU9InRy dWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iQWJzdHJhY3RTdHJ1 Y3R1cmUiPg0KICAgIDx4czphbm5vdGF0aW9uPg0KICAgICAgPHhzOmRvY3VtZW50YXRpb24+QWJz dHJhY3Qgc3RydWN0dXJlPC94czpkb2N1bWVudGF0aW9uPg0KICAgIDwveHM6YW5ub3RhdGlvbj4N CiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJOdW1iZXIiIHR5cGU9 InVhOlZhcmlhbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hz OmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJBYnN0cmFjdFN0cnVjdHVyZSIgdHlw ZT0idG5zOkFic3RyYWN0U3RydWN0dXJlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJM aXN0T2ZBYnN0cmFjdFN0cnVjdHVyZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVs ZW1lbnQgbmFtZT0iQWJzdHJhY3RTdHJ1Y3R1cmUiIHR5cGU9InRuczpBYnN0cmFjdFN0cnVjdHVy ZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+ DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQg bmFtZT0iTGlzdE9mQWJzdHJhY3RTdHJ1Y3R1cmUiIHR5cGU9InRuczpMaXN0T2ZBYnN0cmFjdFN0 cnVjdHVyZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5 cGUgbmFtZT0iRGVyaXZlZFN0cnVjdHVyZSI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVk PSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpBYnN0cmFjdFN0cnVjdHVy ZSI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJO dW1iZXIiIHR5cGU9InhzOmludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICA8L3hzOnNlcXVl bmNlPg0KICAgICAgPC94czpleHRlbnNpb24+DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAg PC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iRGVyaXZlZFN0cnVjdHVyZSIg dHlwZT0idG5zOkRlcml2ZWRTdHJ1Y3R1cmUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9 Ikxpc3RPZkRlcml2ZWRTdHJ1Y3R1cmUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czpl bGVtZW50IG5hbWU9IkRlcml2ZWRTdHJ1Y3R1cmUiIHR5cGU9InRuczpEZXJpdmVkU3RydWN0dXJl IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4N CiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBu YW1lPSJMaXN0T2ZEZXJpdmVkU3RydWN0dXJlIiB0eXBlPSJ0bnM6TGlzdE9mRGVyaXZlZFN0cnVj dHVyZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KPC94czpzY2hlbWE+ i=15 -1 1 1 i=47 true i=92 Variable_2 ns=1;i=4 0 NamespaceUri i=46 i=68 4 http://cas.eu/UA/CommServer/UnitTests/DataTypeTest i=12 -1 1 1 Variable_2 ns=1;i=8 0 Deprecated i=46 i=68 8 true i=1 -1 1 1 Variable_2 ns=1;i=15 1 AbstractStructure i=47 i=69 15 //xs:element[@name='AbstractStructure'] i=12 -1 1 1 Variable_2 ns=1;i=24 1 DerivedStructure i=47 i=69 24 //xs:element[@name='DerivedStructure'] i=12 -1 1 1 Object_1 ns=1;i=31 0 Default JSON i=76 31 i=38 true ns=1;i=13 Object_1 ns=1;i=32 0 Default JSON i=76 32 i=38 true ns=1;i=22 ================================================ FILE: SemanticData/UAModelDesignExport.UnitTest/Models/DataTypeTest/DataTypeTest.Types.bsd ================================================ Enumeration DataType derived from abstract type Abstract structure ================================================ FILE: SemanticData/UAModelDesignExport.UnitTest/Models/DataTypeTest/DataTypeTest.Types.xsd ================================================ Enumeration DataType derived from abstract type Abstract structure ================================================ FILE: SemanticData/UAModelDesignExport.UnitTest/Models/DataTypeTest.asp.xml ================================================  http://opcfoundation.org/UA/ http://cas.eu/UA/CommServer/UnitTests/DataTypeTest Field1 Field2 Enumeration DataType derived from abstract type i=7616 1 Field3 Abstract structure Derived from Number ================================================ FILE: SemanticData/UAModelDesignExport.UnitTest/Models/DataTypeTest.csv ================================================ cas_BinarySchema_Deprecated,1,Variable cas_XmlSchema,2,Variable cas_XmlSchema_DataTypeVersion,3,Variable cas_XmlSchema_NamespaceUri,4,Variable cas_BinarySchema,5,Variable cas_BinarySchema_DataTypeVersion,6,Variable cas_BinarySchema_NamespaceUri,7,Variable cas_XmlSchema_Deprecated,8,Variable AbstractEnumerationDataType,9,DataType AbstractEnumerationDataType_EnumStrings,10,Variable EnumerationDataType,11,DataType EnumerationDataType_EnumValues,12,Variable AbstractStructure,13,DataType AbstractStructure_Encoding_DefaultXml,14,Object cas_XmlSchema_AbstractStructure,15,Variable cas_XmlSchema_AbstractStructure_DataTypeVersion,16,Variable cas_XmlSchema_AbstractStructure_DictionaryFragment,17,Variable AbstractStructure_Encoding_DefaultBinary,18,Object cas_BinarySchema_AbstractStructure,19,Variable cas_BinarySchema_AbstractStructure_DataTypeVersion,20,Variable cas_BinarySchema_AbstractStructure_DictionaryFragment,21,Variable DerivedStructure,22,DataType DerivedStructure_Encoding_DefaultXml,23,Object cas_XmlSchema_DerivedStructure,24,Variable cas_XmlSchema_DerivedStructure_DataTypeVersion,25,Variable cas_XmlSchema_DerivedStructure_DictionaryFragment,26,Variable DerivedStructure_Encoding_DefaultBinary,27,Object cas_BinarySchema_DerivedStructure,28,Variable cas_BinarySchema_DerivedStructure_DataTypeVersion,29,Variable cas_BinarySchema_DerivedStructure_DictionaryFragment,30,Variable AbstractStructure_Encoding_DefaultJson,31,Object DerivedStructure_Encoding_DefaultJson,32,Object ================================================ FILE: SemanticData/UAModelDesignExport.UnitTest/Models/DataTypeTest.xml ================================================  http://cas.eu/UA/CommServer/UnitTests/DataTypeTest http://opcfoundation.org/UA/ Enumeration DataType derived from abstract type Abstract structure Derived from Number ================================================ FILE: SemanticData/UAModelDesignExport.UnitTest/Models/DoRecoverModelDesign.cmd ================================================ :: Recovering ModelDesign from UANodeSet OPC UA Model Information :: %1 - location of the asp.exe del %1\asp.log /q del %1\asp.warnings.log /q %1\asp "DataTypeTest\DataTypeTest.NodeSet2.xml" -e "DataTypeTest.asp.xml" -s XMLstylesheet -n "http://cas.eu/UA/CommServer/UnitTests/DataTypeTest" xcopy %1\asp.log DataTypeTest\asp.log /y xcopy %1\asp.warnings.log DataTypeTest\asp.warnings.log /y /i del %1\asp.log /q del %1\asp.warnings.log /q %1\asp "ObjectTypeTest\ObjectTypeTest.NodeSet2.xml" -e "ObjectTypeTest.asp.xml" -s XMLstylesheet -n "http://cas.eu/UA/CommServer/UnitTests/ObjectTypeTest" xcopy %1\asp.log ObjectTypeTest\asp.log /y xcopy %1\asp.warnings.log ObjectTypeTest\asp.warnings.log /y /i del %1\asp.log /q del %1\asp.warnings.log /q %1\asp "ReferenceTest\ReferenceTest.NodeSet2.xml" -e "ReferenceTest.asp.xml" -s XMLstylesheet -n "http://cas.eu/UA/CommServer/UnitTests/ReferenceTest" xcopy %1\asp.log ReferenceTest\asp.log/y xcopy %1\asp.warnings.log ReferenceTest\asp.warnings.log /y /i del %1\asp.log /q del %1\asp.warnings.log /q %1\asp "VariableTypeTest\VariableTypeTest.NodeSet2.xml" -e "VariableTypeTest.asp.xml" -s XMLstylesheet -n "http://cas.eu/UA/CommServer/UnitTests/VariableTypeTest" xcopy %1\asp.log VariableTypeTest\asp.log /y xcopy %1\asp.warnings.log VariableTypeTest\asp.warnings.log /y /i ================================================ FILE: SemanticData/UAModelDesignExport.UnitTest/Models/GoNodeSet.cmd ================================================ set COMPILER=mdc del %1\mdc.log /q del %1\mdc.warnings.log /q "%1\%COMPILER%" compile --d2 "ReferenceTest.xml" -c "ReferenceTest.csv" --o2 "ReferenceTest" xcopy %1\mdc.log .\ReferenceTest\mdc.log /y /i xcopy %1\mdc.warnings.log .\ReferenceTest\mdc.warnings.log /y /i del %1\mdc.log /q del %1\mdc.warnings.log /q "%1\%COMPILER%" compile --d2 "ObjectTypeTest.xml" -c "ObjectTypeTest.csv" --o2 "ObjectTypeTest" xcopy %1\mdc.log .\ObjectTypeTest\mdc.log /y /i xcopy %1\mdc.warnings.log .\ObjectTypeTest\mdc.warnings.log /y /i del %1\mdc.log /q del %1\mdc.warnings.log /q "%1\%COMPILER%" compile --d2 "VariableTypeTest.xml" -c "VariableTypeTest.csv" --o2 "VariableTypeTest" xcopy %1\mdc.log .\VariableTypeTest\mdc.log /y /i xcopy %1\mdc.warnings.log .\VariableTypeTest\mdc.warnings.log /y /i del %1\mdc.log /q del %1\mdc.warnings.log /q "%1\%COMPILER%" compile --d2 "DataTypeTest.xml" -c "DataTypeTest.csv" --o2 "DataTypeTest" xcopy %1\mdc.log .\DataTypeTest\mdc.log /y /i xcopy %1\mdc.warnings.log .\DataTypeTest\mdc.warnings.log /y /i ================================================ FILE: SemanticData/UAModelDesignExport.UnitTest/Models/ObjectTypeTest/ObjectTypeTest.Classes.cs ================================================ /* ======================================================================== * Copyright (c) 2005-2021 The OPC Foundation, Inc. All rights reserved. * * OPC Foundation MIT License 1.00 * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, * copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following * conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. * * The complete license agreement can be found here: * http://opcfoundation.org/License/MIT/1.00/ * ======================================================================*/ using System; using System.Collections.Generic; using System.Text; using System.Xml; using System.Runtime.Serialization; using ; namespace ObjectTypeTest { #region ComplexObjectState Class #if (!OPCUA_EXCLUDE_ComplexObjectState) /// /// Stores an instance of the ComplexObjectType ObjectType. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public partial class ComplexObjectState : BaseObjectState { #region Constructors /// /// Initializes the type with its default attribute values. /// public ComplexObjectState(NodeState parent) : base(parent) { } /// /// Returns the id of the default type definition node for the instance. /// protected override NodeId GetDefaultTypeDefinitionId(NamespaceTable namespaceUris) { return Opc.Ua.NodeId.Create(ObjectTypeTest.ObjectTypes.ComplexObjectType, ObjectTypeTest.Namespaces.cas, namespaceUris); } #if (!OPCUA_EXCLUDE_InitializationStrings) /// /// Initializes the instance. /// protected override void Initialize(ISystemContext context) { base.Initialize(context); Initialize(context, InitializationString); InitializeOptionalChildren(context); } /// /// Initializes the instance with a node. /// protected override void Initialize(ISystemContext context, NodeState source) { InitializeOptionalChildren(context); base.Initialize(context, source); } /// /// Initializes the any option children defined for the instance. /// protected override void InitializeOptionalChildren(ISystemContext context) { base.InitializeOptionalChildren(context); } #region Initialization String private const string InitializationString = "AQAAADQAAABodHRwOi8vY2FzLmV1L1VBL0NvbW1TZXJ2ZXIvVW5pdFRlc3RzL09iamVjdFR5cGVUZXN0" + "/////wRggAIBAAAAAQAZAAAAQ29tcGxleE9iamVjdFR5cGVJbnN0YW5jZQEBAQABAQEAAQAAAP////8D" + "AAAAFWDJCgIAAAARAAAAQnJvd3NlTmFtZTRub2RlNjYBAA0AAABDaGlsZFByb3BlcnR5AQEDAAAuAEQD" + "AAAAABX/////AQH/////AAAAABVgiQoCAAAAAQANAAAAQ2hpbGRWYXJpYWJsZQEBKwAALwEAQAkrAAAA" + "ABr/////AQH/////AQAAABVgiQoCAAAAAAAHAAAARVVSYW5nZQEBLwAALgBELwAAAAEAdAP/////AQH/" + "////AAAAAARhggoEAAAAAQALAAAAQ2hpbGRNZXRob2QBAQoAAC8BAQoACgAAAAEB/////wAAAAA="; #endregion #endif #endregion #region Public Properties /// public PropertyState BrowseName4node66 { get { return m_browseName4node66; } set { if (!Object.ReferenceEquals(m_browseName4node66, value)) { ChangeMasks |= NodeStateChangeMasks.Children; } m_browseName4node66 = value; } } /// public AnalogItemState ChildVariable { get { return m_childVariable; } set { if (!Object.ReferenceEquals(m_childVariable, value)) { ChangeMasks |= NodeStateChangeMasks.Children; } m_childVariable = value; } } /// public ChildMethodMethodState ChildMethod { get { return m_childMethodMethod; } set { if (!Object.ReferenceEquals(m_childMethodMethod, value)) { ChangeMasks |= NodeStateChangeMasks.Children; } m_childMethodMethod = value; } } #endregion #region Overridden Methods /// /// Populates a list with the children that belong to the node. /// /// The context for the system being accessed. /// The list of children to populate. public override void GetChildren( ISystemContext context, IList children) { if (m_browseName4node66 != null) { children.Add(m_browseName4node66); } if (m_childVariable != null) { children.Add(m_childVariable); } if (m_childMethodMethod != null) { children.Add(m_childMethodMethod); } base.GetChildren(context, children); } /// /// Finds the child with the specified browse name. /// protected override BaseInstanceState FindChild( ISystemContext context, QualifiedName browseName, bool createOrReplace, BaseInstanceState replacement) { if (QualifiedName.IsNull(browseName)) { return null; } BaseInstanceState instance = null; switch (browseName.Name) { case ObjectTypeTest.BrowseNames.BrowseName4node66: { if (createOrReplace) { if (BrowseName4node66 == null) { if (replacement == null) { BrowseName4node66 = new PropertyState(this); } else { BrowseName4node66 = (PropertyState)replacement; } } } instance = BrowseName4node66; break; } case ObjectTypeTest.BrowseNames.ChildVariable: { if (createOrReplace) { if (ChildVariable == null) { if (replacement == null) { ChildVariable = new AnalogItemState(this); } else { ChildVariable = (AnalogItemState)replacement; } } } instance = ChildVariable; break; } case ObjectTypeTest.BrowseNames.ChildMethod: { if (createOrReplace) { if (ChildMethod == null) { if (replacement == null) { ChildMethod = new ChildMethodMethodState(this); } else { ChildMethod = (ChildMethodMethodState)replacement; } } } instance = ChildMethod; break; } } if (instance != null) { return instance; } return base.FindChild(context, browseName, createOrReplace, replacement); } #endregion #region Private Fields private PropertyState m_browseName4node66; private AnalogItemState m_childVariable; private ChildMethodMethodState m_childMethodMethod; #endregion } #endif #endregion #region DerivedFromComplexObjectState Class #if (!OPCUA_EXCLUDE_DerivedFromComplexObjectState) /// /// Stores an instance of the DerivedFromComplexObjectType ObjectType. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public partial class DerivedFromComplexObjectState : ComplexObjectState { #region Constructors /// /// Initializes the type with its default attribute values. /// public DerivedFromComplexObjectState(NodeState parent) : base(parent) { } /// /// Returns the id of the default type definition node for the instance. /// protected override NodeId GetDefaultTypeDefinitionId(NamespaceTable namespaceUris) { return Opc.Ua.NodeId.Create(ObjectTypeTest.ObjectTypes.DerivedFromComplexObjectType, ObjectTypeTest.Namespaces.cas, namespaceUris); } #if (!OPCUA_EXCLUDE_InitializationStrings) /// /// Initializes the instance. /// protected override void Initialize(ISystemContext context) { base.Initialize(context); Initialize(context, InitializationString); InitializeOptionalChildren(context); } /// /// Initializes the instance with a node. /// protected override void Initialize(ISystemContext context, NodeState source) { InitializeOptionalChildren(context); base.Initialize(context, source); } /// /// Initializes the any option children defined for the instance. /// protected override void InitializeOptionalChildren(ISystemContext context) { base.InitializeOptionalChildren(context); } #region Initialization String private const string InitializationString = "AQAAADQAAABodHRwOi8vY2FzLmV1L1VBL0NvbW1TZXJ2ZXIvVW5pdFRlc3RzL09iamVjdFR5cGVUZXN0" + "/////wRggAIBAAAAAQAkAAAARGVyaXZlZEZyb21Db21wbGV4T2JqZWN0VHlwZUluc3RhbmNlAQEQAAEB" + "EAAQAAAA/////wMAAAAVYMkKAgAAABEAAABCcm93c2VOYW1lNG5vZGU2NgEADQAAAENoaWxkUHJvcGVy" + "dHkBARIAAC4ARBIAAAAAFf////8BAf////8AAAAAFWCJCgIAAAABAA0AAABDaGlsZFZhcmlhYmxlAQEx" + "AAAvAQBACTEAAAAAGv////8BAf////8BAAAAFWCJCgIAAAAAAAcAAABFVVJhbmdlAQE1AAAuAEQ1AAAA" + "AQB0A/////8BAf////8AAAAARGGCCgQAAAABAAsAAABDaGlsZE1ldGhvZAEBGQADAAAAABIAAABDaGls" + "ZE1ldGhvZE5ld05hbWUALwEBCgAZAAAAAQH/////AAAAAA=="; #endregion #endif #endregion #region Public Properties #endregion #region Overridden Methods #endregion #region Private Fields #endregion } #endif #endregion } ================================================ FILE: SemanticData/UAModelDesignExport.UnitTest/Models/ObjectTypeTest/ObjectTypeTest.Constants.cs ================================================ /* ======================================================================== * Copyright (c) 2005-2021 The OPC Foundation, Inc. All rights reserved. * * OPC Foundation MIT License 1.00 * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, * copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following * conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. * * The complete license agreement can be found here: * http://opcfoundation.org/License/MIT/1.00/ * ======================================================================*/ using System; using System.Collections.Generic; using System.Text; using System.Reflection; using System.Xml; using System.Runtime.Serialization; using ; namespace ObjectTypeTest { #region Method Identifiers /// /// A class that declares constants for all Methods in the Model Design. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class Methods { /// /// The identifier for the ComplexObjectType_ChildMethod Method. /// public const uint ComplexObjectType_ChildMethod = 10; /// /// The identifier for the DerivedFromComplexObjectType_ChildMethod Method. /// public const uint DerivedFromComplexObjectType_ChildMethod = 25; /// /// The identifier for the InstanceOfDerivedFromComplexObjectType_ChildMethod Method. /// public const uint InstanceOfDerivedFromComplexObjectType_ChildMethod = 39; } #endregion #region Object Identifiers /// /// A class that declares constants for all Objects in the Model Design. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class Objects { /// /// The identifier for the ComplexObjectType_ChildObject Object. /// public const uint ComplexObjectType_ChildObject = 2; /// /// The identifier for the InstanceOfDerivedFromComplexObjectType Object. /// public const uint InstanceOfDerivedFromComplexObjectType = 30; } #endregion #region ObjectType Identifiers /// /// A class that declares constants for all ObjectTypes in the Model Design. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class ObjectTypes { /// /// The identifier for the ComplexObjectType ObjectType. /// public const uint ComplexObjectType = 1; /// /// The identifier for the DerivedFromComplexObjectType ObjectType. /// public const uint DerivedFromComplexObjectType = 16; } #endregion #region Variable Identifiers /// /// A class that declares constants for all Variables in the Model Design. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class Variables { /// /// The identifier for the ComplexObjectType_BrowseName4node66 Variable. /// public const uint ComplexObjectType_BrowseName4node66 = 3; /// /// The identifier for the ComplexObjectType_ChildVariable Variable. /// public const uint ComplexObjectType_ChildVariable = 43; /// /// The identifier for the ComplexObjectType_ChildVariable_EURange Variable. /// public const uint ComplexObjectType_ChildVariable_EURange = 47; /// /// The identifier for the ComplexObjectType_ChildMethod_InputArguments Variable. /// public const uint ComplexObjectType_ChildMethod_InputArguments = 11; /// /// The identifier for the ComplexObjectType_ChildMethod_OutputArguments Variable. /// public const uint ComplexObjectType_ChildMethod_OutputArguments = 12; /// /// The identifier for the DerivedFromComplexObjectType_BrowseName4node66 Variable. /// public const uint DerivedFromComplexObjectType_BrowseName4node66 = 18; /// /// The identifier for the DerivedFromComplexObjectType_ChildVariable_EURange Variable. /// public const uint DerivedFromComplexObjectType_ChildVariable_EURange = 53; /// /// The identifier for the InstanceOfDerivedFromComplexObjectType_BrowseName4node66 Variable. /// public const uint InstanceOfDerivedFromComplexObjectType_BrowseName4node66 = 32; /// /// The identifier for the InstanceOfDerivedFromComplexObjectType_ChildVariable Variable. /// public const uint InstanceOfDerivedFromComplexObjectType_ChildVariable = 55; /// /// The identifier for the InstanceOfDerivedFromComplexObjectType_ChildVariable_EURange Variable. /// public const uint InstanceOfDerivedFromComplexObjectType_ChildVariable_EURange = 59; } #endregion #region Method Node Identifiers /// /// A class that declares constants for all Methods in the Model Design. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class MethodIds { /// /// The identifier for the ComplexObjectType_ChildMethod Method. /// public static readonly ExpandedNodeId ComplexObjectType_ChildMethod = new ExpandedNodeId(ObjectTypeTest.Methods.ComplexObjectType_ChildMethod, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the DerivedFromComplexObjectType_ChildMethod Method. /// public static readonly ExpandedNodeId DerivedFromComplexObjectType_ChildMethod = new ExpandedNodeId(ObjectTypeTest.Methods.DerivedFromComplexObjectType_ChildMethod, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the InstanceOfDerivedFromComplexObjectType_ChildMethod Method. /// public static readonly ExpandedNodeId InstanceOfDerivedFromComplexObjectType_ChildMethod = new ExpandedNodeId(ObjectTypeTest.Methods.InstanceOfDerivedFromComplexObjectType_ChildMethod, ObjectTypeTest.Namespaces.cas); } #endregion #region Object Node Identifiers /// /// A class that declares constants for all Objects in the Model Design. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class ObjectIds { /// /// The identifier for the ComplexObjectType_ChildObject Object. /// public static readonly ExpandedNodeId ComplexObjectType_ChildObject = new ExpandedNodeId(ObjectTypeTest.Objects.ComplexObjectType_ChildObject, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the InstanceOfDerivedFromComplexObjectType Object. /// public static readonly ExpandedNodeId InstanceOfDerivedFromComplexObjectType = new ExpandedNodeId(ObjectTypeTest.Objects.InstanceOfDerivedFromComplexObjectType, ObjectTypeTest.Namespaces.cas); } #endregion #region ObjectType Node Identifiers /// /// A class that declares constants for all ObjectTypes in the Model Design. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class ObjectTypeIds { /// /// The identifier for the ComplexObjectType ObjectType. /// public static readonly ExpandedNodeId ComplexObjectType = new ExpandedNodeId(ObjectTypeTest.ObjectTypes.ComplexObjectType, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the DerivedFromComplexObjectType ObjectType. /// public static readonly ExpandedNodeId DerivedFromComplexObjectType = new ExpandedNodeId(ObjectTypeTest.ObjectTypes.DerivedFromComplexObjectType, ObjectTypeTest.Namespaces.cas); } #endregion #region Variable Node Identifiers /// /// A class that declares constants for all Variables in the Model Design. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class VariableIds { /// /// The identifier for the ComplexObjectType_BrowseName4node66 Variable. /// public static readonly ExpandedNodeId ComplexObjectType_BrowseName4node66 = new ExpandedNodeId(ObjectTypeTest.Variables.ComplexObjectType_BrowseName4node66, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the ComplexObjectType_ChildVariable Variable. /// public static readonly ExpandedNodeId ComplexObjectType_ChildVariable = new ExpandedNodeId(ObjectTypeTest.Variables.ComplexObjectType_ChildVariable, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the ComplexObjectType_ChildVariable_EURange Variable. /// public static readonly ExpandedNodeId ComplexObjectType_ChildVariable_EURange = new ExpandedNodeId(ObjectTypeTest.Variables.ComplexObjectType_ChildVariable_EURange, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the ComplexObjectType_ChildMethod_InputArguments Variable. /// public static readonly ExpandedNodeId ComplexObjectType_ChildMethod_InputArguments = new ExpandedNodeId(ObjectTypeTest.Variables.ComplexObjectType_ChildMethod_InputArguments, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the ComplexObjectType_ChildMethod_OutputArguments Variable. /// public static readonly ExpandedNodeId ComplexObjectType_ChildMethod_OutputArguments = new ExpandedNodeId(ObjectTypeTest.Variables.ComplexObjectType_ChildMethod_OutputArguments, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the DerivedFromComplexObjectType_BrowseName4node66 Variable. /// public static readonly ExpandedNodeId DerivedFromComplexObjectType_BrowseName4node66 = new ExpandedNodeId(ObjectTypeTest.Variables.DerivedFromComplexObjectType_BrowseName4node66, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the DerivedFromComplexObjectType_ChildVariable_EURange Variable. /// public static readonly ExpandedNodeId DerivedFromComplexObjectType_ChildVariable_EURange = new ExpandedNodeId(ObjectTypeTest.Variables.DerivedFromComplexObjectType_ChildVariable_EURange, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the InstanceOfDerivedFromComplexObjectType_BrowseName4node66 Variable. /// public static readonly ExpandedNodeId InstanceOfDerivedFromComplexObjectType_BrowseName4node66 = new ExpandedNodeId(ObjectTypeTest.Variables.InstanceOfDerivedFromComplexObjectType_BrowseName4node66, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the InstanceOfDerivedFromComplexObjectType_ChildVariable Variable. /// public static readonly ExpandedNodeId InstanceOfDerivedFromComplexObjectType_ChildVariable = new ExpandedNodeId(ObjectTypeTest.Variables.InstanceOfDerivedFromComplexObjectType_ChildVariable, ObjectTypeTest.Namespaces.cas); /// /// The identifier for the InstanceOfDerivedFromComplexObjectType_ChildVariable_EURange Variable. /// public static readonly ExpandedNodeId InstanceOfDerivedFromComplexObjectType_ChildVariable_EURange = new ExpandedNodeId(ObjectTypeTest.Variables.InstanceOfDerivedFromComplexObjectType_ChildVariable_EURange, ObjectTypeTest.Namespaces.cas); } #endregion #region BrowseName Declarations /// /// Declares all of the BrowseNames used in the Model Design. /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class BrowseNames { /// /// The BrowseName for the BrowseName4node66 component. /// public const string BrowseName4node66 = "ChildProperty"; /// /// The BrowseName for the ChildMethod component. /// public const string ChildMethod = "ChildMethod"; /// /// The BrowseName for the ChildObject component. /// public const string ChildObject = "ChildObject"; /// /// The BrowseName for the ChildVariable component. /// public const string ChildVariable = "ChildVariable"; /// /// The BrowseName for the ComplexObjectType component. /// public const string ComplexObjectType = "ComplexObjectType"; /// /// The BrowseName for the DerivedFromComplexObjectType component. /// public const string DerivedFromComplexObjectType = "DerivedFromComplexObjectType"; /// /// The BrowseName for the InstanceOfDerivedFromComplexObjectType component. /// public const string InstanceOfDerivedFromComplexObjectType = "InstanceOfDerivedFromComplexObjectType"; } #endregion #region Namespace Declarations /// /// Defines constants for all namespaces referenced by the model design. /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class Namespaces { /// /// The URI for the cas namespace (.NET code namespace is 'ObjectTypeTest'). /// public const string cas = "http://cas.eu/UA/CommServer/UnitTests/ObjectTypeTest"; /// /// The URI for the ua namespace (.NET code namespace is ''). /// public const string ua = "http://opcfoundation.org/UA/"; } #endregion } ================================================ FILE: SemanticData/UAModelDesignExport.UnitTest/Models/ObjectTypeTest/ObjectTypeTest.DataTypes.cs ================================================ /* ======================================================================== * Copyright (c) 2005-2021 The OPC Foundation, Inc. All rights reserved. * * OPC Foundation MIT License 1.00 * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, * copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following * conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. * * The complete license agreement can be found here: * http://opcfoundation.org/License/MIT/1.00/ * ======================================================================*/ using System; using System.Collections.Generic; using System.Text; using System.Xml; using System.Runtime.Serialization; using ; namespace ObjectTypeTest { } ================================================ FILE: SemanticData/UAModelDesignExport.UnitTest/Models/ObjectTypeTest/ObjectTypeTest.NodeIds.csv ================================================ ComplexObjectType,1,ObjectType DerivedFromComplexObjectType,16,ObjectType InstanceOfDerivedFromComplexObjectType,30,Object ================================================ FILE: SemanticData/UAModelDesignExport.UnitTest/Models/ObjectTypeTest/ObjectTypeTest.NodeSet.xml ================================================  http://opcfoundation.org/UA/ http://cas.eu/UA/CommServer/UnitTests/ObjectTypeTest ns=1;i=1 ObjectType_8 1 ComplexObjectType ComplexObjectType 0 0 0 i=45 true i=58 i=47 false ns=1;i=2 i=46 false ns=1;i=3 i=47 false ns=1;i=43 i=47 false ns=1;i=10 i=45 false ns=1;i=16 false ns=1;i=2 Object_1 1 ChildObject ChildObject 0 0 0 i=47 true ns=1;i=1 i=40 false i=58 i=37 false i=11510 1 ns=1;i=3 Variable_2 1 ChildProperty ChildProperty 0 0 0 i=46 true ns=1;i=1 i=40 false i=68 i=37 false i=78 i=21 -1 1 1 0 false 0 ns=1;i=10 Method_4 1 ChildMethod ChildMethod 0 0 0 i=47 true ns=1;i=1 i=37 false i=78 true true ns=1;i=16 ObjectType_8 1 DerivedFromComplexObjectType DerivedFromComplexObjectType 0 0 0 i=45 true ns=1;i=1 i=47 false ns=1;i=25 false ns=1;i=25 Method_4 1 ChildMethod ChildMethodNewName 0 0 0 i=47 true ns=1;i=16 i=37 false i=78 true true ns=1;i=30 Object_1 1 InstanceOfDerivedFromComplexObjectType InstanceOfDerivedFromComplexObjectType 0 0 0 i=40 false ns=1;i=16 i=35 true i=85 i=46 false ns=1;i=32 i=47 false ns=1;i=55 i=47 false ns=1;i=39 0 ns=1;i=32 Variable_2 1 ChildProperty ChildProperty 0 0 0 i=46 true ns=1;i=30 i=40 false i=68 i=21 -1 1 1 0 false 0 ns=1;i=39 Method_4 1 ChildMethod ChildMethodNewName 0 0 0 i=47 true ns=1;i=30 true true ns=1;i=43 Variable_2 1 ChildVariable ChildVariable 0 0 0 i=47 true ns=1;i=1 i=40 false i=2368 i=37 false i=78 i=46 false ns=1;i=47 0 i=26 -1 1 1 0 false 0 ns=1;i=47 Variable_2 0 EURange EURange 0 0 0 i=46 true ns=1;i=43 i=40 false i=68 i=37 false i=78 i=884 -1 1 1 0 false 0 ns=1;i=55 Variable_2 1 ChildVariable ChildVariable 0 0 0 i=47 true ns=1;i=30 i=40 false i=2368 i=46 false ns=1;i=59 0 i=26 -1 1 1 0 false 0 ns=1;i=59 Variable_2 0 EURange EURange 0 0 0 i=46 true ns=1;i=55 i=40 false i=68 i=884 -1 1 1 0 false 0 ================================================ FILE: SemanticData/UAModelDesignExport.UnitTest/Models/ObjectTypeTest/ObjectTypeTest.NodeSet2.xml ================================================  http://cas.eu/UA/CommServer/UnitTests/ObjectTypeTest i=1 i=2 i=3 i=4 i=5 i=6 i=7 i=8 i=9 i=10 i=11 i=13 i=12 i=15 i=14 i=16 i=17 i=18 i=20 i=21 i=19 i=22 i=26 i=27 i=28 i=47 i=46 i=35 i=36 i=48 i=45 i=40 i=37 i=38 i=39 i=53 i=52 i=51 i=54 i=9004 i=9005 i=17597 i=9006 i=15112 i=17604 i=17603 ComplexObjectType ns=1;i=2 ns=1;i=3 ns=1;i=43 ns=1;i=10 i=58 ChildObject i=58 i=11510 ns=1;i=1 ChildProperty i=68 i=78 ns=1;i=1 ChildVariable ns=1;i=47 i=2368 i=78 ns=1;i=1 EURange i=68 i=78 ns=1;i=43 ChildMethod i=78 ns=1;i=1 DerivedFromComplexObjectType ns=1;i=25 ns=1;i=1 ChildMethodNewName i=78 ns=1;i=16 InstanceOfDerivedFromComplexObjectType ns=1;i=32 ns=1;i=55 ns=1;i=39 i=85 ns=1;i=16 ChildProperty i=68 ns=1;i=30 ChildVariable ns=1;i=59 i=2368 ns=1;i=30 EURange i=68 ns=1;i=55 ChildMethodNewName ns=1;i=30 ================================================ FILE: SemanticData/UAModelDesignExport.UnitTest/Models/ObjectTypeTest/ObjectTypeTest.PredefinedNodes.xml ================================================  http://cas.eu/UA/CommServer/UnitTests/ObjectTypeTest ObjectType_8 ns=1;i=1 1 ComplexObjectType i=58 Object_1 ns=1;i=2 1 ChildObject i=47 i=58 i=11510 2 1 Variable_2 ns=1;i=3 1 ChildProperty i=46 i=68 i=78 3 i=21 -1 1 1 Variable_2 ns=1;i=43 1 ChildVariable i=47 i=2368 i=78 43 i=26 -1 1 1 Variable_2 ns=1;i=47 0 EURange i=46 i=68 i=78 47 i=884 -1 1 1 Method_4 ns=1;i=10 1 ChildMethod i=47 ns=1;i=10 i=78 10 true true ObjectType_8 ns=1;i=16 1 DerivedFromComplexObjectType ns=1;i=1 Method_4 ns=1;i=25 1 ChildMethod ChildMethodNewName i=47 ns=1;i=10 i=78 25 true true Object_1 ns=1;i=30 1 InstanceOfDerivedFromComplexObjectType i=47 ns=1;i=16 30 i=35 true i=85 Variable_2 ns=1;i=32 1 ChildProperty i=46 i=68 32 i=21 -1 1 1 Variable_2 ns=1;i=55 1 ChildVariable i=47 i=2368 55 i=26 -1 1 1 Variable_2 ns=1;i=59 0 EURange i=46 i=68 59 i=884 -1 1 1 Method_4 ns=1;i=39 1 ChildMethod ChildMethodNewName i=47 ns=1;i=10 39 true true ================================================ FILE: SemanticData/UAModelDesignExport.UnitTest/Models/ObjectTypeTest/ObjectTypeTest.Types.bsd ================================================ ================================================ FILE: SemanticData/UAModelDesignExport.UnitTest/Models/ObjectTypeTest/ObjectTypeTest.Types.xsd ================================================ ================================================ FILE: SemanticData/UAModelDesignExport.UnitTest/Models/ObjectTypeTest.asp.xml ================================================  http://opcfoundation.org/UA/ http://cas.eu/UA/CommServer/UnitTests/ObjectTypeTest ChildProperty ChildMethodNewName ================================================ FILE: SemanticData/UAModelDesignExport.UnitTest/Models/ObjectTypeTest.csv ================================================ ComplexObjectType,1,ObjectType ComplexObjectType_ChildObject,2,Object ComplexObjectType_BrowseName4node66,3,Variable ComplexObjectType_ChildMethod,10,Method ComplexObjectType_ChildMethod_InputArguments,11,Variable ComplexObjectType_ChildMethod_OutputArguments,12,Variable DerivedFromComplexObjectType,16,ObjectType DerivedFromComplexObjectType_ChildObject,17,Object DerivedFromComplexObjectType_BrowseName4node66,18,Variable DerivedFromComplexObjectType_ChildMethod,25,Method DerivedFromComplexObjectType_ChildMethod_InputArguments,26,Variable DerivedFromComplexObjectType_ChildMethod_OutputArguments,27,Variable InstanceOfDerivedFromComplexObjectType,30,Object InstanceOfDerivedFromComplexObjectType_ChildObject,31,Object InstanceOfDerivedFromComplexObjectType_BrowseName4node66,32,Variable InstanceOfDerivedFromComplexObjectType_ChildMethod,39,Method InstanceOfDerivedFromComplexObjectType_ChildMethod_InputArguments,40,Variable InstanceOfDerivedFromComplexObjectType_ChildMethod_OutputArguments,41,Variable ComplexObjectType_ChildVariable,43,Variable ComplexObjectType_ChildVariable_Definition,44,Variable ComplexObjectType_ChildVariable_ValuePrecision,45,Variable ComplexObjectType_ChildVariable_InstrumentRange,46,Variable ComplexObjectType_ChildVariable_EURange,47,Variable ComplexObjectType_ChildVariable_EngineeringUnits,48,Variable DerivedFromComplexObjectType_ChildVariable,49,Variable DerivedFromComplexObjectType_ChildVariable_Definition,50,Variable DerivedFromComplexObjectType_ChildVariable_ValuePrecision,51,Variable DerivedFromComplexObjectType_ChildVariable_InstrumentRange,52,Variable DerivedFromComplexObjectType_ChildVariable_EURange,53,Variable DerivedFromComplexObjectType_ChildVariable_EngineeringUnits,54,Variable InstanceOfDerivedFromComplexObjectType_ChildVariable,55,Variable InstanceOfDerivedFromComplexObjectType_ChildVariable_Definition,56,Variable InstanceOfDerivedFromComplexObjectType_ChildVariable_ValuePrecision,57,Variable InstanceOfDerivedFromComplexObjectType_ChildVariable_InstrumentRange,58,Variable InstanceOfDerivedFromComplexObjectType_ChildVariable_EURange,59,Variable InstanceOfDerivedFromComplexObjectType_ChildVariable_EngineeringUnits,60,Variable ================================================ FILE: SemanticData/UAModelDesignExport.UnitTest/Models/ObjectTypeTest.xml ================================================  http://cas.eu/UA/CommServer/UnitTests/ObjectTypeTest http://opcfoundation.org/UA/ ChildProperty ChildMethodNewName ua:Organizes ua:ObjectsFolder ================================================ FILE: SemanticData/UAModelDesignExport.UnitTest/Models/ReadMe.txt ================================================  Reference IsOneWay is ignored by the compiler. It is assigned always false. Symmetric - default value is false and after serialization it always exist. To test customs references duplicated references must be removed manualy to make sure the preserved are associated with the orginal nodes. UAVariableType Value is not descrobed in the specyfication - it is assumed it represents default value. VariableDesign UserAccessLevel - is not supported. MethodDesign InputArguments, OutputArguments: Identifier is not supported by the compiler and IdentifierSpecified should be always false. NonExecutable is compiled to the attributes Executable, UserExecutable of an alone (not atached) node that is added to the model = both are set to false if NonExecutable is false. It is not supported by the recovery mechanizm. Reserwed Browse names: InputArguments, OutputArguments For the reserwer BrowseName identifiers the Opc.UA namespace is assigned while QualifiedName is created. ModelDesign notes InstanceDesign not supported attributes: Declaration, PreserveDefaultAttributes, MinCardinality, MaxCardinality. DataTypeDesign: not supported attributes: NotInAddressSpace, NoArraysAllowed. NotInAddressSpace: compiler omots this node. NoArraysAllowed: do not generate ListOf... from the schema. To recover schema must be anlized. EncodingDesign - is not supported - it is not used in any model I have. ================================================ FILE: SemanticData/UAModelDesignExport.UnitTest/Models/ReferenceTest/ReferenceTest.Classes.cs ================================================ /* ======================================================================== * Copyright (c) 2005-2021 The OPC Foundation, Inc. All rights reserved. * * OPC Foundation MIT License 1.00 * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, * copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following * conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. * * The complete license agreement can be found here: * http://opcfoundation.org/License/MIT/1.00/ * ======================================================================*/ using System; using System.Collections.Generic; using System.Text; using System.Xml; using System.Runtime.Serialization; using ; namespace ReferenceTest { } ================================================ FILE: SemanticData/UAModelDesignExport.UnitTest/Models/ReferenceTest/ReferenceTest.Constants.cs ================================================ /* ======================================================================== * Copyright (c) 2005-2021 The OPC Foundation, Inc. All rights reserved. * * OPC Foundation MIT License 1.00 * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, * copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following * conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. * * The complete license agreement can be found here: * http://opcfoundation.org/License/MIT/1.00/ * ======================================================================*/ using System; using System.Collections.Generic; using System.Text; using System.Reflection; using System.Xml; using System.Runtime.Serialization; using ; namespace ReferenceTest { #region ReferenceType Identifiers /// /// A class that declares constants for all ReferenceTypes in the Model Design. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class ReferenceTypes { /// /// The identifier for the ReferenceTypeTest ReferenceType. /// public const uint ReferenceTypeTest = 1; } #endregion #region ReferenceType Node Identifiers /// /// A class that declares constants for all ReferenceTypes in the Model Design. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class ReferenceTypeIds { /// /// The identifier for the ReferenceTypeTest ReferenceType. /// public static readonly ExpandedNodeId ReferenceTypeTest = new ExpandedNodeId(ReferenceTest.ReferenceTypes.ReferenceTypeTest, ReferenceTest.Namespaces.cas); } #endregion #region BrowseName Declarations /// /// Declares all of the BrowseNames used in the Model Design. /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class BrowseNames { /// /// The BrowseName for the ReferenceTypeTest component. /// public const string ReferenceTypeTest = "ReferenceTypeTest"; } #endregion #region Namespace Declarations /// /// Defines constants for all namespaces referenced by the model design. /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class Namespaces { /// /// The URI for the cas namespace (.NET code namespace is 'ReferenceTest'). /// public const string cas = "http://cas.eu/UA/CommServer/UnitTests/ReferenceTest"; /// /// The URI for the ua namespace (.NET code namespace is ''). /// public const string ua = "http://opcfoundation.org/UA/"; } #endregion } ================================================ FILE: SemanticData/UAModelDesignExport.UnitTest/Models/ReferenceTest/ReferenceTest.DataTypes.cs ================================================ /* ======================================================================== * Copyright (c) 2005-2021 The OPC Foundation, Inc. All rights reserved. * * OPC Foundation MIT License 1.00 * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, * copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following * conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. * * The complete license agreement can be found here: * http://opcfoundation.org/License/MIT/1.00/ * ======================================================================*/ using System; using System.Collections.Generic; using System.Text; using System.Xml; using System.Runtime.Serialization; using ; namespace ReferenceTest { } ================================================ FILE: SemanticData/UAModelDesignExport.UnitTest/Models/ReferenceTest/ReferenceTest.NodeIds.csv ================================================ ReferenceTypeTest,1,ReferenceType ================================================ FILE: SemanticData/UAModelDesignExport.UnitTest/Models/ReferenceTest/ReferenceTest.NodeSet.xml ================================================  http://opcfoundation.org/UA/ http://cas.eu/UA/CommServer/UnitTests/ReferenceTest ns=1;i=1 ReferenceType_32 1 ReferenceTypeTest ReferenceTypeTest 0 0 0 i=45 true i=46 false false FromSomwhere ================================================ FILE: SemanticData/UAModelDesignExport.UnitTest/Models/ReferenceTest/ReferenceTest.NodeSet2.xml ================================================  http://cas.eu/UA/CommServer/UnitTests/ReferenceTest i=1 i=2 i=3 i=4 i=5 i=6 i=7 i=8 i=9 i=10 i=11 i=13 i=12 i=15 i=14 i=16 i=17 i=18 i=20 i=21 i=19 i=22 i=26 i=27 i=28 i=47 i=46 i=35 i=36 i=48 i=45 i=40 i=37 i=38 i=39 i=53 i=52 i=51 i=54 i=9004 i=9005 i=17597 i=9006 i=15112 i=17604 i=17603 ReferenceTypeTest i=46 FromSomwhere ================================================ FILE: SemanticData/UAModelDesignExport.UnitTest/Models/ReferenceTest/ReferenceTest.PredefinedNodes.xml ================================================  http://cas.eu/UA/CommServer/UnitTests/ReferenceTest ReferenceType_32 ns=1;i=1 1 ReferenceTypeTest i=46 FromSomwhere ================================================ FILE: SemanticData/UAModelDesignExport.UnitTest/Models/ReferenceTest/ReferenceTest.Types.bsd ================================================ ================================================ FILE: SemanticData/UAModelDesignExport.UnitTest/Models/ReferenceTest/ReferenceTest.Types.xsd ================================================ ================================================ FILE: SemanticData/UAModelDesignExport.UnitTest/Models/ReferenceTest.asp.xml ================================================  http://opcfoundation.org/UA/ http://cas.eu/UA/CommServer/UnitTests/ReferenceTest FromSomwhere ================================================ FILE: SemanticData/UAModelDesignExport.UnitTest/Models/ReferenceTest.csv ================================================ ReferenceTypeTest,1,ReferenceType ================================================ FILE: SemanticData/UAModelDesignExport.UnitTest/Models/ReferenceTest.xml ================================================  http://cas.eu/UA/CommServer/UnitTests/ReferenceTest http://opcfoundation.org/UA/ FromSomwhere ================================================ FILE: SemanticData/UAModelDesignExport.UnitTest/Models/TestModels.uamdsl ================================================  UnitTestsData ReferenceTest $(ProjectFileName).csv $(ProjectFileName) ReferenceTest.xml ObjectTypeTest $(ProjectFileName).csv $(ProjectFileName) ObjectTypeTest.xml VariableTypeTest $(ProjectFileName).csv $(ProjectFileName) VariableTypeTest.xml DataTypeTest $(ProjectFileName).csv $(ProjectFileName) DataTypeTest.xml ================================================ FILE: SemanticData/UAModelDesignExport.UnitTest/Models/VariableTypeTest/VariableTypeTest.Classes.cs ================================================ /* ======================================================================== * Copyright (c) 2005-2021 The OPC Foundation, Inc. All rights reserved. * * OPC Foundation MIT License 1.00 * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, * copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following * conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. * * The complete license agreement can be found here: * http://opcfoundation.org/License/MIT/1.00/ * ======================================================================*/ using System; using System.Collections.Generic; using System.Text; using System.Xml; using System.Runtime.Serialization; using ; namespace VariableTypeTest { #region ComplexVariableState Class #if (!OPCUA_EXCLUDE_ComplexVariableState) /// /// Stores an instance of the ComplexVariableType VariableType. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public partial class ComplexVariableState : AnalogItemState { #region Constructors /// /// Initializes the type with its default attribute values. /// public ComplexVariableState(NodeState parent) : base(parent) { } /// /// Returns the id of the default type definition node for the instance. /// protected override NodeId GetDefaultTypeDefinitionId(NamespaceTable namespaceUris) { return Opc.Ua.NodeId.Create(VariableTypeTest.VariableTypes.ComplexVariableType, VariableTypeTest.Namespaces.cas, namespaceUris); } /// /// Returns the id of the default data type node for the instance. /// protected override NodeId GetDefaultDataTypeId(NamespaceTable namespaceUris) { return Opc.Ua.NodeId.Create(.DataTypes.Number, .Namespaces.ua, namespaceUris); } /// /// Returns the id of the default value rank for the instance. /// protected override int GetDefaultValueRank() { return ValueRanks.Scalar; } #if (!OPCUA_EXCLUDE_InitializationStrings) /// /// Initializes the instance. /// protected override void Initialize(ISystemContext context) { base.Initialize(context); Initialize(context, InitializationString); InitializeOptionalChildren(context); } /// /// Initializes the instance with a node. /// protected override void Initialize(ISystemContext context, NodeState source) { InitializeOptionalChildren(context); base.Initialize(context, source); } /// /// Initializes the any option children defined for the instance. /// protected override void InitializeOptionalChildren(ISystemContext context) { base.InitializeOptionalChildren(context); } #region Initialization String private const string InitializationString = "AQAAADYAAABodHRwOi8vY2FzLmV1L1VBL0NvbW1TZXJ2ZXIvVW5pdFRlc3RzL1ZhcmlhYmxlVHlwZVRl" + "c3T/////FWCJAgIAAAABABsAAABDb21wbGV4VmFyaWFibGVUeXBlSW5zdGFuY2UBAQgAAQEIAAgAAAAA" + "Gv////8BAf////8CAAAAVWCJCgIAAAAAAAcAAABFVVJhbmdlAQEMAAMAAAAADgAAAE5ld0Rpc3BsYXlO" + "YW1lAC4ARAwAAAABAHQD/////wEB/////wAAAAAVYIkKAgAAAAEADQAAAFZhcmlhYmxlQ2hpbGQBAQ4A" + "AC4ARA4AAAAABv////8CAv////8AAAAA"; #endregion #endif #endregion #region Public Properties /// public PropertyState VariableChild { get { return m_variableChild; } set { if (!Object.ReferenceEquals(m_variableChild, value)) { ChangeMasks |= NodeStateChangeMasks.Children; } m_variableChild = value; } } #endregion #region Overridden Methods /// /// Populates a list with the children that belong to the node. /// /// The context for the system being accessed. /// The list of children to populate. public override void GetChildren( ISystemContext context, IList children) { if (m_variableChild != null) { children.Add(m_variableChild); } base.GetChildren(context, children); } /// /// Finds the child with the specified browse name. /// protected override BaseInstanceState FindChild( ISystemContext context, QualifiedName browseName, bool createOrReplace, BaseInstanceState replacement) { if (QualifiedName.IsNull(browseName)) { return null; } BaseInstanceState instance = null; switch (browseName.Name) { case VariableTypeTest.BrowseNames.VariableChild: { if (createOrReplace) { if (VariableChild == null) { if (replacement == null) { VariableChild = new PropertyState(this); } else { VariableChild = (PropertyState)replacement; } } } instance = VariableChild; break; } } if (instance != null) { return instance; } return base.FindChild(context, browseName, createOrReplace, replacement); } #endregion #region Private Fields private PropertyState m_variableChild; #endregion } #region ComplexVariableState Class /// /// A typed version of the ComplexVariableType variable. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public class ComplexVariableState : ComplexVariableState { #region Constructors /// /// Initializes the instance with its defalt attribute values. /// public ComplexVariableState(NodeState parent) : base(parent) { Value = default(T); } /// /// Initializes the instance with the default values. /// protected override void Initialize(ISystemContext context) { base.Initialize(context); Value = default(T); DataType = TypeInfo.GetDataTypeId(typeof(T)); ValueRank = TypeInfo.GetValueRank(typeof(T)); } /// /// Initializes the instance with a node. /// protected override void Initialize(ISystemContext context, NodeState source) { InitializeOptionalChildren(context); base.Initialize(context, source); } #endregion #region Public Members /// /// The value of the variable. /// public new T Value { get { return CheckTypeBeforeCast(base.Value, true); } set { base.Value = value; } } #endregion } #endregion #endif #endregion #region ArrayVariableState Class #if (!OPCUA_EXCLUDE_ArrayVariableState) /// /// Stores an instance of the ArrayVariableType VariableType. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public partial class ArrayVariableState : BaseDataVariableState { #region Constructors /// /// Initializes the type with its default attribute values. /// public ArrayVariableState(NodeState parent) : base(parent) { } /// /// Returns the id of the default type definition node for the instance. /// protected override NodeId GetDefaultTypeDefinitionId(NamespaceTable namespaceUris) { return Opc.Ua.NodeId.Create(VariableTypeTest.VariableTypes.ArrayVariableType, VariableTypeTest.Namespaces.cas, namespaceUris); } /// /// Returns the id of the default data type node for the instance. /// protected override NodeId GetDefaultDataTypeId(NamespaceTable namespaceUris) { return Opc.Ua.NodeId.Create(.DataTypes.Int32, .Namespaces.ua, namespaceUris); } /// /// Returns the id of the default value rank for the instance. /// protected override int GetDefaultValueRank() { return 4; } #if (!OPCUA_EXCLUDE_InitializationStrings) /// /// Initializes the instance. /// protected override void Initialize(ISystemContext context) { base.Initialize(context); Initialize(context, InitializationString); InitializeOptionalChildren(context); } /// /// Initializes the instance with a node. /// protected override void Initialize(ISystemContext context, NodeState source) { InitializeOptionalChildren(context); base.Initialize(context, source); } /// /// Initializes the any option children defined for the instance. /// protected override void InitializeOptionalChildren(ISystemContext context) { base.InitializeOptionalChildren(context); } #region Initialization String private const string InitializationString = "AQAAADYAAABodHRwOi8vY2FzLmV1L1VBL0NvbW1TZXJ2ZXIvVW5pdFRlc3RzL1ZhcmlhYmxlVHlwZVRl" + "c3T/////F2CJAgIAAAABABkAAABBcnJheVZhcmlhYmxlVHlwZUluc3RhbmNlAQEPAAEBDwAPAAAAAAYD" + "AAAAAwAAAAAAAAAAAAAAAAAAAAEB/////wAAAAA="; #endregion #endif #endregion #region Public Properties #endregion #region Overridden Methods #endregion #region Private Fields #endregion } #endif #endregion #region SimpleVariableWithValueState Class #if (!OPCUA_EXCLUDE_SimpleVariableWithValueState) /// /// Stores an instance of the SimpleVariableWithValueType VariableType. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public partial class SimpleVariableWithValueState : BaseDataVariableState { #region Constructors /// /// Initializes the type with its default attribute values. /// public SimpleVariableWithValueState(NodeState parent) : base(parent) { } /// /// Returns the id of the default type definition node for the instance. /// protected override NodeId GetDefaultTypeDefinitionId(NamespaceTable namespaceUris) { return Opc.Ua.NodeId.Create(VariableTypeTest.VariableTypes.SimpleVariableWithValueType, VariableTypeTest.Namespaces.cas, namespaceUris); } /// /// Returns the id of the default data type node for the instance. /// protected override NodeId GetDefaultDataTypeId(NamespaceTable namespaceUris) { return Opc.Ua.NodeId.Create(.DataTypes.Int32, .Namespaces.ua, namespaceUris); } /// /// Returns the id of the default value rank for the instance. /// protected override int GetDefaultValueRank() { return ValueRanks.Scalar; } #if (!OPCUA_EXCLUDE_InitializationStrings) /// /// Initializes the instance. /// protected override void Initialize(ISystemContext context) { base.Initialize(context); Initialize(context, InitializationString); InitializeOptionalChildren(context); } /// /// Initializes the instance with a node. /// protected override void Initialize(ISystemContext context, NodeState source) { InitializeOptionalChildren(context); base.Initialize(context, source); } /// /// Initializes the any option children defined for the instance. /// protected override void InitializeOptionalChildren(ISystemContext context) { base.InitializeOptionalChildren(context); } #region Initialization String private const string InitializationString = "AQAAADYAAABodHRwOi8vY2FzLmV1L1VBL0NvbW1TZXJ2ZXIvVW5pdFRlc3RzL1ZhcmlhYmxlVHlwZVRl" + "c3T/////FWCpAgIAAAABACMAAABTaW1wbGVWYXJpYWJsZVdpdGhWYWx1ZVR5cGVJbnN0YW5jZQEBEAAB" + "ARAAEAAAAAYBAAAAAAb/////AQH/////AAAAAA=="; #endregion #endif #endregion #region Public Properties #endregion #region Overridden Methods #endregion #region Private Fields #endregion } #endif #endregion } ================================================ FILE: SemanticData/UAModelDesignExport.UnitTest/Models/VariableTypeTest/VariableTypeTest.Constants.cs ================================================ /* ======================================================================== * Copyright (c) 2005-2021 The OPC Foundation, Inc. All rights reserved. * * OPC Foundation MIT License 1.00 * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, * copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following * conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. * * The complete license agreement can be found here: * http://opcfoundation.org/License/MIT/1.00/ * ======================================================================*/ using System; using System.Collections.Generic; using System.Text; using System.Reflection; using System.Xml; using System.Runtime.Serialization; using ; namespace VariableTypeTest { #region Variable Identifiers /// /// A class that declares constants for all Variables in the Model Design. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class Variables { /// /// The identifier for the ComplexVariableType_EURange Variable. /// public const uint ComplexVariableType_EURange = 12; /// /// The identifier for the ComplexVariableType_VariableChild Variable. /// public const uint ComplexVariableType_VariableChild = 14; } #endregion #region VariableType Identifiers /// /// A class that declares constants for all VariableTypes in the Model Design. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class VariableTypes { /// /// The identifier for the ComplexVariableType VariableType. /// public const uint ComplexVariableType = 8; /// /// The identifier for the ArrayVariableType VariableType. /// public const uint ArrayVariableType = 15; /// /// The identifier for the SimpleVariableWithValueType VariableType. /// public const uint SimpleVariableWithValueType = 16; } #endregion #region Variable Node Identifiers /// /// A class that declares constants for all Variables in the Model Design. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class VariableIds { /// /// The identifier for the ComplexVariableType_EURange Variable. /// public static readonly ExpandedNodeId ComplexVariableType_EURange = new ExpandedNodeId(VariableTypeTest.Variables.ComplexVariableType_EURange, VariableTypeTest.Namespaces.cas); /// /// The identifier for the ComplexVariableType_VariableChild Variable. /// public static readonly ExpandedNodeId ComplexVariableType_VariableChild = new ExpandedNodeId(VariableTypeTest.Variables.ComplexVariableType_VariableChild, VariableTypeTest.Namespaces.cas); } #endregion #region VariableType Node Identifiers /// /// A class that declares constants for all VariableTypes in the Model Design. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class VariableTypeIds { /// /// The identifier for the ComplexVariableType VariableType. /// public static readonly ExpandedNodeId ComplexVariableType = new ExpandedNodeId(VariableTypeTest.VariableTypes.ComplexVariableType, VariableTypeTest.Namespaces.cas); /// /// The identifier for the ArrayVariableType VariableType. /// public static readonly ExpandedNodeId ArrayVariableType = new ExpandedNodeId(VariableTypeTest.VariableTypes.ArrayVariableType, VariableTypeTest.Namespaces.cas); /// /// The identifier for the SimpleVariableWithValueType VariableType. /// public static readonly ExpandedNodeId SimpleVariableWithValueType = new ExpandedNodeId(VariableTypeTest.VariableTypes.SimpleVariableWithValueType, VariableTypeTest.Namespaces.cas); } #endregion #region BrowseName Declarations /// /// Declares all of the BrowseNames used in the Model Design. /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class BrowseNames { /// /// The BrowseName for the ArrayVariableType component. /// public const string ArrayVariableType = "ArrayVariableType"; /// /// The BrowseName for the ComplexVariableType component. /// public const string ComplexVariableType = "ComplexVariableType"; /// /// The BrowseName for the SimpleVariableWithValueType component. /// public const string SimpleVariableWithValueType = "SimpleVariableWithValueType"; /// /// The BrowseName for the VariableChild component. /// public const string VariableChild = "VariableChild"; } #endregion #region Namespace Declarations /// /// Defines constants for all namespaces referenced by the model design. /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class Namespaces { /// /// The URI for the cas namespace (.NET code namespace is 'VariableTypeTest'). /// public const string cas = "http://cas.eu/UA/CommServer/UnitTests/VariableTypeTest"; /// /// The URI for the ua namespace (.NET code namespace is ''). /// public const string ua = "http://opcfoundation.org/UA/"; } #endregion } ================================================ FILE: SemanticData/UAModelDesignExport.UnitTest/Models/VariableTypeTest/VariableTypeTest.DataTypes.cs ================================================ /* ======================================================================== * Copyright (c) 2005-2021 The OPC Foundation, Inc. All rights reserved. * * OPC Foundation MIT License 1.00 * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, * copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following * conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. * * The complete license agreement can be found here: * http://opcfoundation.org/License/MIT/1.00/ * ======================================================================*/ using System; using System.Collections.Generic; using System.Text; using System.Xml; using System.Runtime.Serialization; using ; namespace VariableTypeTest { } ================================================ FILE: SemanticData/UAModelDesignExport.UnitTest/Models/VariableTypeTest/VariableTypeTest.NodeIds.csv ================================================ ArrayVariableType,15,VariableType ComplexVariableType,8,VariableType SimpleVariableWithValueType,16,VariableType ================================================ FILE: SemanticData/UAModelDesignExport.UnitTest/Models/VariableTypeTest/VariableTypeTest.NodeSet.xml ================================================  http://opcfoundation.org/UA/ http://cas.eu/UA/CommServer/UnitTests/VariableTypeTest ns=1;i=8 VariableType_16 1 ComplexVariableType ComplexVariableType 0 0 0 i=45 true i=2368 i=46 false ns=1;i=12 i=46 false ns=1;i=14 i=26 -1 false ns=1;i=12 Variable_2 0 EURange NewDisplayName 0 0 0 i=46 true ns=1;i=8 i=40 false i=68 i=37 false i=78 i=884 -1 1 1 0 false 0 ns=1;i=14 Variable_2 1 VariableChild VariableChild 0 0 0 i=46 true ns=1;i=8 i=40 false i=68 i=37 false i=78 0 i=6 -1 2 2 0 false 0 ns=1;i=15 VariableType_16 1 ArrayVariableType ArrayVariableType 0 0 0 i=45 true i=63 i=6 3 0 0 0 false ns=1;i=16 VariableType_16 1 SimpleVariableWithValueType SimpleVariableWithValueType 0 0 0 i=45 true i=63 1 i=6 -1 false ================================================ FILE: SemanticData/UAModelDesignExport.UnitTest/Models/VariableTypeTest/VariableTypeTest.NodeSet2.xml ================================================  http://cas.eu/UA/CommServer/UnitTests/VariableTypeTest i=1 i=2 i=3 i=4 i=5 i=6 i=7 i=8 i=9 i=10 i=11 i=13 i=12 i=15 i=14 i=16 i=17 i=18 i=20 i=21 i=19 i=22 i=26 i=27 i=28 i=47 i=46 i=35 i=36 i=48 i=45 i=40 i=37 i=38 i=39 i=53 i=52 i=51 i=54 i=9004 i=9005 i=17597 i=9006 i=15112 i=17604 i=17603 ComplexVariableType ns=1;i=12 ns=1;i=14 i=2368 NewDisplayName i=68 i=78 ns=1;i=8 VariableChild i=68 i=78 ns=1;i=8 ArrayVariableType i=63 SimpleVariableWithValueType i=63 1 ================================================ FILE: SemanticData/UAModelDesignExport.UnitTest/Models/VariableTypeTest/VariableTypeTest.PredefinedNodes.xml ================================================  http://cas.eu/UA/CommServer/UnitTests/VariableTypeTest VariableType_16 ns=1;i=8 1 ComplexVariableType i=2368 i=26 -1 Variable_2 ns=1;i=12 0 EURange NewDisplayName i=46 i=68 i=78 12 i=884 -1 1 1 Variable_2 ns=1;i=14 1 VariableChild i=46 i=68 i=78 14 i=6 -1 2 2 VariableType_16 ns=1;i=15 1 ArrayVariableType i=63 i=6 3 0,0,0 VariableType_16 ns=1;i=16 1 SimpleVariableWithValueType i=63 1 i=6 -1 ================================================ FILE: SemanticData/UAModelDesignExport.UnitTest/Models/VariableTypeTest/VariableTypeTest.Types.bsd ================================================ ================================================ FILE: SemanticData/UAModelDesignExport.UnitTest/Models/VariableTypeTest/VariableTypeTest.Types.xsd ================================================ ================================================ FILE: SemanticData/UAModelDesignExport.UnitTest/Models/VariableTypeTest.asp.xml ================================================  http://opcfoundation.org/UA/ http://cas.eu/UA/CommServer/UnitTests/VariableTypeTest NewDisplayName 1 ================================================ FILE: SemanticData/UAModelDesignExport.UnitTest/Models/VariableTypeTest.csv ================================================ ComplexVariableType,8,VariableType ComplexVariableType_Definition,9,Variable ComplexVariableType_ValuePrecision,10,Variable ComplexVariableType_InstrumentRange,11,Variable ComplexVariableType_EURange,12,Variable ComplexVariableType_EngineeringUnits,13,Variable ComplexVariableType_VariableChild,14,Variable ArrayVariableType,15,VariableType SimpleVariableWithValueType,16,VariableType ================================================ FILE: SemanticData/UAModelDesignExport.UnitTest/Models/VariableTypeTest.xml ================================================  http://cas.eu/UA/CommServer/UnitTests/VariableTypeTest http://opcfoundation.org/UA/ NewDisplayName 1 ================================================ FILE: SemanticData/UAModelDesignExport.UnitTest/NodeFactoryBaseUnitTest.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using Microsoft.VisualStudio.TestTools.UnitTesting; using System; using System.Collections.Generic; using System.Xml; using UAOOI.SemanticData.BuildingErrorsHandling; using UAOOI.SemanticData.InformationModelFactory.UAConstants; using UAOOI.SemanticData.UAModelDesignExport.Instrumentation; using UAOOI.SemanticData.UAModelDesignExport.XML; namespace UAOOI.SemanticData.UAModelDesignExport { [TestClass] public class NodeFactoryBaseUnitTest { [TestMethod] public void CreatorTestMethod() { NodeFactory _nf = new NodeFactory(x => { }); Assert.IsNotNull(_nf); } [TestMethod] public void DescriptionTestMethod() { int _counter = 0; NodeFactory _nf = new NodeFactory(x => _counter++); Assert.AreEqual(0, _counter); LocalizedText _lt = new LocalizedText() { Key = "localeField", Value = "valueField" }; _nf.AddDescription(_lt.Key, _lt.Value); Assert.AreEqual(0, _counter); _nf.AddDescription(_lt.Key, _lt.Value); Assert.AreEqual(1, _counter); _nf.AddDescription(_lt.Key, _lt.Value); Assert.AreEqual(2, _counter); List _path = new List(); NodeDesign _nd = _nf.Export(_path, (x, Y) => { }); _lt.Compare(_nd.Description); } [TestMethod] public void DisplayNameTestMethod() { int _counter = 0; NodeFactory _nf = new NodeFactory(x => _counter++); Assert.AreEqual(0, _counter); LocalizedText _lt = new LocalizedText() { Key = "localeField", Value = "valueField" }; _nf.AddDisplayName(_lt.Key, _lt.Value); Assert.AreEqual(0, _counter); _nf.AddDisplayName(_lt.Key, _lt.Value); Assert.AreEqual(1, _counter); _nf.AddDisplayName(_lt.Key, _lt.Value); Assert.AreEqual(2, _counter); List _path = new List(); NodeDesign _nd = _nf.Export(_path, (x, Y) => { }); _lt.Compare(_nd.DisplayName); } [TestMethod] public void NodeFactoryExportTest() { int _counter = 0; NodeFactory _nf = new NodeFactory(x => _counter++); _nf.AccessRestrictions = AccessRestrictions.EncryptionRequired | AccessRestrictions.SessionRequired | AccessRestrictions.SigningRequired; _nf.BrowseName = BrowseNames.AggregateFunction_MinimumActualTime.ToString(); _nf.Category = new string[] { "cat1", "cat2" }; _nf.DataTypePurpose = InformationModelFactory.DataTypePurpose.ServicesOnly; _nf.ReleaseStatus = InformationModelFactory.ReleaseStatus.Draft; _nf.SymbolicName = new XmlQualifiedName("name", "ns"); List _path = new List(); NodeDesign _md = _nf.Export(_path, (x, Y) => { }); Assert.AreEqual(BrowseNames.AggregateFunction_MinimumActualTime.ToString(), _md.BrowseName); Assert.AreEqual("cat1, cat2", _md.Category); Assert.IsNull(_md.Children); Assert.IsFalse(_md.NumericIdSpecified); Assert.AreEqual(0, _md.PartNo); //is not copied form the UANodeSet; Assert.AreEqual(DataTypePurpose.ServicesOnly, _md.Purpose); Assert.AreEqual(XML.ReleaseStatus.Draft, _md.ReleaseStatus); Assert.AreEqual(new XmlQualifiedName("name", "ns"), _md.SymbolicName); } private class NodeFactory : NodeFactoryBase { public NodeFactory(Action traceEvent) : base(traceEvent) { SymbolicName = new System.Xml.XmlQualifiedName( "Name", "NameSpace"); } internal override NodeDesign Export(List path, Action> createInstanceType) { NodeDesign _nd = new NodeDesign() { }; base.UpdateNode(_nd, path, createInstanceType); return _nd; } } } } ================================================ FILE: SemanticData/UAModelDesignExport.UnitTest/NodeSetUnitTest.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2021, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using Microsoft.VisualStudio.TestTools.UnitTesting; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Xml; using UAOOI.Common.Infrastructure.Serializers; using UAOOI.SemanticData.BuildingErrorsHandling; using UAOOI.SemanticData.UAModelDesignExport.Instrumentation; using UAOOI.SemanticData.UAModelDesignExport.XML; namespace UAOOI.SemanticData.UAModelDesignExport { [TestClass] [DeploymentItem(@"Models\", @"Models\")] public class NodeSetIntegrationTest { /// ///Gets or sets the test context which provides ///information about and functionality for the current test run. /// //public TestContext TestContext { get; set; } #region TestMethod [TestMethod] public void FileNotFoundTestMethod() { FileInfo _testDataFileInfo = new FileInfo(@"sajlajsjljjjjk.sasa.sasa.sasa"); Assert.IsFalse(_testDataFileInfo.Exists); using (TracedAddressSpaceContext addressSpace = new Instrumentation.TracedAddressSpaceContext()) { Assert.ThrowsException(() => addressSpace.CreateInstance(_testDataFileInfo, String.Empty)); _testDataFileInfo = new FileInfo(@"Models\ReferenceTest\ReferenceTest.NodeSet.xml"); Assert.IsTrue(_testDataFileInfo.Exists); Assert.ThrowsException(() => addressSpace.CreateInstance(_testDataFileInfo, String.Empty)); } } [TestMethod] public void UAReferenceTestMethod() { FileInfo _testDataFileInfo = new FileInfo(@"Models\ReferenceTest\ReferenceTest.NodeSet2.xml"); Assert.IsTrue(_testDataFileInfo.Exists); ModelDesign _expected = XmlFile.ReadXmlFile(@"Models\ReferenceTest.asp.xml"); List _trace = new List(); string uri = "http://cas.eu/UA/CommServer/UnitTests/ReferenceTest"; using (TracedAddressSpaceContext addressSpace = new Instrumentation.TracedAddressSpaceContext()) { ModelDesign _actual = addressSpace.CreateInstance(_testDataFileInfo, uri); CompareModelDesign(_expected, _actual); } } [TestMethod] //TODO The exported model doesn't contain all nodes #653 public void UAObjectTypeTestMethod() { FileInfo _testDataFileInfo = new FileInfo(@"Models\ObjectTypeTest\ObjectTypeTest.NodeSet2.xml"); Assert.IsTrue(_testDataFileInfo.Exists); ModelDesign _expected = XmlFile.ReadXmlFile(@"Models\ObjectTypeTest.asp.xml"); string uri = "http://cas.eu/UA/CommServer/UnitTests/ObjectTypeTest"; using (TracedAddressSpaceContext addressSpace = new Instrumentation.TracedAddressSpaceContext()) { ModelDesign _actual = addressSpace.CreateInstance(_testDataFileInfo, uri); CompareModelDesign(_expected, _actual); Assert.AreEqual(0, addressSpace.TraceList.Count); Assert.AreEqual(3, _expected.Items.Length); CompareModelDesign(_expected, _actual); } } [TestMethod] public void UAVariableTypeTestMethod() { FileInfo _testDataFileInfo = new FileInfo(@"Models\VariableTypeTest\VariableTypeTest.NodeSet2.xml"); Assert.IsTrue(_testDataFileInfo.Exists); ModelDesign _expected = XmlFile.ReadXmlFile(@"Models\VariableTypeTest.asp.xml"); string uri = "http://cas.eu/UA/CommServer/UnitTests/VariableTypeTest"; using (TracedAddressSpaceContext addressSpace = new Instrumentation.TracedAddressSpaceContext()) { ModelDesign _actual = addressSpace.CreateInstance(_testDataFileInfo, uri); CompareModelDesign(_expected, _actual); Assert.AreEqual(0, addressSpace.TraceList.Where(x => x.BuildError.Focus != Focus.Diagnostic).Count()); Assert.AreEqual(3, _expected.Items.Length); CompareModelDesign(_expected, _actual); } } [TestMethod] public void UADataTypeTestMethod() { FileInfo _testDataFileInfo = new FileInfo(@"Models\DataTypeTest\DataTypeTest.NodeSet2.xml"); Assert.IsTrue(_testDataFileInfo.Exists); ModelDesign _expected = XmlFile.ReadXmlFile(@"Models\DataTypeTest.asp.xml"); string uri = "http://cas.eu/UA/CommServer/UnitTests/DataTypeTest"; using (TracedAddressSpaceContext addressSpace = new Instrumentation.TracedAddressSpaceContext()) { ModelDesign _actual = addressSpace.CreateInstance(_testDataFileInfo, uri); CompareModelDesign(_expected, _actual); Assert.AreEqual(0, addressSpace.TraceList.Count); Assert.AreEqual(4, _expected.Items.Length); Assert.AreEqual(4, _actual.Items.Length); CompareModelDesign(_expected, _actual); } } #endregion TestMethod #region Test instrumentation #region ModelDesign //TODO UANodeSet prepare a semantic diff #565 //TODO ModelDesign prepare a semantic diff #566 private static void CompareModelDesign(ModelDesign expected, ModelDesign actual) { Assert.AreEqual(expected.Items.Length, actual.Items.Length); Assert.AreEqual(expected.TargetNamespace, actual.TargetNamespace); Dictionary _items = expected.Items.ToDictionary(x => x.SymbolicName.ToString()); foreach (NodeDesign _node in actual.Items) CompareNode(_items[_node.SymbolicName.ToString()], _node); } public static void CompareNode(NodeDesign expected, NodeDesign actual) { if (expected.GetType() == typeof(ObjectTypeDesign)) CompareObjectTypeDesign((ObjectTypeDesign)expected, (ObjectTypeDesign)actual); else if (expected.GetType() == typeof(VariableTypeDesign)) CompareVariableTypeDesign((VariableTypeDesign)expected, (VariableTypeDesign)actual); else if (expected.GetType() == typeof(DataTypeDesign)) CompareDataTypeDesign((DataTypeDesign)expected, (DataTypeDesign)actual); else if (expected.GetType() == typeof(ObjectDesign)) CompareObjectDesign((ObjectDesign)expected, (ObjectDesign)actual); else if (expected.GetType() == typeof(PropertyDesign)) ComparePropertyDesign((PropertyDesign)expected, (PropertyDesign)actual); else if (expected.GetType() == typeof(VariableDesign)) CompareVariableDesign((VariableDesign)expected, (VariableDesign)actual); else if (expected.GetType() == typeof(MethodDesign)) CompareMethodDesign((MethodDesign)expected, (MethodDesign)actual); else if (expected.GetType() == typeof(ReferenceTypeDesign)) CompareReferenceTypeDesign((ReferenceTypeDesign)expected, (ReferenceTypeDesign)actual); else throw new NotImplementedException(); } //Types private static void CompareDataTypeDesign(DataTypeDesign expected, DataTypeDesign actual) { Assert.AreEqual(expected.NoArraysAllowed, actual.NoArraysAllowed); Assert.IsFalse(actual.NotInAddressSpace); Compare(expected.Fields, actual.Fields); CompareTypeDesign(expected, actual); } private static void CompareReferenceTypeDesign(ReferenceTypeDesign expected, ReferenceTypeDesign actual) { CompareTypeDesign(expected, actual); UnitTestsExtensions.Compare(expected.InverseName, actual.InverseName); expected.SymmetricSpecified = expected.Symmetric; // false is default, if set must be ignored. Assert.AreEqual(expected.SymmetricSpecified, actual.SymmetricSpecified); Assert.AreEqual(expected.Symmetric, actual.Symmetric); } private static void CompareObjectTypeDesign(ObjectTypeDesign expected, ObjectTypeDesign actual) { CompareTypeDesign(expected, actual); Assert.IsFalse(expected.SupportsEventsSpecified, "Field not supported for types - should always be false"); Assert.IsFalse(actual.SupportsEventsSpecified, "Field not supported for types - should always be false"); Assert.IsFalse(expected.SupportsEvents, "Field not supported for types - should always be false"); Assert.IsFalse(actual.SupportsEvents, "Field not supported for types - should always be false"); } private static void CompareVariableTypeDesign(VariableTypeDesign expected, VariableTypeDesign actual) { CompareTypeDesign(expected, actual); Compare(expected.DefaultValue, actual.DefaultValue); Compare(expected.DataType, actual.DataType, "DataType"); if (expected.ValueRankSpecified && expected.ValueRank == ValueRank.Scalar) expected.ValueRankSpecified = false; Assert.AreEqual(expected.ValueRankSpecified, actual.ValueRankSpecified); if (expected.ValueRankSpecified) Assert.AreEqual(expected.ValueRank, actual.ValueRank); Assert.AreEqual(expected.ArrayDimensions, actual.ArrayDimensions); //Not supported by the VariableType NodeClass Assert.IsFalse(expected.ExposesItsChildren); Assert.IsFalse(actual.ExposesItsChildren); Assert.IsFalse(expected.AccessLevelSpecified); Assert.IsFalse(actual.AccessLevelSpecified); Assert.IsFalse(expected.HistorizingSpecified); Assert.IsFalse(actual.HistorizingSpecified); Assert.IsFalse(expected.MinimumSamplingIntervalSpecified); Assert.IsFalse(actual.MinimumSamplingIntervalSpecified); } //Instances private static void CompareObjectDesign(ObjectDesign expected, ObjectDesign actual) { Assert.AreEqual(expected.SupportsEventsSpecified, actual.SupportsEventsSpecified); if (expected.SupportsEventsSpecified) Assert.AreEqual(expected.SupportsEvents, actual.SupportsEvents); CompareInstanceDesign(expected, actual); } private static void CompareVariableDesign(VariableDesign expected, VariableDesign actual) { Compare(expected.DefaultValue, actual.DefaultValue); Compare(expected.DataType, actual.DataType, "VariableDesign.DataType"); if (expected.ValueRankSpecified && expected.ValueRank == ValueRank.Scalar) expected.ValueRankSpecified = false; Assert.AreEqual(expected.ValueRankSpecified, actual.ValueRankSpecified); if (expected.ValueRankSpecified) Assert.AreEqual(expected.ValueRank, actual.ValueRank); Assert.AreEqual(expected.ArrayDimensions, actual.ArrayDimensions); Assert.AreEqual(expected.AccessLevelSpecified, actual.AccessLevelSpecified, actual.SymbolicName.ToString()); if (expected.AccessLevelSpecified) Assert.AreEqual(expected.AccessLevel, actual.AccessLevel); Assert.AreEqual(expected.MinimumSamplingIntervalSpecified, actual.MinimumSamplingIntervalSpecified); if (expected.MinimumSamplingIntervalSpecified) Assert.AreEqual(expected.MinimumSamplingInterval, actual.MinimumSamplingInterval); Assert.AreEqual(expected.HistorizingSpecified, actual.HistorizingSpecified); if (expected.HistorizingSpecified) Assert.AreEqual(expected.Historizing, actual.Historizing); CompareInstanceDesign(expected, actual); } private static void ComparePropertyDesign(PropertyDesign expected, PropertyDesign actual) { Assert.IsNotNull(expected); Assert.IsNotNull(actual); CompareVariableDesign((VariableDesign)expected, (VariableDesign)actual); } private static void CompareMethodDesign(MethodDesign expected, MethodDesign actual) { Compare(expected.InputArguments, actual.InputArguments); Compare(expected.OutputArguments, actual.OutputArguments); Assert.IsFalse(actual.NonExecutableSpecified); //is not supported - cannot be recovered from NodeSet Assert.IsFalse(actual.NonExecutable); CompareInstanceDesign(expected, actual); } //base types private static void CompareTypeDesign(TypeDesign expected, TypeDesign actual) { CompareNodeDesign(expected, actual); if (expected.BaseType == null && actual.BaseType == null) return; Assert.IsNotNull(expected.BaseType); Assert.IsNotNull(actual.BaseType); Assert.AreEqual(expected.BaseType.ToString(), actual.BaseType.ToString()); } private static void CompareInstanceDesign(InstanceDesign expected, InstanceDesign actual) { Assert.IsTrue(expected.GetType() == actual.GetType()); Compare(expected.ReferenceType, actual.ReferenceType, "InstanceDesign.ReferenceType"); Compare(expected.TypeDefinition, actual.TypeDefinition, "InstanceDesign.TypeDefinition"); Assert.AreEqual(expected.ModellingRuleSpecified, actual.ModellingRuleSpecified, actual.SymbolicName.ToString()); if (expected.ModellingRuleSpecified) Assert.AreEqual(expected.ModellingRule, actual.ModellingRule); //test base type CompareNodeDesign(expected, actual); //Not supported attributes Assert.IsNull(actual.Declaration, "InstanceDesign.Declaration"); Assert.AreEqual(0, actual.MinCardinality); Assert.AreEqual(0, actual.MaxCardinality); Assert.IsFalse(actual.PreserveDefaultAttributes); } private static void CompareNodeDesign(NodeDesign expected, NodeDesign actual) { Assert.IsTrue(expected.BrowseName.AreEqual(actual.BrowseName)); UnitTestsExtensions.Compare(expected.DisplayName, actual.DisplayName); UnitTestsExtensions.Compare(expected.Description, actual.Description); CompareListOfChildren(expected.Children, actual.Children); Compare(expected.References, actual.References); Compare(expected.SymbolicName, actual.SymbolicName, "NodeDesign.SymbolicName"); Compare(expected.SymbolicId, actual.SymbolicId, "NodeDesign.SymbolicId"); Assert.AreEqual(expected.IsDeclaration, actual.IsDeclaration); Assert.AreEqual(expected.NumericId, actual.NumericId); Assert.AreEqual(expected.NumericIdSpecified, actual.NumericIdSpecified); Assert.AreEqual(expected.StringId, actual.StringId); Assert.AreEqual(expected.WriteAccess, actual.WriteAccess); Assert.AreEqual(expected.StringId, actual.StringId); Assert.AreEqual(expected.PartNo, actual.PartNo); } #endregion ModelDesign #region private helper /// /// Compares the parameters of a method. /// /// /// ModelCompiler doesn't generate parameters if TypeDefinition for the method is not set. /// TypeDefinition is not defined in the specification, but has to refer to a method defined top most level. /// The ModelDesign contains parameters but the UANodeSet doesn't have. /// /// The expected. /// The actual. private static void Compare(Parameter[] expected, Parameter[] actual) { if (expected == null || actual == null) return; if (expected.Length != actual.Length) return; for (int i = 0; i < expected.Length; i++) { Compare(expected[i].DataType, actual[i].DataType, "Parameter.DataType"); UnitTestsExtensions.Compare(expected[i].Description, actual[i].Description); Assert.AreEqual(expected[i].IdentifierSpecified, actual[i].IdentifierSpecified); if (expected[i].IdentifierSpecified) Assert.AreEqual(expected[i].Identifier, actual[i].Identifier); Assert.AreEqual(expected[i].Name, actual[i].Name); Assert.AreEqual(expected[i].ValueRank, actual[i].ValueRank); } } private static void CompareListOfChildren(ListOfChildren expected, ListOfChildren actual) { if (expected == null && actual == null) return; Assert.IsNotNull(expected); Assert.IsNotNull(actual); Assert.AreEqual(expected.Items.Length, actual.Items.Length); List _expectedList = new List(expected.Items); _expectedList.Sort((x, y) => x.SymbolicName.ToString().CompareTo(y.SymbolicName.ToString())); List _actualList = new List(actual.Items); _actualList.Sort((x, y) => x.SymbolicName.ToString().CompareTo(y.SymbolicName.ToString())); for (int i = 0; i < _expectedList.Count; i++) { //CompareInstanceDesign(, ); Type _expectedType = _expectedList[i].GetType(); Type _actualType = _actualList[i].GetType(); Assert.AreSame(_expectedType, _actualType); CompareNode(_expectedList[i], _actualList[i]); } } private static void Compare(Reference[] expected, Reference[] actual) { if (expected == null && actual == null) return; Assert.IsNotNull(expected); Assert.IsNotNull(actual); Assert.AreEqual(expected.Length, actual.Length); Assert.IsTrue(!expected.Where(x => x.ReferenceType == null || x.ReferenceType.IsEmpty).Any()); Assert.IsTrue(!actual.Where(x => x.ReferenceType == null || x.ReferenceType.IsEmpty).Any()); Assert.IsTrue(!expected.Where(x => x.TargetId == null || x.TargetId.IsEmpty).Any()); Assert.IsTrue(!actual.Where(x => x.TargetId == null || x.TargetId.IsEmpty).Any()); Dictionary _actualDictionary = actual.ToDictionary(x => x.Key()); foreach (Reference _rf in expected) { Assert.IsTrue(_actualDictionary.ContainsKey(_rf.Key()), _rf.Key()); Assert.AreEqual(_rf.IsInverse, _actualDictionary[_rf.Key()].IsInverse, _rf.Key()); Assert.IsFalse(_actualDictionary[_rf.Key()].IsOneWay, _rf.Key()); } } private static void Compare(XmlQualifiedName expected, XmlQualifiedName actual, string parameter) { if ((expected == null || expected.IsEmpty) && (actual == null || actual.IsEmpty)) return; Assert.IsNotNull(expected, parameter); Assert.IsNotNull(actual, parameter); Assert.IsFalse(expected.IsEmpty, parameter); Assert.IsFalse(actual.IsEmpty, parameter); Assert.AreEqual(expected.Name, actual.Name.Replace("_", ""), parameter); Assert.AreEqual(expected.Namespace, actual.Namespace, parameter); } private static void Compare(XmlElement expected, XmlElement actual) { return; if (expected == null && actual == null) return; Assert.IsNotNull(expected); Assert.IsNotNull(actual); Assert.AreEqual(expected.InnerText, actual.InnerText); Compare(expected.Attributes, actual.Attributes); } private static void Compare(XmlAttributeCollection expected, XmlAttributeCollection actual) { if (expected == null && actual == null) return; Assert.IsNotNull(expected); Assert.IsNotNull(actual); Dictionary _ad = expected.Cast().ToDictionary(x => x.Name); foreach (XmlAttribute _atr in actual) { Assert.IsTrue(_ad.ContainsKey(_atr.Name), _atr.InnerText); Assert.AreEqual(_ad[_atr.Name].InnerText, _atr.InnerText); } } private void TraceDiagnostic(TraceMessage msg, List errors, ref int diagnosticCounter) { Console.WriteLine(msg.ToString()); if (msg.BuildError.Focus == Focus.Diagnostic) { diagnosticCounter++; } else errors.Add(msg); } #endregion private helper #endregion Test instrumentation } } ================================================ FILE: SemanticData/UAModelDesignExport.UnitTest/Properties/AssemblyInfo.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System.Reflection; using System.Runtime.InteropServices; [assembly: AssemblyTitle("UAOOI.SemanticData.UAModelDesignExport")] [assembly: AssemblyDescription("Unit tests for UAOOI.SemanticData.UAModelDesignExport")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("commsvr.com")] [assembly: AssemblyProduct("Object Oriented Internet")] [assembly: AssemblyCopyright("Copyright (c) 2019 Mariusz Postol")] [assembly: AssemblyTrademark("Object Oriented Internet")] [assembly: AssemblyCulture("")] [assembly: ComVisible(false)] [assembly: Guid("abb9d4e2-568c-483e-8a77-2de5f4ff886a")] [assembly: AssemblyVersion("5.0.2.*")] [assembly: AssemblyFileVersion("5.0.2.0")] ================================================ FILE: SemanticData/UAModelDesignExport.UnitTest/SemanticData.UAModelDesignExport.UnitTest.csproj ================================================  Debug AnyCPU {ABB9D4E2-568C-483E-8A77-2DE5F4FF886A} Library Properties UAOOI.SemanticData.UAModelDesignExport UAOOI.SemanticData.UAModelDesignExport.UnitTest v4.7.2 512 {3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} 15.0 $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) $(ProgramFiles)\Common Files\microsoft shared\VSTT\$(VisualStudioVersion)\UITestExtensionPackages False UnitTest true full false bin\Debug\ DEBUG;TRACE prompt 4 IDE0001,IDE0002,IDE0003,IDE0049 pdbonly true bin\Release\ TRACE prompt 4 true OPCUAOOIKey.snk ..\..\packages\Castle.Core.5.0.0\lib\net462\Castle.Core.dll ..\..\packages\MSTest.TestFramework.2.2.10\lib\net45\Microsoft.VisualStudio.TestPlatform.TestFramework.dll ..\..\packages\MSTest.TestFramework.2.2.10\lib\net45\Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions.dll ..\..\packages\Moq.4.18.1\lib\net462\Moq.dll ..\..\packages\System.Runtime.CompilerServices.Unsafe.6.0.0\lib\net461\System.Runtime.CompilerServices.Unsafe.dll ..\..\packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll ..\..\packages\UAOOI.Common.Infrastructure.6.4.7\lib\netstandard2.0\UAOOI.Common.Infrastructure.dll Designer Designer Designer Designer {9ca2f05b-fb18-49ad-8520-1bcc838f748c} SemanticData.BuildingErrorsHandling {6d20785d-0451-46a9-9ac2-ec66b7c0d18a} SemanticData.InformationModelFactory {c970c14c-98aa-48a9-9f6f-d00c92fa6cef} SemanticData.UAModelDesignExport {352378a0-8b2e-4679-bb44-fd0bcc8467d9} SemanticData.UANodeSetValidation PreserveNewest Designer PreserveNewest Designer PreserveNewest Always Always Always Always Always Always PreserveNewest PreserveNewest Always This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. ================================================ FILE: SemanticData/UAModelDesignExport.UnitTest/UAResourcesUnitTestUnitTest.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2021, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using Microsoft.VisualStudio.TestTools.UnitTesting; using System.Linq; namespace UAOOI.SemanticData.UAModelDesignExport.XML { [TestClass] public class UAResourcesUnitTest { [TestMethod] public void LoadUADefinedTypesTestMethod() { ModelDesign newInstance = UAResources.LoadUADefinedTypes(); Assert.IsNotNull(newInstance); Assert.AreEqual(749, newInstance.Items.Where(x => !x.NotInAddressSpace).Count()); Assert.AreEqual(17, newInstance.Items.Where(x => !x.NotInAddressSpace && x.PartNo == 0).Count()); Assert.AreEqual(0, newInstance.Items.Where(x => !x.NotInAddressSpace && x.PartNo == 1).Count()); Assert.AreEqual(0, newInstance.Items.Where(x => !x.NotInAddressSpace && x.PartNo == 2).Count()); Assert.AreEqual(102, newInstance.Items.Where(x => !x.NotInAddressSpace && x.PartNo == 3).Count()); Assert.AreEqual(53, newInstance.Items.Where(x => !x.NotInAddressSpace && x.PartNo == 4).Count()); Assert.AreEqual(209, newInstance.Items.Where(x => !x.NotInAddressSpace && x.PartNo == 5).Count()); Assert.AreEqual(0, newInstance.Items.Where(x => !x.NotInAddressSpace && x.PartNo == 6).Count()); Assert.AreEqual(0, newInstance.Items.Where(x => !x.NotInAddressSpace && x.PartNo == 7).Count()); Assert.AreEqual(22, newInstance.Items.Where(x => !x.NotInAddressSpace && x.PartNo == 8).Count()); Assert.AreEqual(65, newInstance.Items.Where(x => !x.NotInAddressSpace && x.PartNo == 9).Count()); Assert.AreEqual(8, newInstance.Items.Where(x => !x.NotInAddressSpace && x.PartNo == 10).Count()); Assert.AreEqual(16, newInstance.Items.Where(x => !x.NotInAddressSpace && x.PartNo == 11).Count()); Assert.AreEqual(33, newInstance.Items.Where(x => !x.NotInAddressSpace && x.PartNo == 12).Count()); Assert.AreEqual(38, newInstance.Items.Where(x => !x.NotInAddressSpace && x.PartNo == 13).Count()); Assert.AreEqual(146, newInstance.Items.Where(x => !x.NotInAddressSpace && x.PartNo == 14).Count()); Assert.AreEqual(0, newInstance.Items.Where(x => !x.NotInAddressSpace && x.PartNo == 15).Count()); Assert.AreEqual(8, newInstance.Items.Where(x => !x.NotInAddressSpace && x.PartNo == 17).Count()); Assert.AreEqual(2, newInstance.Items.Where(x => !x.NotInAddressSpace && x.PartNo == 19).Count()); Assert.AreEqual(1, newInstance.Namespaces.Length); Assert.AreEqual(@"http://opcfoundation.org/UA/", newInstance.TargetNamespace); Assert.AreEqual(@"http://opcfoundation.org/UA/", newInstance.TargetXmlNamespace); } } } ================================================ FILE: SemanticData/UAModelDesignExport.UnitTest/UAResourcesUnitTestUnitTest.cs.md ================================================ # Modification table `Compared Items.Where(x => !x.NotInAddressSpace)` | Part | 1.04 2016-12-31 | 1.04.7 2020-07-1T `UA-1.04.7-2020-07-15` | | :---: | :-------------: | :--------------------------------------: | | 0 | 20 | 12 | | 1 | 0 | 0 | | 2 | 0 | 0 | | 3 | 90 | 101 | | 4 | 53 | 55 | | 5 | 169 | 209 | | 6 | 0 | 0 | | 7 | 0 | 0 | | 8 | 19 | 22 | | 9 | 58 | 65 | | 10 | 6 | 8 | | 11 | 15 | 16 | | 12 | 13 | 26 | | 13 | 38 | 38 | | 14 | 76 | 146 | | 15 | 0 | 0 | | 17 | 0 | 0 | | 19 | 0 | 2 | | Total | 557 | 708 | ================================================ FILE: SemanticData/UAModelDesignExport.UnitTest/app.config ================================================  ================================================ FILE: SemanticData/UAModelDesignExport.UnitTest/packages.config ================================================  ================================================ FILE: SemanticData/UANodeSetValidation/AddressSpace.Abstractions/AttributeWriteMask.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2022, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ using System; using System.Runtime.Serialization; namespace UAOOI.SemanticData.AddressSpace.Abstractions { //[DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)] /// /// This is a subtype of the UInt32 DataType with the OptionSetValues Property defined. It is used to define the Attribute access restrictions of a Node. /// The AttributeWriteMask is formally defined in Part 3 8.60 Table 43. /// /// If a bit is set to 0, it means the Attribute is not writable. If a bit is set to 1, it means it is writable. If a Node does not support a specific Attribute, the corresponding bit has to be /// set to 0. /// public enum AttributeWriteMask : UInt32 { /// [EnumMember(Value = "None_0")] None = 0, /// [EnumMember(Value = "AccessLevel_1")] AccessLevel = 1, /// [EnumMember(Value = "ArrayDimensions_2")] ArrayDimensions = 2, /// [EnumMember(Value = "BrowseName_4")] BrowseName = 4, /// [EnumMember(Value = "ContainsNoLoops_8")] ContainsNoLoops = 8, /// [EnumMember(Value = "DataType_16")] DataType = 16, /// [EnumMember(Value = "Description_32")] Description = 32, /// [EnumMember(Value = "DisplayName_64")] DisplayName = 64, /// [EnumMember(Value = "EventNotifier_128")] EventNotifier = 128, /// [EnumMember(Value = "Executable_256")] Executable = 256, /// [EnumMember(Value = "Historizing_512")] Historizing = 512, /// [EnumMember(Value = "InverseName_1024")] InverseName = 1024, /// [EnumMember(Value = "IsAbstract_2048")] IsAbstract = 2048, /// [EnumMember(Value = "MinimumSamplingInterval_4096")] MinimumSamplingInterval = 4096, /// [EnumMember(Value = "NodeClass_8192")] NodeClass = 8192, /// [EnumMember(Value = "NodeId_16384")] NodeId = 16384, /// [EnumMember(Value = "Symmetric_32768")] Symmetric = 32768, /// [EnumMember(Value = "UserAccessLevel_65536")] UserAccessLevel = 65536, /// [EnumMember(Value = "UserExecutable_131072")] UserExecutable = 131072, /// [EnumMember(Value = "UserWriteMask_262144")] UserWriteMask = 262144, /// [EnumMember(Value = "ValueRank_524288")] ValueRank = 524288, /// [EnumMember(Value = "WriteMask_1048576")] WriteMask = 1048576, /// [EnumMember(Value = "ValueForVariableType_2097152")] ValueForVariableType = 2097152, /// [EnumMember(Value = "DataTypeDefinition_4194304")] DataTypeDefinition = 4194304, /// [EnumMember(Value = "RolePermissions_8388608")] RolePermissions = 8388608, /// [EnumMember(Value = "AccessRestrictions_16777216")] AccessRestrictions = 16777216, /// [EnumMember(Value = "AccessLevelEx_33554432")] AccessLevelEx = 33554432, } } ================================================ FILE: SemanticData/UANodeSetValidation/AddressSpace.Abstractions/IAddressSpaceContext.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2022, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ using System; using UAOOI.SemanticData.InformationModelFactory; namespace UAOOI.SemanticData.AddressSpace.Abstractions { /// /// Interface IAddressSpaceContext - represents a service used to buildup OPC UA Address Space and export information model /// public interface IAddressSpaceContext { /// /// Imports all OPC UA Address Space models contained in the XML document, and populates internal OPC UA Address Space. /// /// The model to be imported. /// Return a default for the model defined in . Uri ImportUANodeSet(IUANodeSet model); /// /// Validates and exports the selected model using . /// /// /// Information model factory, which can be used to export a part of the OPC UA Address Space using a selected language. If not set or set to null an internal stub implementation will be used. /// /// The target namespace of the validated model. void ValidateAndExportModel(Uri targetNamespace, IModelFactory informationModelFactory); } } ================================================ FILE: SemanticData/UANodeSetValidation/AddressSpace.Abstractions/IDataTypeDefinition.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2022, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ using UAOOI.SemanticData.UANodeSetValidation.DataSerialization; namespace UAOOI.SemanticData.AddressSpace.Abstractions { /// /// A DataTypeDefinition defines an abstract representation of a UADataType that can be used by design tools to automatically create serialization code. /// The definition is according to UANodeset xml schema defined in part 6 /// public interface IDataTypeDefinition { /// /// This flag indicates that the data type defines the OptionSetValues Property. This field is optional. The default value is false. /// /// /// New, added according to Release 1.05.01 2022-02-21 /// bool IsOptionSet { get; set; } /// /// This flag indicates if the data type represents a union. /// Only one of the Fields defined for the data type is encoded into a value. /// If this value is true the first field is the switch value. /// /// /// This field is optional.The default value is false. /// bool IsUnion { get; set; } /// /// The list of fields that make up the data type. This definition assumes the structure has a sequential layout. /// For enumerations the fields are simply a list of values. /// IDataTypeField[] Field { get; } /// /// A unique name for the data type encoded using the syntax QualifiedName. /// This field is only specified for nested DataTypeDefinitions. /// The BrowseName of the DataType node is used otherwise. /// string Name { get; set; } /// /// A symbolic name for the data type that can be used as a class/structure name in autogenerated code. It should only be specified if the Name cannot be used for this purpose. /// Only letters, digits or the underscore(‘_’) are permitted. /// This field is only specified for nested DataTypeDefinitions. /// The SymbolicName of the DataType node is used otherwise. /// string SymbolicName { get; set; } /// /// The name of any base type. Note that the BaseType can refer to types defined in other files. /// The NamespaceUri associated with the Name should indicate where to look for the BaseType definition. /// This field is only specified for nested DataTypeDefinitions. /// The HasSubtype reference of the DataType NodeClass is used otherwise. /// string BaseType { get; set; } } /// /// The Field element of the DataTypeField type defines an abstract representation of a field within a UADataType that can be used by design tools to automatically create serialization code. /// public partial interface IDataTypeField { /// /// A name for the field that is unique within the DataTypeDefinition. /// LocalizedText[] DisplayName { get; set; } /// /// A description for the field in multiple locales. /// LocalizedText[] Description { get; set; } /// /// A name for the field that is unique within the DataTypeDefinition. /// string Name { get; set; } /// /// A symbolic name for the field that can be used in autogenerated code. /// It should only be specified if the Name cannot be used for this purpose. /// Only letters, digits or the underscore (‘_’) are permitted. /// string SymbolicName { get; set; } /// /// The NodeId of the DataType for the field. /// This NodeId can refer to another Node with its own DataTypeDefinition. /// This field is not specified for subtypes of Enumeration. /// string DataType { get; set; } /// /// The value rank for the field. /// It shall be Scalar(-1) or a fixed rank Array (>= 1). /// This field is not specified for subtypes of Enumeration. /// int ValueRank { get; set; } /// /// The maximum length of an array. This field is a comma separated list of unsigned integer values. The list has a number of elements equal to the ValueRank. /// The value is 0 if the maximum is not known for a dimension. /// This field is not specified if the ValueRank <= 0.This field is not specified for Enumeration or OptionSet DataTypes. /// string ArrayDimensions { get; set; } /// /// The maximum length of a String or ByteString value. If not known the value is 0. The value is 0 if the DataType is not String or ByteString. /// If the ValueRank > 0 the maximum applies to each element in the array.This field is not specified for Enumeration or OptionSet DataTypes. /// uint MaxStringLength { get; set; } /// /// The value associated with the field. This value is only specified for Enumeration or OptionSet DataTypes. /// int Value { get; set; } /// /// The field indicates if a data type field in a structure is optional. /// The default value is false. This field is not specified for Enumeration, Union or OptionSet DataTypes. /// bool IsOptional { get; set; } } /// /// Calculated part of the definition /// public partial interface IDataTypeField { /// /// The NodeId of the DataType for the field. /// This NodeId can refer to another Node with its own DataTypeDefinition. /// This field is not specified for subtypes of Enumeration. /// NodeId DataTypeNodeId { get; } } } ================================================ FILE: SemanticData/UANodeSetValidation/AddressSpace.Abstractions/IModelTableEntry.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2022, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ using System; namespace UAOOI.SemanticData.AddressSpace.Abstractions { /// /// Interface IModelTableEntry /// public interface IModelTableEntry { /// /// Gets or sets the access restrictions. The default AccessRestrictions that apply to all Nodes in the model. /// /// The access restrictions. byte AccessRestrictions { get; } /// /// Gets the for the model. This URI should be one of the entries in the namespace table. /// /// The model . Uri ModelUri { get; } /// /// Gets or sets the publication date. When the model was published. This value is used for comparisons if the model is defined in multiple UANodeSet files. /// /// The publication date. DateTime? PublicationDate { get; } /// /// Gets or sets the required model. A list of dependencies for the model. If the model requires a minimum version the PublicationDate shall be specified. /// Tools which attempt to resolve these dependencies may accept any PublicationDate after this date. /// /// The required model. IModelTableEntry[] RequiredModel { get; } /// /// Gets or sets the role permissions. The list of default RolePermissions for all Nodes in the model. /// /// The role permissions. IRolePermission[] RolePermissions { get; } /// /// Gets or sets the version. The version of the model defined in the UANodeSet. This is a human readable string and not intended for programmatic comparisons. /// /// The version. Version Version { get; } } } ================================================ FILE: SemanticData/UANodeSetValidation/AddressSpace.Abstractions/INamespaceTable.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2021, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ using System; namespace UAOOI.SemanticData.AddressSpace.Abstractions { /// /// The INamespaceTable interface to decouple the code from implementation of the . /// public interface INamespaceTable { /// /// Updates the model or append it to the existing collection /// /// The model in concern. void RegisterModel(IModelTableEntry model); /// /// Registers the dependency. /// /// The model that is required. void RegisterDependency(IModelTableEntry model); /// /// Searches for an index that matches the , and returns the zero-based index of the first occurrence within the namespace table. /// /// The URI to search for in the namespace table. /// /// The zero-based index of the first occurrence of , if found; otherwise, it is appended. /// ushort GetURIIndexOrAppend(Uri URI); /// /// Searches for an , and returns the zero-based index of the first occurrence within the . /// /// The URI. /// The zero-based index of the first occurrence of an , if found; otherwise, –1. int GetURIIndex(Uri URI); /// /// Gets the model . /// /// Index of the namespace. /// An instance that captures of the requested model if already registered, otherwise, null. Uri GetModelTableEntry(ushort namespaceIndex); } } ================================================ FILE: SemanticData/UANodeSetValidation/AddressSpace.Abstractions/IReference.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2022, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ using UAOOI.SemanticData.UANodeSetValidation.DataSerialization; namespace UAOOI.SemanticData.AddressSpace.Abstractions { public interface IReference { bool IsForward { get; set; } //TODO Define independent Address Space API #645 move NodeId definition to the OPCUA.Common NodeId ReferenceTypeNodeid { get; } NodeId ValueNodeId { get; } } } ================================================ FILE: SemanticData/UANodeSetValidation/AddressSpace.Abstractions/IRolePermission.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2022, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ namespace UAOOI.SemanticData.AddressSpace.Abstractions { /// /// Class RolePermission - default RolePermissions for all Nodes in the model. /// /// /// This type is defined in Part 6 F.5 but the definition is not compliant with the UANodeSet schema. /// This type is also defined in the Part 3 5.2.9 but the definition is not compliant. /// public interface IRolePermission { /// /// Gets or sets the permissions. /// /// /// This is a subtype of the UInt32 DataType with the OptionSetValues Property defined. It is used to define the permissions of a Node. The PermissionType is formally defined in Part3 8.55 Table 38. /// /// The permissions. uint Permissions { get; set; } /// /// Gets or sets the value. /// /// /// Not defined in the spec. /// /// The value. string Value { get; set; } } } ================================================ FILE: SemanticData/UANodeSetValidation/AddressSpace.Abstractions/IUADataType.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2022, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ //TODO Define independent Address Space API #645 - Remove dependency on InformationModelFactory using UAOOI.SemanticData.InformationModelFactory; namespace UAOOI.SemanticData.AddressSpace.Abstractions { public interface IUADataType : IUADataTypeNodeClass, IUAType { //TODO Mantis - report error /// /// Sets the data type purpose. /// /// /// Not defined in the specification Part 2, 5, 6 and Errata Release 1.04.2 September 25, 2018 /// This field is defined in the UADataType in the UADataType but in UA Model Design in the NodeDesign /// /// The data type purpose. DataTypePurpose Purpose { get; } } /// /// DataTypes are defined using the DataType NodeClass. The DataType NodeClass describes the syntax of a Variable Value. /// public interface IUADataTypeNodeClass { /// /// The DataTypeDefinition Attribute is used to provide the meta data and encoding information for custom DataTypes. The abstract DataTypeDefinition DataType is defined in 8.47. /// Structure and Union DataTypes /// The Attribute is mandatory for DataTypes derived from Structure and Union. For such DataTypes, the Attribute contains a structure of the DataType StructureDefinition. /// The StructureDefinition DataType is defined in 8.48. It is a subtype of DataTypeDefinition. /// Enumeration and OptionSet DataTypes /// The Attribute is mandatory for DataTypes derived from Enumeration, OptionSet and subtypes of UInteger representing an OptionSet. For such DataTypes, the Attribute contains /// a structure of the DataType EnumDefinition. The EnumDefinition DataType is defined in 8.49. It is a subtype of DataTypeDefinition. /// IDataTypeDefinition Definition { get; } } } ================================================ FILE: SemanticData/UANodeSetValidation/AddressSpace.Abstractions/IUAMethod.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2022, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ using UAOOI.SemanticData.UANodeSetValidation.DataSerialization; namespace UAOOI.SemanticData.AddressSpace.Abstractions { /// /// Interface IUAMethod representing a Method in the Information Model. Methods are lightweight functions, whose scope is bounded by an owning object, /// similar to the methods of a class in object-oriented programming or an owning object type, similar to static methods of a class. /// /// /// This interface may be specified for a Method node that is a target of a HasComponent reference from a single TypeObject or Object node. /// public interface IUAMethod : IUANode { /// /// Sets a value indicating whether the Method node is executable (“False” means not executable, “True” means executable).The Executable does not take any user access rights into account, /// i.e. although the Method is executable this may be restricted to a certain user/user group. /// If the server cannot get the executable information from the underlying system, it should state that it is executable. If a Method is called, the server should transfer /// this request and return the corresponding StatusCode if such a request is rejected. /// /// true if executable; otherwise, false. Default value is true bool Executable { set; get; } /// /// Sets a value indicating whether the Method is currently executable taking user access rights into account (“False” means not executable, “True” means executable). /// /// true if executable by current user; otherwise, false. Default value is true bool UserExecutable { set; get; } /// /// Gets or sets the method declaration identifier defined in Part 6 F.9. May be specified for Method Nodes that are a target of a HasComponent reference from a single Object Node. /// It is the NodeId of the UAMethod with the same BrowseName contained in the TypeDefinition associated with the Object Node. /// If the TypeDefinition overrides a Method inherited from a base ObjectType then this attribute shall reference the Method Node in the subtype. /// /// /// It is not exposed in the Address Space /// /// The method declaration identifier. string MethodDeclarationId { set; get; } /// /// The property is used to specify the arguments that shall be used by a client when calling the Method. /// /// /// It is not exposed in the Address Space /// UAMethodArgument[] ArgumentDescription { get; set; } } /// /// This UAMethodArgument defines a method input or output argument specification. It is for example used in the input and output argument Properties for Methods. /// /// /// It is standard type defined in P3 8.6 Argument /// public class UAMethodArgument { /// public string Name { set; get; } /// //TODO Define independent Address Space API #645 - move the LocalizedText definition to OPCUA.Common public LocalizedText[] Description { set; get; } } } ================================================ FILE: SemanticData/UANodeSetValidation/AddressSpace.Abstractions/IUANode.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2022, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ using System; using UAOOI.SemanticData.InformationModelFactory; using UAOOI.SemanticData.InformationModelFactory.UAConstants; using UAOOI.SemanticData.UANodeSetValidation.DataSerialization; namespace UAOOI.SemanticData.AddressSpace.Abstractions { /// /// Interface IUANode - a base type that defines a set of fields representing attributes and references of any node in the Address Space. /// public partial interface IUANode: IEquatable { /// /// Sets or gets a symbolic name for the node that can be used as a class/field name by a design tools to enhance auto-generated code. /// It should only be specified if the BrowseName cannot be used for this purpose. This field is not used directly to instantiate /// Address Space and is intended for use by design tools. Only letters, digits or the underscore (‘_’) are permitted. /// /// /// This attribute is not exposed in the Address Space. /// /// The symbolic name for the node. string SymbolicName { set; get; } /// /// Sets the release status of the node. /// /// /// It is not exposed in the address space. /// Added in the Rel 1.04 to the specification. /// /// The release status. ReleaseStatus ReleaseStatus { set; get; } /// /// Sets the category. A list of identifiers used to group related UANodes together for use by tools that create/edit UANodeSet files. /// /// The category. string[] Category { set; get; } string Documentation { get; set; } void RemoveInheritedValues(IUANode baseNode); } /// /// This part is defined according to Part3 5.2 Base NodeClass /// public partial interface IUANode { /// /// Nodes are unambiguously identified using a constructed identifier called the . Some implementations may accept alternative NodeIds in addition to the canonical /// NodeId represented in this Attribute. An application shall persist the identifierType and identifier NodeId elements of a Node as well as the Namespace Uri which the /// namespaceIndex NodeId element references. An application may change the namespaceIndex NodeId element of a Node with future address space instantiation and therefore a user shall /// not assume the namespaceIndex will not change. /// NodeId NodeId { get; } /// /// The NodeClass identifies the NodeClass of a Node. /// /// Returns NodeClassEnum NodeClassEnum NodeClass { get; } /// /// It holds the value of the BrowseName attribute of modes in the Address Space. The BrowseName is the name used in the information model. /// The BrowseName is qualified by the namespace used for the SymbolicName /// /// Nodes have a BrowseName Attribute that is used as a non-localized human-readable name when browsing the AddressSpace to create paths out of BrowseNames. /// The TranslateBrowsePathsToNodeIds Service defined in OPC 10000-4 can be used to follow a path constructed of BrowseNames. /// /// A BrowseName should never be used to display the name of a Node.The DisplayName should be used instead for this purpose. /// /// Unlike NodeIds, the BrowseName cannot be used to unambiguously identify a Node. Different Nodes may have the same BrowseName. /// Section 8.3 defines the structure of the BrowseName.It contains a namespace and a string. The namespace is provided to make the BrowseName unique in some cases in the context /// of a Node (e.g.Properties of a Node) although not unique in the context of the Server.If different organizations define BrowseNames for Properties, the namespace of the BrowseName /// provided by the organization makes the BrowseName unique, although different organizations may use the same string having a slightly different meaning. /// /// Applications may often choose to use the same namespace for the NodeId and the BrowseName.However, if they want to provide a standard Property, its BrowseName shall have the namespace /// of the standards body although the namespace of the NodeId reflects something else, for example the local Server. /// /// Standards bodies defining standard type definitions shall use their namespace(s) for the NodeId of the TypeDefinitionNode as well as for the BrowseName of the TypeDefinitionNode. /// BrowseNames of TypeDefinitionNodes, ReferenceTypes, and DataTypes shall be unique. Any well-known instances used as entry points shall also be unique. For example, the Root Node defined in /// OPC 10000-5. /// The string-part of the BrowseName is case sensitive. That is, users shall consider them case sensitive.Servers are allowed to handle BrowseNames passed in Service requests as case /// insensitive. Examples are the TranslateBrowsePathsToNodeIds Service or Event filter. If a Server accepts a case insensitive BrowseName it needs to ensure that the uniqueness of the BrowseName /// does not depend on case. /// QualifiedName BrowseName { get; } /// /// The DisplayName Attribute contains the localized name of the Node. Users should use this property if they want to display the name of the Node. They should not use the BrowseName for this purpose. /// The application may maintain one or more localized representations for each DisplayName. The API user selects the locale to be returned when they open a session with the Server. /// Refer to OPC 10000-4 for a description of session establishment and locales. Section 8.5 defines the structure of the DisplayName. /// The string part of the DisplayName is restricted to 512 characters. /// LocalizedText[] DisplayName { get; } /// /// The optional Description Attribute shall explain the meaning of the Node in a localised text using the same mechanisms for localization as described for the DisplayName /// LocalizedText[] Description { get; } /// /// The optional WriteMask Attribute exposes the possibilities of a client to write the Attributes of the Node. The WriteMask Attribute does not take any user access rights into account, /// that is, although an Attribute is writable this may be restricted to a certain user/user group. /// /// If the OPC UA Server does not have the ability to get the WriteMask information for a specific Attribute from the underlying system, it should state that it is writable.If a write /// operation is called on the Attribute, the Server should transfer this request and return the corresponding StatusCode if such a request is rejected.StatusCodes are defined in OPC 10000-4. /// /// The AttributeWriteMask DataType is defined in 8.60. /// AttributeWriteMask WriteMask { set; get; } /// /// The optional UserWriteMask Attribute exposes the possibilities of a client to write the Attributes of the Node taking user access rights into account. It uses the AttributeWriteMask /// DataType which is defined in 8.60. /// /// The UserWriteMask Attribute can only further restrict the WriteMask Attribute, when it is set to not writable in the general case that applies for every user. /// Clients cannot assume an Attribute can be written based on the UserWriteMask Attribute.It is possible that the Server may return an access denied error due to some server /// specific change which was not reflected in the state of this Attribute at the time the Client accessed it. /// AttributeWriteMask UserWriteMask { set; get; } /// /// The optional RolePermissions Attribute specifies the Permissions that apply to a Node for all Roles which have access to the Node. The value of the Attribute is an array of /// RolePermissionType Structures /// IRolePermission[] RolePermissions { get; set; } /// /// The optional UserRolePermissions attribute specifies the permissions that apply to a node for all roles granted to current Session. The value of the Attribute is an array of /// RolePermissionType Structures (see Table 8). /// /// Clients may determine their effective permissions by performing a logical OR of permissions for each role in the array. /// /// The value of this Attribute is derived from the rules used by the hosting application to map sessions to roles. This mapping may be vendor specific or it may use the standard /// role model defined in Part 3 Section 4.8. /// /// This Attribute shall not be writable. /// /// If not specified, the value of DefaultUserRolePermissions property from the Namespace Metadata Object associated with the node is used instead. If the NamespaceMetadata Object does not /// define the Property or does not exist, then the hosting application does not publish any information about roles mapped to the current Session. /// IRolePermission[] UserRolePermissions { get; set; } /// /// Sets or gets the access restrictions. See also Part 3 section 5.2.11 /// /// /// The optional AccessRestrictions attribute specifies the AccessRestrictions that apply to a node. If a hosting application supports AccessRestrictions /// for a particular namespace it adds the DefaultAccessRestrictions Property to the NamespaceMetadata Object for that Namespace. If a particular node in the /// Namespace needs to override the default value the hosting application adds the AccessRestrictions attribute to the node. /// /// If a Server implements a vendor specific access restriction model for a Namespace, it does not add the DefaultAccessRestrictions Property to the NamespaceMetadata Object. /// /// The access restrictions. AccessRestrictions AccessRestrictions { set; get; } /// /// Reference of the node. /// IReference[] References { get; } } } ================================================ FILE: SemanticData/UANodeSetValidation/AddressSpace.Abstractions/IUANodeSet.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2022, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ using System; using System.Xml; //TODO Define independent Address Space API #645 - this dependency must be removed using UAOOI.SemanticData.BuildingErrorsHandling; namespace UAOOI.SemanticData.AddressSpace.Abstractions { /// /// The UANodeSet is the root element of the XML document. /// /// /// Dependency on UANodeSet must be removed form the Address Space API /// public interface IUANodeSet { /// /// Parse the model expressed as the UANodeset XML file compliant with the UANodeset schema. /// /// /// /// Uri ParseUAModelContext(INamespaceTable addressSpaceContext, Action traceEvent); /// /// A list of namespaces represented by URI referred in the document. External references are allowed. /// string[] NamespaceUris { get; set; } /// /// list of ServerUri entries used in the UANodeSet document /// string[] ServerUris { get; set; } /// /// An element containing any vendor defined extensions to the UANodeSet. /// XmlElement[] Extensions { get; set; } /// /// The Address Space nodes collection representation in the UANodeSet. /// IUANode[] Items { get; } /// /// The last time a document was modified. /// DateTime LastModified { get; set; } /// /// Determines if the is specified. /// bool LastModifiedSpecified { get; set; } } } ================================================ FILE: SemanticData/UANodeSetValidation/AddressSpace.Abstractions/IUAObject.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2022, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ namespace UAOOI.SemanticData.AddressSpace.Abstractions { /// /// Objects are used to represent systems, system components, real-world objects and software objects. Objects are defined using the Object NodeClass. /// public interface IUAObject : IUANode { /// /// The EventNotifier is used to indicate if the node can be used to subscribe to events or the read/write historic Events. /// The EventNotifierType is defined in P 3 - 8.59. /// // TODO UANodeSetValidation - Define independent Address Space API replace byte by the EventNotifierType according to the definition in the spec. byte EventNotifier { get; set; } } } ================================================ FILE: SemanticData/UANodeSetValidation/AddressSpace.Abstractions/IUAObjectType.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2022, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ namespace UAOOI.SemanticData.AddressSpace.Abstractions { /// /// ObjectTypes provide definitions for objects. ObjectTypes are defined using the ObjectType NodeClass. /// public interface IUAObjectType : IUAType { } } ================================================ FILE: SemanticData/UANodeSetValidation/AddressSpace.Abstractions/IUAReferenceType.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2022, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ using UAOOI.SemanticData.UANodeSetValidation.DataSerialization; namespace UAOOI.SemanticData.AddressSpace.Abstractions { /// /// Interface IUAReferenceType - encapsulates a reference type definition. /// /// /// References are defined as instances of ReferenceType nodes. ReferenceType nodes are visible in the Address Space and are defined using the ReferenceType node class. /// In contrast, a reference instance is an inherent part of a node and no node class is used to represent references. /// See also 5.3 ReferenceType NodeClass /// public interface IUAReferenceType : IUAType { /// /// If a ReferenceType is symmetric, the InverseName Attribute shall be omitted. Therefore both directions are considered to be forward References. /// If the ReferenceType is non-symmetric and not abstract, the InverseName Attribute shall be set. The InverseName Attribute specifies the meaning of the ReferenceType as seen from the /// target node. /// LocalizedText[] InverseName { get; } /// /// The Symmetric Attribute is used to indicate whether or not the meaning of the ReferenceType is the same for both the source and target nodes. /// bool Symmetric { get; set; } } } ================================================ FILE: SemanticData/UANodeSetValidation/AddressSpace.Abstractions/IUAType.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2022, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ namespace UAOOI.SemanticData.AddressSpace.Abstractions { /// /// Interface IUAType - instances implementing this interface supports type definition factoring. /// public interface IUAType : IUANode { /// /// Sets a value indicating whether this instance is abstract. /// A boolean Attribute with the following values: /// TRUE it is an abstract type, i.e. no instances of this type shall exist, only of its subtypes. /// FALSE it is not an abstract type, i.e. instances of this type can exist in the Address Space. /// /// Default Value is false /// true if this type is abstract; otherwise, false. bool IsAbstract { get; set; } } } ================================================ FILE: SemanticData/UANodeSetValidation/AddressSpace.Abstractions/IUAVariable.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2022, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ using System.Xml; using UAOOI.SemanticData.UANodeSetValidation.DataSerialization; namespace UAOOI.SemanticData.AddressSpace.Abstractions { internal interface IUAVariable : IUANode { /// /// The most recent value of the Variable that the Server has. Its data type is defined by the DataType Attribute. It is the only Attribute that does not have a data type associated with it. /// This allows all Variables to have a value defined by the same Value Attribute. /// XmlElement Value { set; get; } /// /// NodeId of the DataType definition for the Value Attribute. Standard DataTypes are defined in Clause 7.23. /// //string DataType { get; set; } NodeId DataType { get; } /// /// This Attribute indicates whether the Value Attribute of the Variable is an array and how many dimensions the array has. /// It may have the following values: /// n > 1: the Value is an array with the specified number of dimensions. /// OneDimension (1): The value is an array with one dimension. /// OneOrMoreDimensions (0): The value is an array with one or more dimensions. /// Scalar (−1): The value is not an array. /// Any (−2): The value can be a scalar or an array with any number of dimensions. /// ScalarOrOneDimension (−3): The value can be a scalar or a one dimensional array. ///NOTE: All DataTypes are considered to be scalar, even if they have array-like semantics like ByteString and String. /// int ValueRank { get; set; } /// /// This Attribute specifies the maximum supported length of each dimension. If the maximum is unknown the value shall be 0. /// The number of elements shall be equal to the number of dimensions of the Value. This Attribute shall be null if the Value is not an array. /// For example, if a Variable is defined by the following C array: /// Int32 myArray[346]; /// then this Variable’s DataType would be set to Int32, and the Variable’s ValueRank has the value 1. The ArrayDimensions is an array with a length of one where the element has the value 346. /// Regardless of the number of dimensions, the maximum number of elements of an array transferred on the wire is 2147483647 (max Int32). /// string ArrayDimensions { get; set; } /// /// The AccessLevel attribute indicates the accessibility of the Value of a Variable node not taking user access rights into account and /// applies only to a UAVariable element. The AccessLevel attribute is used to indicate how the Value of a Variable node can be accessed (read/write) and /// if it contains current and/or historic data. The AccessLevel does not take any user access rights into account, i.e. although the Variable is writable this /// may be restricted to a certain user / user group. /// /// /// Exposed using the type AccessLevelType. The AccessLevelType is defined in P 3 8.57. as the Standard DataType. /// /// The access level. //TODO AccessLevelType must be defined for IUAVariable and IUAVariableType #673 uint? AccessLevel { set; get; } /// /// The UserAccessLevel attribute is used to indicate how the Value attribute of a Variable NodeClass can be accessed (read/write) /// and if it contains current or historic data taking user access rights into account. It applies only to a UAVariable element. If the OPC UA Server does not /// have the ability to get any user access rights related information from the underlying system it should use the same bit mask as used in the AccessLevel attribute. /// The UserAccessLevel attribute can restrict the accessibility indicated by the AccessLevel, but not exceed it. /// /// /// Exposed using the type AccessLevelType. The AccessLevelType is defined in P 3 8.57. as the Standard DataType. /// /// The user access level. //TODO AccessLevelType must be defined for IUAVariable and IUAVariableType #673 byte? UserAccessLevel { set; get; } /// /// Sets the minimum sampling interval. The MinimumSamplingInterval attribute indicates how “current” the Value of the Variable NodeClass will be kept. /// It specifies (in milliseconds) how fast the server can reasonably sample the value for changes. The accuracy of this value (the ability of the server to attain /// “best case” performance) can be greatly affected by the system load and other factors. A MinimumSamplingInterval of 0 indicates that the server is to monitor the /// item continuously. A MinimumSamplingInterval of -1 means indeterminate value. /// /// The minimum sampling interval. double MinimumSamplingInterval { set; get; } /// /// Sets a value indicating whether this is historizing. The Historizing attribute indicates whether the server is actively /// collecting data for the history of the Variable node. This differs from the AccessLevel which identifies if the Variable has any historical data. A value of true /// indicates that the server is actively collecting data. A value of false indicates that the server is not actively collecting data. Default value is false. /// /// true if historizing; otherwise, false. bool Historizing { set; get; } /// /// Not Supported Feature /// Not exposed in the AS /// bool Translation { get; } } } ================================================ FILE: SemanticData/UANodeSetValidation/AddressSpace.Abstractions/IUAVariableType.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2022, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ using System.Xml; using UAOOI.SemanticData.InformationModelFactory; using UAOOI.SemanticData.UANodeSetValidation.DataSerialization; namespace UAOOI.SemanticData.AddressSpace.Abstractions { /// /// Interface IUAVariableType - In the OPC UA Address Space the Variable NodeClass is used to provide a value, which may be simple or complex. /// public interface IUAVariableType : IUAType { /// /// Sets the default value. The value of the Variable node that the server assigns while instantiating the node. Its data type is defined by the . /// /// The default value. XmlElement Value { set; get; } /// /// NodeId of the data type definition for instances of this type. /// NodeId DataType { get; } /// /// This Attribute indicates whether the Value Attribute of the VariableType is an array and how many dimensions the array has. /// It may have the following values: /// n > 1: the Value is an array with the specified number of dimensions. /// OneDimension(1): The value is an array with one dimension. /// OneOrMoreDimensions(0): The value is an array with one or more dimensions. /// Scalar(−1): The value is not an array. /// Any(−2): The value can be a scalar or an array with any number of dimensions. /// ScalarOrOneDimension(−3): The value can be a scalar or a one dimensional array. /// NOTE All DataTypes are considered to be scalar, even if they have array-like semantics like ByteString and String. /// int ValueRank { get; set; } /// /// This Attribute specifies the length of each dimension for an array value. The Attribute specifies the maximum supported length of each dimension. If the maximum is unknown the value is 0. /// The number of elements shall be equal to the value of the ValueRank Attribute.This Attribute shall be null if ValueRank ≤ 0. /// For example, if a VariableType is defined by the following C array: /// Int32 myArray[346]; /// then this VariableType’s DataType would point to an Int32, the VariableType’s ValueRank has the value 1 and the ArrayDimensions is an array with one entry having the value 346. /// string ArrayDimensions { get; set; } } } ================================================ FILE: SemanticData/UANodeSetValidation/AddressSpace.Abstractions/IUAView.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2022, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ namespace UAOOI.SemanticData.AddressSpace.Abstractions { /// /// Interface IUAView - encapsulates definition of a View NodeClass /// public interface IUAView : IUANode { /// /// If set to “TRUE” this Attribute indicates that by following the References in the context of the View there are no loops, i.e. starting from a Node “A” contained in the View and following the forward References in the context of the View Node “A” will not be reached again. It does not specify that there is only one path starting from the View Node to reach a Node contained in the View.If set to FALSE this Attribute indicates that following References in the context of the View may lead to loops. /// Sets or gets a value indicating whether the part of the Address Space represented by View contains no loops. /// The mandatory ContainsNoLoops attribute is set to false if the server is not able to identify if the view contains loops or not. /// /// true if the part of the Address Space represented by View contains no loops; otherwise, false. bool ContainsNoLoops { get; set; } /// /// Sets a value indicating whether the events are supported. /// /// /// The EventNotifier is used to indicate if the node can be used to subscribe to events or the read/write historic events. /// Must return EventNotifierType defined in the P 3 8.59 /// //TODO UANodeSetValidation - Define independent Address Space API #672 - replace byte by the EventNotifierType according to the definition in the spec byte EventNotifier { get; set; } } } ================================================ FILE: SemanticData/UANodeSetValidation/AddressSpace.Abstractions/NodeClassEnum.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2022, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ namespace UAOOI.SemanticData.AddressSpace.Abstractions { /// /// Enum NodeClassEnum - enumerates all kinds on nodes. /// public enum NodeClassEnum { UADataType, UAMethod, UAObject, UAObjectType, UAReferenceType, UAVariable, UAVariableType, UAView, Unknown } } ================================================ FILE: SemanticData/UANodeSetValidation/AddressSpaceContext.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2022, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Xml; using UAOOI.SemanticData.AddressSpace.Abstractions; using UAOOI.SemanticData.BuildingErrorsHandling; using UAOOI.SemanticData.InformationModelFactory; using UAOOI.SemanticData.UANodeSetValidation.DataSerialization; using UAOOI.SemanticData.UANodeSetValidation.Diagnostic; using UAOOI.SemanticData.UANodeSetValidation.InformationModelFactory; using UAOOI.SemanticData.UANodeSetValidation.UAInformationModel; namespace UAOOI.SemanticData.UANodeSetValidation { /// /// Class AddressSpaceContext - responsible to manage all nodes in the OPC UA Address Space. /// // TODO Define independent Address Space API #645 internal class AddressSpaceContext : IAddressSpaceContext, IAddressSpaceBuildContext { #region constructor /// /// Initializes a new instance of the class. /// /// Encapsulates an action to trace the progress and validation issues. /// traceEvent - traceEvent - cannot be null internal AddressSpaceContext(IBuildErrorsHandling traceEvent) { m_TraceEvent = traceEvent ?? throw new ArgumentNullException(nameof(traceEvent), $"{nameof(traceEvent)} cannot be null"); m_TraceEvent.WriteTraceMessage(TraceMessage.DiagnosticTraceMessage("Address Space - has bee created successfully.")); } #endregion constructor #region IAddressSpaceContext /// /// Imports all OPC UA Address Space models contained in the XML document, and populates internal OPC UA Address Space. /// /// /// The input document must be compliant with the `UANodeSet` schema. /// /// The model to be imported. /// Return a default for the model defined in . /// model - the model cannot be null //TODO IAddressSpaceContext.ImportUANodeSet(System.IO.FileInfo) returned result must be tested. #626 Uri IAddressSpaceContext.ImportUANodeSet(IUANodeSet model) { m_TraceEvent.WriteTraceMessage(TraceMessage.DiagnosticTraceMessage($"{359517792}, Entering {nameof(IAddressSpaceContext.ImportUANodeSet)} - importing from object model.")); if (model == null) throw new ArgumentNullException("model", "the model cannot be null"); return ImportNodeSet(model); } /// /// Validates and exports the selected model using , or alternatively a stub embedded implementation. /// /// /// Information model factory, which can be used to export a part of the OPC UA Address Space using a selected language. /// /// The target namespace of the validated model. void IAddressSpaceContext.ValidateAndExportModel(Uri targetNamespace, IModelFactory informationModelFactory) { m_TraceEvent.WriteTraceMessage(TraceMessage.DiagnosticTraceMessage($"{856488909}, Entering IAddressSpaceContext.ValidateAndExportModel - starting for the {targetNamespace} namespace.")); m_InformationModelFactory = informationModelFactory ?? new InformationModelFactoryBase(); List undefinedUriLists = new List(); if (!m_NamespaceTable.ValidateNamesapceTable(x => undefinedUriLists.Add(x))) foreach (Uri item in undefinedUriLists) m_TraceEvent.WriteTraceMessage(TraceMessage.BuildErrorTraceMessage(BuildError.LackOfRequiredModel, $"I cannot find definition of the required model {item}")); int _nsIndex = m_NamespaceTable.GetURIIndex(targetNamespace); //TODO This example doesn't work #583 - handle this exception if (_nsIndex == -1) throw new ArgumentOutOfRangeException("targetNamespace", $"Cannot find this {targetNamespace} namespace"); ValidateAndExportModel(_nsIndex); } #endregion IAddressSpaceContext #region IAddressSpaceBuildContext /// /// Search the address space to find the node and returns /// encapsulating the of this node if exist. Returnsnull otherwise. /// /// The identifier of the node to find. /// The default value. /// An instance of representing the of the node indexed by public XmlQualifiedName ExportBrowseName(NodeId nodeId, NodeId defaultValue) { if (nodeId == defaultValue) return null; IUANodeContext _context = TryGetUANodeContext(nodeId); if (_context == null) return null; return _context.ExportNodeBrowseName(); } /// /// Exports the argument for a method. /// /// The argument - it defines a Method input or output argument specification. It is for example used in the input and output argument Properties for Methods. /// Type of the data. /// Parameter. public Parameter ExportArgument(DataSerialization.Argument argument, XmlQualifiedName dataType) { Parameter _ret = new Parameter() { ArrayDimensions = argument.ArrayDimensions.ArrayDimensionsToString(), DataType = dataType, Identifier = new Nullable(), Name = argument.Name, ValueRank = argument.ValueRank.ParseValueRank(m_TraceEvent.WriteTraceMessage) }; if (argument.Description != null) _ret.AddDescription(argument.Description.Locale, argument.Description.Text); return _ret; } /// /// Gets the or create node context. /// /// The node identifier. /// Delegated capturing functionality to create ua model context. /// Returns an instance of . public IUANodeContext GetOrCreateNodeContext(NodeId nodeId, Func createUAModelContext) { string _idKey = nodeId.ToString(); if (!m_NodesDictionary.TryGetValue(_idKey, out IUANodeContext _ret)) { _ret = createUAModelContext(nodeId); m_NodesDictionary.Add(_idKey, _ret); } return _ret; } /// /// Gets the namespace. /// /// Index of the namespace. public string GetNamespace(ushort namespaceIndex) { return m_NamespaceTable.GetModelTableEntry(namespaceIndex).ToString(); } /// /// Gets my references. /// /// The source node /// Returns containing references attached to the . IEnumerable IAddressSpaceBuildContext.GetMyReferences(IUANodeBase node) { return m_References.Values.Where(x => (Object.ReferenceEquals(x.SourceNode, node))); } /// /// Gets the references2 me. /// /// The index. /// IEnumerable<UAReferenceContext>. IEnumerable IAddressSpaceBuildContext.GetReferences2Me(IUANodeBase node) { return m_References.Values.Where(x => Object.ReferenceEquals(x.TargetNode, node) && !Object.ReferenceEquals(x.ParentNode, node)); } /// /// Gets the children nodes ( or ) for the . /// /// The root node of the requested children. /// Return an instance of capturing all children of the selected node. public IEnumerable GetChildren(IUANodeBase node) { return m_References.Values.Where(x => Object.ReferenceEquals(x.SourceNode, node)). Where(x => x.ChildConnector). Select(x => x.TargetNode); } public Parameter ExportArgument(DataSerialization.Argument argument) { XmlQualifiedName _dataType = ExportBrowseName(argument.DataType.Identifier.ParseNodeId(m_TraceEvent.WriteTraceMessage), DataTypeIds.BaseDataType); return ExportArgument(argument, _dataType); } public void GetBaseTypes(IUANodeContext rootNode, List inheritanceChain) { if (rootNode == null) throw new ArgumentNullException("rootNode"); inheritanceChain.Add(rootNode); if (rootNode.InRecursionChain) throw new ArgumentOutOfRangeException("Circular reference"); rootNode.InRecursionChain = true; IEnumerable _derived = m_References.Values.Where(x => (x.TypeNode.NodeIdContext == ReferenceTypeIds.HasSubtype) && (x.TargetNode == rootNode)). Select(x => x.SourceNode); if (_derived.Count() > 1) throw new ArgumentOutOfRangeException("To many subtypes"); else if (_derived.Count() == 1) GetBaseTypes(_derived.First(), inheritanceChain); rootNode.InRecursionChain = false; } #endregion IAddressSpaceBuildContext #region private //vars private IModelFactory m_InformationModelFactory = new InformationModelFactoryBase(); private Dictionary m_References = new Dictionary(); private NamespaceTable m_NamespaceTable = new NamespaceTable(); private Dictionary m_NodesDictionary = new Dictionary(); private readonly IBuildErrorsHandling m_TraceEvent = null; //methods //TODO Define independent Address Space API #645 private Uri ImportNodeSet(IUANodeSet model) { Uri defaultModelUri = model.ParseUAModelContext(m_NamespaceTable, m_TraceEvent.WriteTraceMessage); Dictionary itemsDictionary = new Dictionary(); foreach (IUANode node in model.Items) { if (itemsDictionary.ContainsKey(node.NodeId)) m_TraceEvent.WriteTraceMessage(TraceMessage.BuildErrorTraceMessage(BuildError.NodeIdDuplicated, $"The {node.NodeId} is already defined in the imported model and is removed from further processing.")); else ImportUANode(node); } m_TraceEvent.WriteTraceMessage(TraceMessage.DiagnosticTraceMessage($"Finished import UANodeSet for {defaultModelUri}; Imported {model.Items.Length} nodes.")); return defaultModelUri; } private void ImportUANode(IUANode node) { try { NodeId _nodeId = node.NodeId; IUANodeContext _newNode = GetOrCreateNodeContext(_nodeId, x => new UANodeContext(_nodeId, this, m_TraceEvent.WriteTraceMessage)); _newNode.Update(node, _reference => { if (!m_References.ContainsKey(_reference.Key)) m_References.Add(_reference.Key, _reference); }); } catch (Exception _ex) { string _msg = string.Format("ImportUANode {1} is interrupted by exception {0}", _ex.Message, node.NodeId); m_TraceEvent.TraceData(TraceEventType.Critical, 298461119, _msg); } } private IUANodeContext TryGetUANodeContext(NodeId nodeId) { if (!m_NodesDictionary.TryGetValue(nodeId.ToString(), out IUANodeContext _ret)) { m_TraceEvent.WriteTraceMessage(TraceMessage.BuildErrorTraceMessage(BuildError.NodeIdNotDefined, string.Format("References to node with NodeId: {0} is omitted during the import.", nodeId))); return null; } if (_ret.UANode == null) { m_TraceEvent.WriteTraceMessage(TraceMessage.BuildErrorTraceMessage(BuildError.NodeIdNotDefined, string.Format("NodeId: {0} is omitted during the import.", nodeId))); return null; } return _ret; } private void ValidateAndExportModel(int nameSpaceIndex) { IValidator validator = new Validator(this, m_TraceEvent); IEnumerable stubs = from _key in m_NodesDictionary.Values where _key.NodeIdContext.NamespaceIndex == nameSpaceIndex select _key; IEnumerable undefindNodes = from node in stubs where Object.ReferenceEquals(node.UANode, null) select node; foreach (IUANodeBase item in undefindNodes) m_TraceEvent.WriteTraceMessage(TraceMessage.BuildErrorTraceMessage(BuildError.NodeCannotBeNull, $"the node {item.ToString()} is not defined in the UANodeSet model")); List allNodesInConcern = (from _node in stubs where _node.UANode != null select _node).ToList(); List nodes = (from _node in stubs where _node.UANode != null && (_node.UANode is XML.UAType) select _node).ToList(); m_TraceEvent.WriteTraceMessage(TraceMessage.DiagnosticTraceMessage($"938023414, Selected {nodes.Count} types to be validated.")); IUANodeBase _objects = TryGetUANodeContext(UAInformationModel.ObjectIds.ObjectsFolder); if (_objects is null) throw new ArgumentNullException("Cannot find ObjectsFolder in the standard information model"); IEnumerable _allInstances = m_References.Values.Where(x => (x.SourceNode.NodeIdContext == ObjectIds.ObjectsFolder) && (x.TypeNode.NodeIdContext == ReferenceTypeIds.Organizes) && (x.TargetNode.NodeIdContext.NamespaceIndex == nameSpaceIndex)) .Select(x => x.TargetNode); m_TraceEvent.WriteTraceMessage(TraceMessage.DiagnosticTraceMessage($"863907859, Selected {_allInstances.Count()} instances referenced by the ObjectsFolder to be validated.")); nodes.AddRange(_allInstances); foreach (IModelTableEntry modelTableEntry in m_NamespaceTable.Models) { DateTime _publicationDate = modelTableEntry.PublicationDate.HasValue ? modelTableEntry.PublicationDate.Value : DateTime.UtcNow; Version _version = modelTableEntry.Version; m_InformationModelFactory.CreateNamespace(modelTableEntry.ModelUri, _publicationDate, _version); } int nodesCount = nodes.Count; do { string doMessage = $"1606585634, Do Validator.ValidateExportModel - now the model contains {nodesCount} nodes"; m_TraceEvent.WriteTraceMessage(TraceMessage.DiagnosticTraceMessage(doMessage)); NodesCollection embededNodes = new NodesCollection(); foreach (IUANodeBase item in nodes) { try { validator.ValidateExportNode(item, allNodesInConcern, m_InformationModelFactory, y => { if (y.NodeIdContext.NamespaceIndex == nameSpaceIndex) embededNodes.AddOrReplace(y, false); }); } catch (Exception ex) { string msg = string.Format("Error caught while processing the node {0}. The message: {1} at {2}.", item.UANode.NodeId, ex.Message, ex.StackTrace); m_TraceEvent.WriteTraceMessage(TraceMessage.BuildErrorTraceMessage(BuildError.NonCategorized, msg)); } } List notReferencedNodes = embededNodes.Values.ToList(); //.ToList(); //foreach (IUANodeBase node in notReferencedNodes) //{ // string message = $"{514697109} the {node} is reported as orphan"; // m_TraceEvent.WriteTraceMessage(TraceMessage.BuildErrorTraceMessage(BuildError.NonCategorized, message)); //} nodes.Clear();// = embededNodes.ToList(); nodesCount += nodes.Count; } while (nodes.Count > 0); //TODO The exported model doesn't contain all nodes #653 - uncomment and check all UT //foreach (IUANodeBase node in allNodesInConcern) //{ // string message = $"{1594962400} the {node} is not added to the exported model"; // m_TraceEvent.WriteTraceMessage(TraceMessage.BuildErrorTraceMessage(BuildError.NonCategorized, message)); //} if (m_TraceEvent.Errors == 0) { string message = $"711552454, Finishing Validator.ValidateExportModel - the model contains {nodesCount} nodes and no errors/warnings reported"; m_TraceEvent.WriteTraceMessage(TraceMessage.DiagnosticTraceMessage(message)); } else { string message = $"226242104, Finishing Validator.ValidateExportModel - the model contains {nodesCount} nodes and {m_TraceEvent.Errors} errors reported."; m_TraceEvent.WriteTraceMessage(TraceMessage.BuildErrorTraceMessage(BuildError.NonCategorized, message)); } } #endregion private #region Unit Test [Conditional("DEBUG")] internal void UTAddressSpaceCheckConsistency(Action returnValue) { foreach (IUANodeContext _node in m_NodesDictionary.Values.Where(x => x.UANode is null)) returnValue(_node); } [Conditional("DEBUG")] internal void UTReferencesCheckConsistency(Action returnValue) { foreach (UAReferenceContext _node in m_References.Values) if (_node.SourceNode is null || _node.ParentNode is null || _node.TargetNode is null || _node.TypeNode is null) returnValue(_node?.SourceNode, _node?.ParentNode, _node?.TargetNode, _node?.TargetNode); } [Conditional("DEBUG")] internal void UTTryGetUANodeContext(NodeId nodeId, Action returnValue) { returnValue(TryGetUANodeContext(nodeId)); } [Conditional("DEBUG")] internal void UTGetReferences(NodeId source, Action returnValue) { foreach (UAReferenceContext _ref in m_References.Values.Where(x => (x.SourceNode.NodeIdContext == source))) returnValue(_ref); } [Conditional("DEBUG")] internal void UTValidateAndExportModel(int nameSpaceIndex, Action> returnValue) { returnValue((from _key in m_NodesDictionary.Values where _key.NodeIdContext.NamespaceIndex == nameSpaceIndex select _key)); } #endregion Unit Test } } ================================================ FILE: SemanticData/UANodeSetValidation/AddressSpaceFactory.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2022, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ using UAOOI.SemanticData.AddressSpace.Abstractions; using UAOOI.SemanticData.UANodeSetValidation.Diagnostic; namespace UAOOI.SemanticData.UANodeSetValidation { /// /// Class AddressSpaceFactory - provides entry point for UA Address Space Management /// public abstract class AddressSpaceFactory { /// /// Creates Address Space infrastructure exposed to the API clients as the interface using default tracing infrastructure. /// // TODO Define independent Address Space API #645 public static IAddressSpaceContext AddressSpace() { return new AddressSpaceContext(new AssemblyTraceSource()); } /// /// Creates Address Space infrastructure exposed to the API clients as the interface using default tracing infrastructure. /// internal static IAddressSpaceContext AddressSpace(IBuildErrorsHandling traceEvent) { return new AddressSpaceContext(traceEvent); } } } ================================================ FILE: SemanticData/UANodeSetValidation/DataSerialization/AttributeValues.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System.Collections.Generic; namespace UAOOI.SemanticData.UANodeSetValidation.DataSerialization { /// /// Flags that can be set for the EventNotifier attribute. /// /// /// Flags that can be set for the EventNotifier attribute. /// public static class EventNotifiers { /// /// The Object or View produces no event and has no event history. /// public const byte None = 0x0; /// /// The Object or View produces event notifications. /// public const byte SubscribeToEvents = 0x1; /// /// The Object has an event history which may be read. /// public const byte HistoryRead = 0x4; /// /// The Object has an event history which may be updated. /// public const byte HistoryWrite = 0x8; } /// /// Constants defined for the ValueRank attribute. /// /// /// Constants defined for the ValueRank attribute. /// public static class ValueRanks { /// /// The variable may be a scalar or a one dimensional array. /// public const int ScalarOrOneDimension = -3; /// /// The variable may be a scalar or an array of any dimension. /// public const int Any = -2; /// /// The variable is always a scalar. /// public const int Scalar = -1; /// /// The variable is always an array with one or more dimensions. /// public const int OneOrMoreDimensions = 0; /// /// The variable is always one dimensional array. /// public const int OneDimension = 1; /// /// The variable is always an array with two or more dimensions. /// public const int TwoDimensions = 2; /// /// Checks if the actual value rank is compatible with the expected value rank. /// public static bool IsValid(int actualValueRank, int expectedValueRank) { if (actualValueRank == expectedValueRank) { return true; } switch (expectedValueRank) { case ValueRanks.Any: { return true; } case ValueRanks.OneOrMoreDimensions: { if (actualValueRank < 0) { return false; } break; } case ValueRanks.ScalarOrOneDimension: { if (actualValueRank != ValueRanks.Scalar && actualValueRank != ValueRanks.OneDimension) { return false; } break; } default: { return false; } } return true; } /// /// Checks if the actual array diminesions is compatible with the expected value rank and array dimensions. /// public static bool IsValid(IList actualArrayDimensions, int valueRank, IList expectedArrayDimensions) { // check if parameter omitted. if (actualArrayDimensions == null || actualArrayDimensions.Count == 0) { return expectedArrayDimensions == null || expectedArrayDimensions.Count == 0; } // no array dimensions allowed for scalars. if (valueRank == ValueRanks.Scalar) { return false; } // check if one dimension required. if (valueRank == ValueRanks.OneDimension || valueRank == ValueRanks.ScalarOrOneDimension) { if (actualArrayDimensions.Count != 1) { return false; } } // check number of dimensions. if (valueRank != ValueRanks.OneOrMoreDimensions) { if (actualArrayDimensions.Count != valueRank) { return false; } } // nothing more to do if expected dimensions omitted. if (expectedArrayDimensions == null || expectedArrayDimensions.Count == 0) { return true; } // check dimensions. if (expectedArrayDimensions.Count != actualArrayDimensions.Count) { return false; } // check length of each dimension. for (int ii = 0; ii < expectedArrayDimensions.Count; ii++) { if (expectedArrayDimensions[ii] != actualArrayDimensions[ii] && expectedArrayDimensions[ii] != 0) { return false; } } // everything ok. return true; } } /// /// Constants defined for the MinimumSamplingInterval attribute. /// /// /// Constants defined for the MinimumSamplingInterval attribute. /// public static class MinimumSamplingIntervals { /// /// The server does not know how fast the value can be sampled. /// public const double Indeterminate = -1; /// /// TThe server can sample the variable continuously. /// public const double Continuous = 0; } }//namespace ================================================ FILE: SemanticData/UANodeSetValidation/DataSerialization/ExpandedNodeId.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2021, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ using System; using System.Collections.Generic; using System.Globalization; using System.Text; using UAOOI.SemanticData.AddressSpace.Abstractions; using UAOOI.SemanticData.BuildingErrorsHandling; namespace UAOOI.SemanticData.UANodeSetValidation.DataSerialization { /// /// Extends a node id by adding a complete namespace URI. /// /// /// Extends a node id by adding a complete namespace URI. /// public partial class ExpandedNodeId : IComparable, IFormattable, ICloneable { #region Constructors /// /// Initializes the object with default values. /// /// /// Creates a new instance of the object, accepting the default values. /// internal ExpandedNodeId() { Initialize(); } /// /// Creates a deep copy of the value. /// /// /// Creates a new instance of the object, while copying the properties of the specified object. /// /// The ExpandedNodeId to copy /// Thrown when the parameter is null public ExpandedNodeId(ExpandedNodeId value) { if (value == null) throw new ArgumentNullException("value"); m_namespaceUri = value.m_namespaceUri; if (value.m_nodeId != null) m_nodeId = value.m_nodeId; } /// /// Initializes an expanded node identifier with a node id. /// /// /// Creates a new instance of the object, while wrapping the specified . /// /// The to wrap public ExpandedNodeId(NodeId nodeId) { Initialize(); if (nodeId != null) m_nodeId = nodeId; } /// /// Initializes a new instance of the class. /// /// The identifier. /// The namespace index. /// The namespace URI. /// The server index. public ExpandedNodeId(object identifier, ushort namespaceIndex, string namespaceUri, uint serverIndex) { m_nodeId = new NodeId(identifier, namespaceIndex); m_namespaceUri = namespaceUri; m_serverIndex = serverIndex; } /// /// Initializes an expanded node identifier with a node id and a namespace URI. /// /// /// Creates a new instance of the object while allowing you to specify both the /// and the Namespace URI that applies to the NodeID. /// /// The namespace that this node belongs to /// The to wrap. public ExpandedNodeId(NodeId nodeId, string namespaceUri) { Initialize(); if (nodeId != null) m_nodeId = nodeId; if (!String.IsNullOrEmpty(namespaceUri)) SetNamespaceUri(namespaceUri); } /// /// Initializes an expanded node identifier with a node id and a namespace URI. /// /// /// Creates a new instance of the object while allowing you to specify both the /// and the Namespace URI that applies to the NodeID. /// /// The to wrap. /// The namespace that this node belongs to /// The server that the node belongs to public ExpandedNodeId(NodeId nodeId, string namespaceUri, uint serverIndex) { Initialize(); if (nodeId != null) m_nodeId = nodeId; if (!String.IsNullOrEmpty(namespaceUri)) SetNamespaceUri(namespaceUri); m_serverIndex = serverIndex; } /// /// Initializes a numeric node identifier. /// /// /// Creates a new instance of the object while accepting the numeric id/value of /// the NodeID we are wrapping. /// /// The numeric id of a node to wrap public ExpandedNodeId(uint value) { Initialize(); m_nodeId = new NodeId(value); } /// /// Initializes a guid node identifier with a namespace index. /// /// /// Creates a new instance of the class while accepting both the id and namespace /// of the node we are wrapping. /// /// The namspace index that this node belongs to /// The numeric id of the node we are wrapping public ExpandedNodeId(uint value, ushort namespaceIndex) { Initialize(); m_nodeId = new NodeId(value, namespaceIndex); } /// /// Initializes a guid node identifier with a namespace URI. /// /// /// Creates a new instance of the class while accepting both the numeric id of the /// node, along with the actual namespace that this node belongs to. /// /// The namespace that this node belongs to /// The numeric id of the node we are wrapping public ExpandedNodeId(uint value, string namespaceUri) { Initialize(); m_nodeId = new NodeId(value); SetNamespaceUri(namespaceUri); } /// /// Initializes a string node identifier with a namespace index. /// /// /// Creates a new instance of the class while allowing you to specify both the /// node and the namespace. /// /// The numeric index of the namespace within the table, that this node belongs to /// The string id/value of the node we are wrapping public ExpandedNodeId(string value, ushort namespaceIndex) { Initialize(); m_nodeId = new NodeId(value, namespaceIndex); } /// /// Initializes a string node identifier with a namespace URI. /// /// /// Creates a new instance of the class while allowing you to specify both the node and namespace /// /// The actual namespace URI that this node belongs to /// The string value/id of the node we are wrapping public ExpandedNodeId(string value, string namespaceUri) { Initialize(); m_nodeId = new NodeId(value, 0); SetNamespaceUri(namespaceUri); } /// /// Initializes a guid node identifier. /// /// /// Creates a new instance of the class while specifying the value /// of the node we are wrapping. /// /// The Guid value of the node we are wrapping public ExpandedNodeId(System.Guid value) { Initialize(); m_nodeId = new NodeId(value); } /// /// Initializes a guid node identifier. /// /// /// Creates a new instance of the class while allowing you to specify the byte[] id /// of the node. /// /// The id of the node we are wrapping public ExpandedNodeId(byte[] value) { Initialize(); m_nodeId = new NodeId(value); } /// /// Initializes an opaque node identifier with a namespace index. /// /// /// Creates a new instance of the class while allowing you to specify the node /// and namespace index. /// /// The index of the namespace that this node should belong to /// The id of the node we are wrapping public ExpandedNodeId(byte[] value, ushort namespaceIndex) { Initialize(); m_nodeId = new NodeId(value, namespaceIndex); } /// /// Initializes an opaque node identifier with a namespace index. /// /// /// Creates a new instance of the class while allowing you to specify the node and namespace. /// /// The namespace that this node belongs to /// The node we are wrapping public ExpandedNodeId(byte[] value, string namespaceUri) { Initialize(); m_nodeId = new NodeId(value); SetNamespaceUri(namespaceUri); } /// /// Initializes a node id by parsing a node id string. /// /// /// Creates a new instance of the class while allowing you to specify the id of the node. /// /// The textual id of the node being wrapped public ExpandedNodeId(string text) { Initialize(); m_nodeId = new NodeId(text); } /// /// Sets the private members to default values. /// /// /// Sets the private members to default values. /// private void Initialize() { m_nodeId = null; m_namespaceUri = null; m_serverIndex = 0; } #endregion Constructors #region Public Properties /// /// The index of the namespace URI in the server's namespace array. /// /// /// The index of the namespace URI in the server's namespace array. /// public virtual ushort NamespaceIndex { get { if (m_nodeId != null) return m_nodeId.NamespaceIndex; return 0; } } /// /// The type of node identifier used. /// /// /// The type of node identifier used. /// public IdType IdType { get { if (m_nodeId != null) return m_nodeId.IdType; return IdType.Numeric_0; } } /// /// The node identifier. /// /// /// Returns the node id in whatever form, i.e. /// string, Guid, byte[] or uint. /// public object IdentifierPart { get { if (m_nodeId != null) return m_nodeId.IdentifierPart; return null; } } /// /// The namespace that qualifies the node identifier. /// /// /// Returns the namespace that the node belongs to /// public string NamespaceUri => m_namespaceUri; /// /// The index of the server where the node exists. /// /// /// Returns the index of the server where the node resides /// public uint ServerIndex => m_serverIndex; /// /// Whether the object represents a Null NodeId. /// /// /// Returns whether or not the is null /// public bool IsNull { get { if (!String.IsNullOrEmpty(m_namespaceUri)) return false; if (m_serverIndex > 0) return false; return NodeId.IsNull(m_nodeId); } } /// /// Returns true if the expanded node id is an absolute identifier that contains a namespace URI instead of a server dependent index. /// /// /// Returns true if the expanded node id is an absolute identifier that contains a namespace URI instead of a server dependent index. /// public bool IsAbsolute { get { if (!String.IsNullOrEmpty(m_namespaceUri) || m_serverIndex > 0) return true; return false; } } /// /// Returns the inner node id. /// /// /// Returns the inner node id. /// internal NodeId InnerNodeId { get => m_nodeId; set => m_nodeId = value; } /// /// The node identifier formatted as a URI. /// /// /// The node identifier formatted as a URI. /// internal string IdentifierText { get => Format(); set { ExpandedNodeId nodeId = ExpandedNodeId.Parse(value); m_nodeId = nodeId.m_nodeId; m_namespaceUri = nodeId.m_namespaceUri; m_serverIndex = nodeId.m_serverIndex; } } #endregion Public Properties #region public string Format() /// /// Formats a expanded node id as a string. /// /// /// /// Formats a ExpandedNodeId as a string. ///
/// /// An example of this would be: ///
/// /// NodeId = "hello123"
/// NamespaceUri = "http://mycompany/"
///
This would translate into:
/// nsu=http://mycompany/;str=hello123
///
///
public string Format() { StringBuilder buffer = new StringBuilder(); Format(buffer); return buffer.ToString(); } /// /// Formats the node ids as string and adds it to the buffer. /// public void Format(StringBuilder buffer) { if (m_nodeId != null) Format(buffer, m_nodeId.IdentifierPart, m_nodeId.IdType, m_nodeId.NamespaceIndex, m_namespaceUri, m_serverIndex); else Format(buffer, null, IdType.Numeric_0, 0, m_namespaceUri, m_serverIndex); } /// /// Formats the node ids as string and adds it to the buffer. /// public static void Format(StringBuilder buffer, object identifier, IdType identifierType, ushort namespaceIndex, string namespaceUri, uint serverIndex) { if (serverIndex != 0) buffer.AppendFormat(CultureInfo.InvariantCulture, "svr={0};", serverIndex); if (!String.IsNullOrEmpty(namespaceUri)) { buffer.Append("nsu="); for (int ii = 0; ii < namespaceUri.Length; ii++) { char ch = namespaceUri[ii]; switch (ch) { case ';': case '%': { buffer.AppendFormat(CultureInfo.InvariantCulture, "%{0:X2}", Convert.ToInt16(ch)); break; } default: { buffer.Append(ch); break; } } } buffer.Append(";"); } NodeId.Format(buffer, identifier, identifierType, namespaceIndex); } #endregion public string Format() #region static Parse /// /// Parses the to recover an instance of the . /// /// Namespace is translated to get current index. /// The text. /// The current namespaces table. /// The target namespaces table. /// An instance of the recovered from the string representation. internal static ExpandedNodeId Parse(string text, INamespaceTable currentNamespaces, INamespaceTable targetNamespaces) { // parse the string. ExpandedNodeId nodeId = Parse(text); // lookup the namespace uri. string uri = nodeId.m_namespaceUri; if (nodeId.m_nodeId.NamespaceIndex != 0) uri = currentNamespaces.GetModelTableEntry(nodeId.m_nodeId.NamespaceIndex).ToString(); // translate the namespace Uri. ushort namespaceIndex = 0; if (!String.IsNullOrEmpty(uri)) { int index = targetNamespaces.GetURIIndex(new Uri(uri)); if (index == -1) throw GetResultException(String.Format("Cannot map namespace URI onto an index in the target namespace table: {0}", uri)); namespaceIndex = (ushort)index; } // check for absolute node id. if (nodeId.ServerIndex != 0) { nodeId.m_nodeId = new NodeId(nodeId.m_nodeId.IdentifierPart, 0); nodeId.m_namespaceUri = uri; return nodeId; } // local node id. nodeId.m_nodeId = new NodeId(nodeId.m_nodeId.IdentifierPart, namespaceIndex); nodeId.m_namespaceUri = null; return nodeId; } /// /// Parses a expanded node id string and returns a node id object. /// /// /// Parses a ExpandedNodeId String and returns a NodeId object /// /// The ExpandedNodeId value as a string. /// Thrown under a variety of circumstances, each time with a specific message. public static ExpandedNodeId Parse(string text) { try { // check for null. if (String.IsNullOrEmpty(text)) return ExpandedNodeId.Null; uint serverIndex = 0; // parse the server index if present. if (text.StartsWith("svr=", StringComparison.Ordinal)) { int index = text.IndexOf(';'); if (index == -1) throw new ServiceResultException(TraceMessage.BuildErrorTraceMessage(BuildError.ExpandedNodeIdInvalidSyntax, "Invalid server index."), "ExpandedNodeId invalid syntax: invalid server index."); serverIndex = Convert.ToUInt32(text.Substring(4, index - 4), CultureInfo.InvariantCulture); text = text.Substring(index + 1); } string namespaceUri = null; // parse the namespace uri if present. if (text.StartsWith("nsu=", StringComparison.Ordinal)) { int index = text.IndexOf(';'); if (index == -1) throw GetResultException("Invalid namespace uri."); StringBuilder buffer = new StringBuilder(); UnescapeUri(text, 4, index, buffer); namespaceUri = buffer.ToString(); text = text.Substring(index + 1); } // parse the node id. NodeId nodeId = NodeId.Parse(text); // crete the node id. return new ExpandedNodeId(nodeId, namespaceUri, serverIndex); } catch (Exception _ex) { throw GetResultException(String.Format("Cannot parse expanded node id text: '{0}' because of error {1}", text, _ex.Message)); } } /// /// Unescapes any reserved characters in the uri. /// [Obsolete("Replace by WebUtility.HtmlDecode")] internal static void UnescapeUri(string text, int start, int index, StringBuilder buffer) { for (int ii = start; ii < index; ii++) { char ch = text[ii]; switch (ch) { case '%': { if (ii + 2 >= index) throw GetResultException("Invalid escaped character in namespace uri."); ushort value = 0; int digit = s_HexDigits.IndexOf(Char.ToUpperInvariant(text[++ii])); if (digit == -1) throw GetResultException("Invalid escaped character in namespace uri."); value += (ushort)digit; value <<= 4; digit = s_HexDigits.IndexOf(Char.ToUpperInvariant(text[++ii])); if (digit == -1) throw GetResultException("Invalid escaped character in namespace uri."); value += (ushort)digit; char unencodedChar = Convert.ToChar(value); buffer.Append(unencodedChar); break; } default: { buffer.Append(ch); break; } } } } #endregion static Parse #region IComparable Members /// /// Compares the current instance to the object. /// /// /// Compares the current instance to the object. /// public int CompareTo(object obj) { // check for null. if (Object.ReferenceEquals(obj, null)) return -1; // check for reference comparisons. if (Object.ReferenceEquals(this, obj)) return 0; // just compare node ids. if (String.IsNullOrEmpty(m_namespaceUri) && this.m_nodeId != null) return this.m_nodeId.CompareTo(obj); NodeId nodeId = obj as NodeId; // check for expanded node ids. ExpandedNodeId expandedId = obj as ExpandedNodeId; if (expandedId != null) { if (this.ServerIndex != expandedId.ServerIndex) return this.ServerIndex.CompareTo(expandedId.ServerIndex); if (this.NamespaceUri != expandedId.NamespaceUri) { if (this.NamespaceUri != null) return String.CompareOrdinal(NamespaceUri, expandedId.NamespaceUri); return -1; } nodeId = expandedId.m_nodeId; } // check for null. if (this.m_nodeId != null) return this.m_nodeId.CompareTo(nodeId); // compare node ids. return (nodeId == null) ? 0 : -1; } /// /// Returns true if a is greater than b. /// /// /// Returns true if a is greater than b. /// public static bool operator >(ExpandedNodeId value1, object value2) { if (!Object.ReferenceEquals(value1, null)) return value1.CompareTo(value2) > 0; return false; } /// /// Returns true if a is less than b. /// /// /// Returns true if a is less than b. /// public static bool operator <(ExpandedNodeId value1, object value2) { if (!Object.ReferenceEquals(value1, null)) return value1.CompareTo(value2) < 0; return true; } #endregion IComparable Members #region Comparison Functions /// /// Determines if the specified object is equal to the ExpandedNodeId. /// /// /// Determines if the specified object is equal to the ExpandedNodeId. /// public override bool Equals(object obj) { return (CompareTo(obj) == 0); } /// /// Returns a unique hashcode for the ExpandedNodeId /// /// /// Returns a unique hashcode for the ExpandedNodeId /// public override int GetHashCode() { if (m_nodeId == null) return 0; return m_nodeId.GetHashCode(); } /// /// Returns true if the objects are equal. /// /// /// Returns true if the objects are equal. /// public static bool operator ==(ExpandedNodeId value1, object value2) { if (Object.ReferenceEquals(value1, null)) return Object.ReferenceEquals(value2, null); return (value1.CompareTo(value2) == 0); } /// /// Returns true if the objects are not equal. /// /// /// Returns true if the objects are not equal. /// public static bool operator !=(ExpandedNodeId value1, object value2) { if (Object.ReferenceEquals(value1, null)) return !Object.ReferenceEquals(value2, null); return (value1.CompareTo(value2) != 0); } #endregion Comparison Functions #region IFormattable Members /// /// Returns the string representation of an ExpandedNodeId. /// /// /// Returns the string representation of an ExpandedNodeId. /// /// The as a formatted string /// (Unused) The format string. /// (Unused) The format-provider. /// Thrown when the 'format' parameter is NOT null. So leave that parameter null. public string ToString(string format, IFormatProvider formatProvider) { if (format == null) return Format(); throw new FormatException(String.Format("Invalid format string: '{0}'.", format)); } #endregion IFormattable Members #region ICloneable Members /// /// Makes a deep copy of the object. /// /// /// Returns a reference to *this* object. This means that no copy is being made of this object. /// public object Clone() { // this object cannot be altered after it is created so no new allocation is necessary. return this; } #endregion ICloneable Members #region Public Methods /// /// Returns the string representation of am ExpandedNodeId. /// /// /// Returns the string representation of am ExpandedNodeId. /// public override string ToString() { return ToString(null, null); } /// /// Converts an expanded node id to a node id using a namespace table. /// /// /// Converts an to a using a namespace table. /// /// The namespace table that contains all the namespaces needed to resolve the namespace index as encoded within this object. /// The ExpandedNodeId to convert to a NodeId internal static NodeId ToNodeId(ExpandedNodeId nodeId, INamespaceTable namespaceTable) { // check for null. if (nodeId == null) return null; // return a reference to the internal node id object. if (String.IsNullOrEmpty(nodeId.m_namespaceUri) && nodeId.m_serverIndex == 0) return nodeId.m_nodeId; // create copy. NodeId localId = new NodeId(nodeId.m_nodeId); int index = -1; if (namespaceTable != null) index = namespaceTable.GetURIIndex(new Uri(nodeId.NamespaceUri)); if (index < 0) return null; localId.SetNamespaceIndex((ushort)index); return localId; } /// /// Updates the namespace index. /// /// /// Updates the namespace index. /// internal void SetNamespaceIndex(ushort namespaceIndex) { m_nodeId.SetNamespaceIndex(namespaceIndex); m_namespaceUri = null; } /// /// Updates the namespace uri. /// internal void SetNamespaceUri(string uri) { m_nodeId.SetNamespaceIndex(0); m_namespaceUri = uri; } /// /// Updates the server index. /// internal void SetServerIndex(uint serverIndex) { m_serverIndex = serverIndex; } #endregion Public Methods #region Static Members /// /// Parses an absolute NodeId formatted as a string and converts it a local NodeId. /// /// The current namespace table. /// The text to parse. /// The local identifier. /// Thrown if the namespace URI is not in the namespace table. internal static NodeId Parse(string text, INamespaceTable namespaceUris) { ExpandedNodeId nodeId = ExpandedNodeId.Parse(text); if (!nodeId.IsAbsolute) return nodeId.InnerNodeId; NodeId localId = ExpandedNodeId.ToNodeId(nodeId, namespaceUris); if (localId == null) throw new ServiceResultException( TraceMessage.BuildErrorTraceMessage(BuildError.ExpandedNodeIdInvalidSyntax, String.Format("NamespaceUri ({0}) is not in the namespace table.", nodeId.NamespaceUri)), "ExpandedNodeId invalid syntax: namespace URI is not in the namespace table. "); return localId; } /// /// Converts an ExpandedNodeId to a NodeId. /// /// /// Converts an ExpandedNodeId to a NodeId. /// /// Thrown if the ExpandedNodeId is an absolute node identifier. public static explicit operator NodeId(ExpandedNodeId value) { if (value == null) return null; if (value.IsAbsolute) throw new InvalidCastException("Cannot cast an absolute ExpandedNodeId to a NodeId. Use ExpandedNodeId.ToNodeId instead."); return value.InnerNodeId; } /// /// Converts an integer to a numeric node identifier. /// /// /// Converts an integer to a numeric node identifier. /// public static implicit operator ExpandedNodeId(uint value) { return new ExpandedNodeId(value); } /// /// Converts a guid to a guid node identifier. /// /// /// Converts a guid to a guid node identifier. /// public static implicit operator ExpandedNodeId(Guid value) { return new ExpandedNodeId(value); } /// /// Converts a byte array to an opaque node identifier. /// /// /// Converts a byte array to an opaque node identifier. /// public static implicit operator ExpandedNodeId(byte[] value) { return new ExpandedNodeId(value); } /// /// Parses a node id string and initializes a node id. /// /// /// Parses a node id string and initializes a node id. /// public static implicit operator ExpandedNodeId(string text) { return new ExpandedNodeId(text); } /// /// Converts a NodeId to an ExpandedNodeId /// /// /// Converts a NodeId to an ExpandedNodeId /// public static implicit operator ExpandedNodeId(NodeId nodeId) { return new ExpandedNodeId(nodeId); } /// /// Returns an instance of a null ExpandedNodeId. /// public static ExpandedNodeId Null => s_Null; #endregion Static Members #region private //fields private static readonly ExpandedNodeId s_Null = new ExpandedNodeId(); private NodeId m_nodeId; private string m_namespaceUri; private uint m_serverIndex; /// /// The set of hexadecimal digits used for decoding escaped URIs. /// private const string s_HexDigits = "0123456789ABCDEF"; //methods private static Exception GetResultException(string _msg) { BuildError _be = BuildError.ExpandedNodeIdInvalidSyntax; Exception _ex = new ServiceResultException(TraceMessage.BuildErrorTraceMessage(_be, _msg), _be.ToString() + _msg); return _ex; } #endregion private } /// /// A collection of ExpandedNodeId objects. /// public partial class ExpandedNodeIdCollection : List, ICloneable { /// /// Initializes an empty collection. /// /// /// Creates a new [empty] collection. /// public ExpandedNodeIdCollection() { } /// /// Initializes the collection from another collection. /// /// /// Initializes the collection from another collection. /// public ExpandedNodeIdCollection(IEnumerable collection) : base(collection) { } /// /// Initializes the collection with the specified capacity. /// /// /// Initializes the collection with the specified capacity. /// public ExpandedNodeIdCollection(int capacity) : base(capacity) { } /// /// Converts an array to a collection. /// /// /// This static method converts an array of objects to /// an . /// /// An array of values to return as a collection public static ExpandedNodeIdCollection ToExpandedNodeIdCollection(ExpandedNodeId[] values) { if (values != null) return new ExpandedNodeIdCollection(values); return new ExpandedNodeIdCollection(); } /// /// Converts an array to a collection. /// /// /// Converts an array to a collection. /// /// An array of values to return as a collection public static implicit operator ExpandedNodeIdCollection(ExpandedNodeId[] values) { return ToExpandedNodeIdCollection(values); } /// /// Creates a deep copy of the collection. /// /// /// Creates a deep copy of the collection. /// public object Clone() { ExpandedNodeIdCollection _cloneCollection = new ExpandedNodeIdCollection(this.Count); foreach (ExpandedNodeId element in this) _cloneCollection.Add((ExpandedNodeId)element.Clone()); return _cloneCollection; } }//class }//namespace ================================================ FILE: SemanticData/UANodeSetValidation/DataSerialization/Extensions.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2022, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ using System; using UAOOI.SemanticData.BuildingErrorsHandling; namespace UAOOI.SemanticData.UANodeSetValidation.DataSerialization { /// /// Class Extensions - contains helper functions to parse values of built-in data types. /// internal static class Extensions { internal static QualifiedName ParseBrowseName(this string qualifiedName, NodeId nodeId, Action traceEvent) { if ((nodeId == null) || nodeId == NodeId.Null) throw new ArgumentNullException(nameof(nodeId)); QualifiedName qualifiedNameToReturn; if (string.IsNullOrEmpty(qualifiedName)) { qualifiedNameToReturn = nodeId.RandomQualifiedName(); traceEvent(TraceMessage.BuildErrorTraceMessage(BuildError.EmptyBrowseName, $"new identifier {qualifiedNameToReturn.ToString()} is generated to proceed.")); } else try { qualifiedNameToReturn = QualifiedName.Parse(qualifiedName); } catch (Exception ex) { qualifiedNameToReturn = nodeId.RandomQualifiedName(); traceEvent(TraceMessage.BuildErrorTraceMessage(BuildError.QualifiedNameInvalidSyntax, $"Error message: {ex.Message} - new identifier {qualifiedNameToReturn.ToString()} is generated to proceed.")); } return qualifiedNameToReturn; } //Enhance/Improve NodeId parser #541 rewrite and add to UT /// /// Parses the node identifier with the syntax defined in Part 3-8.2 and Part 6-5.3.1.10 /// /// The node identifier. /// The trace event. /// NodeId. internal static NodeId ParseNodeId(this string nodeId, Action traceEvent) { NodeId nodeId2Return = null; try { nodeId2Return = NodeId.Parse(nodeId); } catch (ServiceResultException se) { traceEvent(se.TraceMessage); } if (nodeId2Return == null) { nodeId2Return = new NodeId(System.Guid.NewGuid()); traceEvent(TraceMessage.DiagnosticTraceMessage($"Generated random NodeId = {nodeId2Return.ToString()}")); } return nodeId2Return; } /// /// Gets the as uint number. /// /// The node identifier. /// Returns as the System.UInt32. /// NodeId must not be null /// To get the identifier as uint the NodeId must be Numeric internal static uint? UintIdentifier(this NodeId nodeId) { if (nodeId == null || nodeId.IdType != IdType.Numeric_0) return new Nullable(); return (uint)nodeId.IdentifierPart; } /// /// Gets the supports events. /// /// The event notifier. The EventNotifier represents the mandatory EventNotifier attribute of the Object NodeClass and identifies whether /// the object can be used to subscribe to events or to read and write the history of the events. /// The trace event. /// true if supports events, false otherwise. internal static bool? ParseSupportsEvents(this byte eventNotifier, Action traceEvent) { if (eventNotifier > EventNotifiers.SubscribeToEvents + EventNotifiers.HistoryRead + EventNotifiers.HistoryWrite) traceEvent(TraceMessage.BuildErrorTraceMessage(BuildError.WrongEventNotifier, String.Format("EventNotifier value: {0}", eventNotifier))); else if (eventNotifier > EventNotifiers.SubscribeToEvents) traceEvent(TraceMessage.BuildErrorTraceMessage(BuildError.EventNotifierValueNotSupported, String.Format("EventNotifier value: {0}", eventNotifier))); return eventNotifier != 0 ? (eventNotifier & EventNotifiers.SubscribeToEvents) != 0 : new Nullable(); } internal static uint? ParseAccessLevel(this uint accessLevel, Action traceEvent) { uint? _ret = new Nullable(); if (accessLevel <= 0x7F) _ret = accessLevel; else traceEvent(TraceMessage.BuildErrorTraceMessage(BuildError.WrongAccessLevel, String.Format("The AccessLevel value {0:X} is not supported", accessLevel))); return _ret; } /// /// Gets the value rank. /// /// The value rank. /// An delegate is used to trace event as the . /// Returns validated value. internal static int? ParseValueRank(this int valueRank, Action traceEvent) { int? _vr = new Nullable(); if (valueRank < -2) traceEvent(TraceMessage.BuildErrorTraceMessage(BuildError.WrongValueRank, String.Format("The value {0} is not supported", valueRank))); else if (valueRank == -3) traceEvent(TraceMessage.BuildErrorTraceMessage(BuildError.WrongValueRank, String.Format("The value {0} is not supported", valueRank))); else if (valueRank != -1) _vr = valueRank; return _vr; } #region private private static QualifiedName RandomQualifiedName(this NodeId nodeId) { return new QualifiedName() { Name = $"EmptyBrowseName_{nodeId.IdentifierPart.ToString()}_{RandomNumber.Next(-9999, 0)}", NamespaceIndex = nodeId.NamespaceIndex, NamespaceIndexSpecified = true, }; } private static Random RandomNumber = new Random(); #endregion private } } ================================================ FILE: SemanticData/UANodeSetValidation/DataSerialization/NodeId.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2022, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ using System; using System.Globalization; using System.Text; using UAOOI.SemanticData.AddressSpace.Abstractions; using UAOOI.SemanticData.BuildingErrorsHandling; namespace UAOOI.SemanticData.UANodeSetValidation.DataSerialization { /// /// Stores an identifier for a node in a server's address space. /// /// /// /// Please refer to OPC Specifications: /// /// Address Space Model section 8.2 /// Address Space Model section 5.2.2 /// /// /// /// Stores the id of a Node, which resides within the server's address space. ///
/// /// The NodeId can be either: /// /// /// /// /// [] /// ///
/// /// Important: Keep in mind that the actual ID's of nodes should be unique such that no two /// nodes within an address-space share the same ID's. /// /// /// The NodeId can be assigned to a particular namespace index. This index is merely just a number and does /// not represent some index within a collection that this node has any knowledge of. The assumption is /// that the host of this object will manage that directly. ///
///
public partial class NodeId : IFormattable, IEquatable, IComparable { #region constructors /// /// Initializes the object with default values. /// /// /// Creates a new instance of the class which will have the default values. The actual /// NodeId will need to be defined as this constructor does not specify the id. /// internal NodeId() { m_namespaceIndex = 0; m_identifierType = IdType.Numeric_0; m_identifierPart = null; m_GlobalHashCode++; } /// /// Creates a deep copy of the value. /// /// /// Creates a new NodeId by copying the properties of the node specified in the parameter. /// /// The NodeId object whose properties will be copied. /// Thrown when value is null public NodeId(NodeId value) { if (value == null) throw new ArgumentNullException("value"); m_namespaceIndex = value.m_namespaceIndex; m_identifierType = value.m_identifierType; m_identifierPart = value.MemberwiseClone(); } /// /// Initializes a numeric node identifier. /// /// /// Creates a new NodeId that will have a numeric (unsigned-int) id /// /// The numeric value of the id public NodeId(uint value) { m_namespaceIndex = 0; m_identifierType = IdType.Numeric_0; m_identifierPart = value; } /// /// Initializes a guid node identifier with a namespace index. /// /// /// Creates a new NodeId that will use a numeric (unsigned int) for its Id, but also /// specifies which namespace this node should belong to. /// /// The new (numeric) Id for the node being created /// The index of the namespace that this node should belong to /// public NodeId(uint value, ushort namespaceIndex) { m_namespaceIndex = namespaceIndex; m_identifierType = IdType.Numeric_0; m_identifierPart = value; } /// /// Initializes a string node identifier with a namespace index. /// /// /// Creates a new NodeId that will use a string for its Id, but also /// specifies if the Id is a URI, and which namespace this node belongs to. /// /// The new (string) Id for the node being created /// The index of the namespace that this node belongs to public NodeId(string value, ushort namespaceIndex) { m_namespaceIndex = namespaceIndex; m_identifierType = IdType.String_1; m_identifierPart = value; } /// /// Initializes a guid node identifier. /// /// /// Creates a new node whose Id will be a . /// /// The new Guid value of this nodes Id. public NodeId(System.Guid value) { m_namespaceIndex = 0; m_identifierType = IdType.Guid_2; m_identifierPart = value; } /// /// Initializes a guid node identifier. /// /// /// Creates a new node whose Id will be a . /// /// The new Guid value of this nodes Id. /// The index of the namespace that this node belongs to public NodeId(global::System.Guid value, ushort namespaceIndex) { m_namespaceIndex = namespaceIndex; m_identifierType = IdType.Guid_2; m_identifierPart = value; } /// /// Initializes a guid node identifier. /// /// /// Creates a new node whose Id will be a series of . /// /// An array of that will become this Node's ID public NodeId(byte[] value) { m_namespaceIndex = 0; m_identifierType = IdType.Opaque_3; m_identifierPart = null; if (value != null) { byte[] copy = new byte[value.Length]; Array.Copy(value, copy, value.Length); m_identifierPart = copy; } } /// /// Initializes an opaque node identifier with a namespace index. /// /// /// Creates a new node whose Id will be a series of , while specifying /// the index of the namespace that this node belongs to. /// /// An array of that will become this Node's ID /// The index of the namespace that this node belongs to public NodeId(byte[] value, ushort namespaceIndex) { m_namespaceIndex = namespaceIndex; m_identifierType = IdType.Opaque_3; m_identifierPart = null; if (value != null) { byte[] copy = new byte[value.Length]; Array.Copy(value, copy, value.Length); m_identifierPart = copy; } } /// /// Initializes a node id by parsing a node id string. /// /// /// Creates a new node with a String id. /// /// The string id of this new node public NodeId(string text) { NodeId nodeId = NodeId.Parse(text); m_namespaceIndex = nodeId.NamespaceIndex; m_identifierType = nodeId.IdType; m_identifierPart = nodeId.IdentifierPart; } /// /// Initializes a node identifier with a namespace index. /// /// /// Throws an exception if the identifier type is not supported. /// /// The identifier /// The index of the namespace that qualifies the node public NodeId(object value, ushort namespaceIndex) { m_namespaceIndex = namespaceIndex; if (value is uint) { SetIdentifier(IdType.Numeric_0, value); return; } if (value == null || value is string) { SetIdentifier(IdType.String_1, value); return; } if (value is System.Guid) { SetIdentifier(IdType.Guid_2, value); return; } if (value is byte[]) { SetIdentifier(IdType.Opaque_3, value); return; } } #endregion constructors #region public /// /// Converts an integer to a numeric node identifier. /// /// The to compare this node to. /// The object as the result of the conversion. /// Converts an integer to a numeric node identifier for comparisons. public static implicit operator NodeId(uint value) { return new NodeId(value); } /// /// Returns an instance of a null NodeId. /// /// /// Checks if the node id represents a 'Null' node id. /// /// /// Returns a true/false value to indicate if the specified NodeId is null. /// /// The NodeId to validate public static bool IsNull(NodeId nodeId) { if (nodeId == null) return true; return nodeId.IsNullNodeId; } /// /// Gets the representing null. /// /// The null. public static NodeId Null => s_Null; /// /// Parses a node id string and returns a node id object. /// /// /// Parses a NodeId String and returns a NodeId object /// /// The NodeId value as a string. /// Thrown under a variety of circumstances, each time with a specific message. public static NodeId Parse(string text) { try { if (String.IsNullOrEmpty(text)) return NodeId.Null; ushort namespaceIndex = 0; // parse the namespace index if present. if (text.StartsWith("ns=", StringComparison.Ordinal)) { int index = text.IndexOf(';'); if (index == -1) throw new ServiceResultException (TraceMessage.BuildErrorTraceMessage(BuildError.NodeIdInvalidSyntax, String.Format("Cannot parse node id text: '{0}'", text)), "BuildError_BadNodeIdInvalid"); namespaceIndex = Convert.ToUInt16(text.Substring(3, index - 3), CultureInfo.InvariantCulture); text = text.Substring(index + 1); } // parse numeric node identifier. if (text.StartsWith("i=", StringComparison.Ordinal)) return new NodeId(Convert.ToUInt32(text.Substring(2), CultureInfo.InvariantCulture), namespaceIndex); // parse string node identifier. if (text.StartsWith("s=", StringComparison.Ordinal)) return new NodeId(text.Substring(2), namespaceIndex); // parse GUID node identifier. if (text.StartsWith("g=", StringComparison.Ordinal)) return new NodeId(new System.Guid(text.Substring(2)), namespaceIndex); // parse opaque node identifier. if (text.StartsWith("b=", StringComparison.Ordinal)) return new NodeId(Convert.FromBase64String(text.Substring(2)), namespaceIndex); // treat as a string identifier if a namespace was specified. if (namespaceIndex != 0) return new NodeId(text, namespaceIndex); // treat as URI identifier. return new NodeId(text, 0); } catch (Exception e) { throw new ServiceResultException (TraceMessage.BuildErrorTraceMessage(BuildError.NodeIdInvalidSyntax, String.Format("Cannot parse node id text: '{0}'", text)), "BuildError_BadNodeIdInvalid", e); } } /// /// Updates the namespace index. /// internal void SetNamespaceIndex(ushort value) { m_namespaceIndex = value; } /// /// Updates the identifier. /// internal void SetIdentifier(IdType idType, object value) { m_identifierType = idType; switch (idType) { case IdType.Opaque_3: throw new NotImplementedException(" m_identifier = Utils.Clone(value);"); default: m_identifierPart = value; break; } } /// /// Updates the identifier. /// internal void SetIdentifier(string value, IdType idType) { m_identifierType = idType; SetIdentifier(IdType.String_1, value); } /// /// The index of the namespace URI in the server's namespace array. /// /// /// The index of the namespace URI in the server's namespace array. /// public ushort NamespaceIndex => m_namespaceIndex; /// /// The type of node identifier used. /// /// /// Returns the type of Id, whether it is: /// /// /// /// /// [] /// /// /// public IdType IdType => m_identifierType; /// /// The node identifier. /// /// /// Returns the Id in its native format, i.e. UInt, GUID, String etc. /// public object IdentifierPart { get { if (m_identifierPart == null) { switch (m_identifierType) { case IdType.Numeric_0: { return (uint)0; } case IdType.Guid_2: { return global::System.Guid.Empty; } } } return m_identifierPart; } } /// /// Whether the object represents a Null NodeId. /// /// /// Whether the NodeId represents a Null NodeId. /// public bool IsNullNodeId { get { // non-zero namespace means it can't be null. if (m_namespaceIndex != 0) return false; // the definition of a null identifier depends on the identifier type. if (IdentifierPart == null) return true; bool _ret = true; switch (m_identifierType) { case IdType.Numeric_0: _ret = !!IdentifierPart.Equals((uint)0); break; case IdType.String_1: _ret = String.IsNullOrEmpty((string)IdentifierPart); break; case IdType.Guid_2: _ret = IdentifierPart.Equals(System.Guid.Empty); break; case IdType.Opaque_3: _ret = !(IdentifierPart != null && ((byte[])IdentifierPart).Length > 0); break; } // must be null. return _ret; } } /// /// Returns true if the objects are equal. /// /// /// Returns true if the objects are equal. /// public static bool operator ==(NodeId value1, object value2) { if (Object.ReferenceEquals(value1, null)) return Object.ReferenceEquals(value2, null); return (value1.CompareTo(value2) == 0); } /// /// Returns true if the objects are not equal. /// /// /// Returns true if the objects are not equal. /// public static bool operator !=(NodeId value1, object value2) { if (Object.ReferenceEquals(value1, null)) return !Object.ReferenceEquals(value2, null); return (value1.CompareTo(value2) != 0); } /// /// Converts an identifier and a namespaceUri to a local NodeId using the namespaceTable. /// /// The identifier for the node. /// The URI to look up. /// The table to use for the URI lookup. /// A local NodeId /// Thrown when the namespace cannot be found public static NodeId Create(object identifier, string namespaceUri, INamespaceTable namespaceTable) { int index = -1; if (namespaceTable != null) index = namespaceTable.GetURIIndex(new Uri(namespaceUri)); if (index < 0) throw new ServiceResultException(TraceMessage.BuildErrorTraceMessage(BuildError.NodeIdNotDefined, $"NamespaceUri ({namespaceUri}) is not in the namespace table."), "BuildError_BadNodeIdInvalid"); return new NodeId(identifier, (ushort)index); } #region Format() /// /// Formats a node id as a string. /// /// /// /// Formats a NodeId as a string. ///
/// /// An example of this would be: ///
/// /// NodeId = "hello123"
/// NamespaceId = 1;
///
This would translate into:
/// ns=1;s=hello123 ///
///
public string Format() { StringBuilder buffer = new StringBuilder(); Format(buffer); return buffer.ToString(); } /// /// Formats the NodeId as a string and appends it to the buffer. /// public void Format(StringBuilder buffer) { Format(buffer, IdentifierPart, m_identifierType, m_namespaceIndex); } /// /// Formats the NodeId as a string and appends it to the buffer. /// public static void Format(StringBuilder buffer, object identifier, IdType identifierType, ushort namespaceIndex) { if (namespaceIndex != 0) buffer.AppendFormat(CultureInfo.InvariantCulture, "ns={0};", namespaceIndex); // add identifier type prefix. switch (identifierType) { case IdType.Numeric_0: buffer.Append("i="); break; case IdType.String_1: buffer.Append("s="); break; case IdType.Guid_2: buffer.Append("g="); break; case IdType.Opaque_3: buffer.Append("b="); break; } // add identifier. FormatIdentifier(buffer, identifier, identifierType); } #endregion Format() #endregion public #region IComparable /// /// Compares the current instance to the object. /// /// /// Enables this object type to be compared to other types of object. /// public int CompareTo(object obj) { // check for null. if (Object.ReferenceEquals(obj, null)) return -1; // check for reference comparisons. if (Object.ReferenceEquals(this, obj)) return 0; ushort namespaceIndex = this.m_namespaceIndex; IdType idType = this.m_identifierType; object id = null; // check for expanded node ids. NodeId nodeId = obj as NodeId; if (nodeId != null) { namespaceIndex = nodeId.NamespaceIndex; idType = nodeId.IdType; id = nodeId.IdentifierPart; } else { UInt32? uid = obj as UInt32?; // check for numeric contains. if (uid != null) { if (namespaceIndex != 0 || idType != IdType.Numeric_0) return -1; uint id1 = (uint)m_identifierPart; uint id2 = uid.Value; if (id1 == id2) return 0; return (id1 < id2) ? -1 : +1; } ExpandedNodeId expandedId = obj as ExpandedNodeId; if (!Object.ReferenceEquals(expandedId, null)) { if (expandedId.IsAbsolute) return -1; namespaceIndex = expandedId.NamespaceIndex; idType = expandedId.IdType; id = expandedId.IdentifierPart; } } // check for different namespace. if (namespaceIndex != m_namespaceIndex) return (m_namespaceIndex < namespaceIndex) ? -1 : +1; // check for different id type. if (idType != m_identifierType) return (m_identifierType < idType) ? -1 : +1; // check for two nulls. if (IdentifierPart == null && id == null) return 0; // check for a single null. if (IdentifierPart == null && id != null) { switch (idType) { case IdType.String_1: string stringId = id as string; if (stringId.Length == 0) return 0; break; case IdType.Opaque_3: byte[] opaqueId = id as byte[]; if (opaqueId.Length == 0) return 0; break; case IdType.Numeric_0: uint? numericId = id as uint?; if (numericId.Value == 0) return 0; break; } return -1; } else if (IdentifierPart != null && id == null) // check for a single null. { switch (idType) { case IdType.String_1: string stringId = IdentifierPart as string; if (stringId.Length == 0) return 0; break; case IdType.Opaque_3: byte[] opaqueId = IdentifierPart as byte[]; if (opaqueId.Length == 0) return 0; break; case IdType.Numeric_0: uint? numericId = IdentifierPart as uint?; if (numericId.Value == 0) return 0; break; } return +1; } // compare ids. switch (idType) { case IdType.Numeric_0: { uint id1 = (uint)IdentifierPart; uint id2 = (uint)id; if (id1 == id2) return 0; return (id1 < id2) ? -1 : +1; } case IdType.String_1: { string id1 = (string)IdentifierPart; string id2 = (string)id; return String.CompareOrdinal(id1, id2); } case IdType.Guid_2: { System.Guid id1 = (System.Guid)IdentifierPart; return id1.CompareTo(id); } case IdType.Opaque_3: { byte[] id1 = (byte[])IdentifierPart; byte[] id2 = (byte[])id; if (id1.Length == id2.Length) { for (int ii = 0; ii < id1.Length; ii++) if (id1[ii] != id2[ii]) return (id1[ii] < id2[ii]) ? -1 : +1; return 0; } return (id1.Length < id2.Length) ? -1 : +1; } } // invalid id type - should never get here. return +1; } #endregion IComparable #region IFormattable /// /// Returns the string representation of a NodeId. /// /// /// Returns the string representation of a NodeId. This is the same as calling /// . /// /// Thrown when the format is not null public string ToString(string format, IFormatProvider formatProvider) { if (format == null) return String.Format(formatProvider, "{0}", Format()); throw new FormatException(String.Format("Invalid format string: '{0}'.", format)); } #endregion IFormattable #region object /// /// Returns a hash code for this instance. /// /// A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. public override int GetHashCode() { return m_HashCode; } /// /// Returns a that represents this instance. /// /// A that represents this instance. public override string ToString() { return Format(); } #endregion object #region private /// /// Formats a node id as a string. /// private static void FormatIdentifier(StringBuilder buffer, object identifier, IdType identifierType) { switch (identifierType) { case IdType.Numeric_0: if (identifier == null) { buffer.Append('0'); break; } buffer.AppendFormat(CultureInfo.InvariantCulture, "{0}", identifier); break; case IdType.String_1: buffer.AppendFormat(CultureInfo.InvariantCulture, "{0}", identifier); break; case IdType.Guid_2: if (identifier == null) { buffer.Append(System.Guid.Empty); break; } buffer.AppendFormat(CultureInfo.InvariantCulture, "{0}", identifier); break; case IdType.Opaque_3: if (identifier != null) buffer.AppendFormat(CultureInfo.InvariantCulture, "{0}", Convert.ToBase64String((byte[])identifier)); break; } } private ushort m_namespaceIndex; private IdType m_identifierType; private object m_identifierPart; private static NodeId s_Null = new NodeId(); private static int m_GlobalHashCode = 0; private int m_HashCode = m_GlobalHashCode; #endregion private #region IEquatable /// /// Indicates whether the current object is equal to another object of the same type. /// /// An object to compare with this object. /// true if the current object is equal to the parameter; otherwise, false. public bool Equals(NodeId other) { return this.CompareTo(other) == 0; } #endregion IEquatable } } ================================================ FILE: SemanticData/UANodeSetValidation/DataSerialization/Opc.Ua.Types.xsd ================================================ A simple enumerated type used for testing. A complex type containing all possible scalar types used for testing. A complex type containing all possible array types used for testing. ================================================ FILE: SemanticData/UANodeSetValidation/DataSerialization/Opc_Ua_Types.cs ================================================ //------------------------------------------------------------------------------ // // Ten kod został wygenerowany przez narzędzie. // Wersja wykonawcza:2.0.50727.3053 // // Zmiany w tym pliku mogą spowodować nieprawidłowe zachowanie i zostaną utracone, jeśli // kod zostanie ponownie wygenerowany. // //------------------------------------------------------------------------------ using System.Xml.Serialization; namespace UAOOI.SemanticData.UANodeSetValidation.DataSerialization { // // This source code was auto-generated by xsd, Version=2.0.50727.42. // /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = true )] public partial class ListOfBoolean { private bool[] booleanField; /// [System.Xml.Serialization.XmlElementAttribute( "Boolean" )] public bool[] Boolean { get { return this.booleanField; } set { this.booleanField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = true )] public partial class ListOfSByte { private sbyte[] sByteField; /// [System.Xml.Serialization.XmlElementAttribute( "SByte" )] public sbyte[] SByte { get { return this.sByteField; } set { this.sByteField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = true )] public partial class ListOfByte { private byte[] byteField; /// [System.Xml.Serialization.XmlElementAttribute( "Byte" )] public byte[] Byte { get { return this.byteField; } set { this.byteField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = true )] public partial class ListOfInt16 { private short[] int16Field; /// [System.Xml.Serialization.XmlElementAttribute( "Int16" )] public short[] Int16 { get { return this.int16Field; } set { this.int16Field = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = true )] public partial class ListOfUInt16 { private ushort[] uInt16Field; /// [System.Xml.Serialization.XmlElementAttribute( "UInt16" )] public ushort[] UInt16 { get { return this.uInt16Field; } set { this.uInt16Field = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = true )] public partial class ListOfInt32 { private int[] int32Field; /// [System.Xml.Serialization.XmlElementAttribute( "Int32" )] public int[] Int32 { get { return this.int32Field; } set { this.int32Field = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = true )] public partial class ListOfUInt32 { private uint[] uInt32Field; /// [System.Xml.Serialization.XmlElementAttribute( "UInt32" )] public uint[] UInt32 { get { return this.uInt32Field; } set { this.uInt32Field = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = true )] public partial class ListOfInt64 { private long[] int64Field; /// [System.Xml.Serialization.XmlElementAttribute( "Int64" )] public long[] Int64 { get { return this.int64Field; } set { this.int64Field = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = true )] public partial class ListOfUInt64 { private ulong[] uInt64Field; /// [System.Xml.Serialization.XmlElementAttribute( "UInt64" )] public ulong[] UInt64 { get { return this.uInt64Field; } set { this.uInt64Field = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = true )] public partial class ListOfFloat { private float[] floatField; /// [System.Xml.Serialization.XmlElementAttribute( "Float" )] public float[] Float { get { return this.floatField; } set { this.floatField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = true )] public partial class ListOfDouble { private double[] doubleField; /// [System.Xml.Serialization.XmlElementAttribute( "Double" )] public double[] Double { get { return this.doubleField; } set { this.doubleField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = true )] public partial class ListOfString { private string[] stringField; /// [System.Xml.Serialization.XmlElementAttribute( "String" )] public string[] String { get { return this.stringField; } set { this.stringField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = true )] public partial class ListOfDateTime { private System.DateTime[] dateTimeField; /// [System.Xml.Serialization.XmlElementAttribute( "DateTime" )] public System.DateTime[] DateTime { get { return this.dateTimeField; } set { this.dateTimeField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = true )] public partial class Guid { private string stringField; /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public string String { get { return this.stringField; } set { this.stringField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = true )] public partial class ListOfGuid { private Guid[] guidField; /// [System.Xml.Serialization.XmlElementAttribute( "Guid" )] public Guid[] Guid { get { return this.guidField; } set { this.guidField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = true )] public partial class ListOfByteString { private byte[][] byteStringField; /// [System.Xml.Serialization.XmlElementAttribute( "ByteString", DataType = "base64Binary", IsNullable = true )] public byte[][] ByteString { get { return this.byteStringField; } set { this.byteStringField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = true )] public partial class ListOfXmlElement { private System.Xml.XmlElement[] xmlElementField; /// [System.Xml.Serialization.XmlElementAttribute( "XmlElement", IsNullable = true )] public System.Xml.XmlElement[] XmlElement { get { return this.xmlElementField; } set { this.xmlElementField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = true )] public partial class NodeId { private string identifierField; /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public string Identifier { get { return this.identifierField; } set { this.identifierField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = true )] public partial class ListOfNodeId { private NodeId[] nodeIdField; /// [System.Xml.Serialization.XmlElementAttribute( "NodeId", IsNullable = true )] public NodeId[] NodeId { get { return this.nodeIdField; } set { this.nodeIdField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = true )] public partial class ExpandedNodeId { private string identifierField; /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public string Identifier { get { return this.identifierField; } set { this.identifierField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = true )] public partial class ListOfExpandedNodeId { private ExpandedNodeId[] expandedNodeIdField; /// [System.Xml.Serialization.XmlElementAttribute( "ExpandedNodeId", IsNullable = true )] public ExpandedNodeId[] ExpandedNodeId { get { return this.expandedNodeIdField; } set { this.expandedNodeIdField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = true )] public partial class StatusCode { private uint codeField; private bool codeFieldSpecified; /// public uint Code { get { return this.codeField; } set { this.codeField = value; } } /// [System.Xml.Serialization.XmlIgnoreAttribute()] public bool CodeSpecified { get { return this.codeFieldSpecified; } set { this.codeFieldSpecified = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = true )] public partial class ListOfStatusCode { private StatusCode[] statusCodeField; /// [System.Xml.Serialization.XmlElementAttribute( "StatusCode", IsNullable = true )] public StatusCode[] StatusCode { get { return this.statusCodeField; } set { this.statusCodeField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = true )] public partial class DiagnosticInfo { private int symbolicIdField; private bool symbolicIdFieldSpecified; private int namespaceUriField; private bool namespaceUriFieldSpecified; private int localeField; private bool localeFieldSpecified; private int localizedTextField; private bool localizedTextFieldSpecified; private string additionalInfoField; private StatusCode innerStatusCodeField; private DiagnosticInfo innerDiagnosticInfoField; /// public int SymbolicId { get { return this.symbolicIdField; } set { this.symbolicIdField = value; } } /// [System.Xml.Serialization.XmlIgnoreAttribute()] public bool SymbolicIdSpecified { get { return this.symbolicIdFieldSpecified; } set { this.symbolicIdFieldSpecified = value; } } /// public int NamespaceUri { get { return this.namespaceUriField; } set { this.namespaceUriField = value; } } /// [System.Xml.Serialization.XmlIgnoreAttribute()] public bool NamespaceUriSpecified { get { return this.namespaceUriFieldSpecified; } set { this.namespaceUriFieldSpecified = value; } } /// public int Locale { get { return this.localeField; } set { this.localeField = value; } } /// [System.Xml.Serialization.XmlIgnoreAttribute()] public bool LocaleSpecified { get { return this.localeFieldSpecified; } set { this.localeFieldSpecified = value; } } /// public int LocalizedText { get { return this.localizedTextField; } set { this.localizedTextField = value; } } /// [System.Xml.Serialization.XmlIgnoreAttribute()] public bool LocalizedTextSpecified { get { return this.localizedTextFieldSpecified; } set { this.localizedTextFieldSpecified = value; } } /// public string AdditionalInfo { get { return this.additionalInfoField; } set { this.additionalInfoField = value; } } /// public StatusCode InnerStatusCode { get { return this.innerStatusCodeField; } set { this.innerStatusCodeField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public DiagnosticInfo InnerDiagnosticInfo { get { return this.innerDiagnosticInfoField; } set { this.innerDiagnosticInfoField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = true )] public partial class ListOfDiagnosticInfo { private DiagnosticInfo[] diagnosticInfoField; /// [System.Xml.Serialization.XmlElementAttribute( "DiagnosticInfo", IsNullable = true )] public DiagnosticInfo[] DiagnosticInfo { get { return this.diagnosticInfoField; } set { this.diagnosticInfoField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = true )] public partial class LocalizedText { private string localeField; private string textField; /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public string Locale { get { return this.localeField; } set { this.localeField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public string Text { get { return this.textField; } set { this.textField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = true )] public partial class ListOfLocalizedText { private LocalizedText[] localizedTextField; /// [System.Xml.Serialization.XmlElementAttribute( "LocalizedText", IsNullable = true )] public LocalizedText[] LocalizedText { get { return this.localizedTextField; } set { this.localizedTextField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = true )] public partial class QualifiedName { private ushort namespaceIndexField; private bool namespaceIndexFieldSpecified; private string nameField; /// public ushort NamespaceIndex { get { return this.namespaceIndexField; } set { this.namespaceIndexField = value; } } /// [System.Xml.Serialization.XmlIgnoreAttribute()] public bool NamespaceIndexSpecified { get { return this.namespaceIndexFieldSpecified; } set { this.namespaceIndexFieldSpecified = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public string Name { get { return this.nameField; } set { this.nameField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = true )] public partial class ListOfQualifiedName { private QualifiedName[] qualifiedNameField; /// [System.Xml.Serialization.XmlElementAttribute( "QualifiedName", IsNullable = true )] public QualifiedName[] QualifiedName { get { return this.qualifiedNameField; } set { this.qualifiedNameField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = true )] public partial class ExtensionObject { private ExpandedNodeId typeIdField; private System.Xml.XmlElement bodyField; /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public ExpandedNodeId TypeId { get { return this.typeIdField; } set { this.typeIdField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public System.Xml.XmlElement Body { get { return this.bodyField; } set { this.bodyField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = true )] public partial class ListOfExtensionObject { private ExtensionObject[] extensionObjectField; /// [System.Xml.Serialization.XmlElementAttribute( "ExtensionObject", IsNullable = true )] public ExtensionObject[] ExtensionObject { get { return this.extensionObjectField; } set { this.extensionObjectField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = true )] public partial class Variant { private System.Xml.XmlElement valueField; /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public System.Xml.XmlElement Value { get { return this.valueField; } set { this.valueField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = true )] public partial class ListOfVariant { private Variant[] variantField; /// [System.Xml.Serialization.XmlElementAttribute( "Variant", IsNullable = true )] public Variant[] Variant { get { return this.variantField; } set { this.variantField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = true )] public partial class DataValue { private Variant valueField; private StatusCode statusCodeField; private System.DateTime sourceTimestampField; private bool sourceTimestampFieldSpecified; private System.DateTime serverTimestampField; private bool serverTimestampFieldSpecified; /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public Variant Value { get { return this.valueField; } set { this.valueField = value; } } /// public StatusCode StatusCode { get { return this.statusCodeField; } set { this.statusCodeField = value; } } /// public System.DateTime SourceTimestamp { get { return this.sourceTimestampField; } set { this.sourceTimestampField = value; } } /// [System.Xml.Serialization.XmlIgnoreAttribute()] public bool SourceTimestampSpecified { get { return this.sourceTimestampFieldSpecified; } set { this.sourceTimestampFieldSpecified = value; } } /// public System.DateTime ServerTimestamp { get { return this.serverTimestampField; } set { this.serverTimestampField = value; } } /// [System.Xml.Serialization.XmlIgnoreAttribute()] public bool ServerTimestampSpecified { get { return this.serverTimestampFieldSpecified; } set { this.serverTimestampFieldSpecified = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = true )] public partial class ListOfDataValue { private DataValue[] dataValueField; /// [System.Xml.Serialization.XmlElementAttribute( "DataValue", IsNullable = true )] public DataValue[] DataValue { get { return this.dataValueField; } set { this.dataValueField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public enum IdType { /// Numeric_0, /// String_1, /// Guid_2, /// Opaque_3, } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = true )] public partial class ListOfIdType { private System.Nullable[] idTypeField; /// [System.Xml.Serialization.XmlElementAttribute( "IdType", IsNullable = true )] public System.Nullable[] IdType { get { return this.idTypeField; } set { this.idTypeField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public enum NodeClass { /// Unspecified_0, /// Object_1, /// Variable_2, /// Method_4, /// ObjectType_8, /// VariableType_16, /// ReferenceType_32, /// DataType_64, /// View_128, } /// [System.Xml.Serialization.XmlIncludeAttribute( typeof( DataTypeNode ) )] [System.Xml.Serialization.XmlIncludeAttribute( typeof( ViewNode ) )] [System.Xml.Serialization.XmlIncludeAttribute( typeof( MethodNode ) )] [System.Xml.Serialization.XmlIncludeAttribute( typeof( ReferenceTypeNode ) )] [System.Xml.Serialization.XmlIncludeAttribute( typeof( VariableTypeNode ) )] [System.Xml.Serialization.XmlIncludeAttribute( typeof( VariableNode ) )] [System.Xml.Serialization.XmlIncludeAttribute( typeof( ObjectTypeNode ) )] [System.Xml.Serialization.XmlIncludeAttribute( typeof( ObjectNode ) )] [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class Node { private NodeId nodeIdField; private NodeClass nodeClassField; private QualifiedName browseNameField; private LocalizedText displayNameField; private LocalizedText descriptionField; private uint writeMaskField; private uint userWriteMaskField; private ReferenceNode[] referencesField; /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public NodeId NodeId { get { return this.nodeIdField; } set { this.nodeIdField = value; } } /// public NodeClass NodeClass { get { return this.nodeClassField; } set { this.nodeClassField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public QualifiedName BrowseName { get { return this.browseNameField; } set { this.browseNameField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public LocalizedText DisplayName { get { return this.displayNameField; } set { this.displayNameField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public LocalizedText Description { get { return this.descriptionField; } set { this.descriptionField = value; } } /// public uint WriteMask { get { return this.writeMaskField; } set { this.writeMaskField = value; } } /// public uint UserWriteMask { get { return this.userWriteMaskField; } set { this.userWriteMaskField = value; } } /// public ReferenceNode[] References { get { return this.referencesField; } set { this.referencesField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class ReferenceNode { private NodeId referenceTypeIdField; private bool isInverseField; private ExpandedNodeId targetIdField; /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public NodeId ReferenceTypeId { get { return this.referenceTypeIdField; } set { this.referenceTypeIdField = value; } } /// public bool IsInverse { get { return this.isInverseField; } set { this.isInverseField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public ExpandedNodeId TargetId { get { return this.targetIdField; } set { this.targetIdField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = true )] public partial class ListOfNode { private Node[] nodeField; /// [System.Xml.Serialization.XmlElementAttribute( "Node", IsNullable = true )] public Node[] Node { get { return this.nodeField; } set { this.nodeField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class ObjectNode: Node { private byte eventNotifierField; /// public byte EventNotifier { get { return this.eventNotifierField; } set { this.eventNotifierField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class ObjectTypeNode: Node { private bool isAbstractField; /// public bool IsAbstract { get { return this.isAbstractField; } set { this.isAbstractField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class VariableNode: Node { private Variant valueField; private NodeId dataTypeField; private int valueRankField; private uint[] arrayDimensionsField; private byte accessLevelField; private byte userAccessLevelField; private double minimumSamplingIntervalField; private bool historizingField; /// public Variant Value { get { return this.valueField; } set { this.valueField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public NodeId DataType { get { return this.dataTypeField; } set { this.dataTypeField = value; } } /// public int ValueRank { get { return this.valueRankField; } set { this.valueRankField = value; } } /// [System.Xml.Serialization.XmlArrayItemAttribute( "UInt32", IsNullable = false )] public uint[] ArrayDimensions { get { return this.arrayDimensionsField; } set { this.arrayDimensionsField = value; } } /// public byte AccessLevel { get { return this.accessLevelField; } set { this.accessLevelField = value; } } /// public byte UserAccessLevel { get { return this.userAccessLevelField; } set { this.userAccessLevelField = value; } } /// public double MinimumSamplingInterval { get { return this.minimumSamplingIntervalField; } set { this.minimumSamplingIntervalField = value; } } /// public bool Historizing { get { return this.historizingField; } set { this.historizingField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class VariableTypeNode: Node { private Variant valueField; private NodeId dataTypeField; private int valueRankField; private uint[] arrayDimensionsField; private bool isAbstractField; /// public Variant Value { get { return this.valueField; } set { this.valueField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public NodeId DataType { get { return this.dataTypeField; } set { this.dataTypeField = value; } } /// public int ValueRank { get { return this.valueRankField; } set { this.valueRankField = value; } } /// [System.Xml.Serialization.XmlArrayItemAttribute( "UInt32", IsNullable = false )] public uint[] ArrayDimensions { get { return this.arrayDimensionsField; } set { this.arrayDimensionsField = value; } } /// public bool IsAbstract { get { return this.isAbstractField; } set { this.isAbstractField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class ReferenceTypeNode: Node { private bool isAbstractField; private bool symmetricField; private LocalizedText inverseNameField; /// public bool IsAbstract { get { return this.isAbstractField; } set { this.isAbstractField = value; } } /// public bool Symmetric { get { return this.symmetricField; } set { this.symmetricField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public LocalizedText InverseName { get { return this.inverseNameField; } set { this.inverseNameField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class MethodNode: Node { private bool executableField; private bool userExecutableField; /// public bool Executable { get { return this.executableField; } set { this.executableField = value; } } /// public bool UserExecutable { get { return this.userExecutableField; } set { this.userExecutableField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class ViewNode: Node { private bool containsNoLoopsField; private byte eventNotifierField; /// public bool ContainsNoLoops { get { return this.containsNoLoopsField; } set { this.containsNoLoopsField = value; } } /// public byte EventNotifier { get { return this.eventNotifierField; } set { this.eventNotifierField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class DataTypeNode: Node { private bool isAbstractField; /// public bool IsAbstract { get { return this.isAbstractField; } set { this.isAbstractField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = true )] public partial class ListOfReferenceNode { private ReferenceNode[] referenceNodeField; /// [System.Xml.Serialization.XmlElementAttribute( "ReferenceNode", IsNullable = true )] public ReferenceNode[] ReferenceNode { get { return this.referenceNodeField; } set { this.referenceNodeField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class Argument { private string nameField; private NodeId dataTypeField; private int valueRankField; private uint[] arrayDimensionsField; private LocalizedText descriptionField; /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public string Name { get { return this.nameField; } set { this.nameField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public NodeId DataType { get { return this.dataTypeField; } set { this.dataTypeField = value; } } /// public int ValueRank { get { return this.valueRankField; } set { this.valueRankField = value; } } /// [System.Xml.Serialization.XmlArrayItemAttribute( "UInt32", IsNullable = false )] public uint[] ArrayDimensions { get { return this.arrayDimensionsField; } set { this.arrayDimensionsField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public LocalizedText Description { get { return this.descriptionField; } set { this.descriptionField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = true )] public partial class ListOfArgument { private Argument[] argumentField; /// [System.Xml.Serialization.XmlElementAttribute( "Argument", IsNullable = true )] public Argument[] Argument { get { return this.argumentField; } set { this.argumentField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class TimeZoneDataType { private short offsetField; private bool daylightSavingInOffsetField; /// public short Offset { get { return this.offsetField; } set { this.offsetField = value; } } /// public bool DaylightSavingInOffset { get { return this.daylightSavingInOffsetField; } set { this.daylightSavingInOffsetField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = true )] public partial class ListOfTimeZoneDataType { private TimeZoneDataType[] timeZoneDataTypeField; /// [System.Xml.Serialization.XmlElementAttribute( "TimeZoneDataType", IsNullable = true )] public TimeZoneDataType[] TimeZoneDataType { get { return this.timeZoneDataTypeField; } set { this.timeZoneDataTypeField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class EnumValueInfo { private LocalizedText nameField; private int valueField; /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public LocalizedText Name { get { return this.nameField; } set { this.nameField = value; } } /// public int Value { get { return this.valueField; } set { this.valueField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = true )] public partial class ListOfEnumValueInfo { private EnumValueInfo[] enumValueInfoField; /// [System.Xml.Serialization.XmlElementAttribute( "EnumValueInfo", IsNullable = true )] public EnumValueInfo[] EnumValueInfo { get { return this.enumValueInfoField; } set { this.enumValueInfoField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class StatusResult { private StatusCode statusCodeField; private DiagnosticInfo diagnosticInfoField; /// public StatusCode StatusCode { get { return this.statusCodeField; } set { this.statusCodeField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public DiagnosticInfo DiagnosticInfo { get { return this.diagnosticInfoField; } set { this.diagnosticInfoField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = true )] public partial class ListOfStatusResult { private StatusResult[] statusResultField; /// [System.Xml.Serialization.XmlElementAttribute( "StatusResult", IsNullable = true )] public StatusResult[] StatusResult { get { return this.statusResultField; } set { this.statusResultField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public enum MessageSecurityMode { /// Invalid_0, /// None_1, /// Sign_2, /// SignAndEncrypt_3, } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public enum UserTokenType { /// Anonymous_0, /// UserName_1, /// Certificate_2, /// IssuedToken_3, } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class UserTokenPolicy { private string policyIdField; private UserTokenType tokenTypeField; private string issuedTokenTypeField; private string issuerEndpointUrlField; private string securityPolicyUriField; /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public string PolicyId { get { return this.policyIdField; } set { this.policyIdField = value; } } /// public UserTokenType TokenType { get { return this.tokenTypeField; } set { this.tokenTypeField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public string IssuedTokenType { get { return this.issuedTokenTypeField; } set { this.issuedTokenTypeField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public string IssuerEndpointUrl { get { return this.issuerEndpointUrlField; } set { this.issuerEndpointUrlField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public string SecurityPolicyUri { get { return this.securityPolicyUriField; } set { this.securityPolicyUriField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = true )] public partial class ListOfUserTokenPolicy { private UserTokenPolicy[] userTokenPolicyField; /// [System.Xml.Serialization.XmlElementAttribute( "UserTokenPolicy", IsNullable = true )] public UserTokenPolicy[] UserTokenPolicy { get { return this.userTokenPolicyField; } set { this.userTokenPolicyField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public enum ApplicationType { /// Server_0, /// Client_1, /// ClientAndServer_2, /// DiscoveryServer_3, } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class ApplicationDescription { private string applicationUriField; private string productUriField; private LocalizedText applicationNameField; private ApplicationType applicationTypeField; private string gatewayServerUriField; private string discoveryProfileUriField; private string[] discoveryUrlsField; /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public string ApplicationUri { get { return this.applicationUriField; } set { this.applicationUriField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public string ProductUri { get { return this.productUriField; } set { this.productUriField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public LocalizedText ApplicationName { get { return this.applicationNameField; } set { this.applicationNameField = value; } } /// public ApplicationType ApplicationType { get { return this.applicationTypeField; } set { this.applicationTypeField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public string GatewayServerUri { get { return this.gatewayServerUriField; } set { this.gatewayServerUriField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public string DiscoveryProfileUri { get { return this.discoveryProfileUriField; } set { this.discoveryProfileUriField = value; } } /// [System.Xml.Serialization.XmlArrayAttribute( IsNullable = true )] [System.Xml.Serialization.XmlArrayItemAttribute( "String", IsNullable = false )] public string[] DiscoveryUrls { get { return this.discoveryUrlsField; } set { this.discoveryUrlsField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = true )] public partial class ListOfApplicationDescription { private ApplicationDescription[] applicationDescriptionField; /// [System.Xml.Serialization.XmlElementAttribute( "ApplicationDescription", IsNullable = true )] public ApplicationDescription[] ApplicationDescription { get { return this.applicationDescriptionField; } set { this.applicationDescriptionField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class EndpointDescription { private string endpointUrlField; private ApplicationDescription serverField; private byte[] serverCertificateField; private MessageSecurityMode securityModeField; private string securityPolicyUriField; private UserTokenPolicy[] userIdentityTokensField; private string transportProfileUriField; private byte securityLevelField; /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public string EndpointUrl { get { return this.endpointUrlField; } set { this.endpointUrlField = value; } } /// public ApplicationDescription Server { get { return this.serverField; } set { this.serverField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( DataType = "base64Binary", IsNullable = true )] public byte[] ServerCertificate { get { return this.serverCertificateField; } set { this.serverCertificateField = value; } } /// public MessageSecurityMode SecurityMode { get { return this.securityModeField; } set { this.securityModeField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public string SecurityPolicyUri { get { return this.securityPolicyUriField; } set { this.securityPolicyUriField = value; } } /// public UserTokenPolicy[] UserIdentityTokens { get { return this.userIdentityTokensField; } set { this.userIdentityTokensField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public string TransportProfileUri { get { return this.transportProfileUriField; } set { this.transportProfileUriField = value; } } /// public byte SecurityLevel { get { return this.securityLevelField; } set { this.securityLevelField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = true )] public partial class ListOfEndpointDescription { private EndpointDescription[] endpointDescriptionField; /// [System.Xml.Serialization.XmlElementAttribute( "EndpointDescription", IsNullable = true )] public EndpointDescription[] EndpointDescription { get { return this.endpointDescriptionField; } set { this.endpointDescriptionField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public enum SecurityTokenRequestType { /// Issue_0, /// Renew_1, } /// [System.Xml.Serialization.XmlIncludeAttribute( typeof( IssuedIdentityToken ) )] [System.Xml.Serialization.XmlIncludeAttribute( typeof( X509IdentityToken ) )] [System.Xml.Serialization.XmlIncludeAttribute( typeof( UserNameIdentityToken ) )] [System.Xml.Serialization.XmlIncludeAttribute( typeof( AnonymousIdentityToken ) )] [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class UserIdentityToken { private string policyIdField; /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public string PolicyId { get { return this.policyIdField; } set { this.policyIdField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class AnonymousIdentityToken: UserIdentityToken { } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class UserNameIdentityToken: UserIdentityToken { private string userNameField; private byte[] passwordField; private string encryptionAlgorithmField; /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public string UserName { get { return this.userNameField; } set { this.userNameField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( DataType = "base64Binary", IsNullable = true )] public byte[] Password { get { return this.passwordField; } set { this.passwordField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public string EncryptionAlgorithm { get { return this.encryptionAlgorithmField; } set { this.encryptionAlgorithmField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class X509IdentityToken: UserIdentityToken { private byte[] certificateDataField; /// [System.Xml.Serialization.XmlElementAttribute( DataType = "base64Binary", IsNullable = true )] public byte[] CertificateData { get { return this.certificateDataField; } set { this.certificateDataField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class IssuedIdentityToken: UserIdentityToken { private byte[] tokenDataField; private string encryptionAlgorithmField; /// [System.Xml.Serialization.XmlElementAttribute( DataType = "base64Binary", IsNullable = true )] public byte[] TokenData { get { return this.tokenDataField; } set { this.tokenDataField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public string EncryptionAlgorithm { get { return this.encryptionAlgorithmField; } set { this.encryptionAlgorithmField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class EndpointConfiguration { private int operationTimeoutField; private bool useBinaryEncodingField; private int maxStringLengthField; private int maxByteStringLengthField; private int maxArrayLengthField; private int maxMessageSizeField; private int maxBufferSizeField; private int channelLifetimeField; private int securityTokenLifetimeField; /// public int OperationTimeout { get { return this.operationTimeoutField; } set { this.operationTimeoutField = value; } } /// public bool UseBinaryEncoding { get { return this.useBinaryEncodingField; } set { this.useBinaryEncodingField = value; } } /// public int MaxStringLength { get { return this.maxStringLengthField; } set { this.maxStringLengthField = value; } } /// public int MaxByteStringLength { get { return this.maxByteStringLengthField; } set { this.maxByteStringLengthField = value; } } /// public int MaxArrayLength { get { return this.maxArrayLengthField; } set { this.maxArrayLengthField = value; } } /// public int MaxMessageSize { get { return this.maxMessageSizeField; } set { this.maxMessageSizeField = value; } } /// public int MaxBufferSize { get { return this.maxBufferSizeField; } set { this.maxBufferSizeField = value; } } /// public int ChannelLifetime { get { return this.channelLifetimeField; } set { this.channelLifetimeField = value; } } /// public int SecurityTokenLifetime { get { return this.securityTokenLifetimeField; } set { this.securityTokenLifetimeField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = true )] public partial class ListOfEndpointConfiguration { private EndpointConfiguration[] endpointConfigurationField; /// [System.Xml.Serialization.XmlElementAttribute( "EndpointConfiguration", IsNullable = true )] public EndpointConfiguration[] EndpointConfiguration { get { return this.endpointConfigurationField; } set { this.endpointConfigurationField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public enum ComplianceLevel { /// Untested_0, /// Partial_1, /// SelfTested_2, /// Certified_3, } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class SupportedProfile { private string organizationUriField; private string profileIdField; private string complianceToolField; private System.DateTime complianceDateField; private ComplianceLevel complianceLevelField; private string[] unsupportedUnitIdsField; /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public string OrganizationUri { get { return this.organizationUriField; } set { this.organizationUriField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public string ProfileId { get { return this.profileIdField; } set { this.profileIdField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public string ComplianceTool { get { return this.complianceToolField; } set { this.complianceToolField = value; } } /// public System.DateTime ComplianceDate { get { return this.complianceDateField; } set { this.complianceDateField = value; } } /// public ComplianceLevel ComplianceLevel { get { return this.complianceLevelField; } set { this.complianceLevelField = value; } } /// [System.Xml.Serialization.XmlArrayAttribute( IsNullable = true )] [System.Xml.Serialization.XmlArrayItemAttribute( "String", IsNullable = false )] public string[] UnsupportedUnitIds { get { return this.unsupportedUnitIdsField; } set { this.unsupportedUnitIdsField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = true )] public partial class ListOfSupportedProfile { private SupportedProfile[] supportedProfileField; /// [System.Xml.Serialization.XmlElementAttribute( "SupportedProfile", IsNullable = true )] public SupportedProfile[] SupportedProfile { get { return this.supportedProfileField; } set { this.supportedProfileField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class BuildInfo { private string productUriField; private string manufacturerNameField; private string productNameField; private string softwareVersionField; private string buildNumberField; private System.DateTime buildDateField; /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public string ProductUri { get { return this.productUriField; } set { this.productUriField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public string ManufacturerName { get { return this.manufacturerNameField; } set { this.manufacturerNameField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public string ProductName { get { return this.productNameField; } set { this.productNameField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public string SoftwareVersion { get { return this.softwareVersionField; } set { this.softwareVersionField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public string BuildNumber { get { return this.buildNumberField; } set { this.buildNumberField = value; } } /// public System.DateTime BuildDate { get { return this.buildDateField; } set { this.buildDateField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class SoftwareCertificate { private string productNameField; private string productUriField; private string vendorNameField; private byte[] vendorProductCertificateField; private string softwareVersionField; private string buildNumberField; private System.DateTime buildDateField; private string issuedByField; private System.DateTime issueDateField; private SupportedProfile[] supportedProfilesField; /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public string ProductName { get { return this.productNameField; } set { this.productNameField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public string ProductUri { get { return this.productUriField; } set { this.productUriField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public string VendorName { get { return this.vendorNameField; } set { this.vendorNameField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( DataType = "base64Binary", IsNullable = true )] public byte[] VendorProductCertificate { get { return this.vendorProductCertificateField; } set { this.vendorProductCertificateField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public string SoftwareVersion { get { return this.softwareVersionField; } set { this.softwareVersionField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public string BuildNumber { get { return this.buildNumberField; } set { this.buildNumberField = value; } } /// public System.DateTime BuildDate { get { return this.buildDateField; } set { this.buildDateField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public string IssuedBy { get { return this.issuedByField; } set { this.issuedByField = value; } } /// public System.DateTime IssueDate { get { return this.issueDateField; } set { this.issueDateField = value; } } /// public SupportedProfile[] SupportedProfiles { get { return this.supportedProfilesField; } set { this.supportedProfilesField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class SignedSoftwareCertificate { private byte[] certificateDataField; private byte[] signatureField; /// [System.Xml.Serialization.XmlElementAttribute( DataType = "base64Binary", IsNullable = true )] public byte[] CertificateData { get { return this.certificateDataField; } set { this.certificateDataField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( DataType = "base64Binary", IsNullable = true )] public byte[] Signature { get { return this.signatureField; } set { this.signatureField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = true )] public partial class ListOfSignedSoftwareCertificate { private SignedSoftwareCertificate[] signedSoftwareCertificateField; /// [System.Xml.Serialization.XmlElementAttribute( "SignedSoftwareCertificate", IsNullable = true )] public SignedSoftwareCertificate[] SignedSoftwareCertificate { get { return this.signedSoftwareCertificateField; } set { this.signedSoftwareCertificateField = value; } } } //TODO Define independent Address Space API #645 - must be updated /// //[System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] //[System.SerializableAttribute()] //[System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] //[System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] //public enum AttributeWriteMask //{ // /// // None_0, // /// // AccessLevel_1, // /// // ArrayDimensions_2, // /// // BrowseName_4, // /// // ContainsNoLoops_8, // /// // DataType_16, // /// // Description_32, // /// // DisplayName_64, // /// // EventNotifier_128, // /// // Executable_256, // /// // Historizing_512, // /// // InverseName_1024, // /// // IsAbstract_2048, // /// // MinimumSamplingInterval_4096, // /// // NodeClass_8192, // /// // NodeId_16384, // /// // Symmetric_32768, // /// // UserAccessLevel_65536, // /// // UserExecutable_131072, // /// // UserWriteMask_262144, // /// // ValueRank_524288, // /// // WriteMask_1048576, // /// // ValueForVariableType_2097152, //} /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public enum NodeAttributesMask { /// None_0, /// AccessLevel_1, /// ArrayDimensions_2, /// ContainsNoLoops_8, /// DataType_16, /// Description_32, /// DisplayName_64, /// EventNotifier_128, /// Executable_256, /// Historizing_512, /// InverseName_1024, /// IsAbstract_2048, /// MinimumSamplingInterval_4096, /// Symmetric_32768, /// UserAccessLevel_65536, /// UserExecutable_131072, /// UserWriteMask_262144, /// ValueRank_524288, /// WriteMask_1048576, /// Value_2097152, /// All_4194303, /// BaseNode_1335396, /// Object_1335524, /// ObjectTypeOrDataType_1337444, /// Variable_4026999, /// VariableType_3958902, /// Method_1466724, /// ReferenceType_1371236, /// View_1335532, } /// [System.Xml.Serialization.XmlIncludeAttribute( typeof( ViewAttributes ) )] [System.Xml.Serialization.XmlIncludeAttribute( typeof( DataTypeAttributes ) )] [System.Xml.Serialization.XmlIncludeAttribute( typeof( ReferenceTypeAttributes ) )] [System.Xml.Serialization.XmlIncludeAttribute( typeof( VariableTypeAttributes ) )] [System.Xml.Serialization.XmlIncludeAttribute( typeof( ObjectTypeAttributes ) )] [System.Xml.Serialization.XmlIncludeAttribute( typeof( MethodAttributes ) )] [System.Xml.Serialization.XmlIncludeAttribute( typeof( VariableAttributes ) )] [System.Xml.Serialization.XmlIncludeAttribute( typeof( ObjectAttributes ) )] [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class NodeAttributes { private uint specifiedAttributesField; private LocalizedText displayNameField; private LocalizedText descriptionField; private uint writeMaskField; private uint userWriteMaskField; /// public uint SpecifiedAttributes { get { return this.specifiedAttributesField; } set { this.specifiedAttributesField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public LocalizedText DisplayName { get { return this.displayNameField; } set { this.displayNameField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public LocalizedText Description { get { return this.descriptionField; } set { this.descriptionField = value; } } /// public uint WriteMask { get { return this.writeMaskField; } set { this.writeMaskField = value; } } /// public uint UserWriteMask { get { return this.userWriteMaskField; } set { this.userWriteMaskField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class ObjectAttributes: NodeAttributes { private byte eventNotifierField; /// public byte EventNotifier { get { return this.eventNotifierField; } set { this.eventNotifierField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class VariableAttributes: NodeAttributes { private Variant valueField; private NodeId dataTypeField; private int valueRankField; private uint[] arrayDimensionsField; private byte accessLevelField; private byte userAccessLevelField; private double minimumSamplingIntervalField; private bool historizingField; /// public Variant Value { get { return this.valueField; } set { this.valueField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public NodeId DataType { get { return this.dataTypeField; } set { this.dataTypeField = value; } } /// public int ValueRank { get { return this.valueRankField; } set { this.valueRankField = value; } } /// [System.Xml.Serialization.XmlArrayItemAttribute( "UInt32", IsNullable = false )] public uint[] ArrayDimensions { get { return this.arrayDimensionsField; } set { this.arrayDimensionsField = value; } } /// public byte AccessLevel { get { return this.accessLevelField; } set { this.accessLevelField = value; } } /// public byte UserAccessLevel { get { return this.userAccessLevelField; } set { this.userAccessLevelField = value; } } /// public double MinimumSamplingInterval { get { return this.minimumSamplingIntervalField; } set { this.minimumSamplingIntervalField = value; } } /// public bool Historizing { get { return this.historizingField; } set { this.historizingField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class MethodAttributes: NodeAttributes { private bool executableField; private bool userExecutableField; /// public bool Executable { get { return this.executableField; } set { this.executableField = value; } } /// public bool UserExecutable { get { return this.userExecutableField; } set { this.userExecutableField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class ObjectTypeAttributes: NodeAttributes { private bool isAbstractField; /// public bool IsAbstract { get { return this.isAbstractField; } set { this.isAbstractField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class VariableTypeAttributes: NodeAttributes { private Variant valueField; private NodeId dataTypeField; private int valueRankField; private uint[] arrayDimensionsField; private bool isAbstractField; /// public Variant Value { get { return this.valueField; } set { this.valueField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public NodeId DataType { get { return this.dataTypeField; } set { this.dataTypeField = value; } } /// public int ValueRank { get { return this.valueRankField; } set { this.valueRankField = value; } } /// [System.Xml.Serialization.XmlArrayItemAttribute( "UInt32", IsNullable = false )] public uint[] ArrayDimensions { get { return this.arrayDimensionsField; } set { this.arrayDimensionsField = value; } } /// public bool IsAbstract { get { return this.isAbstractField; } set { this.isAbstractField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class ReferenceTypeAttributes: NodeAttributes { private bool isAbstractField; private bool symmetricField; private LocalizedText inverseNameField; /// public bool IsAbstract { get { return this.isAbstractField; } set { this.isAbstractField = value; } } /// public bool Symmetric { get { return this.symmetricField; } set { this.symmetricField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public LocalizedText InverseName { get { return this.inverseNameField; } set { this.inverseNameField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class DataTypeAttributes: NodeAttributes { private bool isAbstractField; /// public bool IsAbstract { get { return this.isAbstractField; } set { this.isAbstractField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class ViewAttributes: NodeAttributes { private bool containsNoLoopsField; private byte eventNotifierField; /// public bool ContainsNoLoops { get { return this.containsNoLoopsField; } set { this.containsNoLoopsField = value; } } /// public byte EventNotifier { get { return this.eventNotifierField; } set { this.eventNotifierField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class AddNodesItem { private ExpandedNodeId parentNodeIdField; private NodeId referenceTypeIdField; private ExpandedNodeId requestedNewNodeIdField; private QualifiedName browseNameField; private NodeClass nodeClassField; private ExtensionObject nodeAttributesField; private ExpandedNodeId typeDefinitionField; /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public ExpandedNodeId ParentNodeId { get { return this.parentNodeIdField; } set { this.parentNodeIdField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public NodeId ReferenceTypeId { get { return this.referenceTypeIdField; } set { this.referenceTypeIdField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public ExpandedNodeId RequestedNewNodeId { get { return this.requestedNewNodeIdField; } set { this.requestedNewNodeIdField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public QualifiedName BrowseName { get { return this.browseNameField; } set { this.browseNameField = value; } } /// public NodeClass NodeClass { get { return this.nodeClassField; } set { this.nodeClassField = value; } } /// public ExtensionObject NodeAttributes { get { return this.nodeAttributesField; } set { this.nodeAttributesField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public ExpandedNodeId TypeDefinition { get { return this.typeDefinitionField; } set { this.typeDefinitionField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = true )] public partial class ListOfAddNodesItem { private AddNodesItem[] addNodesItemField; /// [System.Xml.Serialization.XmlElementAttribute( "AddNodesItem", IsNullable = true )] public AddNodesItem[] AddNodesItem { get { return this.addNodesItemField; } set { this.addNodesItemField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class AddReferencesItem { private NodeId sourceNodeIdField; private NodeId referenceTypeIdField; private bool isForwardField; private string targetServerUriField; private ExpandedNodeId targetNodeIdField; private NodeClass targetNodeClassField; /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public NodeId SourceNodeId { get { return this.sourceNodeIdField; } set { this.sourceNodeIdField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public NodeId ReferenceTypeId { get { return this.referenceTypeIdField; } set { this.referenceTypeIdField = value; } } /// public bool IsForward { get { return this.isForwardField; } set { this.isForwardField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public string TargetServerUri { get { return this.targetServerUriField; } set { this.targetServerUriField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public ExpandedNodeId TargetNodeId { get { return this.targetNodeIdField; } set { this.targetNodeIdField = value; } } /// public NodeClass TargetNodeClass { get { return this.targetNodeClassField; } set { this.targetNodeClassField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = true )] public partial class ListOfAddReferencesItem { private AddReferencesItem[] addReferencesItemField; /// [System.Xml.Serialization.XmlElementAttribute( "AddReferencesItem", IsNullable = true )] public AddReferencesItem[] AddReferencesItem { get { return this.addReferencesItemField; } set { this.addReferencesItemField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class DeleteNodesItem { private NodeId nodeIdField; private bool deleteTargetReferencesField; /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public NodeId NodeId { get { return this.nodeIdField; } set { this.nodeIdField = value; } } /// public bool DeleteTargetReferences { get { return this.deleteTargetReferencesField; } set { this.deleteTargetReferencesField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = true )] public partial class ListOfDeleteNodesItem { private DeleteNodesItem[] deleteNodesItemField; /// [System.Xml.Serialization.XmlElementAttribute( "DeleteNodesItem", IsNullable = true )] public DeleteNodesItem[] DeleteNodesItem { get { return this.deleteNodesItemField; } set { this.deleteNodesItemField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class DeleteReferencesItem { private NodeId sourceNodeIdField; private NodeId referenceTypeIdField; private bool isForwardField; private ExpandedNodeId targetNodeIdField; private bool deleteBidirectionalField; /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public NodeId SourceNodeId { get { return this.sourceNodeIdField; } set { this.sourceNodeIdField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public NodeId ReferenceTypeId { get { return this.referenceTypeIdField; } set { this.referenceTypeIdField = value; } } /// public bool IsForward { get { return this.isForwardField; } set { this.isForwardField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public ExpandedNodeId TargetNodeId { get { return this.targetNodeIdField; } set { this.targetNodeIdField = value; } } /// public bool DeleteBidirectional { get { return this.deleteBidirectionalField; } set { this.deleteBidirectionalField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = true )] public partial class ListOfDeleteReferencesItem { private DeleteReferencesItem[] deleteReferencesItemField; /// [System.Xml.Serialization.XmlElementAttribute( "DeleteReferencesItem", IsNullable = true )] public DeleteReferencesItem[] DeleteReferencesItem { get { return this.deleteReferencesItemField; } set { this.deleteReferencesItemField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class RequestHeader { private NodeId authenticationTokenField; private System.DateTime timestampField; private uint requestHandleField; private uint returnDiagnosticsField; private string auditEntryIdField; private uint timeoutHintField; private ExtensionObject additionalHeaderField; /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public NodeId AuthenticationToken { get { return this.authenticationTokenField; } set { this.authenticationTokenField = value; } } /// public System.DateTime Timestamp { get { return this.timestampField; } set { this.timestampField = value; } } /// public uint RequestHandle { get { return this.requestHandleField; } set { this.requestHandleField = value; } } /// public uint ReturnDiagnostics { get { return this.returnDiagnosticsField; } set { this.returnDiagnosticsField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public string AuditEntryId { get { return this.auditEntryIdField; } set { this.auditEntryIdField = value; } } /// public uint TimeoutHint { get { return this.timeoutHintField; } set { this.timeoutHintField = value; } } /// public ExtensionObject AdditionalHeader { get { return this.additionalHeaderField; } set { this.additionalHeaderField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class ResponseHeader { private System.DateTime timestampField; private uint requestHandleField; private StatusCode serviceResultField; private DiagnosticInfo serviceDiagnosticsField; private string[] stringTableField; private ExtensionObject additionalHeaderField; /// public System.DateTime Timestamp { get { return this.timestampField; } set { this.timestampField = value; } } /// public uint RequestHandle { get { return this.requestHandleField; } set { this.requestHandleField = value; } } /// public StatusCode ServiceResult { get { return this.serviceResultField; } set { this.serviceResultField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public DiagnosticInfo ServiceDiagnostics { get { return this.serviceDiagnosticsField; } set { this.serviceDiagnosticsField = value; } } /// [System.Xml.Serialization.XmlArrayAttribute( IsNullable = true )] [System.Xml.Serialization.XmlArrayItemAttribute( "String", IsNullable = false )] public string[] StringTable { get { return this.stringTableField; } set { this.stringTableField = value; } } /// public ExtensionObject AdditionalHeader { get { return this.additionalHeaderField; } set { this.additionalHeaderField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class ServiceFault { private ResponseHeader responseHeaderField; /// public ResponseHeader ResponseHeader { get { return this.responseHeaderField; } set { this.responseHeaderField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public enum EnumeratedTestType { /// Red_1, /// Yellow_4, /// Green_5, } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = true )] public partial class ListOfEnumeratedTestType { private System.Nullable[] enumeratedTestTypeField; /// [System.Xml.Serialization.XmlElementAttribute( "EnumeratedTestType", IsNullable = true )] public System.Nullable[] EnumeratedTestType { get { return this.enumeratedTestTypeField; } set { this.enumeratedTestTypeField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class ScalarTestType { private bool booleanField; private sbyte sByteField; private byte byteField; private short int16Field; private ushort uInt16Field; private int int32Field; private uint uInt32Field; private long int64Field; private ulong uInt64Field; private float floatField; private double doubleField; private string stringField; private System.DateTime dateTimeField; private Guid guidField; private byte[] byteStringField; private System.Xml.XmlElement xmlElementField; private NodeId nodeIdField; private ExpandedNodeId expandedNodeIdField; private StatusCode statusCodeField; private DiagnosticInfo diagnosticInfoField; private QualifiedName qualifiedNameField; private LocalizedText localizedTextField; private ExtensionObject extensionObjectField; private DataValue dataValueField; private EnumeratedTestType enumeratedValueField; /// public bool Boolean { get { return this.booleanField; } set { this.booleanField = value; } } /// public sbyte SByte { get { return this.sByteField; } set { this.sByteField = value; } } /// public byte Byte { get { return this.byteField; } set { this.byteField = value; } } /// public short Int16 { get { return this.int16Field; } set { this.int16Field = value; } } /// public ushort UInt16 { get { return this.uInt16Field; } set { this.uInt16Field = value; } } /// public int Int32 { get { return this.int32Field; } set { this.int32Field = value; } } /// public uint UInt32 { get { return this.uInt32Field; } set { this.uInt32Field = value; } } /// public long Int64 { get { return this.int64Field; } set { this.int64Field = value; } } /// public ulong UInt64 { get { return this.uInt64Field; } set { this.uInt64Field = value; } } /// public float Float { get { return this.floatField; } set { this.floatField = value; } } /// public double Double { get { return this.doubleField; } set { this.doubleField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public string String { get { return this.stringField; } set { this.stringField = value; } } /// public System.DateTime DateTime { get { return this.dateTimeField; } set { this.dateTimeField = value; } } /// public Guid Guid { get { return this.guidField; } set { this.guidField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( DataType = "base64Binary", IsNullable = true )] public byte[] ByteString { get { return this.byteStringField; } set { this.byteStringField = value; } } /// public System.Xml.XmlElement XmlElement { get { return this.xmlElementField; } set { this.xmlElementField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public NodeId NodeId { get { return this.nodeIdField; } set { this.nodeIdField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public ExpandedNodeId ExpandedNodeId { get { return this.expandedNodeIdField; } set { this.expandedNodeIdField = value; } } /// public StatusCode StatusCode { get { return this.statusCodeField; } set { this.statusCodeField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public DiagnosticInfo DiagnosticInfo { get { return this.diagnosticInfoField; } set { this.diagnosticInfoField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public QualifiedName QualifiedName { get { return this.qualifiedNameField; } set { this.qualifiedNameField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public LocalizedText LocalizedText { get { return this.localizedTextField; } set { this.localizedTextField = value; } } /// public ExtensionObject ExtensionObject { get { return this.extensionObjectField; } set { this.extensionObjectField = value; } } /// public DataValue DataValue { get { return this.dataValueField; } set { this.dataValueField = value; } } /// public EnumeratedTestType EnumeratedValue { get { return this.enumeratedValueField; } set { this.enumeratedValueField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = true )] public partial class ListOfScalarTestType { private ScalarTestType[] scalarTestTypeField; /// [System.Xml.Serialization.XmlElementAttribute( "ScalarTestType", IsNullable = true )] public ScalarTestType[] ScalarTestType { get { return this.scalarTestTypeField; } set { this.scalarTestTypeField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class ArrayTestType { private bool[] booleansField; private sbyte[] sBytesField; private short[] int16sField; private ushort[] uInt16sField; private int[] int32sField; private uint[] uInt32sField; private long[] int64sField; private ulong[] uInt64sField; private float[] floatsField; private double[] doublesField; private string[] stringsField; private System.DateTime[] dateTimesField; private Guid[] guidsField; private byte[][] byteStringsField; private System.Xml.XmlElement xmlElementsField; private NodeId[] nodeIdsField; private ExpandedNodeId[] expandedNodeIdsField; private StatusCode[] statusCodesField; private DiagnosticInfo[] diagnosticInfosField; private QualifiedName[] qualifiedNamesField; private LocalizedText[] localizedTextsField; private ExtensionObject[] extensionObjectsField; private DataValue[] dataValuesField; private Variant[] variantsField; private System.Nullable[] enumeratedValuesField; /// [System.Xml.Serialization.XmlArrayItemAttribute( "Boolean", IsNullable = false )] public bool[] Booleans { get { return this.booleansField; } set { this.booleansField = value; } } /// [System.Xml.Serialization.XmlArrayItemAttribute( "SByte", IsNullable = false )] public sbyte[] SBytes { get { return this.sBytesField; } set { this.sBytesField = value; } } /// [System.Xml.Serialization.XmlArrayItemAttribute( "Int16", IsNullable = false )] public short[] Int16s { get { return this.int16sField; } set { this.int16sField = value; } } /// [System.Xml.Serialization.XmlArrayItemAttribute( "UInt16", IsNullable = false )] public ushort[] UInt16s { get { return this.uInt16sField; } set { this.uInt16sField = value; } } /// [System.Xml.Serialization.XmlArrayItemAttribute( "Int32", IsNullable = false )] public int[] Int32s { get { return this.int32sField; } set { this.int32sField = value; } } /// [System.Xml.Serialization.XmlArrayItemAttribute( "UInt32", IsNullable = false )] public uint[] UInt32s { get { return this.uInt32sField; } set { this.uInt32sField = value; } } /// [System.Xml.Serialization.XmlArrayItemAttribute( "Int64", IsNullable = false )] public long[] Int64s { get { return this.int64sField; } set { this.int64sField = value; } } /// [System.Xml.Serialization.XmlArrayItemAttribute( "UInt64", IsNullable = false )] public ulong[] UInt64s { get { return this.uInt64sField; } set { this.uInt64sField = value; } } /// [System.Xml.Serialization.XmlArrayItemAttribute( "Float", IsNullable = false )] public float[] Floats { get { return this.floatsField; } set { this.floatsField = value; } } /// [System.Xml.Serialization.XmlArrayItemAttribute( "Double", IsNullable = false )] public double[] Doubles { get { return this.doublesField; } set { this.doublesField = value; } } /// [System.Xml.Serialization.XmlArrayAttribute( IsNullable = true )] [System.Xml.Serialization.XmlArrayItemAttribute( "String", IsNullable = false )] public string[] Strings { get { return this.stringsField; } set { this.stringsField = value; } } /// [System.Xml.Serialization.XmlArrayItemAttribute( "DateTime", IsNullable = false )] public System.DateTime[] DateTimes { get { return this.dateTimesField; } set { this.dateTimesField = value; } } /// [System.Xml.Serialization.XmlArrayItemAttribute( IsNullable = false )] public Guid[] Guids { get { return this.guidsField; } set { this.guidsField = value; } } /// [System.Xml.Serialization.XmlArrayAttribute( IsNullable = true )] [System.Xml.Serialization.XmlArrayItemAttribute( "ByteString", DataType = "base64Binary" )] public byte[][] ByteStrings { get { return this.byteStringsField; } set { this.byteStringsField = value; } } /// public System.Xml.XmlElement XmlElements { get { return this.xmlElementsField; } set { this.xmlElementsField = value; } } /// [System.Xml.Serialization.XmlArrayAttribute( IsNullable = true )] public NodeId[] NodeIds { get { return this.nodeIdsField; } set { this.nodeIdsField = value; } } /// [System.Xml.Serialization.XmlArrayAttribute( IsNullable = true )] public ExpandedNodeId[] ExpandedNodeIds { get { return this.expandedNodeIdsField; } set { this.expandedNodeIdsField = value; } } /// public StatusCode[] StatusCodes { get { return this.statusCodesField; } set { this.statusCodesField = value; } } /// [System.Xml.Serialization.XmlArrayAttribute( IsNullable = true )] public DiagnosticInfo[] DiagnosticInfos { get { return this.diagnosticInfosField; } set { this.diagnosticInfosField = value; } } /// [System.Xml.Serialization.XmlArrayAttribute( IsNullable = true )] public QualifiedName[] QualifiedNames { get { return this.qualifiedNamesField; } set { this.qualifiedNamesField = value; } } /// [System.Xml.Serialization.XmlArrayAttribute( IsNullable = true )] public LocalizedText[] LocalizedTexts { get { return this.localizedTextsField; } set { this.localizedTextsField = value; } } /// public ExtensionObject[] ExtensionObjects { get { return this.extensionObjectsField; } set { this.extensionObjectsField = value; } } /// public DataValue[] DataValues { get { return this.dataValuesField; } set { this.dataValuesField = value; } } /// public Variant[] Variants { get { return this.variantsField; } set { this.variantsField = value; } } /// [System.Xml.Serialization.XmlArrayItemAttribute()] public System.Nullable[] EnumeratedValues { get { return this.enumeratedValuesField; } set { this.enumeratedValuesField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = true )] public partial class ListOfArrayTestType { private ArrayTestType[] arrayTestTypeField; /// [System.Xml.Serialization.XmlElementAttribute( "ArrayTestType", IsNullable = true )] public ArrayTestType[] ArrayTestType { get { return this.arrayTestTypeField; } set { this.arrayTestTypeField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class CompositeTestType { private ScalarTestType field1Field; private ArrayTestType field2Field; /// public ScalarTestType Field1 { get { return this.field1Field; } set { this.field1Field = value; } } /// public ArrayTestType Field2 { get { return this.field2Field; } set { this.field2Field = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class TestStackRequest { private RequestHeader requestHeaderField; private uint testIdField; private int iterationField; private Variant inputField; /// public RequestHeader RequestHeader { get { return this.requestHeaderField; } set { this.requestHeaderField = value; } } /// public uint TestId { get { return this.testIdField; } set { this.testIdField = value; } } /// public int Iteration { get { return this.iterationField; } set { this.iterationField = value; } } /// public Variant Input { get { return this.inputField; } set { this.inputField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class TestStackResponse { private ResponseHeader responseHeaderField; private Variant outputField; /// public ResponseHeader ResponseHeader { get { return this.responseHeaderField; } set { this.responseHeaderField = value; } } /// public Variant Output { get { return this.outputField; } set { this.outputField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class TestStackExRequest { private RequestHeader requestHeaderField; private uint testIdField; private int iterationField; private CompositeTestType inputField; /// public RequestHeader RequestHeader { get { return this.requestHeaderField; } set { this.requestHeaderField = value; } } /// public uint TestId { get { return this.testIdField; } set { this.testIdField = value; } } /// public int Iteration { get { return this.iterationField; } set { this.iterationField = value; } } /// public CompositeTestType Input { get { return this.inputField; } set { this.inputField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class TestStackExResponse { private ResponseHeader responseHeaderField; private CompositeTestType outputField; /// public ResponseHeader ResponseHeader { get { return this.responseHeaderField; } set { this.responseHeaderField = value; } } /// public CompositeTestType Output { get { return this.outputField; } set { this.outputField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class FindServersRequest { private RequestHeader requestHeaderField; private string endpointUrlField; private string[] localeIdsField; private string[] serverUrisField; /// public RequestHeader RequestHeader { get { return this.requestHeaderField; } set { this.requestHeaderField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public string EndpointUrl { get { return this.endpointUrlField; } set { this.endpointUrlField = value; } } /// [System.Xml.Serialization.XmlArrayAttribute( IsNullable = true )] [System.Xml.Serialization.XmlArrayItemAttribute( "String", IsNullable = false )] public string[] LocaleIds { get { return this.localeIdsField; } set { this.localeIdsField = value; } } /// [System.Xml.Serialization.XmlArrayAttribute( IsNullable = true )] [System.Xml.Serialization.XmlArrayItemAttribute( "String", IsNullable = false )] public string[] ServerUris { get { return this.serverUrisField; } set { this.serverUrisField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class FindServersResponse { private ResponseHeader responseHeaderField; private ApplicationDescription[] serversField; /// public ResponseHeader ResponseHeader { get { return this.responseHeaderField; } set { this.responseHeaderField = value; } } /// public ApplicationDescription[] Servers { get { return this.serversField; } set { this.serversField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class GetEndpointsRequest { private RequestHeader requestHeaderField; private string endpointUrlField; private string[] localeIdsField; private string[] profileUrisField; /// public RequestHeader RequestHeader { get { return this.requestHeaderField; } set { this.requestHeaderField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public string EndpointUrl { get { return this.endpointUrlField; } set { this.endpointUrlField = value; } } /// [System.Xml.Serialization.XmlArrayAttribute( IsNullable = true )] [System.Xml.Serialization.XmlArrayItemAttribute( "String", IsNullable = false )] public string[] LocaleIds { get { return this.localeIdsField; } set { this.localeIdsField = value; } } /// [System.Xml.Serialization.XmlArrayAttribute( IsNullable = true )] [System.Xml.Serialization.XmlArrayItemAttribute( "String", IsNullable = false )] public string[] ProfileUris { get { return this.profileUrisField; } set { this.profileUrisField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class GetEndpointsResponse { private ResponseHeader responseHeaderField; private EndpointDescription[] endpointsField; /// public ResponseHeader ResponseHeader { get { return this.responseHeaderField; } set { this.responseHeaderField = value; } } /// public EndpointDescription[] Endpoints { get { return this.endpointsField; } set { this.endpointsField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class RegisteredServer { private string serverUriField; private string productUriField; private LocalizedText[] serverNamesField; private ApplicationType serverTypeField; private string gatewayServerUriField; private string[] discoveryUrlsField; private string semaphoreFilePathField; private bool isOnlineField; /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public string ServerUri { get { return this.serverUriField; } set { this.serverUriField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public string ProductUri { get { return this.productUriField; } set { this.productUriField = value; } } /// [System.Xml.Serialization.XmlArrayAttribute( IsNullable = true )] public LocalizedText[] ServerNames { get { return this.serverNamesField; } set { this.serverNamesField = value; } } /// public ApplicationType ServerType { get { return this.serverTypeField; } set { this.serverTypeField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public string GatewayServerUri { get { return this.gatewayServerUriField; } set { this.gatewayServerUriField = value; } } /// [System.Xml.Serialization.XmlArrayAttribute( IsNullable = true )] [System.Xml.Serialization.XmlArrayItemAttribute( "String", IsNullable = false )] public string[] DiscoveryUrls { get { return this.discoveryUrlsField; } set { this.discoveryUrlsField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public string SemaphoreFilePath { get { return this.semaphoreFilePathField; } set { this.semaphoreFilePathField = value; } } /// public bool IsOnline { get { return this.isOnlineField; } set { this.isOnlineField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = true )] public partial class ListOfRegisteredServer { private RegisteredServer[] registeredServerField; /// [System.Xml.Serialization.XmlElementAttribute( "RegisteredServer", IsNullable = true )] public RegisteredServer[] RegisteredServer { get { return this.registeredServerField; } set { this.registeredServerField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class RegisterServerRequest { private RequestHeader requestHeaderField; private RegisteredServer serverField; /// public RequestHeader RequestHeader { get { return this.requestHeaderField; } set { this.requestHeaderField = value; } } /// public RegisteredServer Server { get { return this.serverField; } set { this.serverField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class RegisterServerResponse { private ResponseHeader responseHeaderField; /// public ResponseHeader ResponseHeader { get { return this.responseHeaderField; } set { this.responseHeaderField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class ChannelSecurityToken { private uint channelIdField; private uint tokenIdField; private System.DateTime createdAtField; private uint revisedLifetimeField; /// public uint ChannelId { get { return this.channelIdField; } set { this.channelIdField = value; } } /// public uint TokenId { get { return this.tokenIdField; } set { this.tokenIdField = value; } } /// public System.DateTime CreatedAt { get { return this.createdAtField; } set { this.createdAtField = value; } } /// public uint RevisedLifetime { get { return this.revisedLifetimeField; } set { this.revisedLifetimeField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class OpenSecureChannelRequest { private RequestHeader requestHeaderField; private uint clientProtocolVersionField; private SecurityTokenRequestType requestTypeField; private MessageSecurityMode securityModeField; private byte[] clientNonceField; private uint requestedLifetimeField; /// public RequestHeader RequestHeader { get { return this.requestHeaderField; } set { this.requestHeaderField = value; } } /// public uint ClientProtocolVersion { get { return this.clientProtocolVersionField; } set { this.clientProtocolVersionField = value; } } /// public SecurityTokenRequestType RequestType { get { return this.requestTypeField; } set { this.requestTypeField = value; } } /// public MessageSecurityMode SecurityMode { get { return this.securityModeField; } set { this.securityModeField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( DataType = "base64Binary", IsNullable = true )] public byte[] ClientNonce { get { return this.clientNonceField; } set { this.clientNonceField = value; } } /// public uint RequestedLifetime { get { return this.requestedLifetimeField; } set { this.requestedLifetimeField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class OpenSecureChannelResponse { private ResponseHeader responseHeaderField; private uint serverProtocolVersionField; private ChannelSecurityToken securityTokenField; private byte[] serverNonceField; /// public ResponseHeader ResponseHeader { get { return this.responseHeaderField; } set { this.responseHeaderField = value; } } /// public uint ServerProtocolVersion { get { return this.serverProtocolVersionField; } set { this.serverProtocolVersionField = value; } } /// public ChannelSecurityToken SecurityToken { get { return this.securityTokenField; } set { this.securityTokenField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( DataType = "base64Binary", IsNullable = true )] public byte[] ServerNonce { get { return this.serverNonceField; } set { this.serverNonceField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class CloseSecureChannelRequest { private RequestHeader requestHeaderField; /// public RequestHeader RequestHeader { get { return this.requestHeaderField; } set { this.requestHeaderField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class CloseSecureChannelResponse { private ResponseHeader responseHeaderField; /// public ResponseHeader ResponseHeader { get { return this.responseHeaderField; } set { this.responseHeaderField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class SignatureData { private string algorithmField; private byte[] signatureField; /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public string Algorithm { get { return this.algorithmField; } set { this.algorithmField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( DataType = "base64Binary", IsNullable = true )] public byte[] Signature { get { return this.signatureField; } set { this.signatureField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class CreateSessionRequest { private RequestHeader requestHeaderField; private ApplicationDescription clientDescriptionField; private string serverUriField; private string endpointUrlField; private string sessionNameField; private byte[] clientNonceField; private byte[] clientCertificateField; private double requestedSessionTimeoutField; private uint maxResponseMessageSizeField; /// public RequestHeader RequestHeader { get { return this.requestHeaderField; } set { this.requestHeaderField = value; } } /// public ApplicationDescription ClientDescription { get { return this.clientDescriptionField; } set { this.clientDescriptionField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public string ServerUri { get { return this.serverUriField; } set { this.serverUriField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public string EndpointUrl { get { return this.endpointUrlField; } set { this.endpointUrlField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public string SessionName { get { return this.sessionNameField; } set { this.sessionNameField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( DataType = "base64Binary", IsNullable = true )] public byte[] ClientNonce { get { return this.clientNonceField; } set { this.clientNonceField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( DataType = "base64Binary", IsNullable = true )] public byte[] ClientCertificate { get { return this.clientCertificateField; } set { this.clientCertificateField = value; } } /// public double RequestedSessionTimeout { get { return this.requestedSessionTimeoutField; } set { this.requestedSessionTimeoutField = value; } } /// public uint MaxResponseMessageSize { get { return this.maxResponseMessageSizeField; } set { this.maxResponseMessageSizeField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class CreateSessionResponse { private ResponseHeader responseHeaderField; private NodeId sessionIdField; private NodeId authenticationTokenField; private double revisedSessionTimeoutField; private byte[] serverNonceField; private byte[] serverCertificateField; private EndpointDescription[] serverEndpointsField; private SignedSoftwareCertificate[] serverSoftwareCertificatesField; private SignatureData serverSignatureField; private uint maxRequestMessageSizeField; /// public ResponseHeader ResponseHeader { get { return this.responseHeaderField; } set { this.responseHeaderField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public NodeId SessionId { get { return this.sessionIdField; } set { this.sessionIdField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public NodeId AuthenticationToken { get { return this.authenticationTokenField; } set { this.authenticationTokenField = value; } } /// public double RevisedSessionTimeout { get { return this.revisedSessionTimeoutField; } set { this.revisedSessionTimeoutField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( DataType = "base64Binary", IsNullable = true )] public byte[] ServerNonce { get { return this.serverNonceField; } set { this.serverNonceField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( DataType = "base64Binary", IsNullable = true )] public byte[] ServerCertificate { get { return this.serverCertificateField; } set { this.serverCertificateField = value; } } /// public EndpointDescription[] ServerEndpoints { get { return this.serverEndpointsField; } set { this.serverEndpointsField = value; } } /// public SignedSoftwareCertificate[] ServerSoftwareCertificates { get { return this.serverSoftwareCertificatesField; } set { this.serverSoftwareCertificatesField = value; } } /// public SignatureData ServerSignature { get { return this.serverSignatureField; } set { this.serverSignatureField = value; } } /// public uint MaxRequestMessageSize { get { return this.maxRequestMessageSizeField; } set { this.maxRequestMessageSizeField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class ActivateSessionRequest { private RequestHeader requestHeaderField; private SignatureData clientSignatureField; private SignedSoftwareCertificate[] clientSoftwareCertificatesField; private string[] localeIdsField; private ExtensionObject userIdentityTokenField; private SignatureData userTokenSignatureField; /// public RequestHeader RequestHeader { get { return this.requestHeaderField; } set { this.requestHeaderField = value; } } /// public SignatureData ClientSignature { get { return this.clientSignatureField; } set { this.clientSignatureField = value; } } /// public SignedSoftwareCertificate[] ClientSoftwareCertificates { get { return this.clientSoftwareCertificatesField; } set { this.clientSoftwareCertificatesField = value; } } /// [System.Xml.Serialization.XmlArrayAttribute( IsNullable = true )] [System.Xml.Serialization.XmlArrayItemAttribute( "String", IsNullable = false )] public string[] LocaleIds { get { return this.localeIdsField; } set { this.localeIdsField = value; } } /// public ExtensionObject UserIdentityToken { get { return this.userIdentityTokenField; } set { this.userIdentityTokenField = value; } } /// public SignatureData UserTokenSignature { get { return this.userTokenSignatureField; } set { this.userTokenSignatureField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class ActivateSessionResponse { private ResponseHeader responseHeaderField; private byte[] serverNonceField; private StatusCode[] resultsField; private DiagnosticInfo[] diagnosticInfosField; /// public ResponseHeader ResponseHeader { get { return this.responseHeaderField; } set { this.responseHeaderField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( DataType = "base64Binary", IsNullable = true )] public byte[] ServerNonce { get { return this.serverNonceField; } set { this.serverNonceField = value; } } /// public StatusCode[] Results { get { return this.resultsField; } set { this.resultsField = value; } } /// [System.Xml.Serialization.XmlArrayAttribute( IsNullable = true )] public DiagnosticInfo[] DiagnosticInfos { get { return this.diagnosticInfosField; } set { this.diagnosticInfosField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class CloseSessionRequest { private RequestHeader requestHeaderField; private bool deleteSubscriptionsField; /// public RequestHeader RequestHeader { get { return this.requestHeaderField; } set { this.requestHeaderField = value; } } /// public bool DeleteSubscriptions { get { return this.deleteSubscriptionsField; } set { this.deleteSubscriptionsField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class CloseSessionResponse { private ResponseHeader responseHeaderField; /// public ResponseHeader ResponseHeader { get { return this.responseHeaderField; } set { this.responseHeaderField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class CancelRequest { private RequestHeader requestHeaderField; private uint requestHandleField; /// public RequestHeader RequestHeader { get { return this.requestHeaderField; } set { this.requestHeaderField = value; } } /// public uint RequestHandle { get { return this.requestHandleField; } set { this.requestHandleField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class CancelResponse { private ResponseHeader responseHeaderField; private uint cancelCountField; /// public ResponseHeader ResponseHeader { get { return this.responseHeaderField; } set { this.responseHeaderField = value; } } /// public uint CancelCount { get { return this.cancelCountField; } set { this.cancelCountField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class AddNodesResult { private StatusCode statusCodeField; private NodeId addedNodeIdField; /// public StatusCode StatusCode { get { return this.statusCodeField; } set { this.statusCodeField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public NodeId AddedNodeId { get { return this.addedNodeIdField; } set { this.addedNodeIdField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = true )] public partial class ListOfAddNodesResult { private AddNodesResult[] addNodesResultField; /// [System.Xml.Serialization.XmlElementAttribute( "AddNodesResult", IsNullable = true )] public AddNodesResult[] AddNodesResult { get { return this.addNodesResultField; } set { this.addNodesResultField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class AddNodesRequest { private RequestHeader requestHeaderField; private AddNodesItem[] nodesToAddField; /// public RequestHeader RequestHeader { get { return this.requestHeaderField; } set { this.requestHeaderField = value; } } /// public AddNodesItem[] NodesToAdd { get { return this.nodesToAddField; } set { this.nodesToAddField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class AddNodesResponse { private ResponseHeader responseHeaderField; private AddNodesResult[] resultsField; private DiagnosticInfo[] diagnosticInfosField; /// public ResponseHeader ResponseHeader { get { return this.responseHeaderField; } set { this.responseHeaderField = value; } } /// public AddNodesResult[] Results { get { return this.resultsField; } set { this.resultsField = value; } } /// [System.Xml.Serialization.XmlArrayAttribute( IsNullable = true )] public DiagnosticInfo[] DiagnosticInfos { get { return this.diagnosticInfosField; } set { this.diagnosticInfosField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class AddReferencesRequest { private RequestHeader requestHeaderField; private AddReferencesItem[] referencesToAddField; /// public RequestHeader RequestHeader { get { return this.requestHeaderField; } set { this.requestHeaderField = value; } } /// public AddReferencesItem[] ReferencesToAdd { get { return this.referencesToAddField; } set { this.referencesToAddField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class AddReferencesResponse { private ResponseHeader responseHeaderField; private StatusCode[] resultsField; private DiagnosticInfo[] diagnosticInfosField; /// public ResponseHeader ResponseHeader { get { return this.responseHeaderField; } set { this.responseHeaderField = value; } } /// public StatusCode[] Results { get { return this.resultsField; } set { this.resultsField = value; } } /// [System.Xml.Serialization.XmlArrayAttribute( IsNullable = true )] public DiagnosticInfo[] DiagnosticInfos { get { return this.diagnosticInfosField; } set { this.diagnosticInfosField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class DeleteNodesRequest { private RequestHeader requestHeaderField; private DeleteNodesItem[] nodesToDeleteField; /// public RequestHeader RequestHeader { get { return this.requestHeaderField; } set { this.requestHeaderField = value; } } /// public DeleteNodesItem[] NodesToDelete { get { return this.nodesToDeleteField; } set { this.nodesToDeleteField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class DeleteNodesResponse { private ResponseHeader responseHeaderField; private StatusCode[] resultsField; private DiagnosticInfo[] diagnosticInfosField; /// public ResponseHeader ResponseHeader { get { return this.responseHeaderField; } set { this.responseHeaderField = value; } } /// public StatusCode[] Results { get { return this.resultsField; } set { this.resultsField = value; } } /// [System.Xml.Serialization.XmlArrayAttribute( IsNullable = true )] public DiagnosticInfo[] DiagnosticInfos { get { return this.diagnosticInfosField; } set { this.diagnosticInfosField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class DeleteReferencesRequest { private RequestHeader requestHeaderField; private DeleteReferencesItem[] referencesToDeleteField; /// public RequestHeader RequestHeader { get { return this.requestHeaderField; } set { this.requestHeaderField = value; } } /// public DeleteReferencesItem[] ReferencesToDelete { get { return this.referencesToDeleteField; } set { this.referencesToDeleteField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class DeleteReferencesResponse { private ResponseHeader responseHeaderField; private StatusCode[] resultsField; private DiagnosticInfo[] diagnosticInfosField; /// public ResponseHeader ResponseHeader { get { return this.responseHeaderField; } set { this.responseHeaderField = value; } } /// public StatusCode[] Results { get { return this.resultsField; } set { this.resultsField = value; } } /// [System.Xml.Serialization.XmlArrayAttribute( IsNullable = true )] public DiagnosticInfo[] DiagnosticInfos { get { return this.diagnosticInfosField; } set { this.diagnosticInfosField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public enum BrowseDirection { /// Forward_0, /// Inverse_1, /// Both_2, } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class ViewDescription { private NodeId viewIdField; private System.DateTime timestampField; private uint viewVersionField; /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public NodeId ViewId { get { return this.viewIdField; } set { this.viewIdField = value; } } /// public System.DateTime Timestamp { get { return this.timestampField; } set { this.timestampField = value; } } /// public uint ViewVersion { get { return this.viewVersionField; } set { this.viewVersionField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class BrowseDescription { private NodeId nodeIdField; private BrowseDirection browseDirectionField; private NodeId referenceTypeIdField; private bool includeSubtypesField; private uint nodeClassMaskField; private uint resultMaskField; /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public NodeId NodeId { get { return this.nodeIdField; } set { this.nodeIdField = value; } } /// public BrowseDirection BrowseDirection { get { return this.browseDirectionField; } set { this.browseDirectionField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public NodeId ReferenceTypeId { get { return this.referenceTypeIdField; } set { this.referenceTypeIdField = value; } } /// public bool IncludeSubtypes { get { return this.includeSubtypesField; } set { this.includeSubtypesField = value; } } /// public uint NodeClassMask { get { return this.nodeClassMaskField; } set { this.nodeClassMaskField = value; } } /// public uint ResultMask { get { return this.resultMaskField; } set { this.resultMaskField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = true )] public partial class ListOfBrowseDescription { private BrowseDescription[] browseDescriptionField; /// [System.Xml.Serialization.XmlElementAttribute( "BrowseDescription", IsNullable = true )] public BrowseDescription[] BrowseDescription { get { return this.browseDescriptionField; } set { this.browseDescriptionField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public enum BrowseResultMask { /// None_0, /// ReferenceTypeId_1, /// IsForward_2, /// NodeClass_4, /// BrowseName_8, /// DisplayName_16, /// TypeDefinition_32, /// All_63, /// ReferenceTypeInfo_3, /// TargetInfo_60, } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class ReferenceDescription { private NodeId referenceTypeIdField; private bool isForwardField; private ExpandedNodeId nodeIdField; private QualifiedName browseNameField; private LocalizedText displayNameField; private NodeClass nodeClassField; private ExpandedNodeId typeDefinitionField; /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public NodeId ReferenceTypeId { get { return this.referenceTypeIdField; } set { this.referenceTypeIdField = value; } } /// public bool IsForward { get { return this.isForwardField; } set { this.isForwardField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public ExpandedNodeId NodeId { get { return this.nodeIdField; } set { this.nodeIdField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public QualifiedName BrowseName { get { return this.browseNameField; } set { this.browseNameField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public LocalizedText DisplayName { get { return this.displayNameField; } set { this.displayNameField = value; } } /// public NodeClass NodeClass { get { return this.nodeClassField; } set { this.nodeClassField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public ExpandedNodeId TypeDefinition { get { return this.typeDefinitionField; } set { this.typeDefinitionField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = true )] public partial class ListOfReferenceDescription { private ReferenceDescription[] referenceDescriptionField; /// [System.Xml.Serialization.XmlElementAttribute( "ReferenceDescription", IsNullable = true )] public ReferenceDescription[] ReferenceDescription { get { return this.referenceDescriptionField; } set { this.referenceDescriptionField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class BrowseResult { private StatusCode statusCodeField; private byte[] continuationPointField; private ReferenceDescription[] referencesField; /// public StatusCode StatusCode { get { return this.statusCodeField; } set { this.statusCodeField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( DataType = "base64Binary", IsNullable = true )] public byte[] ContinuationPoint { get { return this.continuationPointField; } set { this.continuationPointField = value; } } /// public ReferenceDescription[] References { get { return this.referencesField; } set { this.referencesField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = true )] public partial class ListOfBrowseResult { private BrowseResult[] browseResultField; /// [System.Xml.Serialization.XmlElementAttribute( "BrowseResult", IsNullable = true )] public BrowseResult[] BrowseResult { get { return this.browseResultField; } set { this.browseResultField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class BrowseRequest { private RequestHeader requestHeaderField; private ViewDescription viewField; private uint requestedMaxReferencesPerNodeField; private BrowseDescription[] nodesToBrowseField; /// public RequestHeader RequestHeader { get { return this.requestHeaderField; } set { this.requestHeaderField = value; } } /// public ViewDescription View { get { return this.viewField; } set { this.viewField = value; } } /// public uint RequestedMaxReferencesPerNode { get { return this.requestedMaxReferencesPerNodeField; } set { this.requestedMaxReferencesPerNodeField = value; } } /// public BrowseDescription[] NodesToBrowse { get { return this.nodesToBrowseField; } set { this.nodesToBrowseField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class BrowseResponse { private ResponseHeader responseHeaderField; private BrowseResult[] resultsField; private DiagnosticInfo[] diagnosticInfosField; /// public ResponseHeader ResponseHeader { get { return this.responseHeaderField; } set { this.responseHeaderField = value; } } /// public BrowseResult[] Results { get { return this.resultsField; } set { this.resultsField = value; } } /// [System.Xml.Serialization.XmlArrayAttribute( IsNullable = true )] public DiagnosticInfo[] DiagnosticInfos { get { return this.diagnosticInfosField; } set { this.diagnosticInfosField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class BrowseNextRequest { private RequestHeader requestHeaderField; private bool releaseContinuationPointsField; private byte[][] continuationPointsField; /// public RequestHeader RequestHeader { get { return this.requestHeaderField; } set { this.requestHeaderField = value; } } /// public bool ReleaseContinuationPoints { get { return this.releaseContinuationPointsField; } set { this.releaseContinuationPointsField = value; } } /// [System.Xml.Serialization.XmlArrayAttribute( IsNullable = true )] [System.Xml.Serialization.XmlArrayItemAttribute( "ByteString", DataType = "base64Binary" )] public byte[][] ContinuationPoints { get { return this.continuationPointsField; } set { this.continuationPointsField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class BrowseNextResponse { private ResponseHeader responseHeaderField; private BrowseResult[] resultsField; private DiagnosticInfo[] diagnosticInfosField; /// public ResponseHeader ResponseHeader { get { return this.responseHeaderField; } set { this.responseHeaderField = value; } } /// public BrowseResult[] Results { get { return this.resultsField; } set { this.resultsField = value; } } /// [System.Xml.Serialization.XmlArrayAttribute( IsNullable = true )] public DiagnosticInfo[] DiagnosticInfos { get { return this.diagnosticInfosField; } set { this.diagnosticInfosField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class RelativePathElement { private NodeId referenceTypeIdField; private bool isInverseField; private bool includeSubtypesField; private QualifiedName targetNameField; /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public NodeId ReferenceTypeId { get { return this.referenceTypeIdField; } set { this.referenceTypeIdField = value; } } /// public bool IsInverse { get { return this.isInverseField; } set { this.isInverseField = value; } } /// public bool IncludeSubtypes { get { return this.includeSubtypesField; } set { this.includeSubtypesField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public QualifiedName TargetName { get { return this.targetNameField; } set { this.targetNameField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = true )] public partial class ListOfRelativePathElement { private RelativePathElement[] relativePathElementField; /// [System.Xml.Serialization.XmlElementAttribute( "RelativePathElement", IsNullable = true )] public RelativePathElement[] RelativePathElement { get { return this.relativePathElementField; } set { this.relativePathElementField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class RelativePath { private RelativePathElement[] elementsField; /// public RelativePathElement[] Elements { get { return this.elementsField; } set { this.elementsField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class BrowsePath { private NodeId startingNodeField; private RelativePath relativePathField; /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public NodeId StartingNode { get { return this.startingNodeField; } set { this.startingNodeField = value; } } /// public RelativePath RelativePath { get { return this.relativePathField; } set { this.relativePathField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = true )] public partial class ListOfBrowsePath { private BrowsePath[] browsePathField; /// [System.Xml.Serialization.XmlElementAttribute( "BrowsePath", IsNullable = true )] public BrowsePath[] BrowsePath { get { return this.browsePathField; } set { this.browsePathField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class BrowsePathTarget { private ExpandedNodeId targetIdField; private uint remainingPathIndexField; /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public ExpandedNodeId TargetId { get { return this.targetIdField; } set { this.targetIdField = value; } } /// public uint RemainingPathIndex { get { return this.remainingPathIndexField; } set { this.remainingPathIndexField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = true )] public partial class ListOfBrowsePathTarget { private BrowsePathTarget[] browsePathTargetField; /// [System.Xml.Serialization.XmlElementAttribute( "BrowsePathTarget", IsNullable = true )] public BrowsePathTarget[] BrowsePathTarget { get { return this.browsePathTargetField; } set { this.browsePathTargetField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class BrowsePathResult { private StatusCode statusCodeField; private BrowsePathTarget[] targetsField; /// public StatusCode StatusCode { get { return this.statusCodeField; } set { this.statusCodeField = value; } } /// public BrowsePathTarget[] Targets { get { return this.targetsField; } set { this.targetsField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = true )] public partial class ListOfBrowsePathResult { private BrowsePathResult[] browsePathResultField; /// [System.Xml.Serialization.XmlElementAttribute( "BrowsePathResult", IsNullable = true )] public BrowsePathResult[] BrowsePathResult { get { return this.browsePathResultField; } set { this.browsePathResultField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class TranslateBrowsePathsToNodeIdsRequest { private RequestHeader requestHeaderField; private BrowsePath[] browsePathsField; /// public RequestHeader RequestHeader { get { return this.requestHeaderField; } set { this.requestHeaderField = value; } } /// public BrowsePath[] BrowsePaths { get { return this.browsePathsField; } set { this.browsePathsField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class TranslateBrowsePathsToNodeIdsResponse { private ResponseHeader responseHeaderField; private BrowsePathResult[] resultsField; private DiagnosticInfo[] diagnosticInfosField; /// public ResponseHeader ResponseHeader { get { return this.responseHeaderField; } set { this.responseHeaderField = value; } } /// public BrowsePathResult[] Results { get { return this.resultsField; } set { this.resultsField = value; } } /// [System.Xml.Serialization.XmlArrayAttribute( IsNullable = true )] public DiagnosticInfo[] DiagnosticInfos { get { return this.diagnosticInfosField; } set { this.diagnosticInfosField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class RegisterNodesRequest { private RequestHeader requestHeaderField; private NodeId[] nodesToRegisterField; /// public RequestHeader RequestHeader { get { return this.requestHeaderField; } set { this.requestHeaderField = value; } } /// [System.Xml.Serialization.XmlArrayAttribute( IsNullable = true )] public NodeId[] NodesToRegister { get { return this.nodesToRegisterField; } set { this.nodesToRegisterField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class RegisterNodesResponse { private ResponseHeader responseHeaderField; private NodeId[] registeredNodeIdsField; /// public ResponseHeader ResponseHeader { get { return this.responseHeaderField; } set { this.responseHeaderField = value; } } /// [System.Xml.Serialization.XmlArrayAttribute( IsNullable = true )] public NodeId[] RegisteredNodeIds { get { return this.registeredNodeIdsField; } set { this.registeredNodeIdsField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class UnregisterNodesRequest { private RequestHeader requestHeaderField; private NodeId[] nodesToUnregisterField; /// public RequestHeader RequestHeader { get { return this.requestHeaderField; } set { this.requestHeaderField = value; } } /// [System.Xml.Serialization.XmlArrayAttribute( IsNullable = true )] public NodeId[] NodesToUnregister { get { return this.nodesToUnregisterField; } set { this.nodesToUnregisterField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class UnregisterNodesResponse { private ResponseHeader responseHeaderField; /// public ResponseHeader ResponseHeader { get { return this.responseHeaderField; } set { this.responseHeaderField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class QueryDataDescription { private RelativePath relativePathField; private uint attributeIdField; private string indexRangeField; /// public RelativePath RelativePath { get { return this.relativePathField; } set { this.relativePathField = value; } } /// public uint AttributeId { get { return this.attributeIdField; } set { this.attributeIdField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public string IndexRange { get { return this.indexRangeField; } set { this.indexRangeField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = true )] public partial class ListOfQueryDataDescription { private QueryDataDescription[] queryDataDescriptionField; /// [System.Xml.Serialization.XmlElementAttribute( "QueryDataDescription", IsNullable = true )] public QueryDataDescription[] QueryDataDescription { get { return this.queryDataDescriptionField; } set { this.queryDataDescriptionField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class NodeTypeDescription { private ExpandedNodeId typeDefinitionNodeField; private bool includeSubTypesField; private QueryDataDescription[] dataToReturnField; /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public ExpandedNodeId TypeDefinitionNode { get { return this.typeDefinitionNodeField; } set { this.typeDefinitionNodeField = value; } } /// public bool IncludeSubTypes { get { return this.includeSubTypesField; } set { this.includeSubTypesField = value; } } /// public QueryDataDescription[] DataToReturn { get { return this.dataToReturnField; } set { this.dataToReturnField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = true )] public partial class ListOfNodeTypeDescription { private NodeTypeDescription[] nodeTypeDescriptionField; /// [System.Xml.Serialization.XmlElementAttribute( "NodeTypeDescription", IsNullable = true )] public NodeTypeDescription[] NodeTypeDescription { get { return this.nodeTypeDescriptionField; } set { this.nodeTypeDescriptionField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public enum 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, } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class QueryDataSet { private ExpandedNodeId nodeIdField; private ExpandedNodeId typeDefinitionNodeField; private Variant[] valuesField; /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public ExpandedNodeId NodeId { get { return this.nodeIdField; } set { this.nodeIdField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public ExpandedNodeId TypeDefinitionNode { get { return this.typeDefinitionNodeField; } set { this.typeDefinitionNodeField = value; } } /// public Variant[] Values { get { return this.valuesField; } set { this.valuesField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = true )] public partial class ListOfQueryDataSet { private QueryDataSet[] queryDataSetField; /// [System.Xml.Serialization.XmlElementAttribute( "QueryDataSet", IsNullable = true )] public QueryDataSet[] QueryDataSet { get { return this.queryDataSetField; } set { this.queryDataSetField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class NodeReference { private NodeId nodeIdField; private NodeId referenceTypeIdField; private bool isForwardField; private NodeId[] referencedNodeIdsField; /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public NodeId NodeId { get { return this.nodeIdField; } set { this.nodeIdField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public NodeId ReferenceTypeId { get { return this.referenceTypeIdField; } set { this.referenceTypeIdField = value; } } /// public bool IsForward { get { return this.isForwardField; } set { this.isForwardField = value; } } /// [System.Xml.Serialization.XmlArrayAttribute( IsNullable = true )] public NodeId[] ReferencedNodeIds { get { return this.referencedNodeIdsField; } set { this.referencedNodeIdsField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = true )] public partial class ListOfNodeReference { private NodeReference[] nodeReferenceField; /// [System.Xml.Serialization.XmlElementAttribute( "NodeReference", IsNullable = true )] public NodeReference[] NodeReference { get { return this.nodeReferenceField; } set { this.nodeReferenceField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class ContentFilterElement { private FilterOperator filterOperatorField; private ExtensionObject[] filterOperandsField; /// public FilterOperator FilterOperator { get { return this.filterOperatorField; } set { this.filterOperatorField = value; } } /// public ExtensionObject[] FilterOperands { get { return this.filterOperandsField; } set { this.filterOperandsField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = true )] public partial class ListOfContentFilterElement { private ContentFilterElement[] contentFilterElementField; /// [System.Xml.Serialization.XmlElementAttribute( "ContentFilterElement", IsNullable = true )] public ContentFilterElement[] ContentFilterElement { get { return this.contentFilterElementField; } set { this.contentFilterElementField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class ContentFilter { private ContentFilterElement[] elementsField; /// public ContentFilterElement[] Elements { get { return this.elementsField; } set { this.elementsField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = true )] public partial class ListOfContentFilter { private ContentFilter[] contentFilterField; /// [System.Xml.Serialization.XmlElementAttribute( "ContentFilter", IsNullable = true )] public ContentFilter[] ContentFilter { get { return this.contentFilterField; } set { this.contentFilterField = value; } } } /// [System.Xml.Serialization.XmlIncludeAttribute( typeof( SimpleAttributeOperand ) )] [System.Xml.Serialization.XmlIncludeAttribute( typeof( AttributeOperand ) )] [System.Xml.Serialization.XmlIncludeAttribute( typeof( LiteralOperand ) )] [System.Xml.Serialization.XmlIncludeAttribute( typeof( ElementOperand ) )] [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class FilterOperand { } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class ElementOperand: FilterOperand { private uint indexField; /// public uint Index { get { return this.indexField; } set { this.indexField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class LiteralOperand: FilterOperand { private Variant valueField; /// public Variant Value { get { return this.valueField; } set { this.valueField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class AttributeOperand: FilterOperand { private NodeId nodeIdField; private string aliasField; private RelativePath browsePathField; private uint attributeIdField; private string indexRangeField; /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public NodeId NodeId { get { return this.nodeIdField; } set { this.nodeIdField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public string Alias { get { return this.aliasField; } set { this.aliasField = value; } } /// public RelativePath BrowsePath { get { return this.browsePathField; } set { this.browsePathField = value; } } /// public uint AttributeId { get { return this.attributeIdField; } set { this.attributeIdField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public string IndexRange { get { return this.indexRangeField; } set { this.indexRangeField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class SimpleAttributeOperand: FilterOperand { private NodeId typeDefinitionIdField; private QualifiedName[] browsePathField; private uint attributeIdField; private string indexRangeField; /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public NodeId TypeDefinitionId { get { return this.typeDefinitionIdField; } set { this.typeDefinitionIdField = value; } } /// [System.Xml.Serialization.XmlArrayAttribute( IsNullable = true )] public QualifiedName[] BrowsePath { get { return this.browsePathField; } set { this.browsePathField = value; } } /// public uint AttributeId { get { return this.attributeIdField; } set { this.attributeIdField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public string IndexRange { get { return this.indexRangeField; } set { this.indexRangeField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = true )] public partial class ListOfSimpleAttributeOperand { private SimpleAttributeOperand[] simpleAttributeOperandField; /// [System.Xml.Serialization.XmlElementAttribute( "SimpleAttributeOperand", IsNullable = true )] public SimpleAttributeOperand[] SimpleAttributeOperand { get { return this.simpleAttributeOperandField; } set { this.simpleAttributeOperandField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class ContentFilterElementResult { private StatusCode statusCodeField; private StatusCode[] operandStatusCodesField; private DiagnosticInfo[] operandDiagnosticInfosField; /// public StatusCode StatusCode { get { return this.statusCodeField; } set { this.statusCodeField = value; } } /// public StatusCode[] OperandStatusCodes { get { return this.operandStatusCodesField; } set { this.operandStatusCodesField = value; } } /// [System.Xml.Serialization.XmlArrayAttribute( IsNullable = true )] public DiagnosticInfo[] OperandDiagnosticInfos { get { return this.operandDiagnosticInfosField; } set { this.operandDiagnosticInfosField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = true )] public partial class ListOfContentFilterElementResult { private ContentFilterElementResult[] contentFilterElementResultField; /// [System.Xml.Serialization.XmlElementAttribute( "ContentFilterElementResult", IsNullable = true )] public ContentFilterElementResult[] ContentFilterElementResult { get { return this.contentFilterElementResultField; } set { this.contentFilterElementResultField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class ContentFilterResult { private ContentFilterElementResult[] elementResultsField; private DiagnosticInfo[] elementDiagnosticInfosField; /// public ContentFilterElementResult[] ElementResults { get { return this.elementResultsField; } set { this.elementResultsField = value; } } /// [System.Xml.Serialization.XmlArrayAttribute( IsNullable = true )] public DiagnosticInfo[] ElementDiagnosticInfos { get { return this.elementDiagnosticInfosField; } set { this.elementDiagnosticInfosField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class ParsingResult { private StatusCode statusCodeField; private StatusCode[] dataStatusCodesField; private DiagnosticInfo[] dataDiagnosticInfosField; /// public StatusCode StatusCode { get { return this.statusCodeField; } set { this.statusCodeField = value; } } /// public StatusCode[] DataStatusCodes { get { return this.dataStatusCodesField; } set { this.dataStatusCodesField = value; } } /// [System.Xml.Serialization.XmlArrayAttribute( IsNullable = true )] public DiagnosticInfo[] DataDiagnosticInfos { get { return this.dataDiagnosticInfosField; } set { this.dataDiagnosticInfosField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = true )] public partial class ListOfParsingResult { private ParsingResult[] parsingResultField; /// [System.Xml.Serialization.XmlElementAttribute( "ParsingResult", IsNullable = true )] public ParsingResult[] ParsingResult { get { return this.parsingResultField; } set { this.parsingResultField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class QueryFirstRequest { private RequestHeader requestHeaderField; private ViewDescription viewField; private NodeTypeDescription[] nodeTypesField; private ContentFilter filterField; private uint maxDataSetsToReturnField; private uint maxReferencesToReturnField; /// public RequestHeader RequestHeader { get { return this.requestHeaderField; } set { this.requestHeaderField = value; } } /// public ViewDescription View { get { return this.viewField; } set { this.viewField = value; } } /// public NodeTypeDescription[] NodeTypes { get { return this.nodeTypesField; } set { this.nodeTypesField = value; } } /// public ContentFilter Filter { get { return this.filterField; } set { this.filterField = value; } } /// public uint MaxDataSetsToReturn { get { return this.maxDataSetsToReturnField; } set { this.maxDataSetsToReturnField = value; } } /// public uint MaxReferencesToReturn { get { return this.maxReferencesToReturnField; } set { this.maxReferencesToReturnField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class QueryFirstResponse { private ResponseHeader responseHeaderField; private QueryDataSet[] queryDataSetsField; private byte[] continuationPointField; private ParsingResult[] parsingResultsField; private DiagnosticInfo[] diagnosticInfosField; private ContentFilterResult filterResultField; /// public ResponseHeader ResponseHeader { get { return this.responseHeaderField; } set { this.responseHeaderField = value; } } /// public QueryDataSet[] QueryDataSets { get { return this.queryDataSetsField; } set { this.queryDataSetsField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( DataType = "base64Binary", IsNullable = true )] public byte[] ContinuationPoint { get { return this.continuationPointField; } set { this.continuationPointField = value; } } /// public ParsingResult[] ParsingResults { get { return this.parsingResultsField; } set { this.parsingResultsField = value; } } /// [System.Xml.Serialization.XmlArrayAttribute( IsNullable = true )] public DiagnosticInfo[] DiagnosticInfos { get { return this.diagnosticInfosField; } set { this.diagnosticInfosField = value; } } /// public ContentFilterResult FilterResult { get { return this.filterResultField; } set { this.filterResultField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class QueryNextRequest { private RequestHeader requestHeaderField; private bool releaseContinuationPointField; private byte[] continuationPointField; /// public RequestHeader RequestHeader { get { return this.requestHeaderField; } set { this.requestHeaderField = value; } } /// public bool ReleaseContinuationPoint { get { return this.releaseContinuationPointField; } set { this.releaseContinuationPointField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( DataType = "base64Binary", IsNullable = true )] public byte[] ContinuationPoint { get { return this.continuationPointField; } set { this.continuationPointField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class QueryNextResponse { private ResponseHeader responseHeaderField; private QueryDataSet[] queryDataSetsField; private byte[] revisedContinuationPointField; /// public ResponseHeader ResponseHeader { get { return this.responseHeaderField; } set { this.responseHeaderField = value; } } /// public QueryDataSet[] QueryDataSets { get { return this.queryDataSetsField; } set { this.queryDataSetsField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( DataType = "base64Binary", IsNullable = true )] public byte[] RevisedContinuationPoint { get { return this.revisedContinuationPointField; } set { this.revisedContinuationPointField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public enum TimestampsToReturn { /// Source_0, /// Server_1, /// Both_2, /// Neither_3, } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class ReadValueId { private NodeId nodeIdField; private uint attributeIdField; private string indexRangeField; private QualifiedName dataEncodingField; /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public NodeId NodeId { get { return this.nodeIdField; } set { this.nodeIdField = value; } } /// public uint AttributeId { get { return this.attributeIdField; } set { this.attributeIdField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public string IndexRange { get { return this.indexRangeField; } set { this.indexRangeField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public QualifiedName DataEncoding { get { return this.dataEncodingField; } set { this.dataEncodingField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = true )] public partial class ListOfReadValueId { private ReadValueId[] readValueIdField; /// [System.Xml.Serialization.XmlElementAttribute( "ReadValueId", IsNullable = true )] public ReadValueId[] ReadValueId { get { return this.readValueIdField; } set { this.readValueIdField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class ReadRequest { private RequestHeader requestHeaderField; private double maxAgeField; private TimestampsToReturn timestampsToReturnField; private ReadValueId[] nodesToReadField; /// public RequestHeader RequestHeader { get { return this.requestHeaderField; } set { this.requestHeaderField = value; } } /// public double MaxAge { get { return this.maxAgeField; } set { this.maxAgeField = value; } } /// public TimestampsToReturn TimestampsToReturn { get { return this.timestampsToReturnField; } set { this.timestampsToReturnField = value; } } /// public ReadValueId[] NodesToRead { get { return this.nodesToReadField; } set { this.nodesToReadField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class ReadResponse { private ResponseHeader responseHeaderField; private DataValue[] resultsField; private DiagnosticInfo[] diagnosticInfosField; /// public ResponseHeader ResponseHeader { get { return this.responseHeaderField; } set { this.responseHeaderField = value; } } /// public DataValue[] Results { get { return this.resultsField; } set { this.resultsField = value; } } /// [System.Xml.Serialization.XmlArrayAttribute( IsNullable = true )] public DiagnosticInfo[] DiagnosticInfos { get { return this.diagnosticInfosField; } set { this.diagnosticInfosField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class HistoryReadValueId { private NodeId nodeIdField; private string indexRangeField; private QualifiedName dataEncodingField; private byte[] continuationPointField; /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public NodeId NodeId { get { return this.nodeIdField; } set { this.nodeIdField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public string IndexRange { get { return this.indexRangeField; } set { this.indexRangeField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public QualifiedName DataEncoding { get { return this.dataEncodingField; } set { this.dataEncodingField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( DataType = "base64Binary", IsNullable = true )] public byte[] ContinuationPoint { get { return this.continuationPointField; } set { this.continuationPointField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = true )] public partial class ListOfHistoryReadValueId { private HistoryReadValueId[] historyReadValueIdField; /// [System.Xml.Serialization.XmlElementAttribute( "HistoryReadValueId", IsNullable = true )] public HistoryReadValueId[] HistoryReadValueId { get { return this.historyReadValueIdField; } set { this.historyReadValueIdField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class HistoryReadResult { private StatusCode statusCodeField; private byte[] continuationPointField; private ExtensionObject historyDataField; /// public StatusCode StatusCode { get { return this.statusCodeField; } set { this.statusCodeField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( DataType = "base64Binary", IsNullable = true )] public byte[] ContinuationPoint { get { return this.continuationPointField; } set { this.continuationPointField = value; } } /// public ExtensionObject HistoryData { get { return this.historyDataField; } set { this.historyDataField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = true )] public partial class ListOfHistoryReadResult { private HistoryReadResult[] historyReadResultField; /// [System.Xml.Serialization.XmlElementAttribute( "HistoryReadResult", IsNullable = true )] public HistoryReadResult[] HistoryReadResult { get { return this.historyReadResultField; } set { this.historyReadResultField = value; } } } /// [System.Xml.Serialization.XmlIncludeAttribute( typeof( ReadAtTimeDetails ) )] [System.Xml.Serialization.XmlIncludeAttribute( typeof( ReadProcessedDetails ) )] [System.Xml.Serialization.XmlIncludeAttribute( typeof( ReadRawModifiedDetails ) )] [System.Xml.Serialization.XmlIncludeAttribute( typeof( ReadEventDetails ) )] [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class HistoryReadDetails { } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class ReadEventDetails: HistoryReadDetails { private uint numValuesPerNodeField; private System.DateTime startTimeField; private System.DateTime endTimeField; private EventFilter filterField; /// public uint NumValuesPerNode { get { return this.numValuesPerNodeField; } set { this.numValuesPerNodeField = value; } } /// public System.DateTime StartTime { get { return this.startTimeField; } set { this.startTimeField = value; } } /// public System.DateTime EndTime { get { return this.endTimeField; } set { this.endTimeField = value; } } /// public EventFilter Filter { get { return this.filterField; } set { this.filterField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class EventFilter: MonitoringFilter { private SimpleAttributeOperand[] selectClausesField; private ContentFilter whereClauseField; /// public SimpleAttributeOperand[] SelectClauses { get { return this.selectClausesField; } set { this.selectClausesField = value; } } /// public ContentFilter WhereClause { get { return this.whereClauseField; } set { this.whereClauseField = value; } } } /// [System.Xml.Serialization.XmlIncludeAttribute( typeof( AggregateFilter ) )] [System.Xml.Serialization.XmlIncludeAttribute( typeof( EventFilter ) )] [System.Xml.Serialization.XmlIncludeAttribute( typeof( DataChangeFilter ) )] [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class MonitoringFilter { } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class ReadRawModifiedDetails: HistoryReadDetails { private bool isReadModifiedField; private System.DateTime startTimeField; private System.DateTime endTimeField; private uint numValuesPerNodeField; private bool returnBoundsField; /// public bool IsReadModified { get { return this.isReadModifiedField; } set { this.isReadModifiedField = value; } } /// public System.DateTime StartTime { get { return this.startTimeField; } set { this.startTimeField = value; } } /// public System.DateTime EndTime { get { return this.endTimeField; } set { this.endTimeField = value; } } /// public uint NumValuesPerNode { get { return this.numValuesPerNodeField; } set { this.numValuesPerNodeField = value; } } /// public bool ReturnBounds { get { return this.returnBoundsField; } set { this.returnBoundsField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class ReadProcessedDetails: HistoryReadDetails { private System.DateTime startTimeField; private System.DateTime endTimeField; private double resampleIntervalField; private NodeId[] aggregateTypeField; private AggregateConfiguration aggregateConfigurationField; /// public System.DateTime StartTime { get { return this.startTimeField; } set { this.startTimeField = value; } } /// public System.DateTime EndTime { get { return this.endTimeField; } set { this.endTimeField = value; } } /// public double ResampleInterval { get { return this.resampleIntervalField; } set { this.resampleIntervalField = value; } } /// [System.Xml.Serialization.XmlArrayAttribute( IsNullable = true )] public NodeId[] AggregateType { get { return this.aggregateTypeField; } set { this.aggregateTypeField = value; } } /// public AggregateConfiguration AggregateConfiguration { get { return this.aggregateConfigurationField; } set { this.aggregateConfigurationField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class AggregateConfiguration { private bool treatUncertainAsBadField; private byte percentDataBadField; private byte percentDataGoodField; private bool steppedSlopedExtrapolationField; /// public bool TreatUncertainAsBad { get { return this.treatUncertainAsBadField; } set { this.treatUncertainAsBadField = value; } } /// public byte PercentDataBad { get { return this.percentDataBadField; } set { this.percentDataBadField = value; } } /// public byte PercentDataGood { get { return this.percentDataGoodField; } set { this.percentDataGoodField = value; } } /// public bool SteppedSlopedExtrapolation { get { return this.steppedSlopedExtrapolationField; } set { this.steppedSlopedExtrapolationField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class ReadAtTimeDetails: HistoryReadDetails { private System.DateTime[] reqTimesField; /// [System.Xml.Serialization.XmlArrayItemAttribute( "DateTime", IsNullable = false )] public System.DateTime[] ReqTimes { get { return this.reqTimesField; } set { this.reqTimesField = value; } } } /// [System.Xml.Serialization.XmlIncludeAttribute( typeof( HistoryModifiedData ) )] [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class HistoryData { private DataValue[] dataValuesField; /// public DataValue[] DataValues { get { return this.dataValuesField; } set { this.dataValuesField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class ModificationInfo { private System.DateTime modificationTimeField; private HistoryUpdateType updateTypeField; private string userNameField; /// public System.DateTime ModificationTime { get { return this.modificationTimeField; } set { this.modificationTimeField = value; } } /// public HistoryUpdateType UpdateType { get { return this.updateTypeField; } set { this.updateTypeField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public string UserName { get { return this.userNameField; } set { this.userNameField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public enum HistoryUpdateType { /// Insert_1, /// Replace_2, /// Update_3, /// Delete_4, } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = true )] public partial class ListOfModificationInfo { private ModificationInfo[] modificationInfoField; /// [System.Xml.Serialization.XmlElementAttribute( "ModificationInfo", IsNullable = true )] public ModificationInfo[] ModificationInfo { get { return this.modificationInfoField; } set { this.modificationInfoField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class HistoryModifiedData: HistoryData { private ModificationInfo[] modificationInfosField; /// public ModificationInfo[] ModificationInfos { get { return this.modificationInfosField; } set { this.modificationInfosField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class HistoryEvent { private HistoryEventFieldList[] eventsField; /// public HistoryEventFieldList[] Events { get { return this.eventsField; } set { this.eventsField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class HistoryEventFieldList { private Variant[] eventFieldsField; /// public Variant[] EventFields { get { return this.eventFieldsField; } set { this.eventFieldsField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class HistoryReadRequest { private RequestHeader requestHeaderField; private ExtensionObject historyReadDetailsField; private TimestampsToReturn timestampsToReturnField; private bool releaseContinuationPointsField; private HistoryReadValueId[] nodesToReadField; /// public RequestHeader RequestHeader { get { return this.requestHeaderField; } set { this.requestHeaderField = value; } } /// public ExtensionObject HistoryReadDetails { get { return this.historyReadDetailsField; } set { this.historyReadDetailsField = value; } } /// public TimestampsToReturn TimestampsToReturn { get { return this.timestampsToReturnField; } set { this.timestampsToReturnField = value; } } /// public bool ReleaseContinuationPoints { get { return this.releaseContinuationPointsField; } set { this.releaseContinuationPointsField = value; } } /// public HistoryReadValueId[] NodesToRead { get { return this.nodesToReadField; } set { this.nodesToReadField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class HistoryReadResponse { private ResponseHeader responseHeaderField; private HistoryReadResult[] resultsField; private DiagnosticInfo[] diagnosticInfosField; /// public ResponseHeader ResponseHeader { get { return this.responseHeaderField; } set { this.responseHeaderField = value; } } /// public HistoryReadResult[] Results { get { return this.resultsField; } set { this.resultsField = value; } } /// [System.Xml.Serialization.XmlArrayAttribute( IsNullable = true )] public DiagnosticInfo[] DiagnosticInfos { get { return this.diagnosticInfosField; } set { this.diagnosticInfosField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class WriteValue { private NodeId nodeIdField; private uint attributeIdField; private string indexRangeField; private DataValue valueField; /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public NodeId NodeId { get { return this.nodeIdField; } set { this.nodeIdField = value; } } /// public uint AttributeId { get { return this.attributeIdField; } set { this.attributeIdField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public string IndexRange { get { return this.indexRangeField; } set { this.indexRangeField = value; } } /// public DataValue Value { get { return this.valueField; } set { this.valueField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = true )] public partial class ListOfWriteValue { private WriteValue[] writeValueField; /// [System.Xml.Serialization.XmlElementAttribute( "WriteValue", IsNullable = true )] public WriteValue[] WriteValue { get { return this.writeValueField; } set { this.writeValueField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class WriteRequest { private RequestHeader requestHeaderField; private WriteValue[] nodesToWriteField; /// public RequestHeader RequestHeader { get { return this.requestHeaderField; } set { this.requestHeaderField = value; } } /// public WriteValue[] NodesToWrite { get { return this.nodesToWriteField; } set { this.nodesToWriteField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class WriteResponse { private ResponseHeader responseHeaderField; private StatusCode[] resultsField; private DiagnosticInfo[] diagnosticInfosField; /// public ResponseHeader ResponseHeader { get { return this.responseHeaderField; } set { this.responseHeaderField = value; } } /// public StatusCode[] Results { get { return this.resultsField; } set { this.resultsField = value; } } /// [System.Xml.Serialization.XmlArrayAttribute( IsNullable = true )] public DiagnosticInfo[] DiagnosticInfos { get { return this.diagnosticInfosField; } set { this.diagnosticInfosField = value; } } } /// [System.Xml.Serialization.XmlIncludeAttribute( typeof( DeleteEventDetails ) )] [System.Xml.Serialization.XmlIncludeAttribute( typeof( DeleteAtTimeDetails ) )] [System.Xml.Serialization.XmlIncludeAttribute( typeof( DeleteRawModifiedDetails ) )] [System.Xml.Serialization.XmlIncludeAttribute( typeof( UpdateEventDetails ) )] [System.Xml.Serialization.XmlIncludeAttribute( typeof( UpdateDataDetails ) )] [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class HistoryUpdateDetails { private NodeId nodeIdField; /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public NodeId NodeId { get { return this.nodeIdField; } set { this.nodeIdField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public enum PerformInsertReplaceType { /// Insert_1, /// Replace_2, /// Update_3, } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class UpdateDataDetails: HistoryUpdateDetails { private PerformInsertReplaceType performInsertReplaceField; private HistoryData updateValueField; /// public PerformInsertReplaceType PerformInsertReplace { get { return this.performInsertReplaceField; } set { this.performInsertReplaceField = value; } } /// public HistoryData UpdateValue { get { return this.updateValueField; } set { this.updateValueField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class UpdateEventDetails: HistoryUpdateDetails { private PerformInsertReplaceType performInsertReplaceField; private EventFilter filterField; private HistoryEventFieldList eventDataField; /// public PerformInsertReplaceType PerformInsertReplace { get { return this.performInsertReplaceField; } set { this.performInsertReplaceField = value; } } /// public EventFilter Filter { get { return this.filterField; } set { this.filterField = value; } } /// public HistoryEventFieldList EventData { get { return this.eventDataField; } set { this.eventDataField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class DeleteRawModifiedDetails: HistoryUpdateDetails { private bool isDeleteModifiedField; private System.DateTime startTimeField; private System.DateTime endTimeField; /// public bool IsDeleteModified { get { return this.isDeleteModifiedField; } set { this.isDeleteModifiedField = value; } } /// public System.DateTime StartTime { get { return this.startTimeField; } set { this.startTimeField = value; } } /// public System.DateTime EndTime { get { return this.endTimeField; } set { this.endTimeField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class DeleteAtTimeDetails: HistoryUpdateDetails { private System.DateTime[] reqTimesField; /// [System.Xml.Serialization.XmlArrayItemAttribute( "DateTime", IsNullable = false )] public System.DateTime[] ReqTimes { get { return this.reqTimesField; } set { this.reqTimesField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class DeleteEventDetails: HistoryUpdateDetails { private byte[] eventIdsField; /// [System.Xml.Serialization.XmlElementAttribute( DataType = "base64Binary", IsNullable = true )] public byte[] EventIds { get { return this.eventIdsField; } set { this.eventIdsField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class HistoryUpdateResult { private StatusCode statusCodeField; private StatusCode[] operationResultsField; private DiagnosticInfo[] diagnosticInfosField; /// public StatusCode StatusCode { get { return this.statusCodeField; } set { this.statusCodeField = value; } } /// public StatusCode[] OperationResults { get { return this.operationResultsField; } set { this.operationResultsField = value; } } /// [System.Xml.Serialization.XmlArrayAttribute( IsNullable = true )] public DiagnosticInfo[] DiagnosticInfos { get { return this.diagnosticInfosField; } set { this.diagnosticInfosField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = true )] public partial class ListOfHistoryUpdateResult { private HistoryUpdateResult[] historyUpdateResultField; /// [System.Xml.Serialization.XmlElementAttribute( "HistoryUpdateResult", IsNullable = true )] public HistoryUpdateResult[] HistoryUpdateResult { get { return this.historyUpdateResultField; } set { this.historyUpdateResultField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class HistoryUpdateEventResult { private StatusCode statusCodeField; private EventFilterResult eventFilterResultField; /// public StatusCode StatusCode { get { return this.statusCodeField; } set { this.statusCodeField = value; } } /// public EventFilterResult EventFilterResult { get { return this.eventFilterResultField; } set { this.eventFilterResultField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class EventFilterResult: MonitoringFilterResult { private StatusCode[] selectClauseResultsField; private DiagnosticInfo[] selectClauseDiagnosticInfosField; private ContentFilterResult whereClauseResultField; /// public StatusCode[] SelectClauseResults { get { return this.selectClauseResultsField; } set { this.selectClauseResultsField = value; } } /// [System.Xml.Serialization.XmlArrayAttribute( IsNullable = true )] public DiagnosticInfo[] SelectClauseDiagnosticInfos { get { return this.selectClauseDiagnosticInfosField; } set { this.selectClauseDiagnosticInfosField = value; } } /// public ContentFilterResult WhereClauseResult { get { return this.whereClauseResultField; } set { this.whereClauseResultField = value; } } } /// [System.Xml.Serialization.XmlIncludeAttribute( typeof( AggregateFilterResult ) )] [System.Xml.Serialization.XmlIncludeAttribute( typeof( EventFilterResult ) )] [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class MonitoringFilterResult { } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = true )] public partial class ListOfHistoryUpdateEventResult { private HistoryUpdateEventResult[] historyUpdateEventResultField; /// [System.Xml.Serialization.XmlElementAttribute( "HistoryUpdateEventResult", IsNullable = true )] public HistoryUpdateEventResult[] HistoryUpdateEventResult { get { return this.historyUpdateEventResultField; } set { this.historyUpdateEventResultField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class HistoryUpdateRequest { private RequestHeader requestHeaderField; private ExtensionObject[] historyUpdateDetailsField; /// public RequestHeader RequestHeader { get { return this.requestHeaderField; } set { this.requestHeaderField = value; } } /// public ExtensionObject[] HistoryUpdateDetails { get { return this.historyUpdateDetailsField; } set { this.historyUpdateDetailsField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class HistoryUpdateResponse { private ResponseHeader responseHeaderField; private HistoryUpdateResult[] resultsField; private DiagnosticInfo[] diagnosticInfosField; /// public ResponseHeader ResponseHeader { get { return this.responseHeaderField; } set { this.responseHeaderField = value; } } /// public HistoryUpdateResult[] Results { get { return this.resultsField; } set { this.resultsField = value; } } /// [System.Xml.Serialization.XmlArrayAttribute( IsNullable = true )] public DiagnosticInfo[] DiagnosticInfos { get { return this.diagnosticInfosField; } set { this.diagnosticInfosField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class CallMethodRequest { private NodeId objectIdField; private NodeId methodIdField; private Variant[] inputArgumentsField; /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public NodeId ObjectId { get { return this.objectIdField; } set { this.objectIdField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public NodeId MethodId { get { return this.methodIdField; } set { this.methodIdField = value; } } /// public Variant[] InputArguments { get { return this.inputArgumentsField; } set { this.inputArgumentsField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = true )] public partial class ListOfCallMethodRequest { private CallMethodRequest[] callMethodRequestField; /// [System.Xml.Serialization.XmlElementAttribute( "CallMethodRequest", IsNullable = true )] public CallMethodRequest[] CallMethodRequest { get { return this.callMethodRequestField; } set { this.callMethodRequestField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class CallMethodResult { private StatusCode statusCodeField; private StatusCode[] inputArgumentResultsField; private DiagnosticInfo[] inputArgumentDiagnosticInfosField; private Variant[] outputArgumentsField; /// public StatusCode StatusCode { get { return this.statusCodeField; } set { this.statusCodeField = value; } } /// public StatusCode[] InputArgumentResults { get { return this.inputArgumentResultsField; } set { this.inputArgumentResultsField = value; } } /// [System.Xml.Serialization.XmlArrayAttribute( IsNullable = true )] public DiagnosticInfo[] InputArgumentDiagnosticInfos { get { return this.inputArgumentDiagnosticInfosField; } set { this.inputArgumentDiagnosticInfosField = value; } } /// public Variant[] OutputArguments { get { return this.outputArgumentsField; } set { this.outputArgumentsField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = true )] public partial class ListOfCallMethodResult { private CallMethodResult[] callMethodResultField; /// [System.Xml.Serialization.XmlElementAttribute( "CallMethodResult", IsNullable = true )] public CallMethodResult[] CallMethodResult { get { return this.callMethodResultField; } set { this.callMethodResultField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class CallRequest { private RequestHeader requestHeaderField; private CallMethodRequest[] methodsToCallField; /// public RequestHeader RequestHeader { get { return this.requestHeaderField; } set { this.requestHeaderField = value; } } /// public CallMethodRequest[] MethodsToCall { get { return this.methodsToCallField; } set { this.methodsToCallField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class CallResponse { private ResponseHeader responseHeaderField; private CallMethodResult[] resultsField; private DiagnosticInfo[] diagnosticInfosField; /// public ResponseHeader ResponseHeader { get { return this.responseHeaderField; } set { this.responseHeaderField = value; } } /// public CallMethodResult[] Results { get { return this.resultsField; } set { this.resultsField = value; } } /// [System.Xml.Serialization.XmlArrayAttribute( IsNullable = true )] public DiagnosticInfo[] DiagnosticInfos { get { return this.diagnosticInfosField; } set { this.diagnosticInfosField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public enum MonitoringMode { /// Disabled_0, /// Sampling_1, /// Reporting_2, } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public enum DataChangeTrigger { /// Status_0, /// StatusValue_1, /// StatusValueTimestamp_2, } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public enum DeadbandType { /// None_0, /// Absolute_1, /// Percent_2, } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class DataChangeFilter: MonitoringFilter { private DataChangeTrigger triggerField; private uint deadbandTypeField; private double deadbandValueField; /// public DataChangeTrigger Trigger { get { return this.triggerField; } set { this.triggerField = value; } } /// public uint DeadbandType { get { return this.deadbandTypeField; } set { this.deadbandTypeField = value; } } /// public double DeadbandValue { get { return this.deadbandValueField; } set { this.deadbandValueField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class AggregateFilter: MonitoringFilter { private System.DateTime startTimeField; private NodeId aggregateTypeField; private double processingIntervalField; private AggregateConfiguration aggregateConfigurationField; /// public System.DateTime StartTime { get { return this.startTimeField; } set { this.startTimeField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public NodeId AggregateType { get { return this.aggregateTypeField; } set { this.aggregateTypeField = value; } } /// public double ProcessingInterval { get { return this.processingIntervalField; } set { this.processingIntervalField = value; } } /// public AggregateConfiguration AggregateConfiguration { get { return this.aggregateConfigurationField; } set { this.aggregateConfigurationField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class AggregateFilterResult: MonitoringFilterResult { private System.DateTime revisedStartTimeField; private double revisedProcessingIntervalField; private AggregateConfiguration revisedAggregateConfigurationField; /// public System.DateTime RevisedStartTime { get { return this.revisedStartTimeField; } set { this.revisedStartTimeField = value; } } /// public double RevisedProcessingInterval { get { return this.revisedProcessingIntervalField; } set { this.revisedProcessingIntervalField = value; } } /// public AggregateConfiguration RevisedAggregateConfiguration { get { return this.revisedAggregateConfigurationField; } set { this.revisedAggregateConfigurationField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class MonitoringParameters { private uint clientHandleField; private double samplingIntervalField; private ExtensionObject filterField; private uint queueSizeField; private bool discardOldestField; /// public uint ClientHandle { get { return this.clientHandleField; } set { this.clientHandleField = value; } } /// public double SamplingInterval { get { return this.samplingIntervalField; } set { this.samplingIntervalField = value; } } /// public ExtensionObject Filter { get { return this.filterField; } set { this.filterField = value; } } /// public uint QueueSize { get { return this.queueSizeField; } set { this.queueSizeField = value; } } /// public bool DiscardOldest { get { return this.discardOldestField; } set { this.discardOldestField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class MonitoredItemCreateRequest { private ReadValueId itemToMonitorField; private MonitoringMode monitoringModeField; private MonitoringParameters requestedParametersField; /// public ReadValueId ItemToMonitor { get { return this.itemToMonitorField; } set { this.itemToMonitorField = value; } } /// public MonitoringMode MonitoringMode { get { return this.monitoringModeField; } set { this.monitoringModeField = value; } } /// public MonitoringParameters RequestedParameters { get { return this.requestedParametersField; } set { this.requestedParametersField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = true )] public partial class ListOfMonitoredItemCreateRequest { private MonitoredItemCreateRequest[] monitoredItemCreateRequestField; /// [System.Xml.Serialization.XmlElementAttribute( "MonitoredItemCreateRequest", IsNullable = true )] public MonitoredItemCreateRequest[] MonitoredItemCreateRequest { get { return this.monitoredItemCreateRequestField; } set { this.monitoredItemCreateRequestField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class MonitoredItemCreateResult { private StatusCode statusCodeField; private uint monitoredItemIdField; private double revisedSamplingIntervalField; private uint revisedQueueSizeField; private ExtensionObject filterResultField; /// public StatusCode StatusCode { get { return this.statusCodeField; } set { this.statusCodeField = value; } } /// public uint MonitoredItemId { get { return this.monitoredItemIdField; } set { this.monitoredItemIdField = value; } } /// public double RevisedSamplingInterval { get { return this.revisedSamplingIntervalField; } set { this.revisedSamplingIntervalField = value; } } /// public uint RevisedQueueSize { get { return this.revisedQueueSizeField; } set { this.revisedQueueSizeField = value; } } /// public ExtensionObject FilterResult { get { return this.filterResultField; } set { this.filterResultField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = true )] public partial class ListOfMonitoredItemCreateResult { private MonitoredItemCreateResult[] monitoredItemCreateResultField; /// [System.Xml.Serialization.XmlElementAttribute( "MonitoredItemCreateResult", IsNullable = true )] public MonitoredItemCreateResult[] MonitoredItemCreateResult { get { return this.monitoredItemCreateResultField; } set { this.monitoredItemCreateResultField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class CreateMonitoredItemsRequest { private RequestHeader requestHeaderField; private uint subscriptionIdField; private TimestampsToReturn timestampsToReturnField; private MonitoredItemCreateRequest[] itemsToCreateField; /// public RequestHeader RequestHeader { get { return this.requestHeaderField; } set { this.requestHeaderField = value; } } /// public uint SubscriptionId { get { return this.subscriptionIdField; } set { this.subscriptionIdField = value; } } /// public TimestampsToReturn TimestampsToReturn { get { return this.timestampsToReturnField; } set { this.timestampsToReturnField = value; } } /// public MonitoredItemCreateRequest[] ItemsToCreate { get { return this.itemsToCreateField; } set { this.itemsToCreateField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class CreateMonitoredItemsResponse { private ResponseHeader responseHeaderField; private MonitoredItemCreateResult[] resultsField; private DiagnosticInfo[] diagnosticInfosField; /// public ResponseHeader ResponseHeader { get { return this.responseHeaderField; } set { this.responseHeaderField = value; } } /// public MonitoredItemCreateResult[] Results { get { return this.resultsField; } set { this.resultsField = value; } } /// [System.Xml.Serialization.XmlArrayAttribute( IsNullable = true )] public DiagnosticInfo[] DiagnosticInfos { get { return this.diagnosticInfosField; } set { this.diagnosticInfosField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class MonitoredItemModifyRequest { private uint monitoredItemIdField; private MonitoringParameters requestedParametersField; /// public uint MonitoredItemId { get { return this.monitoredItemIdField; } set { this.monitoredItemIdField = value; } } /// public MonitoringParameters RequestedParameters { get { return this.requestedParametersField; } set { this.requestedParametersField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = true )] public partial class ListOfMonitoredItemModifyRequest { private MonitoredItemModifyRequest[] monitoredItemModifyRequestField; /// [System.Xml.Serialization.XmlElementAttribute( "MonitoredItemModifyRequest", IsNullable = true )] public MonitoredItemModifyRequest[] MonitoredItemModifyRequest { get { return this.monitoredItemModifyRequestField; } set { this.monitoredItemModifyRequestField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class MonitoredItemModifyResult { private StatusCode statusCodeField; private double revisedSamplingIntervalField; private uint revisedQueueSizeField; private ExtensionObject filterResultField; /// public StatusCode StatusCode { get { return this.statusCodeField; } set { this.statusCodeField = value; } } /// public double RevisedSamplingInterval { get { return this.revisedSamplingIntervalField; } set { this.revisedSamplingIntervalField = value; } } /// public uint RevisedQueueSize { get { return this.revisedQueueSizeField; } set { this.revisedQueueSizeField = value; } } /// public ExtensionObject FilterResult { get { return this.filterResultField; } set { this.filterResultField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = true )] public partial class ListOfMonitoredItemModifyResult { private MonitoredItemModifyResult[] monitoredItemModifyResultField; /// [System.Xml.Serialization.XmlElementAttribute( "MonitoredItemModifyResult", IsNullable = true )] public MonitoredItemModifyResult[] MonitoredItemModifyResult { get { return this.monitoredItemModifyResultField; } set { this.monitoredItemModifyResultField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class ModifyMonitoredItemsRequest { private RequestHeader requestHeaderField; private uint subscriptionIdField; private TimestampsToReturn timestampsToReturnField; private MonitoredItemModifyRequest[] itemsToModifyField; /// public RequestHeader RequestHeader { get { return this.requestHeaderField; } set { this.requestHeaderField = value; } } /// public uint SubscriptionId { get { return this.subscriptionIdField; } set { this.subscriptionIdField = value; } } /// public TimestampsToReturn TimestampsToReturn { get { return this.timestampsToReturnField; } set { this.timestampsToReturnField = value; } } /// public MonitoredItemModifyRequest[] ItemsToModify { get { return this.itemsToModifyField; } set { this.itemsToModifyField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class ModifyMonitoredItemsResponse { private ResponseHeader responseHeaderField; private MonitoredItemModifyResult[] resultsField; private DiagnosticInfo[] diagnosticInfosField; /// public ResponseHeader ResponseHeader { get { return this.responseHeaderField; } set { this.responseHeaderField = value; } } /// public MonitoredItemModifyResult[] Results { get { return this.resultsField; } set { this.resultsField = value; } } /// [System.Xml.Serialization.XmlArrayAttribute( IsNullable = true )] public DiagnosticInfo[] DiagnosticInfos { get { return this.diagnosticInfosField; } set { this.diagnosticInfosField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class SetMonitoringModeRequest { private RequestHeader requestHeaderField; private uint subscriptionIdField; private MonitoringMode monitoringModeField; private uint[] monitoredItemIdsField; /// public RequestHeader RequestHeader { get { return this.requestHeaderField; } set { this.requestHeaderField = value; } } /// public uint SubscriptionId { get { return this.subscriptionIdField; } set { this.subscriptionIdField = value; } } /// public MonitoringMode MonitoringMode { get { return this.monitoringModeField; } set { this.monitoringModeField = value; } } /// [System.Xml.Serialization.XmlArrayItemAttribute( "UInt32", IsNullable = false )] public uint[] MonitoredItemIds { get { return this.monitoredItemIdsField; } set { this.monitoredItemIdsField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class SetMonitoringModeResponse { private ResponseHeader responseHeaderField; private StatusCode[] resultsField; private DiagnosticInfo[] diagnosticInfosField; /// public ResponseHeader ResponseHeader { get { return this.responseHeaderField; } set { this.responseHeaderField = value; } } /// public StatusCode[] Results { get { return this.resultsField; } set { this.resultsField = value; } } /// [System.Xml.Serialization.XmlArrayAttribute( IsNullable = true )] public DiagnosticInfo[] DiagnosticInfos { get { return this.diagnosticInfosField; } set { this.diagnosticInfosField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class SetTriggeringRequest { private RequestHeader requestHeaderField; private uint subscriptionIdField; private uint triggeringItemIdField; private uint[] linksToAddField; private uint[] linksToRemoveField; /// public RequestHeader RequestHeader { get { return this.requestHeaderField; } set { this.requestHeaderField = value; } } /// public uint SubscriptionId { get { return this.subscriptionIdField; } set { this.subscriptionIdField = value; } } /// public uint TriggeringItemId { get { return this.triggeringItemIdField; } set { this.triggeringItemIdField = value; } } /// [System.Xml.Serialization.XmlArrayItemAttribute( "UInt32", IsNullable = false )] public uint[] LinksToAdd { get { return this.linksToAddField; } set { this.linksToAddField = value; } } /// [System.Xml.Serialization.XmlArrayItemAttribute( "UInt32", IsNullable = false )] public uint[] LinksToRemove { get { return this.linksToRemoveField; } set { this.linksToRemoveField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class SetTriggeringResponse { private ResponseHeader responseHeaderField; private StatusCode[] addResultsField; private DiagnosticInfo[] addDiagnosticInfosField; private StatusCode[] removeResultsField; private DiagnosticInfo[] removeDiagnosticInfosField; /// public ResponseHeader ResponseHeader { get { return this.responseHeaderField; } set { this.responseHeaderField = value; } } /// public StatusCode[] AddResults { get { return this.addResultsField; } set { this.addResultsField = value; } } /// [System.Xml.Serialization.XmlArrayAttribute( IsNullable = true )] public DiagnosticInfo[] AddDiagnosticInfos { get { return this.addDiagnosticInfosField; } set { this.addDiagnosticInfosField = value; } } /// public StatusCode[] RemoveResults { get { return this.removeResultsField; } set { this.removeResultsField = value; } } /// [System.Xml.Serialization.XmlArrayAttribute( IsNullable = true )] public DiagnosticInfo[] RemoveDiagnosticInfos { get { return this.removeDiagnosticInfosField; } set { this.removeDiagnosticInfosField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class DeleteMonitoredItemsRequest { private RequestHeader requestHeaderField; private uint subscriptionIdField; private uint[] monitoredItemIdsField; /// public RequestHeader RequestHeader { get { return this.requestHeaderField; } set { this.requestHeaderField = value; } } /// public uint SubscriptionId { get { return this.subscriptionIdField; } set { this.subscriptionIdField = value; } } /// [System.Xml.Serialization.XmlArrayItemAttribute( "UInt32", IsNullable = false )] public uint[] MonitoredItemIds { get { return this.monitoredItemIdsField; } set { this.monitoredItemIdsField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class DeleteMonitoredItemsResponse { private ResponseHeader responseHeaderField; private StatusCode[] resultsField; private DiagnosticInfo[] diagnosticInfosField; /// public ResponseHeader ResponseHeader { get { return this.responseHeaderField; } set { this.responseHeaderField = value; } } /// public StatusCode[] Results { get { return this.resultsField; } set { this.resultsField = value; } } /// [System.Xml.Serialization.XmlArrayAttribute( IsNullable = true )] public DiagnosticInfo[] DiagnosticInfos { get { return this.diagnosticInfosField; } set { this.diagnosticInfosField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class CreateSubscriptionRequest { private RequestHeader requestHeaderField; private double requestedPublishingIntervalField; private uint requestedLifetimeCountField; private uint requestedMaxKeepAliveCountField; private uint maxNotificationsPerPublishField; private bool publishingEnabledField; private byte priorityField; /// public RequestHeader RequestHeader { get { return this.requestHeaderField; } set { this.requestHeaderField = value; } } /// public double RequestedPublishingInterval { get { return this.requestedPublishingIntervalField; } set { this.requestedPublishingIntervalField = value; } } /// public uint RequestedLifetimeCount { get { return this.requestedLifetimeCountField; } set { this.requestedLifetimeCountField = value; } } /// public uint RequestedMaxKeepAliveCount { get { return this.requestedMaxKeepAliveCountField; } set { this.requestedMaxKeepAliveCountField = value; } } /// public uint MaxNotificationsPerPublish { get { return this.maxNotificationsPerPublishField; } set { this.maxNotificationsPerPublishField = value; } } /// public bool PublishingEnabled { get { return this.publishingEnabledField; } set { this.publishingEnabledField = value; } } /// public byte Priority { get { return this.priorityField; } set { this.priorityField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class CreateSubscriptionResponse { private ResponseHeader responseHeaderField; private uint subscriptionIdField; private double revisedPublishingIntervalField; private uint revisedLifetimeCountField; private uint revisedMaxKeepAliveCountField; /// public ResponseHeader ResponseHeader { get { return this.responseHeaderField; } set { this.responseHeaderField = value; } } /// public uint SubscriptionId { get { return this.subscriptionIdField; } set { this.subscriptionIdField = value; } } /// public double RevisedPublishingInterval { get { return this.revisedPublishingIntervalField; } set { this.revisedPublishingIntervalField = value; } } /// public uint RevisedLifetimeCount { get { return this.revisedLifetimeCountField; } set { this.revisedLifetimeCountField = value; } } /// public uint RevisedMaxKeepAliveCount { get { return this.revisedMaxKeepAliveCountField; } set { this.revisedMaxKeepAliveCountField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class ModifySubscriptionRequest { private RequestHeader requestHeaderField; private uint subscriptionIdField; private double requestedPublishingIntervalField; private uint requestedLifetimeCountField; private uint requestedMaxKeepAliveCountField; private uint maxNotificationsPerPublishField; private byte priorityField; /// public RequestHeader RequestHeader { get { return this.requestHeaderField; } set { this.requestHeaderField = value; } } /// public uint SubscriptionId { get { return this.subscriptionIdField; } set { this.subscriptionIdField = value; } } /// public double RequestedPublishingInterval { get { return this.requestedPublishingIntervalField; } set { this.requestedPublishingIntervalField = value; } } /// public uint RequestedLifetimeCount { get { return this.requestedLifetimeCountField; } set { this.requestedLifetimeCountField = value; } } /// public uint RequestedMaxKeepAliveCount { get { return this.requestedMaxKeepAliveCountField; } set { this.requestedMaxKeepAliveCountField = value; } } /// public uint MaxNotificationsPerPublish { get { return this.maxNotificationsPerPublishField; } set { this.maxNotificationsPerPublishField = value; } } /// public byte Priority { get { return this.priorityField; } set { this.priorityField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class ModifySubscriptionResponse { private ResponseHeader responseHeaderField; private double revisedPublishingIntervalField; private uint revisedLifetimeCountField; private uint revisedMaxKeepAliveCountField; /// public ResponseHeader ResponseHeader { get { return this.responseHeaderField; } set { this.responseHeaderField = value; } } /// public double RevisedPublishingInterval { get { return this.revisedPublishingIntervalField; } set { this.revisedPublishingIntervalField = value; } } /// public uint RevisedLifetimeCount { get { return this.revisedLifetimeCountField; } set { this.revisedLifetimeCountField = value; } } /// public uint RevisedMaxKeepAliveCount { get { return this.revisedMaxKeepAliveCountField; } set { this.revisedMaxKeepAliveCountField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class SetPublishingModeRequest { private RequestHeader requestHeaderField; private bool publishingEnabledField; private uint[] subscriptionIdsField; /// public RequestHeader RequestHeader { get { return this.requestHeaderField; } set { this.requestHeaderField = value; } } /// public bool PublishingEnabled { get { return this.publishingEnabledField; } set { this.publishingEnabledField = value; } } /// [System.Xml.Serialization.XmlArrayItemAttribute( "UInt32", IsNullable = false )] public uint[] SubscriptionIds { get { return this.subscriptionIdsField; } set { this.subscriptionIdsField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class SetPublishingModeResponse { private ResponseHeader responseHeaderField; private StatusCode[] resultsField; private DiagnosticInfo[] diagnosticInfosField; /// public ResponseHeader ResponseHeader { get { return this.responseHeaderField; } set { this.responseHeaderField = value; } } /// public StatusCode[] Results { get { return this.resultsField; } set { this.resultsField = value; } } /// [System.Xml.Serialization.XmlArrayAttribute( IsNullable = true )] public DiagnosticInfo[] DiagnosticInfos { get { return this.diagnosticInfosField; } set { this.diagnosticInfosField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class NotificationMessage { private uint sequenceNumberField; private System.DateTime publishTimeField; private ExtensionObject[] notificationDataField; /// public uint SequenceNumber { get { return this.sequenceNumberField; } set { this.sequenceNumberField = value; } } /// public System.DateTime PublishTime { get { return this.publishTimeField; } set { this.publishTimeField = value; } } /// public ExtensionObject[] NotificationData { get { return this.notificationDataField; } set { this.notificationDataField = value; } } } /// [System.Xml.Serialization.XmlIncludeAttribute( typeof( StatusChangeNotification ) )] [System.Xml.Serialization.XmlIncludeAttribute( typeof( EventNotificationList ) )] [System.Xml.Serialization.XmlIncludeAttribute( typeof( DataChangeNotification ) )] [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class NotificationData { } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class DataChangeNotification: NotificationData { private MonitoredItemNotification[] monitoredItemsField; private DiagnosticInfo[] diagnosticInfosField; /// public MonitoredItemNotification[] MonitoredItems { get { return this.monitoredItemsField; } set { this.monitoredItemsField = value; } } /// [System.Xml.Serialization.XmlArrayAttribute( IsNullable = true )] public DiagnosticInfo[] DiagnosticInfos { get { return this.diagnosticInfosField; } set { this.diagnosticInfosField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class MonitoredItemNotification { private uint clientHandleField; private DataValue valueField; /// public uint ClientHandle { get { return this.clientHandleField; } set { this.clientHandleField = value; } } /// public DataValue Value { get { return this.valueField; } set { this.valueField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = true )] public partial class ListOfMonitoredItemNotification { private MonitoredItemNotification[] monitoredItemNotificationField; /// [System.Xml.Serialization.XmlElementAttribute( "MonitoredItemNotification", IsNullable = true )] public MonitoredItemNotification[] MonitoredItemNotification { get { return this.monitoredItemNotificationField; } set { this.monitoredItemNotificationField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class EventNotificationList: NotificationData { private EventFieldList[] eventsField; /// public EventFieldList[] Events { get { return this.eventsField; } set { this.eventsField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class EventFieldList { private uint clientHandleField; private Variant[] eventFieldsField; /// public uint ClientHandle { get { return this.clientHandleField; } set { this.clientHandleField = value; } } /// public Variant[] EventFields { get { return this.eventFieldsField; } set { this.eventFieldsField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = true )] public partial class ListOfEventFieldList { private EventFieldList[] eventFieldListField; /// [System.Xml.Serialization.XmlElementAttribute( "EventFieldList", IsNullable = true )] public EventFieldList[] EventFieldList { get { return this.eventFieldListField; } set { this.eventFieldListField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = true )] public partial class ListOfHistoryEventFieldList { private HistoryEventFieldList[] historyEventFieldListField; /// [System.Xml.Serialization.XmlElementAttribute( "HistoryEventFieldList", IsNullable = true )] public HistoryEventFieldList[] HistoryEventFieldList { get { return this.historyEventFieldListField; } set { this.historyEventFieldListField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class StatusChangeNotification: NotificationData { private StatusCode statusField; private DiagnosticInfo diagnosticInfoField; /// public StatusCode Status { get { return this.statusField; } set { this.statusField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public DiagnosticInfo DiagnosticInfo { get { return this.diagnosticInfoField; } set { this.diagnosticInfoField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class SubscriptionAcknowledgement { private uint subscriptionIdField; private uint sequenceNumberField; /// public uint SubscriptionId { get { return this.subscriptionIdField; } set { this.subscriptionIdField = value; } } /// public uint SequenceNumber { get { return this.sequenceNumberField; } set { this.sequenceNumberField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = true )] public partial class ListOfSubscriptionAcknowledgement { private SubscriptionAcknowledgement[] subscriptionAcknowledgementField; /// [System.Xml.Serialization.XmlElementAttribute( "SubscriptionAcknowledgement", IsNullable = true )] public SubscriptionAcknowledgement[] SubscriptionAcknowledgement { get { return this.subscriptionAcknowledgementField; } set { this.subscriptionAcknowledgementField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class PublishRequest { private RequestHeader requestHeaderField; private SubscriptionAcknowledgement[] subscriptionAcknowledgementsField; /// public RequestHeader RequestHeader { get { return this.requestHeaderField; } set { this.requestHeaderField = value; } } /// public SubscriptionAcknowledgement[] SubscriptionAcknowledgements { get { return this.subscriptionAcknowledgementsField; } set { this.subscriptionAcknowledgementsField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class PublishResponse { private ResponseHeader responseHeaderField; private uint subscriptionIdField; private uint[] availableSequenceNumbersField; private bool moreNotificationsField; private NotificationMessage notificationMessageField; private StatusCode[] resultsField; private DiagnosticInfo[] diagnosticInfosField; /// public ResponseHeader ResponseHeader { get { return this.responseHeaderField; } set { this.responseHeaderField = value; } } /// public uint SubscriptionId { get { return this.subscriptionIdField; } set { this.subscriptionIdField = value; } } /// [System.Xml.Serialization.XmlArrayItemAttribute( "UInt32", IsNullable = false )] public uint[] AvailableSequenceNumbers { get { return this.availableSequenceNumbersField; } set { this.availableSequenceNumbersField = value; } } /// public bool MoreNotifications { get { return this.moreNotificationsField; } set { this.moreNotificationsField = value; } } /// public NotificationMessage NotificationMessage { get { return this.notificationMessageField; } set { this.notificationMessageField = value; } } /// public StatusCode[] Results { get { return this.resultsField; } set { this.resultsField = value; } } /// [System.Xml.Serialization.XmlArrayAttribute( IsNullable = true )] public DiagnosticInfo[] DiagnosticInfos { get { return this.diagnosticInfosField; } set { this.diagnosticInfosField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class RepublishRequest { private RequestHeader requestHeaderField; private uint subscriptionIdField; private uint retransmitSequenceNumberField; /// public RequestHeader RequestHeader { get { return this.requestHeaderField; } set { this.requestHeaderField = value; } } /// public uint SubscriptionId { get { return this.subscriptionIdField; } set { this.subscriptionIdField = value; } } /// public uint RetransmitSequenceNumber { get { return this.retransmitSequenceNumberField; } set { this.retransmitSequenceNumberField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class RepublishResponse { private ResponseHeader responseHeaderField; private NotificationMessage notificationMessageField; /// public ResponseHeader ResponseHeader { get { return this.responseHeaderField; } set { this.responseHeaderField = value; } } /// public NotificationMessage NotificationMessage { get { return this.notificationMessageField; } set { this.notificationMessageField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class TransferResult { private StatusCode statusCodeField; private uint[] availableSequenceNumbersField; /// public StatusCode StatusCode { get { return this.statusCodeField; } set { this.statusCodeField = value; } } /// [System.Xml.Serialization.XmlArrayItemAttribute( "UInt32", IsNullable = false )] public uint[] AvailableSequenceNumbers { get { return this.availableSequenceNumbersField; } set { this.availableSequenceNumbersField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = true )] public partial class ListOfTransferResult { private TransferResult[] transferResultField; /// [System.Xml.Serialization.XmlElementAttribute( "TransferResult", IsNullable = true )] public TransferResult[] TransferResult { get { return this.transferResultField; } set { this.transferResultField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class TransferSubscriptionsRequest { private RequestHeader requestHeaderField; private uint[] subscriptionIdsField; private bool sendInitialValuesField; /// public RequestHeader RequestHeader { get { return this.requestHeaderField; } set { this.requestHeaderField = value; } } /// [System.Xml.Serialization.XmlArrayItemAttribute( "UInt32", IsNullable = false )] public uint[] SubscriptionIds { get { return this.subscriptionIdsField; } set { this.subscriptionIdsField = value; } } /// public bool SendInitialValues { get { return this.sendInitialValuesField; } set { this.sendInitialValuesField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class TransferSubscriptionsResponse { private ResponseHeader responseHeaderField; private TransferResult[] resultsField; private DiagnosticInfo[] diagnosticInfosField; /// public ResponseHeader ResponseHeader { get { return this.responseHeaderField; } set { this.responseHeaderField = value; } } /// public TransferResult[] Results { get { return this.resultsField; } set { this.resultsField = value; } } /// [System.Xml.Serialization.XmlArrayAttribute( IsNullable = true )] public DiagnosticInfo[] DiagnosticInfos { get { return this.diagnosticInfosField; } set { this.diagnosticInfosField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class DeleteSubscriptionsRequest { private RequestHeader requestHeaderField; private uint[] subscriptionIdsField; /// public RequestHeader RequestHeader { get { return this.requestHeaderField; } set { this.requestHeaderField = value; } } /// [System.Xml.Serialization.XmlArrayItemAttribute( "UInt32", IsNullable = false )] public uint[] SubscriptionIds { get { return this.subscriptionIdsField; } set { this.subscriptionIdsField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class DeleteSubscriptionsResponse { private ResponseHeader responseHeaderField; private StatusCode[] resultsField; private DiagnosticInfo[] diagnosticInfosField; /// public ResponseHeader ResponseHeader { get { return this.responseHeaderField; } set { this.responseHeaderField = value; } } /// public StatusCode[] Results { get { return this.resultsField; } set { this.resultsField = value; } } /// [System.Xml.Serialization.XmlArrayAttribute( IsNullable = true )] public DiagnosticInfo[] DiagnosticInfos { get { return this.diagnosticInfosField; } set { this.diagnosticInfosField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public enum RedundancySupport { /// None_0, /// Cold_1, /// Warm_2, /// Hot_3, /// Transparent_4, } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public enum ServerState { /// Running_0, /// Failed_1, /// NoConfiguration_2, /// Suspended_3, /// Shutdown_4, /// Test_5, /// CommunicationFault_6, /// Unknown_7, } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class RedundantServerDataType { private string serverIdField; private byte serviceLevelField; private ServerState serverStateField; /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public string ServerId { get { return this.serverIdField; } set { this.serverIdField = value; } } /// public byte ServiceLevel { get { return this.serviceLevelField; } set { this.serviceLevelField = value; } } /// public ServerState ServerState { get { return this.serverStateField; } set { this.serverStateField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = true )] public partial class ListOfRedundantServerDataType { private RedundantServerDataType[] redundantServerDataTypeField; /// [System.Xml.Serialization.XmlElementAttribute( "RedundantServerDataType", IsNullable = true )] public RedundantServerDataType[] RedundantServerDataType { get { return this.redundantServerDataTypeField; } set { this.redundantServerDataTypeField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class SamplingIntervalDiagnosticsDataType { private double samplingIntervalField; private uint monitoredItemCountField; private uint maxMonitoredItemCountField; private uint disabledMonitoredItemCountField; /// public double SamplingInterval { get { return this.samplingIntervalField; } set { this.samplingIntervalField = value; } } /// public uint MonitoredItemCount { get { return this.monitoredItemCountField; } set { this.monitoredItemCountField = value; } } /// public uint MaxMonitoredItemCount { get { return this.maxMonitoredItemCountField; } set { this.maxMonitoredItemCountField = value; } } /// public uint DisabledMonitoredItemCount { get { return this.disabledMonitoredItemCountField; } set { this.disabledMonitoredItemCountField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class ServerDiagnosticsSummaryDataType { private uint serverViewCountField; private uint currentSessionCountField; private uint cumulatedSessionCountField; private uint securityRejectedSessionCountField; private uint rejectedSessionCountField; private uint sessionTimeoutCountField; private uint sessionAbortCountField; private uint currentSubscriptionCountField; private uint cumulatedSubscriptionCountField; private uint publishingIntervalCountField; private uint securityRejectedRequestsCountField; private uint rejectedRequestsCountField; /// public uint ServerViewCount { get { return this.serverViewCountField; } set { this.serverViewCountField = value; } } /// public uint CurrentSessionCount { get { return this.currentSessionCountField; } set { this.currentSessionCountField = value; } } /// public uint CumulatedSessionCount { get { return this.cumulatedSessionCountField; } set { this.cumulatedSessionCountField = value; } } /// public uint SecurityRejectedSessionCount { get { return this.securityRejectedSessionCountField; } set { this.securityRejectedSessionCountField = value; } } /// public uint RejectedSessionCount { get { return this.rejectedSessionCountField; } set { this.rejectedSessionCountField = value; } } /// public uint SessionTimeoutCount { get { return this.sessionTimeoutCountField; } set { this.sessionTimeoutCountField = value; } } /// public uint SessionAbortCount { get { return this.sessionAbortCountField; } set { this.sessionAbortCountField = value; } } /// public uint CurrentSubscriptionCount { get { return this.currentSubscriptionCountField; } set { this.currentSubscriptionCountField = value; } } /// public uint CumulatedSubscriptionCount { get { return this.cumulatedSubscriptionCountField; } set { this.cumulatedSubscriptionCountField = value; } } /// public uint PublishingIntervalCount { get { return this.publishingIntervalCountField; } set { this.publishingIntervalCountField = value; } } /// public uint SecurityRejectedRequestsCount { get { return this.securityRejectedRequestsCountField; } set { this.securityRejectedRequestsCountField = value; } } /// public uint RejectedRequestsCount { get { return this.rejectedRequestsCountField; } set { this.rejectedRequestsCountField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class ServerStatusDataType { private System.DateTime startTimeField; private System.DateTime currentTimeField; private ServerState stateField; private BuildInfo buildInfoField; private uint secondsTillShutdownField; private LocalizedText shutdownReasonField; /// public System.DateTime StartTime { get { return this.startTimeField; } set { this.startTimeField = value; } } /// public System.DateTime CurrentTime { get { return this.currentTimeField; } set { this.currentTimeField = value; } } /// public ServerState State { get { return this.stateField; } set { this.stateField = value; } } /// public BuildInfo BuildInfo { get { return this.buildInfoField; } set { this.buildInfoField = value; } } /// public uint SecondsTillShutdown { get { return this.secondsTillShutdownField; } set { this.secondsTillShutdownField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public LocalizedText ShutdownReason { get { return this.shutdownReasonField; } set { this.shutdownReasonField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class SessionDiagnosticsDataType { private NodeId sessionIdField; private string sessionNameField; private ApplicationDescription clientDescriptionField; private string serverUriField; private string endpointUrlField; private string[] localeIdsField; private double actualSessionTimeoutField; private uint maxResponseMessageSizeField; private System.DateTime clientConnectionTimeField; private System.DateTime clientLastContactTimeField; private uint currentSubscriptionsCountField; private uint currentMonitoredItemsCountField; private uint currentPublishRequestsInQueueField; private ServiceCounterDataType totalRequestCountField; private uint unauthorizedRequestCountField; private ServiceCounterDataType readCountField; private ServiceCounterDataType historyReadCountField; private ServiceCounterDataType writeCountField; private ServiceCounterDataType historyUpdateCountField; private ServiceCounterDataType callCountField; private ServiceCounterDataType createMonitoredItemsCountField; private ServiceCounterDataType modifyMonitoredItemsCountField; private ServiceCounterDataType setMonitoringModeCountField; private ServiceCounterDataType setTriggeringCountField; private ServiceCounterDataType deleteMonitoredItemsCountField; private ServiceCounterDataType createSubscriptionCountField; private ServiceCounterDataType modifySubscriptionCountField; private ServiceCounterDataType setPublishingModeCountField; private ServiceCounterDataType publishCountField; private ServiceCounterDataType republishCountField; private ServiceCounterDataType transferSubscriptionsCountField; private ServiceCounterDataType deleteSubscriptionsCountField; private ServiceCounterDataType addNodesCountField; private ServiceCounterDataType addReferencesCountField; private ServiceCounterDataType deleteNodesCountField; private ServiceCounterDataType deleteReferencesCountField; private ServiceCounterDataType browseCountField; private ServiceCounterDataType browseNextCountField; private ServiceCounterDataType translateBrowsePathsToNodeIdsCountField; private ServiceCounterDataType queryFirstCountField; private ServiceCounterDataType queryNextCountField; private ServiceCounterDataType registerNodesCountField; private ServiceCounterDataType unregisterNodesCountField; /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public NodeId SessionId { get { return this.sessionIdField; } set { this.sessionIdField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public string SessionName { get { return this.sessionNameField; } set { this.sessionNameField = value; } } /// public ApplicationDescription ClientDescription { get { return this.clientDescriptionField; } set { this.clientDescriptionField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public string ServerUri { get { return this.serverUriField; } set { this.serverUriField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public string EndpointUrl { get { return this.endpointUrlField; } set { this.endpointUrlField = value; } } /// [System.Xml.Serialization.XmlArrayAttribute( IsNullable = true )] [System.Xml.Serialization.XmlArrayItemAttribute( "String", IsNullable = false )] public string[] LocaleIds { get { return this.localeIdsField; } set { this.localeIdsField = value; } } /// public double ActualSessionTimeout { get { return this.actualSessionTimeoutField; } set { this.actualSessionTimeoutField = value; } } /// public uint MaxResponseMessageSize { get { return this.maxResponseMessageSizeField; } set { this.maxResponseMessageSizeField = value; } } /// public System.DateTime ClientConnectionTime { get { return this.clientConnectionTimeField; } set { this.clientConnectionTimeField = value; } } /// public System.DateTime ClientLastContactTime { get { return this.clientLastContactTimeField; } set { this.clientLastContactTimeField = value; } } /// public uint CurrentSubscriptionsCount { get { return this.currentSubscriptionsCountField; } set { this.currentSubscriptionsCountField = value; } } /// public uint CurrentMonitoredItemsCount { get { return this.currentMonitoredItemsCountField; } set { this.currentMonitoredItemsCountField = value; } } /// public uint CurrentPublishRequestsInQueue { get { return this.currentPublishRequestsInQueueField; } set { this.currentPublishRequestsInQueueField = value; } } /// public ServiceCounterDataType TotalRequestCount { get { return this.totalRequestCountField; } set { this.totalRequestCountField = value; } } /// public uint UnauthorizedRequestCount { get { return this.unauthorizedRequestCountField; } set { this.unauthorizedRequestCountField = value; } } /// public ServiceCounterDataType ReadCount { get { return this.readCountField; } set { this.readCountField = value; } } /// public ServiceCounterDataType HistoryReadCount { get { return this.historyReadCountField; } set { this.historyReadCountField = value; } } /// public ServiceCounterDataType WriteCount { get { return this.writeCountField; } set { this.writeCountField = value; } } /// public ServiceCounterDataType HistoryUpdateCount { get { return this.historyUpdateCountField; } set { this.historyUpdateCountField = value; } } /// public ServiceCounterDataType CallCount { get { return this.callCountField; } set { this.callCountField = value; } } /// public ServiceCounterDataType CreateMonitoredItemsCount { get { return this.createMonitoredItemsCountField; } set { this.createMonitoredItemsCountField = value; } } /// public ServiceCounterDataType ModifyMonitoredItemsCount { get { return this.modifyMonitoredItemsCountField; } set { this.modifyMonitoredItemsCountField = value; } } /// public ServiceCounterDataType SetMonitoringModeCount { get { return this.setMonitoringModeCountField; } set { this.setMonitoringModeCountField = value; } } /// public ServiceCounterDataType SetTriggeringCount { get { return this.setTriggeringCountField; } set { this.setTriggeringCountField = value; } } /// public ServiceCounterDataType DeleteMonitoredItemsCount { get { return this.deleteMonitoredItemsCountField; } set { this.deleteMonitoredItemsCountField = value; } } /// public ServiceCounterDataType CreateSubscriptionCount { get { return this.createSubscriptionCountField; } set { this.createSubscriptionCountField = value; } } /// public ServiceCounterDataType ModifySubscriptionCount { get { return this.modifySubscriptionCountField; } set { this.modifySubscriptionCountField = value; } } /// public ServiceCounterDataType SetPublishingModeCount { get { return this.setPublishingModeCountField; } set { this.setPublishingModeCountField = value; } } /// public ServiceCounterDataType PublishCount { get { return this.publishCountField; } set { this.publishCountField = value; } } /// public ServiceCounterDataType RepublishCount { get { return this.republishCountField; } set { this.republishCountField = value; } } /// public ServiceCounterDataType TransferSubscriptionsCount { get { return this.transferSubscriptionsCountField; } set { this.transferSubscriptionsCountField = value; } } /// public ServiceCounterDataType DeleteSubscriptionsCount { get { return this.deleteSubscriptionsCountField; } set { this.deleteSubscriptionsCountField = value; } } /// public ServiceCounterDataType AddNodesCount { get { return this.addNodesCountField; } set { this.addNodesCountField = value; } } /// public ServiceCounterDataType AddReferencesCount { get { return this.addReferencesCountField; } set { this.addReferencesCountField = value; } } /// public ServiceCounterDataType DeleteNodesCount { get { return this.deleteNodesCountField; } set { this.deleteNodesCountField = value; } } /// public ServiceCounterDataType DeleteReferencesCount { get { return this.deleteReferencesCountField; } set { this.deleteReferencesCountField = value; } } /// public ServiceCounterDataType BrowseCount { get { return this.browseCountField; } set { this.browseCountField = value; } } /// public ServiceCounterDataType BrowseNextCount { get { return this.browseNextCountField; } set { this.browseNextCountField = value; } } /// public ServiceCounterDataType TranslateBrowsePathsToNodeIdsCount { get { return this.translateBrowsePathsToNodeIdsCountField; } set { this.translateBrowsePathsToNodeIdsCountField = value; } } /// public ServiceCounterDataType QueryFirstCount { get { return this.queryFirstCountField; } set { this.queryFirstCountField = value; } } /// public ServiceCounterDataType QueryNextCount { get { return this.queryNextCountField; } set { this.queryNextCountField = value; } } /// public ServiceCounterDataType RegisterNodesCount { get { return this.registerNodesCountField; } set { this.registerNodesCountField = value; } } /// public ServiceCounterDataType UnregisterNodesCount { get { return this.unregisterNodesCountField; } set { this.unregisterNodesCountField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class ServiceCounterDataType { private uint totalCountField; private uint errorCountField; /// public uint TotalCount { get { return this.totalCountField; } set { this.totalCountField = value; } } /// public uint ErrorCount { get { return this.errorCountField; } set { this.errorCountField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class SessionSecurityDiagnosticsDataType { private NodeId sessionIdField; private string clientUserIdOfSessionField; private string[] clientUserIdHistoryField; private string authenticationMechanismField; private string encodingField; private string transportProtocolField; private MessageSecurityMode securityModeField; private string securityPolicyUriField; private byte[] clientCertificateField; /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public NodeId SessionId { get { return this.sessionIdField; } set { this.sessionIdField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public string ClientUserIdOfSession { get { return this.clientUserIdOfSessionField; } set { this.clientUserIdOfSessionField = value; } } /// [System.Xml.Serialization.XmlArrayAttribute( IsNullable = true )] [System.Xml.Serialization.XmlArrayItemAttribute( "String", IsNullable = false )] public string[] ClientUserIdHistory { get { return this.clientUserIdHistoryField; } set { this.clientUserIdHistoryField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public string AuthenticationMechanism { get { return this.authenticationMechanismField; } set { this.authenticationMechanismField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public string Encoding { get { return this.encodingField; } set { this.encodingField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public string TransportProtocol { get { return this.transportProtocolField; } set { this.transportProtocolField = value; } } /// public MessageSecurityMode SecurityMode { get { return this.securityModeField; } set { this.securityModeField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public string SecurityPolicyUri { get { return this.securityPolicyUriField; } set { this.securityPolicyUriField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( DataType = "base64Binary", IsNullable = true )] public byte[] ClientCertificate { get { return this.clientCertificateField; } set { this.clientCertificateField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class SubscriptionDiagnosticsDataType { private NodeId sessionIdField; private uint subscriptionIdField; private byte priorityField; private double publishingIntervalField; private uint maxKeepAliveCountField; private uint maxLifetimeCountField; private uint maxNotificationsPerPublishField; private bool publishingEnabledField; private uint modifyCountField; private uint enableCountField; private uint disableCountField; private uint republishRequestCountField; private uint republishMessageRequestCountField; private uint republishMessageCountField; private uint transferRequestCountField; private uint transferredToAltClientCountField; private uint transferredToSameClientCountField; private uint publishRequestCountField; private uint dataChangeNotificationsCountField; private uint eventNotificationsCountField; private uint notificationsCountField; private uint latePublishRequestCountField; private uint currentKeepAliveCountField; private uint currentLifetimeCountField; private uint unacknowledgedMessageCountField; private uint discardedMessageCountField; private uint monitoredItemCountField; private uint disabledMonitoredItemCountField; private uint monitoringQueueOverflowCountField; private uint nextSequenceNumberField; private uint eventQueueOverFlowCountField; /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public NodeId SessionId { get { return this.sessionIdField; } set { this.sessionIdField = value; } } /// public uint SubscriptionId { get { return this.subscriptionIdField; } set { this.subscriptionIdField = value; } } /// public byte Priority { get { return this.priorityField; } set { this.priorityField = value; } } /// public double PublishingInterval { get { return this.publishingIntervalField; } set { this.publishingIntervalField = value; } } /// public uint MaxKeepAliveCount { get { return this.maxKeepAliveCountField; } set { this.maxKeepAliveCountField = value; } } /// public uint MaxLifetimeCount { get { return this.maxLifetimeCountField; } set { this.maxLifetimeCountField = value; } } /// public uint MaxNotificationsPerPublish { get { return this.maxNotificationsPerPublishField; } set { this.maxNotificationsPerPublishField = value; } } /// public bool PublishingEnabled { get { return this.publishingEnabledField; } set { this.publishingEnabledField = value; } } /// public uint ModifyCount { get { return this.modifyCountField; } set { this.modifyCountField = value; } } /// public uint EnableCount { get { return this.enableCountField; } set { this.enableCountField = value; } } /// public uint DisableCount { get { return this.disableCountField; } set { this.disableCountField = value; } } /// public uint RepublishRequestCount { get { return this.republishRequestCountField; } set { this.republishRequestCountField = value; } } /// public uint RepublishMessageRequestCount { get { return this.republishMessageRequestCountField; } set { this.republishMessageRequestCountField = value; } } /// public uint RepublishMessageCount { get { return this.republishMessageCountField; } set { this.republishMessageCountField = value; } } /// public uint TransferRequestCount { get { return this.transferRequestCountField; } set { this.transferRequestCountField = value; } } /// public uint TransferredToAltClientCount { get { return this.transferredToAltClientCountField; } set { this.transferredToAltClientCountField = value; } } /// public uint TransferredToSameClientCount { get { return this.transferredToSameClientCountField; } set { this.transferredToSameClientCountField = value; } } /// public uint PublishRequestCount { get { return this.publishRequestCountField; } set { this.publishRequestCountField = value; } } /// public uint DataChangeNotificationsCount { get { return this.dataChangeNotificationsCountField; } set { this.dataChangeNotificationsCountField = value; } } /// public uint EventNotificationsCount { get { return this.eventNotificationsCountField; } set { this.eventNotificationsCountField = value; } } /// public uint NotificationsCount { get { return this.notificationsCountField; } set { this.notificationsCountField = value; } } /// public uint LatePublishRequestCount { get { return this.latePublishRequestCountField; } set { this.latePublishRequestCountField = value; } } /// public uint CurrentKeepAliveCount { get { return this.currentKeepAliveCountField; } set { this.currentKeepAliveCountField = value; } } /// public uint CurrentLifetimeCount { get { return this.currentLifetimeCountField; } set { this.currentLifetimeCountField = value; } } /// public uint UnacknowledgedMessageCount { get { return this.unacknowledgedMessageCountField; } set { this.unacknowledgedMessageCountField = value; } } /// public uint DiscardedMessageCount { get { return this.discardedMessageCountField; } set { this.discardedMessageCountField = value; } } /// public uint MonitoredItemCount { get { return this.monitoredItemCountField; } set { this.monitoredItemCountField = value; } } /// public uint DisabledMonitoredItemCount { get { return this.disabledMonitoredItemCountField; } set { this.disabledMonitoredItemCountField = value; } } /// public uint MonitoringQueueOverflowCount { get { return this.monitoringQueueOverflowCountField; } set { this.monitoringQueueOverflowCountField = value; } } /// public uint NextSequenceNumber { get { return this.nextSequenceNumberField; } set { this.nextSequenceNumberField = value; } } /// public uint EventQueueOverFlowCount { get { return this.eventQueueOverFlowCountField; } set { this.eventQueueOverFlowCountField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class ModelChangeStructureDataType { private NodeId affectedField; private NodeId affectedTypeField; private byte verbField; /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public NodeId Affected { get { return this.affectedField; } set { this.affectedField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public NodeId AffectedType { get { return this.affectedTypeField; } set { this.affectedTypeField = value; } } /// public byte Verb { get { return this.verbField; } set { this.verbField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = true )] public partial class ListOfModelChangeStructureDataType { private ModelChangeStructureDataType[] modelChangeStructureDataTypeField; /// [System.Xml.Serialization.XmlElementAttribute( "ModelChangeStructureDataType", IsNullable = true )] public ModelChangeStructureDataType[] ModelChangeStructureDataType { get { return this.modelChangeStructureDataTypeField; } set { this.modelChangeStructureDataTypeField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public enum ModelChangeStructureVerbMask { /// NodeAdded_1, /// NodeDeleted_2, /// ReferenceAdded_4, /// ReferenceDeleted_8, /// DataTypeChanged_16, } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class SemanticChangeStructureDataType { private NodeId affectedField; private NodeId affectedTypeField; /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public NodeId Affected { get { return this.affectedField; } set { this.affectedField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public NodeId AffectedType { get { return this.affectedTypeField; } set { this.affectedTypeField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = true )] public partial class ListOfSemanticChangeStructureDataType { private SemanticChangeStructureDataType[] semanticChangeStructureDataTypeField; /// [System.Xml.Serialization.XmlElementAttribute( "SemanticChangeStructureDataType", IsNullable = true )] public SemanticChangeStructureDataType[] SemanticChangeStructureDataType { get { return this.semanticChangeStructureDataTypeField; } set { this.semanticChangeStructureDataTypeField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class Range { private double lowField; private double highField; /// public double Low { get { return this.lowField; } set { this.lowField = value; } } /// public double High { get { return this.highField; } set { this.highField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class EUInformation { private string namespaceUriField; private int unitIdField; private LocalizedText displayNameField; private LocalizedText descriptionField; /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public string NamespaceUri { get { return this.namespaceUriField; } set { this.namespaceUriField = value; } } /// public int UnitId { get { return this.unitIdField; } set { this.unitIdField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public LocalizedText DisplayName { get { return this.displayNameField; } set { this.displayNameField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public LocalizedText Description { get { return this.descriptionField; } set { this.descriptionField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public enum ExceptionDeviationFormat { /// AbsoluteValue_0, /// PercentOfRange_1, /// PercentOfValue_2, /// PercentOfEURange_3, /// Unknown_4, } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class Annotation { private string messageField; private string userNameField; private System.DateTime annotationTimeField; /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public string Message { get { return this.messageField; } set { this.messageField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public string UserName { get { return this.userNameField; } set { this.userNameField = value; } } /// public System.DateTime AnnotationTime { get { return this.annotationTimeField; } set { this.annotationTimeField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "2.0.50727.42" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "code" )] [System.Xml.Serialization.XmlTypeAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd" )] [System.Xml.Serialization.XmlRootAttribute( Namespace = "http://opcfoundation.org/UA/2008/02/Types.xsd", IsNullable = false )] public partial class ProgramDiagnosticDataType { private NodeId createSessionIdField; private string createClientNameField; private System.DateTime invocationCreationTimeField; private System.DateTime lastTransitionTimeField; private string lastMethodCallField; private NodeId lastMethodSessionIdField; private Argument[] lastMethodInputArgumentsField; private Argument[] lastMethodOutputArgumentsField; private System.DateTime lastMethodCallTimeField; private StatusResult lastMethodReturnStatusField; /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public NodeId CreateSessionId { get { return this.createSessionIdField; } set { this.createSessionIdField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public string CreateClientName { get { return this.createClientNameField; } set { this.createClientNameField = value; } } /// public System.DateTime InvocationCreationTime { get { return this.invocationCreationTimeField; } set { this.invocationCreationTimeField = value; } } /// public System.DateTime LastTransitionTime { get { return this.lastTransitionTimeField; } set { this.lastTransitionTimeField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public string LastMethodCall { get { return this.lastMethodCallField; } set { this.lastMethodCallField = value; } } /// [System.Xml.Serialization.XmlElementAttribute( IsNullable = true )] public NodeId LastMethodSessionId { get { return this.lastMethodSessionIdField; } set { this.lastMethodSessionIdField = value; } } /// public Argument[] LastMethodInputArguments { get { return this.lastMethodInputArgumentsField; } set { this.lastMethodInputArgumentsField = value; } } /// public Argument[] LastMethodOutputArguments { get { return this.lastMethodOutputArgumentsField; } set { this.lastMethodOutputArgumentsField = value; } } /// public System.DateTime LastMethodCallTime { get { return this.lastMethodCallTimeField; } set { this.lastMethodCallTimeField = value; } } /// public StatusResult LastMethodReturnStatus { get { return this.lastMethodReturnStatusField; } set { this.lastMethodReturnStatusField = value; } } } } ================================================ FILE: SemanticData/UANodeSetValidation/DataSerialization/QualifiedName.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2022, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ using System; using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; using UAOOI.SemanticData.AddressSpace.Abstractions; using UAOOI.SemanticData.BuildingErrorsHandling; namespace UAOOI.SemanticData.UANodeSetValidation.DataSerialization { /// /// A name qualified with a namespace. /// /// /// /// The QualifiedName is defined in Part 3 - Address Space Model, Section 7.3, titled /// Qualified Name. ///
/// /// The QualifiedName is a simple wrapper class that is used to generate a fully-qualified name /// for any type that has a name. ///
/// /// A Fully Qualified name is one that consists of a name, and an index of which namespace /// (within a namespace table) this name belongs to. /// For example
/// Namespace Index = 1
/// Name = MyName
/// becomes:
/// 1:MyName ///
///
public partial class QualifiedName : IFormattable, ICloneable, IComparable { #region Constructors /// /// Initializes the object with default values. /// /// /// Initializes the object with default values. /// internal QualifiedName() { NamespaceIndex = 0; Name = null; } /// /// Creates a deep copy of the value. /// /// /// Creates a deep copy of the value. /// /// The qualified name to copy /// Thrown if the provided value is null public QualifiedName(QualifiedName value) { if (value == null) throw new ArgumentNullException("value"); Name = value.Name; NamespaceIndex = value.NamespaceIndex; NamespaceIndexSpecified = value.NamespaceIndexSpecified; } /// /// Initializes the object with a name. /// /// /// Initializes the object with a name. /// /// The name-portion to store as part of the fully qualified name public QualifiedName(string name) { NamespaceIndex = 0; Name = name; NamespaceIndexSpecified = false; } /// /// Initializes the object with a name and a namespace index. /// /// /// Initializes the object with a name and a namespace index. /// /// The name-portion of the fully qualified name /// The index of the namespace within the namespace-table public QualifiedName(string name, ushort namespaceIndex) { NamespaceIndex = namespaceIndex; Name = name; NamespaceIndexSpecified = namespaceIndex != 0; } #endregion Constructors #region Public Properties /// internal ushort XmlEncodedNamespaceIndex { get => NamespaceIndex; set => NamespaceIndex = value; } #endregion Public Properties #region IComparable Members /// /// Compares two QualifiedNames. /// /// The object to compare to. /// /// Less than zero if the instance is less than the object. /// Zero if the instance is equal to the object. /// Greater than zero if the instance is greater than the object. /// public int CompareTo(object obj) { if (Object.ReferenceEquals(obj, null)) return -1; if (Object.ReferenceEquals(this, obj)) return 0; QualifiedName _qualifiedName = obj as QualifiedName; if (_qualifiedName == null) return typeof(QualifiedName).GUID.CompareTo(obj.GetType().GUID); if (_qualifiedName.NamespaceIndex != NamespaceIndex) return NamespaceIndex.CompareTo(_qualifiedName.NamespaceIndex); if (Name != null) return String.CompareOrdinal(Name, _qualifiedName.Name); return -1; } /// /// Implements the operator >. /// /// The value1. /// The value2. /// The result of the operator. public static bool operator >(QualifiedName value1, QualifiedName value2) { if (!Object.ReferenceEquals(value1, null)) return value1.CompareTo(value2) > 0; return false; } /// /// Implements the operator <. /// /// The value1. /// The value2. /// The result of the operator. public static bool operator <(QualifiedName value1, QualifiedName value2) { if (!Object.ReferenceEquals(value1, null)) return value1.CompareTo(value2) < 0; return true; } #endregion IComparable Members #region Overridden Methods /// /// Returns a suitable hash value for the instance. /// public override int GetHashCode() { if (Name != null) return Name.GetHashCode(); return 0; } /// /// Returns true if the objects are equal. /// /// /// Returns true if the objects are equal. /// /// The object to compare to this/me public override bool Equals(object obj) { if (Object.ReferenceEquals(obj, null)) return false; if (Object.ReferenceEquals(this, obj)) return true; QualifiedName _qualifiedName = obj as QualifiedName; if (_qualifiedName == null) return false; if (_qualifiedName.NamespaceIndex != NamespaceIndex) return false; return _qualifiedName.Name == Name; } /// /// Returns true if the objects are equal. /// /// /// Returns true if the objects are equal. /// /// The first value to compare /// The second value to compare public static bool operator ==(QualifiedName value1, QualifiedName value2) { if (Object.ReferenceEquals(value1, null)) return Object.ReferenceEquals(value2, null); return value1.Equals(value2); } /// /// Returns true if the objects are not equal. /// /// /// Returns true if the objects are equal. /// /// The first value to compare /// The second value to compare public static bool operator !=(QualifiedName value1, QualifiedName value2) { if (Object.ReferenceEquals(value1, null)) return !Object.ReferenceEquals(value2, null); return !value1.Equals(value2); } /// /// Returns the string representation of the object. /// /// /// Returns the string representation of the object. /// public override string ToString() { return ToString(null, null); } #endregion Overridden Methods #region IFormattable Members /// /// Returns the string representation of the object. /// /// /// Returns the string representation of the object. /// /// (Unused) Always pass null /// (Unused) Always pass null /// Thrown if non-null parameters are passed public string ToString(string format, IFormatProvider formatProvider) { if (format == null) { int capacity = (Name != null) ? Name.Length : 0; StringBuilder builder = new StringBuilder(capacity + 10); if (this.NamespaceIndex == 0) { // prepend the namespace index if the name contains a colon. if (Name != null) { int index = Name.IndexOf(':'); if (index != -1) builder.Append("0:"); } } else { builder.Append(NamespaceIndex); builder.Append(':'); } if (Name != null) builder.Append(Name); return builder.ToString(); } throw new FormatException(String.Format("Invalid format string: '{0}'.", format)); } #endregion IFormattable Members #region ICloneable Members /// /// Makes a deep copy of the object. /// /// /// Makes a deep copy of the object. /// public object Clone() { // this object cannot be altered after it is created so no new allocation is necessary. return this; } #endregion ICloneable Members #region Static Methods /// /// Converts an expanded node id to a node id using a namespace table. /// internal static QualifiedName Create(string name, string namespaceUri, INamespaceTable namespaceTable) { // check for null. if (String.IsNullOrEmpty(name)) return QualifiedName.Null; // return a name using the default namespace. if (String.IsNullOrEmpty(namespaceUri)) return new QualifiedName(name); // find the namespace index. int namespaceIndex = -1; if (namespaceTable != null) namespaceIndex = namespaceTable.GetURIIndex(new Uri(namespaceUri)); // oops - not found. if (namespaceIndex < 0) throw new ServiceResultException (TraceMessage.BuildErrorTraceMessage(BuildError.QualifiedNameInvalidSyntax, String.Format("NamespaceUri ({0}) is not in the NamespaceTable.", namespaceUri)), "Cannot create the QualifiedName because NamespaceUri is not in the NamespaceTable."); // return the name. return new QualifiedName(name, (ushort)namespaceIndex); } /// /// Returns true if the QualifiedName is valid. /// /// The name to be validated. /// The table namespaces known to the server. /// True if the name is value. internal static bool IsValid(QualifiedName value, INamespaceTable namespaceUris) { if (value == null || String.IsNullOrEmpty(value.Name)) return false; if (namespaceUris != null && namespaceUris.GetModelTableEntry(value.NamespaceIndex) == null) return false; return true; } /// /// Parses a string containing a with the syntax n:qname /// /// The QualifiedName value as a string. internal static QualifiedName Parse(string text) { ushort defaultNamespaceIndex = 0; string pattern = @"\b((\d{1,}):)?(.+)"; RegexOptions options = RegexOptions.Singleline; MatchCollection parseResult = Regex.Matches(text, pattern, options); if (parseResult.Count == 0) throw new ArgumentOutOfRangeException(nameof(text), $"The entry text {text} cannot be resolved to create a valid instance of the {nameof(QualifiedName)}."); else if (parseResult.Count > 1) throw new ArgumentOutOfRangeException(nameof(text), $"Ambiguous entry - {text} contains {parseResult.Count} parts that match the {nameof(QualifiedName)} syntax."); if (!parseResult[0].Groups[3].Success) throw new ArgumentOutOfRangeException(nameof(text), $"The entry text {text} doesn't contain a required {nameof(QualifiedName.Name)} field."); if (ushort.TryParse(parseResult[0].Groups[2].Value, out ushort index)) defaultNamespaceIndex = index; return new QualifiedName() { Name = parseResult[0].Groups[3].Value, namespaceIndexFieldSpecified = true, NamespaceIndex = defaultNamespaceIndex }; } /// /// Returns true if the value is null. /// /// The qualified name to check public static bool IsNull(QualifiedName value) { if (value != null) { if (value.NamespaceIndex != 0 || !String.IsNullOrEmpty(value.Name)) { return false; } } return true; } /// /// Converts a string to a qualified name. /// /// /// Converts a string to a qualified name. /// /// The string to turn into a fully qualified name public static QualifiedName ToQualifiedName(string value) { return new QualifiedName(value); } /// /// Converts a string to a qualified name. /// /// /// Converts a string to a qualified name. /// /// The string to turn into a fully qualified name public static implicit operator QualifiedName(string value) { return new QualifiedName(value); } /// /// Returns an instance of a null QualifiedName. /// public static QualifiedName Null => s_Null; private static readonly QualifiedName s_Null = new QualifiedName(); #endregion Static Methods } /// /// A collection of QualifiedName objects. /// /// /// A strongly-typed collection of QualifiedName objects. /// public partial class QualifiedNameCollection : List, ICloneable { /// /// Initializes an empty collection. /// /// /// Initializes an empty collection. /// public QualifiedNameCollection() { } /// /// Initializes the collection from another collection. /// /// /// Initializes the collection from another collection. /// /// The enumerated collection of qualified names to add to this new collection public QualifiedNameCollection(IEnumerable collection) : base(collection) { } /// /// Initializes the collection with the specified capacity. /// /// /// Initializes the collection with the specified capacity. /// /// Max capacity of this collection public QualifiedNameCollection(int capacity) : base(capacity) { } /// /// Converts an array to a collection. /// /// /// Converts an array to a collection. /// /// The array to turn into a collection public static QualifiedNameCollection ToQualifiedNameCollection(QualifiedName[] values) { if (values != null) return new QualifiedNameCollection(values); return new QualifiedNameCollection(); } /// /// Converts an array to a collection. /// /// /// Converts an array to a collection. /// /// The array to turn into a collection public static implicit operator QualifiedNameCollection(QualifiedName[] values) { return ToQualifiedNameCollection(values); } #region ICloneable Methods /// /// Creates a deep copy of the collection. /// /// /// Creates a deep copy of the collection. /// public object Clone() { QualifiedNameCollection _clonedCollection = new QualifiedNameCollection(this.Count); foreach (QualifiedName _item in this) _clonedCollection.Add((QualifiedName)_item.Clone()); return _clonedCollection; } #endregion ICloneable Methods }//QualifiedNameCollection }//namespace ================================================ FILE: SemanticData/UANodeSetValidation/DataSerialization/ServiceResultException.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System; using System.Runtime.Serialization; using System.Security.Permissions; using UAOOI.SemanticData.BuildingErrorsHandling; namespace UAOOI.SemanticData.UANodeSetValidation.DataSerialization { /// /// Class ServiceResultException. /// [Serializable] public class ServiceResultException : Exception { /// /// Initializes a new instance of the class. /// public ServiceResultException() { } /// /// Initializes a new instance of the class. /// /// The trace message. /// The message. public ServiceResultException(TraceMessage traceMessage, string message) : base(message) { TraceMessage = traceMessage; } /// /// Initializes a new instance of the class. /// /// The trace message. /// The message. /// The inner. public ServiceResultException(TraceMessage traceMessage, string message, Exception inner) : base(message, inner) { TraceMessage = traceMessage; } /// /// Gets the trace message. /// /// The trace message. public TraceMessage TraceMessage { get; private set; } /// /// Initializes a new instance of the class with serialized data. /// /// The that holds the serialized object data about the exception being thrown. /// The that contains contextual information about the source or destination. protected ServiceResultException(SerializationInfo info, StreamingContext context) : base(info, context) { throw new NotImplementedException(); } /// /// When overridden in a derived class, sets the with information about the exception. /// /// The that holds the serialized object data about the exception being thrown. /// The that contains contextual information about the source or destination. /// /// /// /// [SecurityPermissionAttribute(SecurityAction.Demand, SerializationFormatter = true)] public override void GetObjectData(SerializationInfo info, StreamingContext context) { base.GetObjectData(info, context); //TODO implement GetObjectData } } } ================================================ FILE: SemanticData/UANodeSetValidation/Diagnostic/AssemblyTraceSource.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2021, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ using System.Diagnostics; using UAOOI.Common.Infrastructure.Diagnostic; using UAOOI.SemanticData.BuildingErrorsHandling; namespace UAOOI.SemanticData.UANodeSetValidation.Diagnostic { /// /// Class AssemblyTraceSource. Implements the /// /// internal class AssemblyTraceSource : IBuildErrorsHandling { #region constructors /// /// Initializes a new instance of the class using the default of the . /// internal AssemblyTraceSource() { traceSource = new TraceSourceBase("UANodeSetValidation"); } /// /// Initializes a new instance of the class using a provided implementation of the . /// /// The provided implementation of the . internal AssemblyTraceSource(ITraceSource traceEvent) { traceSource = traceEvent; } #endregion constructors #region IBuildErrorsHandling /// /// Writes the trace message. /// /// The trace message. public void WriteTraceMessage(TraceMessage traceMessage) { traceSource.TraceData(traceMessage.TraceLevel, 43988162, traceMessage.ToString()); if (traceMessage.BuildError.Focus != Focus.Diagnostic) Errors++; } public int Errors { get; private set; } = 0; #endregion IBuildErrorsHandling #region ITraceSource /// /// Writes trace data to the trace listeners in the collection using the specified , /// event identifier , and trace . /// /// One of the enumeration values that specifies the event type of the trace data. /// A numeric identifier for the event. /// The trace data. public void TraceData(TraceEventType eventType, int id, object data) { traceSource.TraceData(eventType, id, data); } #endregion ITraceSource #region private private readonly ITraceSource traceSource; #endregion private } } ================================================ FILE: SemanticData/UANodeSetValidation/Diagnostic/IBuildErrorsHandling.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2021, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ using UAOOI.Common.Infrastructure.Diagnostic; using UAOOI.SemanticData.BuildingErrorsHandling; namespace UAOOI.SemanticData.UANodeSetValidation.Diagnostic { internal interface IBuildErrorsHandling : ITraceSource { /// /// Traces the event using . /// /// The message to be send to trace. void WriteTraceMessage(TraceMessage traceMessage); /// /// Gets the number of traced errors. /// /// The errors. int Errors { get; } } } ================================================ FILE: SemanticData/UANodeSetValidation/Extensions.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2022, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ using System; using System.Collections.Generic; using System.Diagnostics; using System.Globalization; using System.IO; using System.Linq; using System.Xml; using System.Xml.Serialization; using UAOOI.Common.Infrastructure.Serializers; using UAOOI.SemanticData.AddressSpace.Abstractions; using UAOOI.SemanticData.BuildingErrorsHandling; using UAOOI.SemanticData.InformationModelFactory; using UAOOI.SemanticData.UANodeSetValidation.DataSerialization; using UAOOI.SemanticData.UANodeSetValidation.UAInformationModel; namespace UAOOI.SemanticData.UANodeSetValidation { /// /// Delegate LocalizedTextFactory - encapsulates a method that must be used to create localized text using and /// /// The locale field. This argument is specified as a that is composed of a language component and a country/region /// component as specified by RFC 3066. The country/region component is always preceded by a hyphen. The format of the LocaleId string is shown below: /// /// <language>[-<country/region>], /// where: /// <language> is the two letter ISO 639 code for a language, /// <country/region> is the two letter ISO 3166 code for the country/region. /// /// /// The value field. internal delegate void LocalizedTextFactory(string localeField, string valueField); /// /// Class Extensions - provides helper functions for this namespace /// internal static class Extensions { //string internal static string SymbolicName(this List path) { return string.Join("_", path.ToArray()); } /// /// Exports the string and filter out the default value. /// /// The value. /// The default value. /// Returns if not equal to , otherwise it returns . internal static string ExportString(this string value, string defaultValue) { if (string.IsNullOrEmpty(value)) return null; return string.Compare(value, defaultValue) == 0 ? null : value; } internal static bool? Export(this bool value, bool defaultValue) { return !value.Equals(defaultValue) ? value : new Nullable(); } internal static int? Export(this double value, double defaultValue) { return !value.Equals(defaultValue) ? Convert.ToInt32(value) : new Nullable(); } internal static AttributeWriteMask Validate(this AttributeWriteMask value, AttributeWriteMask maxValue, Action reportError) { if (value.CompareTo(maxValue) >= 0) reportError(value); return value & maxValue - 1; } //TODO IsValidLanguageIndependentIdentifier is not supported by the .NET standard #340 /// /// Gets a value indicating whether the specified value is a valid language independent identifier. /// /// /// it is implemented using /// https://raw.githubusercontent.com/Microsoft/referencesource/3b1eaf5203992df69de44c783a3eda37d3d4cd10/System/compmod/system/codedom/compiler/CodeGenerator.cs as the starting point. /// private static bool IsValidLanguageIndependentIdentifier(this string value) { if (value.Length == 0) return false; // each char must be Lu, Ll, Lt, Lm, Lo, Nd, Mn, Mc, Pc for (int i = 0; i < value.Length; i++) { char ch = value[i]; UnicodeCategory uc = char.GetUnicodeCategory(ch); switch (uc) { case UnicodeCategory.UppercaseLetter: // Lu case UnicodeCategory.LowercaseLetter: // Ll case UnicodeCategory.TitlecaseLetter: // Lt case UnicodeCategory.ModifierLetter: // Lm case UnicodeCategory.LetterNumber: // Lm case UnicodeCategory.OtherLetter: // Lo break; case UnicodeCategory.NonSpacingMark: // Mn case UnicodeCategory.SpacingCombiningMark: // Mc case UnicodeCategory.ConnectorPunctuation: // Pc case UnicodeCategory.DecimalDigitNumber: // Nd // Underscore is a valid starting character, even though it is a ConnectorPunctuation. //if (nextMustBeStartChar && ch != '_') // return false; break; default: return false; } } return true; } internal static string ValidateIdentifier(this string name, Action reportError) { if (!name.IsValidLanguageIndependentIdentifier()) reportError(TraceMessage.BuildErrorTraceMessage(BuildError.WrongSymbolicName, string.Format("SymbolicName: '{0}'.", name))); return name; } internal static string NodeIdentifier(this IUANode node) { if (node.BrowseName == null) return node.SymbolicName; return node.BrowseName.ToString(); } internal static string ConvertToString(this LocalizedText localizedText) { if (localizedText == null) return "Empty LocalizedText"; return string.Format("{0}:{1}", localizedText.Locale, localizedText.Text); } /// /// Converts the ArrayDimensions represented as the array of to string. /// /// /// The maximum length of an array. /// This value is a comma separated list of unsigned integer values.The list has a number of elements equal to the ValueRank. /// The value is 0 if the maximum is not known for a dimension. /// This field is not specified if the ValueRank less or equal 0. /// This field is not specified for subtypes of Enumeration or for DataTypes with the OptionSetValues Property. /// /// The array dimensions represented as the string. /// System.String. internal static string ArrayDimensionsToString(this uint[] arrayDimensions) { return string.Join(", ", arrayDimensions); } internal static void GetParameters(this IDataTypeDefinition dataTypeDefinition, IDataTypeDefinitionFactory dataTypeDefinitionFactory, IAddressSpaceBuildContext nodeContext, Action traceEvent) { if (dataTypeDefinition is null) return; //xsd comment < !--BaseType is obsolete and no longer used.Left in for backwards compatibility. --> //definition.BaseType = modelContext.ExportBrowseName(dataTypeDefinition.BaseType, DataTypes.BaseDataType); dataTypeDefinitionFactory.IsOptionSet = dataTypeDefinition.IsOptionSet; dataTypeDefinitionFactory.IsUnion = dataTypeDefinition.IsUnion; dataTypeDefinitionFactory.Name = null; //TODO UADataType.Definition.Name wrong value #341 modelContext.ExportBrowseName( dataTypeDefinition.Name, DataTypes.BaseDataType); dataTypeDefinitionFactory.SymbolicName = dataTypeDefinition.SymbolicName; if (dataTypeDefinition.Field == null || dataTypeDefinition.Field.Length == 0) return; foreach (IDataTypeField _item in dataTypeDefinition.Field) { IDataTypeFieldFactory _nP = dataTypeDefinitionFactory.NewField(); _nP.Name = _item.Name; _nP.SymbolicName = _item.SymbolicName; _item.DisplayName.ExportLocalizedTextArray(_nP.AddDisplayName); _nP.DataType = nodeContext.ExportBrowseName(_item.DataTypeNodeId, DataTypes.BaseDataType); _nP.ValueRank = _item.ValueRank.ParseValueRank(traceEvent); _nP.ArrayDimensions = _item.ArrayDimensions; _nP.MaxStringLength = _item.MaxStringLength; _item.Description.ExportLocalizedTextArray(_nP.AddDescription); _nP.Value = _item.Value; _nP.IsOptional = _item.IsOptional; } } //TODO Define independent Address Space API #645 - move it to the InformationModelFactory internal static void ExportLocalizedTextArray(this LocalizedText[] text, LocalizedTextFactory createLocalizedText) { if (text == null || text.Length == 0) return; foreach (LocalizedText item in text) createLocalizedText(item.Locale, item.Text); } internal static LocalizedText[] Truncate(this LocalizedText[] localizedText, int maxLength, Action reportError) { if (localizedText == null || localizedText.Length == 0) return null; List _ret = new List(); foreach (LocalizedText _item in localizedText) { if (_item.Text.Length > maxLength) { reportError(TraceMessage.BuildErrorTraceMessage(BuildError.WrongDisplayNameLength, string.Format ("The localized text starting with '{0}:{1}' of length {2} is too long.", _item.Locale, _item.Text.Substring(0, 20), _item.Text.Length))); LocalizedText _localizedText = new LocalizedText() { Locale = _item.Locale, Text = _item.Text.Substring(0, maxLength) }; _ret.Add(_localizedText); } } return _ret.ToArray(); } internal static List GetParameters(this XmlElement xmlElement) { //TODO UANodeSetValidation.Extensions.GetObject - object reference not set #624 ListOfExtensionObject _wrapper = xmlElement.GetObject(); Debug.Assert(_wrapper != null); if (_wrapper.ExtensionObject.AsEnumerable().Where(x => !((string)x.TypeId.Identifier).Equals("i=297")).Any()) throw new ArgumentOutOfRangeException("ExtensionObject.TypeId.Identifier"); List _ret = new List(); foreach (ExtensionObject item in _wrapper.ExtensionObject) _ret.Add(item.Body.GetObject()); return _ret; } internal static bool LocalizedTextArraysEqual(this LocalizedText[] first, LocalizedText[] second) { if (Object.ReferenceEquals(first, null)) return Object.ReferenceEquals(second, null); if (Object.ReferenceEquals(second, null)) return false; if (first.Length != second.Length) return false; try { Dictionary _dictionaryForFirst = first.ToDictionary(x => ConvertToString(x)); foreach (LocalizedText _text in second) if (!_dictionaryForFirst.ContainsKey(ConvertToString(_text))) return false; } catch (Exception) { return false; } return true; } internal static bool RolePermissionsEquals(this IRolePermission[] first, IRolePermission[] second) { if (Object.ReferenceEquals(first, null)) return Object.ReferenceEquals(second, null); if (first.Length != second.Length) return false; Dictionary _dictionaryForFirst = first.ToDictionary(x => x.Permissions); foreach (IRolePermission _permission in second) { if (!_dictionaryForFirst.ContainsKey(_permission.Permissions)) return false; if (_dictionaryForFirst[_permission.Permissions].Value != _permission.Value) return false; } return true; } internal static bool ReferencesEquals(this IReference[] first, IReference[] second) { return true; } internal static bool AreEqual(this string first, string second) { if (String.IsNullOrEmpty(first)) return String.IsNullOrEmpty(second); return String.Compare(first, second) == 0; } #region private //private static string ConvertToString(LocalizedText x) //{ // return $"{x.Locale}:{x.Text}"; //} /// /// Deserialize object using /// /// The type of the type. /// The object to be deserialized. /// Deserialized object private static type GetObject(this XmlElement xmlElement) { using (MemoryStream _memoryBuffer = new MemoryStream(1000)) { XmlWriterSettings _settings = new XmlWriterSettings() { ConformanceLevel = ConformanceLevel.Fragment }; using (XmlWriter wrt = XmlWriter.Create(_memoryBuffer, _settings)) //TODO UANodeSetValidation.Extensions.GetObject - object reference not set #624 xmlElement.WriteTo(wrt); _memoryBuffer.Flush(); _memoryBuffer.Position = 0; return XmlFile.ReadXmlFile(_memoryBuffer); } } #endregion private } } ================================================ FILE: SemanticData/UANodeSetValidation/IAddressSpaceBuildContext.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2021, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System; using System.Collections.Generic; using System.Xml; using UAOOI.SemanticData.InformationModelFactory; using UAOOI.SemanticData.UANodeSetValidation.DataSerialization; namespace UAOOI.SemanticData.UANodeSetValidation { /// /// Interface IAddressSpaceBuildContext representing the Address Space Context used during build operation /// internal interface IAddressSpaceBuildContext { /// /// Exports the browse name if it is not default value, otherwise null. /// /// The identifier. /// The default value. /// XmlQualifiedName. XmlQualifiedName ExportBrowseName(NodeId id, NodeId defaultValue); /// /// Exports the argument for a method. /// /// The argument - it defines a Method input or output argument specification. It is for example used in the input and output argument Properties for Methods. /// Type of the data. Parameter ExportArgument(DataSerialization.Argument argument, XmlQualifiedName dataType); /// /// Gets the or create node context. /// /// The node identifier. /// Delegated capturing functionality to create UA model context. /// Returns an instance of . IUANodeContext GetOrCreateNodeContext(NodeId nodeId, Func createUAModelContext); /// /// Gets the namespace value as the . /// /// Index of the namespace. /// The namespace of the index pointed out by the string GetNamespace(ushort namespaceIndex); /// /// Gets my references. /// /// The source node /// Returns containing references attached to the . IEnumerable GetMyReferences(IUANodeBase node); /// /// Gets the references to me. /// /// The node in concern. /// All references targeting the node IEnumerable GetReferences2Me(IUANodeBase node); /// /// Gets the children nodes ( or ) for the . /// /// The root node of the requested children. /// Return an instance of capturing all children of the selected node. IEnumerable GetChildren(IUANodeBase node); /// /// Exports the argument. /// /// The argument. /// An instance encapsulating . Parameter ExportArgument(Argument argument); void GetBaseTypes(IUANodeContext rootNode, List inheritanceChain); } } ================================================ FILE: SemanticData/UANodeSetValidation/IUANodeBase.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2022, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ using System; using System.Collections.Generic; using System.Xml; using UAOOI.SemanticData.AddressSpace.Abstractions; using UAOOI.SemanticData.InformationModelFactory; using UAOOI.SemanticData.UANodeSetValidation.DataSerialization; namespace UAOOI.SemanticData.UANodeSetValidation { /// /// Interface IUANodeBase - if implemented captures all basic information represented by the UA Node /// internal interface IUANodeBase : IEquatable { /// /// Calculates the node references. /// /// The node factory. /// list of selected members to export. /// The validator. /// It creates the node at the top level of the model. Called if the node has reference to another node that cannot be defined as a child. void CalculateNodeReferences(INodeFactory nodeFactory, List allNodesInConcern, IValidator validator, Action validateExportNode2Model); /// /// Gets the node identifier. /// /// The imported node identifier. NodeId NodeIdContext { get; } /// /// Gets the wrapped node described by the type. /// IUANode UANode { get; } /// /// Exports the browse name of the wrapped node by this instance. /// /// An instance of representing the browse name of the node. XmlQualifiedName ExportNodeBrowseName(); /// /// Gets a value indicating whether this instance is a property. /// /// true if this instance is property; otherwise, false. bool IsProperty { get; } /// /// Gets a value indicating whether this instance is property variable type. /// /// true if this instance is property variable type; otherwise, false. bool IsPropertyVariableType { get; } /// /// Exports the browse name of this node recognized as or target. /// /// The trace event. /// An instance of representing subtype or type of an instance. XmlQualifiedName ExportBrowseNameBaseType(Action traceEvent); /// /// Gets the derived instances. /// NodesCollection GetDerivedInstances(); /// /// Exports the BrowseName of the BaseType. /// /// An instance of representing the base type.. XmlQualifiedName ExportBaseTypeBrowseName(); /// /// Gets the modeling rule associated with this node. /// /// The associated with the node. Null if valid modeling rule cannot be recognized. ModelingRules? ModelingRule { get; } /// /// Removes the inherited values. /// /// The instance declaration. /// /// If a member is overridden all inherited values of the node attributes must be removed. /// void RemoveInheritedValues(IUANodeBase instanceDeclaration); } } ================================================ FILE: SemanticData/UANodeSetValidation/IUANodeContext.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2022, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ using System; using System.Collections.Generic; using UAOOI.SemanticData.AddressSpace.Abstractions; using UAOOI.SemanticData.UANodeSetValidation.DataSerialization; namespace UAOOI.SemanticData.UANodeSetValidation { /// /// Interface IUANodeContext - captures all information about the required by the Address Space build process /// Implements the /// /// internal interface IUANodeContext : IUANodeBase { /// /// Builds the symbolic identifier. /// /// The browse path. void BuildSymbolicId(List path); /// /// Gets or sets a value indicating whether the node is in recursion chain - selected for analysis second time. /// /// true if the node is in recursion chain; otherwise, false. bool InRecursionChain { get; set; } /// /// Updates this instance in case the wrapped is recognized in the model. /// /// The node containing definition to be added to the model. /// Used to add new reference to the common collection of references. void Update(IUANode node, Action addReference); /// /// Creates new embedded node exposed as the . /// /// The identifier of the new node. /// An instance of the . representing the new embedded node. IUANodeContext CreateUANodeContext(NodeId id); } } ================================================ FILE: SemanticData/UANodeSetValidation/IValidator.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2022, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ using System; using System.Collections.Generic; using UAOOI.SemanticData.InformationModelFactory; namespace UAOOI.SemanticData.UANodeSetValidation { /// /// Interface IValidator - interface capturing functionality supporting the Ind=formation Model export and validation from the Address Space /// internal interface IValidator { /// /// Validates and exports it using an object of type. /// /// The node context to be validated and exported. /// list of selected members to export. /// A model export factory. /// The reference to parent node. /// It creates the node at the top level of the model. Called if the node has reference to another node that cannot be defined as a child. void ValidateExportNode(IUANodeBase nodeContext, List allNodesInConcern, INodeContainer exportFactory, Action validateExportNode2Model, UAReferenceContext parentReference); /// /// Validates and exports it using an object of type. /// /// The node context to be validated and exported. /// list of selected members to export. /// A model export factory. /// It creates the node at the top level of the model. Called if the node has reference to another node that cannot be defined as a child. void ValidateExportNode(IUANodeBase nodeContext, List allNodesInConcern, INodeContainer exportFactory, Action validateExportNode2Model); } } ================================================ FILE: SemanticData/UANodeSetValidation/InformationModelFactory/DataTypeDefinitionFactoryBase.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System.Xml; using UAOOI.SemanticData.InformationModelFactory; namespace UAOOI.SemanticData.UANodeSetValidation.InformationModelFactory { /// /// Class DataTypeDefinitionFactoryBase. /// Implements the /// /// internal class DataTypeDefinitionFactoryBase : IDataTypeDefinitionFactory { /// /// Creates new field and provides an object of type encapsulating information about the field data type. /// /// Returns . public IDataTypeFieldFactory NewField() { return new DataTypeFieldFactoryBase(); } /// /// Sets the name of the DataType. /// /// The name represented as . public XmlQualifiedName Name { set { } } /// /// A symbolic name for the data type. It should only be specified if the Name cannot be used for this purpose. /// Only letters, digits or the underscore (‘_’) are permitted. /// /// The symbolic name of this entity. public string SymbolicName { set { } } /// /// Sets a value indicating whether this instance is option set. This flag indicates that the data type defines the OptionSetValues Property. /// This field is optional.The default value is false. /// /// true if this instance is option set; otherwise, false. public bool IsOptionSet { set { } } /// /// Sets a value indicating whether this instance is union. /// Only one of the Fields defined for the data type is encoded into a value. /// This field is optional.The default value is false. If this value is true, the first field is the switch value. /// /// true if this instance is union; otherwise, false. public bool IsUnion { set { } } } } ================================================ FILE: SemanticData/UANodeSetValidation/InformationModelFactory/DataTypeFactoryBase.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using UAOOI.SemanticData.InformationModelFactory; namespace UAOOI.SemanticData.UANodeSetValidation.InformationModelFactory { /// /// Class DataTypeFactoryBase. /// Implements the /// Implements the /// /// /// internal class DataTypeFactoryBase : TypeFactoryBase, IDataTypeFactory { /// /// Sets a value indicating whether this instance is option set. This flag indicates that the data type defines the OptionSetValues Property. /// This field is optional.The default value is false. /// /// true if this instance is option set; otherwise, false. public bool IsOptionSet { set; private get; } /// /// Creates new implementation dependent object implementing the interface. /// The data type model is used to define simple and complex data types. Types are used to describe the structure of the Value attribute of variables and their types. /// Therefore each Variable and VariableType node is pointing with its DataType attribute to a node of the DataType node class. /// /// IDataTypeDefinitionFactory. /// Returns new object of type encapsulating DataType definition factory. public IDataTypeDefinitionFactory NewDefinition() { return new DataTypeDefinitionFactoryBase(); } } } ================================================ FILE: SemanticData/UANodeSetValidation/InformationModelFactory/DataTypeFieldFactoryBase.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System.Xml; using UAOOI.SemanticData.InformationModelFactory; namespace UAOOI.SemanticData.UANodeSetValidation.InformationModelFactory { /// /// Class DataTypeFieldFactoryBase. /// Implements the /// /// internal class DataTypeFieldFactoryBase : IDataTypeFieldFactory { /// /// Sets the DataType name. /// /// The type of the data. public XmlQualifiedName DataType { set { } } /// /// Sets the identifier the value associated with the field. /// /// The identifier. public int? Identifier { set { } } /// /// Sets the name for the field that is unique within the . /// /// The name for the field. public string Name { set { } } /// /// Sets the value rank. It shall be Scalar (-1) or a fixed rank Array (>=1). This field is not specified for subtypes of Enumeration. /// /// The value rank. public int? ValueRank { set { } } /// /// Creates new object of for anonymous definition of the DatType. /// The field is a structure with a layout specified by the . /// This field is optional. /// This field allows designers to create nested structures without defining a new DataType Node for each structure. /// This field is not specified for subtypes of Enumeration. /// /// IDataTypeDefinitionFactory. /// A new instance of encapsulating the DatType definition. public IDataTypeDefinitionFactory NewDefinition() { return new DataTypeDefinitionFactoryBase(); } /// /// The value associated with the field. This field is only specified for subtypes of Enumeration. /// For OptionSets the value is the number of the bit associated with the field. /// /// The value. public int Value { set { } } /// /// Sets the symbolic name of the field. A symbolic name for the field that can be used in auto-generated code. It should only be /// specified if the Name cannot be used for this purpose. Only letters, digits or the underscore (‘_’) are permitted. /// This value is not exposed in the OPC UA Address Space /// /// The symbolic name to be used by the tool. public string SymbolicName { set { } } /// /// Adds the description for the field in multiple locales /// /// The locale field specified as a string that is composed of a language component and a country/region component as specified by RFC 3066. /// The localized text. public void AddDescription(string localeField, string valueField) { } /// /// Adds the display name. /// /// The locale field specified as a string that is composed of a language component and a country/region component as specified by RFC 3066. /// The localized text. public void AddDisplayName(string localeField, string valueField) { } /// /// Creates new instance of . /// /// IDataTypeDefinitionFactory. public IDataTypeDefinitionFactory NewDataTypeDefinitionFactory() { return new DataTypeDefinitionFactoryBase(); } /// /// Gets the array dimensions. /// /// The array dimensions. /// The maximum length of an array. This field is a comma separated list of unsigned integer values.The list has a number of elements equal to the ValueRank. /// The value is 0 if the maximum is not known for a dimension. This field is not specified if the ValueRank less or equal 0. /// This field is not specified for subtypes of Enumeration or for DataTypes public string ArrayDimensions { set { } } /// /// Sets the maximum length of the string. /// /// The maximum length of the string. /// The maximum length of a String or ByteString value. If not known the value is 0. The value is 0 if the DataType is not String or ByteString. /// If the ValueRank > 0 the maximum applies to each element in the array. This field is not specified for subtypes of Enumeration or for DataTypes with /// the OptionSetValues Property. public uint MaxStringLength { set { } } /// /// Sets a value indicating whether this instance is optional. /// /// true if this instance is optional; otherwise, false. /// The field indicates if a data type field in a structure is optional. This field is optional.The default value is false. This field is not specified for subtypes of Enumeration and Union. public bool IsOptional { set { } } } } ================================================ FILE: SemanticData/UANodeSetValidation/InformationModelFactory/InformationModelFactoryBase.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2022, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ using System; using UAOOI.SemanticData.InformationModelFactory; namespace UAOOI.SemanticData.UANodeSetValidation.InformationModelFactory { /// /// Class InformationModelFactoryBase. /// Implements the /// Implements the /// /// /// internal class InformationModelFactoryBase : NodesContainer, IModelFactory { /// /// Creates the namespace description for the provided . /// /// The . /// The publication - when the model was published. This value is used for comparisons if the Model is defined in multiple files. /// The of the model. This is a human readable string and not intended for programmatic comparisons. /// The set of objects that the OPC Unified Architecture server makes available to clients is referred to as its Address Space. The namespace is provided to make the BrowseName unique in the Address Space. public void CreateNamespace(Uri uri, DateTime? publicationDate, Version version) { } } } ================================================ FILE: SemanticData/UANodeSetValidation/InformationModelFactory/InstanceFactoryBase.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using UAOOI.SemanticData.InformationModelFactory; namespace UAOOI.SemanticData.UANodeSetValidation.InformationModelFactory { /// /// Class InstanceFactoryBase. /// Implements the /// Implements the /// /// /// internal class InstanceFactoryBase : NodeFactoryBase, IInstanceFactory { /// /// Sets the modeling rule, which defines whether the component of a complex type are instantiated. /// This value is defined by processing the object pointed by the HasModelingRule reference. /// /// The modeling rule. public ModelingRules? ModelingRule { set { } } /// /// Sets the type definition. /// /// The type definition. public System.Xml.XmlQualifiedName TypeDefinition { set { } } /// /// Sets the type of the reference if it is component of a complex definition. /// /// The type of the reference used for parent child relationship. public System.Xml.XmlQualifiedName ReferenceType { set { } } } } ================================================ FILE: SemanticData/UANodeSetValidation/InformationModelFactory/MethodInstanceFactoryBase.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System; using System.Collections.Generic; using System.Xml; using UAOOI.SemanticData.InformationModelFactory; using UAOOI.SemanticData.UANodeSetValidation.UAInformationModel; namespace UAOOI.SemanticData.UANodeSetValidation.InformationModelFactory { /// /// Class MethodInstanceFactoryBase - basic implementation of the . /// internal class MethodInstanceFactoryBase : InstanceFactoryBase, IMethodInstanceFactory { #region IMethodInstanceFactory /// /// Sets a value indicating whether the Method node is executable (“False” means not executable, “True” means executable), not taking user access rights into account. /// If the server cannot get the executable information from the underlying system, it should state that it is executable. If a Method is called, the server should transfer /// this request and return the corresponding StatusCode if such a request is rejected. /// /// true if executable; otherwise, false. Default value is true public bool? Executable { set { } } /// /// Sets a value indicating whether the Method is currently executable taking user access rights into account (“False” means not executable, “True” means executable). /// /// true if executable by current user; otherwise, false. Default value is true public bool? UserExecutable { set { } } /// /// Gets or sets the method declaration identifier defined in Part 6 F.9. May be specified for Method Nodes that are a target of a HasComponent reference from a single Object Node. /// It is the NodeId of the UAMethod with the same BrowseName contained in the TypeDefinition associated with the Object Node. /// If the TypeDefinition overrides a Method inherited from a base ObjectType then this attribute shall reference the Method Node in the subtype. /// /// The method declaration identifier. public string MethodDeclarationId { set { } } /// /// Adds the input arguments. The InputArgument specify the input argument of the Method. The Method contains an array of the Argument data type. /// An empty array indicates that there are no input arguments for the Method. /// /// Encapsulates a method used to convert Argument represented as . public void AddInputArguments(System.Func argument) { RemoveArguments(BrowseNames.InputArguments, argument); } /// /// Adds the output argument. The OutputArgument specifies the output argument of the Method. The Method contains an array of the Argument data type. /// An empty array indicates that there are no output arguments for the Method. /// /// Encapsulates a method used to convert Argument represented as . public void AddOutputArguments(System.Func argument) { RemoveArguments(BrowseNames.OutputArguments, argument); } /// /// Adds the argument description. /// /// The name. /// The locale. /// The value. public void AddArgumentDescription(string name, string locale, string value) { } #endregion private Parameter[] RemoveArguments(string parameterKind, Func getParameters) { Parameter[] _parameters = null; List _newChildrenCollection = new List(); foreach (NodeFactoryBase _item in m_Nodes) { if (_item.SymbolicName.Equals(new XmlQualifiedName(parameterKind, Namespaces.OpcUa))) { PropertyInstanceFactoryBase _arg = (PropertyInstanceFactoryBase)_item; _parameters = getParameters(_arg.DefaultValue); } else _newChildrenCollection.Add(_item); } m_Nodes = _newChildrenCollection; return _parameters; } } } ================================================ FILE: SemanticData/UANodeSetValidation/InformationModelFactory/NodeFactoryBase.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System.Collections.Generic; using System.Xml; using UAOOI.SemanticData.InformationModelFactory; using UAOOI.SemanticData.InformationModelFactory.UAConstants; namespace UAOOI.SemanticData.UANodeSetValidation.InformationModelFactory { /// /// Class NodeFactoryBase. /// Implements the /// Implements the /// /// /// internal class NodeFactoryBase : NodesContainer, INodeFactory { /// /// It holds the value of the BrowseName attribute of modes in the Address Space. /// /// The BrowseName of the node. public string BrowseName { set { } } /// /// Add new reference to the references collection of the node. This collection represents all the references defined by the selected Information Model including /// references to the instance declarations nodes. The References list specifies references that must be created for the node during Address Space instantiation. /// The reference can be forward or inverse. /// /// IReferenceFactory. public IReferenceFactory NewReference() { ReferenceFactoryBase _ret = new ReferenceFactoryBase(); m_References.Add(_ret); return _ret; } /// /// Sets the a symbolic name for the node that can be used as a class/field name by a design tools to enhance auto-generated code. /// It should only be specified if the BrowseName cannot be used for this purpose. This field is not used directly to instantiate /// Address Space and is intended for use by design tools. Only letters, digits or the underscore (‘_’) are permitted. /// This attribute is not exposed in the Address Space. /// /// The symbolic name for the node. public XmlQualifiedName SymbolicName { set; internal get; } /// /// Sets the write mask. The optional WriteMask attribute represents the WriteMask attribute of the Basic NodeClass, which exposes the possibilities of a client /// to write the attributes of the node. The WriteMask attribute does not take any user access rights into account, that is, although an attribute is writable /// this may be restricted to a certain user/user group. /// /// The write access. /// Default Value "0" public uint WriteAccess { set { } } /// /// Sets the access restrictions. /// /// The access restrictions. /// The AccessRestrictions that apply to the Node. public AccessRestrictions AccessRestrictions { set { } } /// /// Sets the release status of the node. /// /// The release status. /// It is not exposed in the address space. /// Added in the Rel 1.04 to the specification. public ReleaseStatus ReleaseStatus { set { } } /// /// Sets the data type purpose. /// /// The data type purpose. /// Not defined in the specification Part 2, 5, 6 and Errata Release 1.04.2 September 25, 2018 public DataTypePurpose DataTypePurpose { set { } } /// /// Sets the category. A list of identifiers used to group related UANodes together for use by tools that create/edit UANodeSet files. /// /// The category. /// public string[] Category { set { } } /// /// Adds new value for the Description. The optional Description element shall explain the meaning of the node in a localized text using the same mechanisms /// for localization as described for the DisplayName. /// /// The locale field. /// The value field. public void AddDescription(string localeField, string valueField) { } /// /// Adds new value for the DisplayName. The DisplayName attribute contains the localized name of the node. /// Clients should use this attribute if they want to display the name of the node to the user. They should not use /// the BrowseName for this purpose. The server may maintain one or more localized representations for each DisplayName. /// Clients negotiate the locale to be returned when they open a session with the server. The section DisplayName defines the structure of the DisplayName. /// The string part of the DisplayName is restricted to 512 characters. /// /// The locale field. /// The value field. public void AddDisplayName(string localeField, string valueField) { } protected List m_References = new List(); } } ================================================ FILE: SemanticData/UANodeSetValidation/InformationModelFactory/NodesContainer.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2021, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System; using System.Collections.Generic; using UAOOI.SemanticData.InformationModelFactory; namespace UAOOI.SemanticData.UANodeSetValidation.InformationModelFactory { /// /// Class NodesContainer. /// Implements the /// /// internal abstract class NodesContainer : INodeContainer { /// /// Creates and adds a new node instance of the . /// /// The type of the node factory must inherit from . /// Returns new object implementing . /// public NodeFactory AddNodeFactory() where NodeFactory : INodeFactory { NodeFactoryBase _df = null; if (typeof(NodeFactory) == typeof(IReferenceTypeFactory)) _df = new ReferenceTypeFactoryBase(); else if (typeof(NodeFactory) == typeof(IObjectTypeFactory)) _df = new ObjectTypeFactoryBase(); else if (typeof(NodeFactory) == typeof(IVariableTypeFactory)) _df = new VariableTypeFactoryBase(); else if (typeof(NodeFactory) == typeof(IDataTypeFactory)) _df = new DataTypeFactoryBase(); else if (typeof(NodeFactory) == typeof(IObjectInstanceFactory)) _df = new ObjectInstanceFactoryBase(); else if (typeof(NodeFactory) == typeof(IPropertyInstanceFactory)) _df = new PropertyInstanceFactoryBase(); else if (typeof(NodeFactory) == typeof(IVariableInstanceFactory)) _df = new VariableInstanceFactoryBase(); else if (typeof(NodeFactory) == typeof(IMethodInstanceFactory)) _df = new MethodInstanceFactoryBase(); else if (typeof(NodeFactory) == typeof(IViewInstanceFactory)) _df = new ViewInstanceFactoryBase(); else throw new NotImplementedException(); m_Nodes.Add(_df); return (NodeFactory)(INodeFactory)_df; } protected List m_Nodes = new List(); } } ================================================ FILE: SemanticData/UANodeSetValidation/InformationModelFactory/ObjectInstanceFactoryBase.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using UAOOI.SemanticData.InformationModelFactory; namespace UAOOI.SemanticData.UANodeSetValidation.InformationModelFactory { /// /// Class ObjectInstanceFactoryBase. /// Implements the /// Implements the /// /// /// internal class ObjectInstanceFactoryBase : InstanceFactoryBase, IObjectInstanceFactory { /// /// Sets a value indicating whether the node supports events. /// /// null if supports events contains no value, true if [supports events]; otherwise, false. public bool? SupportsEvents { set { } } } } ================================================ FILE: SemanticData/UANodeSetValidation/InformationModelFactory/ObjectTypeFactoryBase.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using UAOOI.SemanticData.InformationModelFactory; namespace UAOOI.SemanticData.UANodeSetValidation.InformationModelFactory { /// /// Class ObjectTypeFactoryBase. /// Implements the /// Implements the /// /// /// internal class ObjectTypeFactoryBase : TypeFactoryBase, IObjectTypeFactory { } } ================================================ FILE: SemanticData/UANodeSetValidation/InformationModelFactory/PropertyInstanceFactoryBase.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using UAOOI.SemanticData.InformationModelFactory; namespace UAOOI.SemanticData.UANodeSetValidation.InformationModelFactory { /// /// Class PropertyInstanceFactoryBase. /// Implements the /// Implements the /// /// /// internal class PropertyInstanceFactoryBase : VariableInstanceFactoryBase, IPropertyInstanceFactory { } } ================================================ FILE: SemanticData/UANodeSetValidation/InformationModelFactory/ReferenceFactoryBase.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System.Xml; using UAOOI.SemanticData.InformationModelFactory; namespace UAOOI.SemanticData.UANodeSetValidation.InformationModelFactory { /// /// Class ReferenceFactoryBase. /// Implements the /// /// internal class ReferenceFactoryBase : IReferenceFactory { /// /// Sets the type of the reference. /// /// The type of the reference. public XmlQualifiedName ReferenceType { set { } } /// /// Sets the target identifier. /// /// The target identifier. public XmlQualifiedName TargetId { set { } } /// /// Sets a value indicating whether this instance is inverse. /// /// true if this instance is inverse; otherwise, false. public bool IsInverse { set { } } } } ================================================ FILE: SemanticData/UANodeSetValidation/InformationModelFactory/ReferenceTypeFactoryBase.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using UAOOI.SemanticData.InformationModelFactory; namespace UAOOI.SemanticData.UANodeSetValidation.InformationModelFactory { /// /// Class ReferenceTypeFactoryBase. /// Implements the /// Implements the /// /// /// internal class ReferenceTypeFactoryBase : TypeFactoryBase, IReferenceTypeFactory { /// /// Sets a value indicating whether this is symmetric. The Symmetric attribute is used to indicate whether or not the meaning of the reference type is the same for both the source and target nodes. /// If a reference type is symmetric, the InverseName attribute shall be omitted.Examples of symmetric reference types are “Connects To” and “Communicates With”. Both imply the same semantic coming from the source node or the target node. /// If the ReferenceType is non-symmetric and not abstract, the InverseName attribute shall be set. The optional InverseName attribute of LocalizedText ia a inverse name of the reference, /// i.e.the meaning of the type as seen from the target node. Examples of non-symmetric reference types include “Contains” and “Contained In”, and “Receives From” and “Sends To”. /// /// true if symmetric; otherwise, false. /// Default Value is false public bool Symmetric { set { } } /// /// Adds a new inverse name. /// /// The locale field. /// The value field. public void AddInverseName(string localeField, string valueField) { } } } ================================================ FILE: SemanticData/UANodeSetValidation/InformationModelFactory/TypeFactoryBase.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System.Xml; using UAOOI.SemanticData.InformationModelFactory; namespace UAOOI.SemanticData.UANodeSetValidation.InformationModelFactory { /// /// Class TypeFactoryBase. /// Implements the /// Implements the /// /// /// internal class TypeFactoryBase : NodeFactoryBase, ITypeFactory { /// /// Sets the base type of the node. /// /// The base type represented by the . public XmlQualifiedName BaseType { set { } } /// /// Sets a value indicating whether this instance is abstract. /// /// true if this instance is abstract; otherwise, false. /// Default Value is false public bool IsAbstract { set { } } } } ================================================ FILE: SemanticData/UANodeSetValidation/InformationModelFactory/VariableInstanceFactoryBase.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System.Xml; using UAOOI.SemanticData.InformationModelFactory; namespace UAOOI.SemanticData.UANodeSetValidation.InformationModelFactory { /// /// Class VariableInstanceFactoryBase. /// Implements the /// Implements the /// /// /// internal class VariableInstanceFactoryBase : InstanceFactoryBase, IVariableInstanceFactory { /// /// Sets the access level. The AccessLevel attribute indicates the accessibility of the Value of a Variable node not taking user access rights into account and /// applies only to a UAVariable element. The AccessLevel attribute is used to indicate how the Value of a Variable node can be accessed (read/write) and /// if it contains current and/or historic data. The AccessLevel does not take any user access rights into account, i.e. although the Variable is writable this /// may be restricted to a certain user / user group. /// /// The access level. public uint? AccessLevel { set { } } /// /// Sets the array dimensions. This property specifies the length of each dimension for an array value. It is intended to describe the capability of the Variable, not the current size. /// The number of elements shall be equal to the value defined by the ValueRank. It shall be null if ValueRank ≤ 0. The value of 0 for an individual dimension indicates that the dimension has /// a variable length. For example, if a Variable is defined by the following C array: /// Int32 myArray[346]; /// then the DataType would point to an Int32, the ValueRank has the value 1 and the ArrayDimensions is an array with one entry having the value 346. /// Note that the maximum length of an array transferred on the wire is 2147483647 (max Int32) and a multidimensional array is encoded as a one dimensional array. /// /// The array dimensions. /// ArrayDimensions is ignored if ValueRank is not equal to the OneOrMoreDimensions. public string ArrayDimensions { set { } } /// /// Sets the type of the data. of the DataType definition for the Value. It is not required that the pointed out element is defined in the same document. /// If that is the case many documents must be combined to resolve and validate this reference. /// /// The type of the data. public XmlQualifiedName DataType { set { } } /// /// Sets the default value. The value of the Variable node that the server assigns while instantiating the node. Its data type is defined by the DataType field. /// /// The default value. public XmlElement DefaultValue { set; internal get; } /// /// Sets a value indicating whether this is historizing. The Historizing attribute indicates whether the server is actively /// collecting data for the history of the Variable node. This differs from the AccessLevel which identifies if the Variable has any historical data. A value of true /// indicates that the server is actively collecting data. A value of false indicates that the server is not actively collecting data. Default value is false. /// /// true if historizing; otherwise, false. public bool? Historizing { set { } } /// /// Sets the minimum sampling interval. The MinimumSamplingInterval attribute indicates how “current” the Value of the Variable NodeClass will be kept. /// It specifies (in milliseconds) how fast the server can reasonably sample the value for changes. The accuracy of this value (the ability of the server to attain /// “best case” performance) can be greatly affected by the system load and other factors. A MinimumSamplingInterval of 0 indicates that the server is to monitor the /// item continuously. A MinimumSamplingInterval of -1 means indeterminate value. /// /// The minimum sampling interval. public int? MinimumSamplingInterval { set { } } /// /// Sets the user access level. The UserAccessLevel attribute is used to indicate how the Value attribute of a Variable NodeClass can be accessed (read/write) /// and if it contains current or historic data taking user access rights into account. It applies only to a UAVariable element. If the OPC UA Server does not /// have the ability to get any user access rights related information from the underlying system it should use the same bit mask as used in the AccessLevel attribute. /// The UserAccessLevel attribute can restrict the accessibility indicated by the AccessLevel, but not exceed it. /// /// The user access level. public byte? UserAccessLevel { set { } } /// /// Sets the value rank. This property indicates whether the value is an array and how many dimensions the array has. /// It may have the following values: /// - n > 1: the Value is an array with the specified number of dimensions. /// - >OneDimension (1): The value is an array with one dimension. /// - OneOrMoreDimensions (0): The value is an array with one or more dimensions. /// - Scalar (−1): The value is not an array. /// - Any (−2): The value can be a scalar or an array with any number of dimensions. /// - ScalarOrOneDimension (−3): The value can be a scalar or a one dimensional array. /// NOTE: All build in DataTypes are considered to be scalar, even if they have array-like semantics like ByteString and String. /// /// The value rank. public int? ValueRank { set { } } } } ================================================ FILE: SemanticData/UANodeSetValidation/InformationModelFactory/VariableTypeFactoryBase.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System; using UAOOI.SemanticData.InformationModelFactory; namespace UAOOI.SemanticData.UANodeSetValidation.InformationModelFactory { /// /// Class VariableTypeFactoryBase. /// Implements the /// Implements the /// /// /// internal class VariableTypeFactoryBase : TypeFactoryBase, IVariableTypeFactory { /// /// Sets the default value. The value of the Variable node that the server assigns while instantiating the node. Its data type is defined by the . /// /// The default value. public System.Xml.XmlElement DefaultValue { set { } } /// /// Sets the type of the data. of the DataType definition for the Value. It is not required that the pointed out element is defined in the same document. /// If that is the case many documents must be combined to resolve and validate this reference. /// /// The type of the data. public System.Xml.XmlQualifiedName DataType { set { } } /// /// Sets the value rank. This property indicates whether the value is an array and how many dimensions the array has. /// It may have the following values: /// - n > 1: the Value is an array with the specified number of dimensions. /// - >OneDimension (1): The value is an array with one dimension. /// - OneOrMoreDimensions (0): The value is an array with one or more dimensions. /// - Scalar (−1): The value is not an array. /// - Any (−2): The value can be a scalar or an array with any number of dimensions. /// - ScalarOrOneDimension (−3): The value can be a scalar or a one dimensional array. /// NOTE: All build in DataTypes are considered to be scalar, even if they have array-like semantics like ByteString and String. /// /// The value rank. public int? ValueRank { set { } } /// /// Sets the array dimensions. This property specifies the length of each dimension for an array value. It is intended to describe the capability of the Variable, not the current size. /// The number of elements shall be equal to the value defined by the ValueRank. It shall be null if ValueRank ≤ 0. The value of 0 for an individual dimension indicates that the dimension has /// a variable length. For example, if a Variable is defined by the following C array: /// Int32 myArray[346]; /// then the DataType would point to an Int32, the ValueRank has the value 1 and the ArrayDimensions is an array with one entry having the value 346. /// Note that the maximum length of an array transferred on the wire is 2147483647 (max Int32) and a multidimensional array is encoded as a one dimensional array. /// /// The array dimensions. /// ArrayDimensions is ignored if ValueRank is not equal to the OneOrMoreDimensions. public string ArrayDimensions { set { } } } } ================================================ FILE: SemanticData/UANodeSetValidation/InformationModelFactory/ViewInstanceFactoryBase.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using UAOOI.SemanticData.InformationModelFactory; namespace UAOOI.SemanticData.UANodeSetValidation.InformationModelFactory { /// /// TODO Class ViewInstanceFactoryBase. /// internal class ViewInstanceFactoryBase : InstanceFactoryBase, IViewInstanceFactory { /// /// Sets a value indicating whether the View NodeClass supports events. /// /// null if supports events contains no value, true if the view supports events; otherwise, false. Default value is false public bool? SupportsEvents { set { } } /// /// Sets a value indicating whether the Address Space represented by the View NodeClass contains no loops. /// /// true if the partial Address Space contains no loops; otherwise, false. Default value is false public bool ContainsNoLoops { set { } } } } ================================================ FILE: SemanticData/UANodeSetValidation/NamespaceTable.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2022, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ using System; using System.Collections.Generic; using UAOOI.SemanticData.AddressSpace.Abstractions; using UAOOI.SemanticData.UANodeSetValidation.UAInformationModel; namespace UAOOI.SemanticData.UANodeSetValidation { /// /// The table of URI entities for the Address Space. The namespace has index = 0. /// public class NamespaceTable : INamespaceTable { #region Constructors /// /// Creates the instance containing namespace. /// internal NamespaceTable() { Append(new Uri(Namespaces.OpcUa)); } #endregion Constructors #region INamespaceTable /// /// Searches for an index that matches the , and returns the zero-based index of the first occurrence within the namespace table. /// /// The URI to search for in the namespace table. /// The zero-based index of the first occurrence of , if found; otherwise, it is appended. ushort INamespaceTable.GetURIIndexOrAppend(Uri URI) { int _index = GetURIIndex(URI); if (_index == -1) _index = Append(URI); return (ushort)_index; } /// /// Updates the model or append it to the existing collection /// /// The model in concern. /// model - Model table entry must not be null public void RegisterModel(IModelTableEntry model) { int index = GetURIIndex((model ?? throw new ArgumentNullException("model", "Model table entry must not be null")).ModelUri); if (index >= 0) modelsList[index] = model; else modelsList.Add(model); } /// /// Registers the dependency. /// /// The model that is required. /// Model table entry must not be null public void RegisterDependency(IModelTableEntry model) { int index = GetURIIndex((model ?? throw new ArgumentNullException("model", "Model table entry must not be null")).ModelUri); if (index == -1) modelsList.Add(new ModelTableEntryFixture(model)); } /// /// Gets the model . /// /// Index of the namespace. /// An instance that captures of the requested model if already registered, otherwise, null. public Uri GetModelTableEntry(ushort namespaceIndex) { if (namespaceIndex >= modelsList.Count) return null; return modelsList[namespaceIndex].ModelUri; } /// /// Searches for an , and returns the zero-based index of the first occurrence within the . /// /// The URI. /// The zero-based index of the first occurrence of an , if found; otherwise, 1. public int GetURIIndex(Uri URI) { return modelsList.FindIndex(x => x.ModelUri == URI); } #endregion INamespaceTable #region Public Members internal IEnumerable Models => modelsList; internal bool ValidateNamesapceTable(Action add2UndefinedModelUriList) { if (modelsList.Count == 0) return false; bool returnValue = true; foreach (IModelTableEntry item in modelsList) { if (item is ModelTableEntryFixture) { add2UndefinedModelUriList(item.ModelUri); returnValue = false; } }; return returnValue; } #endregion Public Members #region private private class RolePermission : IRolePermission { public uint Permissions { get; set; } public string Value { get; set; } } private class ModelTableEntryFixture : IModelTableEntry { public ModelTableEntryFixture(Uri URI) { ModelUri = URI; } public ModelTableEntryFixture(IModelTableEntry modelTableEntry) { AccessRestrictions = modelTableEntry.AccessRestrictions; ModelUri = modelTableEntry.ModelUri; PublicationDate = modelTableEntry.PublicationDate; RequiredModel = modelTableEntry.RequiredModel; RolePermissions = modelTableEntry.RolePermissions; Version = modelTableEntry.Version; } #region IModelTableEntry public byte AccessRestrictions { get; private set; } = 0xC; public Uri ModelUri { get; private set; } public DateTime? PublicationDate { get; private set; } = DateTime.UtcNow.Date; public IModelTableEntry[] RequiredModel { get; private set; } public IRolePermission[] RolePermissions { get; } = new RolePermission[] { new RolePermission() }; public Version Version { get; } = new Version(); #endregion IModelTableEntry } private List modelsList = new List(); private int Append(Uri URI) { int index = GetURIIndex(URI); if (index == -1) { modelsList.Add(new ModelTableEntryFixture(URI)); index = modelsList.Count - 1; } return index; } #endregion private } } ================================================ FILE: SemanticData/UANodeSetValidation/NodesCollection.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2022, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ using System.Collections.Generic; using System.Linq; namespace UAOOI.SemanticData.UANodeSetValidation { /// /// Class NodesCollection - manages a collection of nodes. /// Implements the /// /// internal class NodesCollection : Dictionary { /// /// Adds the { to the collection. Replace existing if required. /// /// The item to be added to the collection. /// if set to true replace the existing entity in the collection internal void AddOrReplace(IUANodeBase item, bool replaceIfExist) { string _key = item.UANode.BrowseName.Name; if (!this.ContainsKey(_key)) { this.Add(_key, item); //add derived item return; } if (replaceIfExist) this[_key] = item; //replace by current item that overrides the base one } /// /// Converts to list. /// /// returns an instance of internal List ToList() { return this.Values.ToList(); } } } ================================================ FILE: SemanticData/UANodeSetValidation/Properties/AssemblyInfo.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; [assembly: AssemblyTrademark("Object Oriented Internet")] [assembly: AssemblyCulture("")] [assembly: ComVisible(false)] [assembly: InternalsVisibleToAttribute("UAOOI.SemanticData.UANodeSetValidation.UnitTests, PublicKey=00240000048000009400000006020000002400005253413100040000010001005b97a0972ff6b1" + "3a8a9ff9c09503aea0e5e2fe29cb2275a0c0942182f4c3431814b6bc9a556d9fe0d7e7823439c1" + "ba28521f6318e4c936c4461604ef668e9686c2021571b093e1bfba071b373bc56a07a3afdc120c" + "5313d39a935cda64b759f857ebb3db483641444a5347e1564f8ba6d4fad2f968d3caf9991a4fa6" + "aa019ebe")] [assembly: InternalsVisibleTo("DynamicProxyGenAssembly2, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c547cac37abd99c8db225ef2f6c8a3602f3b3606cc9891605d02baa56104f4cfc0734aa39b93bf7852f7d9266654753cc297e7d2edfe0bac1cdcf9f717241550e0a7b191195b7667bb4f64bcb8e2121380fd1d9d46ad2d92d2d15605093924cceaf74c4861eff62abf69b9291ed0a340e113be11e6a7d3113e92484cf7045cc7")] [assembly: InternalsVisibleTo( "UAOOI.SemanticData.UAModelDesignExport.UnitTest, PublicKey=" + "00240000048000009400000006020000002400005253413100040000010001005b97a0972ff6b13a" + "8a9ff9c09503aea0e5e2fe29cb2275a0c0942182f4c3431814b6bc9a556d9fe0d7e7823439c1ba28" + "521f6318e4c936c4461604ef668e9686c2021571b093e1bfba071b373bc56a07a3afdc120c5313d3" + "9a935cda64b759f857ebb3db483641444a5347e1564f8ba6d4fad2f968d3caf9991a4fa6aa019ebe" )] ================================================ FILE: SemanticData/UANodeSetValidation/Properties/UANodeSetValidation.Nuget.nuspec ================================================  UAOOI.SemanticData.UANodeSetValidation 6.5.6-Oscar Semantic-Data UANodeSet Validation Mariusz Postol Mariusz Postol false MIT https://licenses.nuget.org/MIT https://commsvr.gitbook.io/ooi/readme Logo64.PNG This library supports validation of the OPC UA Address Space captured in the XML file against the OPC UA Specification. It is assumed that the Address Space is represented as an XML file compliant with the UANodeSet schema. This library is dedicated to creating a plug-in aimed at importing models based on the OPC UA Information Model. It is part of the project supporting Object-Oriented Internet paradigm. Object-Oriented Internet Semantic-Data UANodeSet Validation Library Copyright (C) 2022 Mariusz Postol LODZ POLAND Object Oriented Internet, OPC UA, Information Model, IoT, M2M, DOA, Updated against OPC UA Rel 1.04 Copyright (C) 2022 Mariusz Postol LODZ POLAND ================================================ FILE: SemanticData/UANodeSetValidation/Properties/UANodeSetValidation.Nuget.tt ================================================ <#@ template debug="false" hostspecific="false" language="C#" #> <#@ output extension=".nuspec" #> <#=m_AssemblyTitle#> <#= SemanticDataUANodeSetValidationVersion #><#= SemanticDataUANodeSetValidationPrerelease #> Semantic-Data UANodeSet Validation <#=Authors#> <#=Owner#> false MIT https://licenses.nuget.org/MIT https://commsvr.gitbook.io/ooi/readme Logo64.PNG This library supports validation of the OPC UA Address Space captured in the XML file against the OPC UA Specification. It is assumed that the Address Space is represented as an XML file compliant with the UANodeSet schema. This library is dedicated to creating a plug-in aimed at importing models based on the OPC UA Information Model. It is part of the project supporting Object-Oriented Internet paradigm. Object-Oriented Internet Semantic-Data UANodeSet Validation Library <#=AssemblyCopyright#> Object Oriented Internet, OPC UA, Information Model, IoT, M2M, DOA, Updated against OPC UA Rel 1.04 <#=AssemblyCopyright#> <#@ include file = "..\..\..\CommonResources\T4Definitions\Model.t4" #> <#+ string m_AssemblyTitle = "UAOOI.SemanticData.UANodeSetValidation"; #> ================================================ FILE: SemanticData/UANodeSetValidation/README.MD ================================================ # Address Space Management Implementation This library project implements functionality of the `Address Space Management` domain model class described in the section [Semantic-Data Processing Architecture](../README.md). This library supports the following functionality: - creates `Address Space` instance populated using input XML NodeSet files, which conforms to the schema `UANodeSet` defined in Part 6 Annex F - validates consistency of the `Address Space` instance against the OPC UA specifications set 1.04 - supports the OPC UA Information Model export, for example XML file compliant with the `ModelDesign` schema that is input format for the [UA-ModelCompiler][UA-ModelCompiler]. > **Note**: The OPC Foundation Model Compiler generates C# and ANSI C source code from XML files which include the UA Services, data-types, error codes, etc.; and numerous CSV files that contain NodeIds, error codes, and attributes etc. ## See also - [M.Postol, Address Space Interchange XML](https://www.researchgate.net/publication/334259707_OPC_UA_Address_Space_Interchange_XML); DOI: DOI: 10.13140/RG.2.2.12228.37768 - [OPC Unified Architecture eBook](http://goo.gl/y4EHUn) [UA-ModelCompiler]:https://github.com/mpostol/UA-ModelCompiler ================================================ FILE: SemanticData/UANodeSetValidation/ReferenceKindEnum.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2022, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ namespace UAOOI.SemanticData.UANodeSetValidation { /// /// Enum ReferenceKindEnum /// internal enum ReferenceKindEnum { /// /// The custom reference /// Custom, /// /// The HasComponent /// HasComponent, /// /// The HasModellingRule /// HasModellingRule, /// /// The HasTypeDefinition /// HasTypeDefinition, /// /// The HasSubtype /// HasSubtype, /// /// The HasProperty /// HasProperty }; } ================================================ FILE: SemanticData/UANodeSetValidation/SemanticData.UANodeSetValidation.csproj ================================================  netstandard2.0 UAOOI.SemanticData.UANodeSetValidation UAOOI.SemanticData.UANodeSetValidation true OPCUAOOIKey.snk UAOOI.SemanticData.UANodeSetValidation 6.4.6 MPostol commsvr.com This project supports validation of the OPC UA Address Space captured in the xml file against the OPC UA Specyfication. It is assumed that the Address Space is represented as a XML file compliant with the UANodeSet schema. This library is dedicated to create a plug-in aimed at importing models based on the OPC UA Information Model. It is part of the project supporting OPC UA Object Oriented Internet paradigm. Copyright (C) 2022 Mariusz Postol LODZ POLAND MIT https://commsvr.gitbook.io/ooi/readme https://github.com/mpostol/OPC-UA-OOI GitHub Object Oriented Internet, OPC UA, Information Model, IoT, M2M, DOA, 6.5.0 false 6.5.0 commsvr.com https://github.com/mpostol/OPC-UA-OOI/blob/master/CommonResources/Media/Logo64.PNG?raw=true 1701;1702;1705;IDE0001;IDE0002;IDE0003;IDE0049 bin\Debug\netstandard2.0\UAOOI.SemanticData.UANodeSetValidation.xml bin\Debug\netstandard2.0\ .\bin\UAOOI.SemanticData.UANodeSetValidation.xml TextTemplatingFileGenerator BuildErrors.cs TextTemplatingFileGenerator Template.nuspec.nuspec True True UANodeSetValidation.Nuget.tt TextTemplatingFileGenerator UANodeSetValidation.Nuget.nuspec True True BuildErrors.tt ================================================ FILE: SemanticData/UANodeSetValidation/UAInformationModel/Opc.Ua.Constants.cs ================================================ /* ======================================================================== * Copyright (c) 2005-2011 The OPC Foundation, Inc. All rights reserved. * * OPC Foundation MIT License 1.00 * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, * copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following * conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. * * The complete license agreement can be found here: * http://opcfoundation.org/License/MIT/1.00/ * ======================================================================*/ using UAOOI.SemanticData.UANodeSetValidation.DataSerialization; namespace UAOOI.SemanticData.UANodeSetValidation.UAInformationModel { #region DataType Identifiers /// /// A class that declares constants for all DataTypes in the Model Design. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class DataTypes { /// /// The identifier for the BaseDataType DataType. /// public const uint BaseDataType = 24; /// /// The identifier for the Number DataType. /// public const uint Number = 26; /// /// The identifier for the Integer DataType. /// public const uint Integer = 27; /// /// The identifier for the UInteger DataType. /// public const uint UInteger = 28; /// /// The identifier for the Enumeration DataType. /// public const uint Enumeration = 29; /// /// The identifier for the Boolean DataType. /// public const uint Boolean = 1; /// /// The identifier for the SByte DataType. /// public const uint SByte = 2; /// /// The identifier for the Byte DataType. /// public const uint Byte = 3; /// /// The identifier for the Int16 DataType. /// public const uint Int16 = 4; /// /// The identifier for the UInt16 DataType. /// public const uint UInt16 = 5; /// /// The identifier for the Int32 DataType. /// public const uint Int32 = 6; /// /// The identifier for the UInt32 DataType. /// public const uint UInt32 = 7; /// /// The identifier for the Int64 DataType. /// public const uint Int64 = 8; /// /// The identifier for the UInt64 DataType. /// public const uint UInt64 = 9; /// /// The identifier for the Float DataType. /// public const uint Float = 10; /// /// The identifier for the Double DataType. /// public const uint Double = 11; /// /// The identifier for the String DataType. /// public const uint String = 12; /// /// The identifier for the DateTime DataType. /// public const uint DateTime = 13; /// /// The identifier for the Guid DataType. /// public const uint Guid = 14; /// /// The identifier for the ByteString DataType. /// public const uint ByteString = 15; /// /// The identifier for the XmlElement DataType. /// public const uint XmlElement = 16; /// /// The identifier for the NodeId DataType. /// public const uint NodeId = 17; /// /// The identifier for the ExpandedNodeId DataType. /// public const uint ExpandedNodeId = 18; /// /// The identifier for the StatusCode DataType. /// public const uint StatusCode = 19; /// /// The identifier for the QualifiedName DataType. /// public const uint QualifiedName = 20; /// /// The identifier for the LocalizedText DataType. /// public const uint LocalizedText = 21; /// /// The identifier for the Structure DataType. /// public const uint Structure = 22; /// /// The identifier for the DataValue DataType. /// public const uint DataValue = 23; /// /// The identifier for the DiagnosticInfo DataType. /// public const uint DiagnosticInfo = 25; /// /// The identifier for the Image DataType. /// public const uint Image = 30; /// /// The identifier for the NamingRuleType DataType. /// public const uint NamingRuleType = 120; /// /// The identifier for the ImageBMP DataType. /// public const uint ImageBMP = 2000; /// /// The identifier for the ImageGIF DataType. /// public const uint ImageGIF = 2001; /// /// The identifier for the ImageJPG DataType. /// public const uint ImageJPG = 2002; /// /// The identifier for the ImagePNG DataType. /// public const uint ImagePNG = 2003; /// /// The identifier for the BitFieldMaskDataType DataType. /// public const uint BitFieldMaskDataType = 11737; /// /// The identifier for the OpenFileMode DataType. /// public const uint OpenFileMode = 11939; /// /// The identifier for the IdType DataType. /// public const uint IdType = 256; /// /// The identifier for the NodeClass DataType. /// public const uint NodeClass = 257; /// /// The identifier for the Node DataType. /// public const uint Node = 258; /// /// The identifier for the InstanceNode DataType. /// public const uint InstanceNode = 11879; /// /// The identifier for the TypeNode DataType. /// public const uint TypeNode = 11880; /// /// The identifier for the ObjectNode DataType. /// public const uint ObjectNode = 261; /// /// The identifier for the ObjectTypeNode DataType. /// public const uint ObjectTypeNode = 264; /// /// The identifier for the VariableNode DataType. /// public const uint VariableNode = 267; /// /// The identifier for the VariableTypeNode DataType. /// public const uint VariableTypeNode = 270; /// /// The identifier for the ReferenceTypeNode DataType. /// public const uint ReferenceTypeNode = 273; /// /// The identifier for the MethodNode DataType. /// public const uint MethodNode = 276; /// /// The identifier for the ViewNode DataType. /// public const uint ViewNode = 279; /// /// The identifier for the DataTypeNode DataType. /// public const uint DataTypeNode = 282; /// /// The identifier for the ReferenceNode DataType. /// public const uint ReferenceNode = 285; /// /// The identifier for the Argument DataType. /// public const uint Argument = 296; /// /// The identifier for the EnumValueType DataType. /// public const uint EnumValueType = 7594; /// /// The identifier for the Duration DataType. /// public const uint Duration = 290; /// /// The identifier for the UtcTime DataType. /// public const uint UtcTime = 294; /// /// The identifier for the LocaleId DataType. /// public const uint LocaleId = 295; /// /// The identifier for the TimeZoneDataType DataType. /// public const uint TimeZoneDataType = 8912; /// /// The identifier for the IntegerId DataType. /// public const uint IntegerId = 288; /// /// The identifier for the ApplicationType DataType. /// public const uint ApplicationType = 307; /// /// The identifier for the ApplicationDescription DataType. /// public const uint ApplicationDescription = 308; /// /// The identifier for the RequestHeader DataType. /// public const uint RequestHeader = 389; /// /// The identifier for the ResponseHeader DataType. /// public const uint ResponseHeader = 392; /// /// The identifier for the ServiceFault DataType. /// public const uint ServiceFault = 395; /// /// The identifier for the DnsServiceRecord DataType. /// public const uint DnsServiceRecord = 12189; /// /// The identifier for the FindDnsServicesRequest DataType. /// public const uint FindDnsServicesRequest = 12190; /// /// The identifier for the FindDnsServicesResponse DataType. /// public const uint FindDnsServicesResponse = 12191; /// /// The identifier for the FindServersRequest DataType. /// public const uint FindServersRequest = 420; /// /// The identifier for the FindServersResponse DataType. /// public const uint FindServersResponse = 423; /// /// The identifier for the ApplicationInstanceCertificate DataType. /// public const uint ApplicationInstanceCertificate = 311; /// /// The identifier for the MessageSecurityMode DataType. /// public const uint MessageSecurityMode = 302; /// /// The identifier for the UserTokenType DataType. /// public const uint UserTokenType = 303; /// /// The identifier for the UserTokenPolicy DataType. /// public const uint UserTokenPolicy = 304; /// /// The identifier for the EndpointDescription DataType. /// public const uint EndpointDescription = 312; /// /// The identifier for the GetEndpointsRequest DataType. /// public const uint GetEndpointsRequest = 426; /// /// The identifier for the GetEndpointsResponse DataType. /// public const uint GetEndpointsResponse = 429; /// /// The identifier for the RegisteredServer DataType. /// public const uint RegisteredServer = 432; /// /// The identifier for the RegisterServerRequest DataType. /// public const uint RegisterServerRequest = 435; /// /// The identifier for the RegisterServerResponse DataType. /// public const uint RegisterServerResponse = 438; /// /// The identifier for the SecurityTokenRequestType DataType. /// public const uint SecurityTokenRequestType = 315; /// /// The identifier for the ChannelSecurityToken DataType. /// public const uint ChannelSecurityToken = 441; /// /// The identifier for the OpenSecureChannelRequest DataType. /// public const uint OpenSecureChannelRequest = 444; /// /// The identifier for the OpenSecureChannelResponse DataType. /// public const uint OpenSecureChannelResponse = 447; /// /// The identifier for the CloseSecureChannelRequest DataType. /// public const uint CloseSecureChannelRequest = 450; /// /// The identifier for the CloseSecureChannelResponse DataType. /// public const uint CloseSecureChannelResponse = 453; /// /// The identifier for the SignedSoftwareCertificate DataType. /// public const uint SignedSoftwareCertificate = 344; /// /// The identifier for the SessionAuthenticationToken DataType. /// public const uint SessionAuthenticationToken = 388; /// /// The identifier for the SignatureData DataType. /// public const uint SignatureData = 456; /// /// The identifier for the CreateSessionRequest DataType. /// public const uint CreateSessionRequest = 459; /// /// The identifier for the CreateSessionResponse DataType. /// public const uint CreateSessionResponse = 462; /// /// The identifier for the UserIdentityToken DataType. /// public const uint UserIdentityToken = 316; /// /// The identifier for the AnonymousIdentityToken DataType. /// public const uint AnonymousIdentityToken = 319; /// /// The identifier for the UserNameIdentityToken DataType. /// public const uint UserNameIdentityToken = 322; /// /// The identifier for the X509IdentityToken DataType. /// public const uint X509IdentityToken = 325; /// /// The identifier for the IssuedIdentityToken DataType. /// public const uint IssuedIdentityToken = 938; /// /// The identifier for the ActivateSessionRequest DataType. /// public const uint ActivateSessionRequest = 465; /// /// The identifier for the ActivateSessionResponse DataType. /// public const uint ActivateSessionResponse = 468; /// /// The identifier for the CloseSessionRequest DataType. /// public const uint CloseSessionRequest = 471; /// /// The identifier for the CloseSessionResponse DataType. /// public const uint CloseSessionResponse = 474; /// /// The identifier for the CancelRequest DataType. /// public const uint CancelRequest = 477; /// /// The identifier for the CancelResponse DataType. /// public const uint CancelResponse = 480; /// /// The identifier for the NodeAttributesMask DataType. /// public const uint NodeAttributesMask = 348; /// /// The identifier for the NodeAttributes DataType. /// public const uint NodeAttributes = 349; /// /// The identifier for the ObjectAttributes DataType. /// public const uint ObjectAttributes = 352; /// /// The identifier for the VariableAttributes DataType. /// public const uint VariableAttributes = 355; /// /// The identifier for the MethodAttributes DataType. /// public const uint MethodAttributes = 358; /// /// The identifier for the ObjectTypeAttributes DataType. /// public const uint ObjectTypeAttributes = 361; /// /// The identifier for the VariableTypeAttributes DataType. /// public const uint VariableTypeAttributes = 364; /// /// The identifier for the ReferenceTypeAttributes DataType. /// public const uint ReferenceTypeAttributes = 367; /// /// The identifier for the DataTypeAttributes DataType. /// public const uint DataTypeAttributes = 370; /// /// The identifier for the ViewAttributes DataType. /// public const uint ViewAttributes = 373; /// /// The identifier for the AddNodesItem DataType. /// public const uint AddNodesItem = 376; /// /// The identifier for the AddNodesResult DataType. /// public const uint AddNodesResult = 483; /// /// The identifier for the AddNodesRequest DataType. /// public const uint AddNodesRequest = 486; /// /// The identifier for the AddNodesResponse DataType. /// public const uint AddNodesResponse = 489; /// /// The identifier for the AddReferencesItem DataType. /// public const uint AddReferencesItem = 379; /// /// The identifier for the AddReferencesRequest DataType. /// public const uint AddReferencesRequest = 492; /// /// The identifier for the AddReferencesResponse DataType. /// public const uint AddReferencesResponse = 495; /// /// The identifier for the DeleteNodesItem DataType. /// public const uint DeleteNodesItem = 382; /// /// The identifier for the DeleteNodesRequest DataType. /// public const uint DeleteNodesRequest = 498; /// /// The identifier for the DeleteNodesResponse DataType. /// public const uint DeleteNodesResponse = 501; /// /// The identifier for the DeleteReferencesItem DataType. /// public const uint DeleteReferencesItem = 385; /// /// The identifier for the DeleteReferencesRequest DataType. /// public const uint DeleteReferencesRequest = 504; /// /// The identifier for the DeleteReferencesResponse DataType. /// public const uint DeleteReferencesResponse = 507; /// /// The identifier for the AttributeWriteMask DataType. /// public const uint AttributeWriteMask = 347; /// /// The identifier for the BrowseDirection DataType. /// public const uint BrowseDirection = 510; /// /// The identifier for the ViewDescription DataType. /// public const uint ViewDescription = 511; /// /// The identifier for the BrowseDescription DataType. /// public const uint BrowseDescription = 514; /// /// The identifier for the BrowseResultMask DataType. /// public const uint BrowseResultMask = 517; /// /// The identifier for the ReferenceDescription DataType. /// public const uint ReferenceDescription = 518; /// /// The identifier for the ContinuationPoint DataType. /// public const uint ContinuationPoint = 521; /// /// The identifier for the BrowseResult DataType. /// public const uint BrowseResult = 522; /// /// The identifier for the BrowseRequest DataType. /// public const uint BrowseRequest = 525; /// /// The identifier for the BrowseResponse DataType. /// public const uint BrowseResponse = 528; /// /// The identifier for the BrowseNextRequest DataType. /// public const uint BrowseNextRequest = 531; /// /// The identifier for the BrowseNextResponse DataType. /// public const uint BrowseNextResponse = 534; /// /// The identifier for the RelativePathElement DataType. /// public const uint RelativePathElement = 537; /// /// The identifier for the RelativePath DataType. /// public const uint RelativePath = 540; /// /// The identifier for the BrowsePath DataType. /// public const uint BrowsePath = 543; /// /// The identifier for the BrowsePathTarget DataType. /// public const uint BrowsePathTarget = 546; /// /// The identifier for the BrowsePathResult DataType. /// public const uint BrowsePathResult = 549; /// /// The identifier for the TranslateBrowsePathsToNodeIdsRequest DataType. /// public const uint TranslateBrowsePathsToNodeIdsRequest = 552; /// /// The identifier for the TranslateBrowsePathsToNodeIdsResponse DataType. /// public const uint TranslateBrowsePathsToNodeIdsResponse = 555; /// /// The identifier for the RegisterNodesRequest DataType. /// public const uint RegisterNodesRequest = 558; /// /// The identifier for the RegisterNodesResponse DataType. /// public const uint RegisterNodesResponse = 561; /// /// The identifier for the UnregisterNodesRequest DataType. /// public const uint UnregisterNodesRequest = 564; /// /// The identifier for the UnregisterNodesResponse DataType. /// public const uint UnregisterNodesResponse = 567; /// /// The identifier for the Counter DataType. /// public const uint Counter = 289; /// /// The identifier for the NumericRange DataType. /// public const uint NumericRange = 291; /// /// The identifier for the Time DataType. /// public const uint Time = 292; /// /// The identifier for the Date DataType. /// public const uint Date = 293; /// /// The identifier for the EndpointConfiguration DataType. /// public const uint EndpointConfiguration = 331; /// /// The identifier for the ComplianceLevel DataType. /// public const uint ComplianceLevel = 334; /// /// The identifier for the SupportedProfile DataType. /// public const uint SupportedProfile = 335; /// /// The identifier for the SoftwareCertificate DataType. /// public const uint SoftwareCertificate = 341; /// /// The identifier for the QueryDataDescription DataType. /// public const uint QueryDataDescription = 570; /// /// The identifier for the NodeTypeDescription DataType. /// public const uint NodeTypeDescription = 573; /// /// The identifier for the FilterOperator DataType. /// public const uint FilterOperator = 576; /// /// The identifier for the QueryDataSet DataType. /// public const uint QueryDataSet = 577; /// /// The identifier for the NodeReference DataType. /// public const uint NodeReference = 580; /// /// The identifier for the ContentFilterElement DataType. /// public const uint ContentFilterElement = 583; /// /// The identifier for the ContentFilter DataType. /// public const uint ContentFilter = 586; /// /// The identifier for the FilterOperand DataType. /// public const uint FilterOperand = 589; /// /// The identifier for the ElementOperand DataType. /// public const uint ElementOperand = 592; /// /// The identifier for the LiteralOperand DataType. /// public const uint LiteralOperand = 595; /// /// The identifier for the AttributeOperand DataType. /// public const uint AttributeOperand = 598; /// /// The identifier for the SimpleAttributeOperand DataType. /// public const uint SimpleAttributeOperand = 601; /// /// The identifier for the ContentFilterElementResult DataType. /// public const uint ContentFilterElementResult = 604; /// /// The identifier for the ContentFilterResult DataType. /// public const uint ContentFilterResult = 607; /// /// The identifier for the ParsingResult DataType. /// public const uint ParsingResult = 610; /// /// The identifier for the QueryFirstRequest DataType. /// public const uint QueryFirstRequest = 613; /// /// The identifier for the QueryFirstResponse DataType. /// public const uint QueryFirstResponse = 616; /// /// The identifier for the QueryNextRequest DataType. /// public const uint QueryNextRequest = 619; /// /// The identifier for the QueryNextResponse DataType. /// public const uint QueryNextResponse = 622; /// /// The identifier for the TimestampsToReturn DataType. /// public const uint TimestampsToReturn = 625; /// /// The identifier for the ReadValueId DataType. /// public const uint ReadValueId = 626; /// /// The identifier for the ReadRequest DataType. /// public const uint ReadRequest = 629; /// /// The identifier for the ReadResponse DataType. /// public const uint ReadResponse = 632; /// /// The identifier for the HistoryReadValueId DataType. /// public const uint HistoryReadValueId = 635; /// /// The identifier for the HistoryReadResult DataType. /// public const uint HistoryReadResult = 638; /// /// The identifier for the HistoryReadDetails DataType. /// public const uint HistoryReadDetails = 641; /// /// The identifier for the ReadEventDetails DataType. /// public const uint ReadEventDetails = 644; /// /// The identifier for the ReadRawModifiedDetails DataType. /// public const uint ReadRawModifiedDetails = 647; /// /// The identifier for the ReadProcessedDetails DataType. /// public const uint ReadProcessedDetails = 650; /// /// The identifier for the ReadAtTimeDetails DataType. /// public const uint ReadAtTimeDetails = 653; /// /// The identifier for the HistoryData DataType. /// public const uint HistoryData = 656; /// /// The identifier for the ModificationInfo DataType. /// public const uint ModificationInfo = 11216; /// /// The identifier for the HistoryModifiedData DataType. /// public const uint HistoryModifiedData = 11217; /// /// The identifier for the HistoryEvent DataType. /// public const uint HistoryEvent = 659; /// /// The identifier for the HistoryReadRequest DataType. /// public const uint HistoryReadRequest = 662; /// /// The identifier for the HistoryReadResponse DataType. /// public const uint HistoryReadResponse = 665; /// /// The identifier for the WriteValue DataType. /// public const uint WriteValue = 668; /// /// The identifier for the WriteRequest DataType. /// public const uint WriteRequest = 671; /// /// The identifier for the WriteResponse DataType. /// public const uint WriteResponse = 674; /// /// The identifier for the HistoryUpdateDetails DataType. /// public const uint HistoryUpdateDetails = 677; /// /// The identifier for the HistoryUpdateType DataType. /// public const uint HistoryUpdateType = 11234; /// /// The identifier for the PerformUpdateType DataType. /// public const uint PerformUpdateType = 11293; /// /// The identifier for the UpdateDataDetails DataType. /// public const uint UpdateDataDetails = 680; /// /// The identifier for the UpdateStructureDataDetails DataType. /// public const uint UpdateStructureDataDetails = 11295; /// /// The identifier for the UpdateEventDetails DataType. /// public const uint UpdateEventDetails = 683; /// /// The identifier for the DeleteRawModifiedDetails DataType. /// public const uint DeleteRawModifiedDetails = 686; /// /// The identifier for the DeleteAtTimeDetails DataType. /// public const uint DeleteAtTimeDetails = 689; /// /// The identifier for the DeleteEventDetails DataType. /// public const uint DeleteEventDetails = 692; /// /// The identifier for the HistoryUpdateResult DataType. /// public const uint HistoryUpdateResult = 695; /// /// The identifier for the HistoryUpdateEventResult DataType. /// public const uint HistoryUpdateEventResult = 929; /// /// The identifier for the HistoryUpdateRequest DataType. /// public const uint HistoryUpdateRequest = 698; /// /// The identifier for the HistoryUpdateResponse DataType. /// public const uint HistoryUpdateResponse = 701; /// /// The identifier for the CallMethodRequest DataType. /// public const uint CallMethodRequest = 704; /// /// The identifier for the CallMethodResult DataType. /// public const uint CallMethodResult = 707; /// /// The identifier for the CallRequest DataType. /// public const uint CallRequest = 710; /// /// The identifier for the CallResponse DataType. /// public const uint CallResponse = 713; /// /// The identifier for the MonitoringMode DataType. /// public const uint MonitoringMode = 716; /// /// The identifier for the DataChangeTrigger DataType. /// public const uint DataChangeTrigger = 717; /// /// The identifier for the DeadbandType DataType. /// public const uint DeadbandType = 718; /// /// The identifier for the MonitoringFilter DataType. /// public const uint MonitoringFilter = 719; /// /// The identifier for the DataChangeFilter DataType. /// public const uint DataChangeFilter = 722; /// /// The identifier for the EventFilter DataType. /// public const uint EventFilter = 725; /// /// The identifier for the AggregateConfiguration DataType. /// public const uint AggregateConfiguration = 948; /// /// The identifier for the AggregateFilter DataType. /// public const uint AggregateFilter = 728; /// /// The identifier for the MonitoringFilterResult DataType. /// public const uint MonitoringFilterResult = 731; /// /// The identifier for the EventFilterResult DataType. /// public const uint EventFilterResult = 734; /// /// The identifier for the AggregateFilterResult DataType. /// public const uint AggregateFilterResult = 737; /// /// The identifier for the MonitoringParameters DataType. /// public const uint MonitoringParameters = 740; /// /// The identifier for the MonitoredItemCreateRequest DataType. /// public const uint MonitoredItemCreateRequest = 743; /// /// The identifier for the MonitoredItemCreateResult DataType. /// public const uint MonitoredItemCreateResult = 746; /// /// The identifier for the CreateMonitoredItemsRequest DataType. /// public const uint CreateMonitoredItemsRequest = 749; /// /// The identifier for the CreateMonitoredItemsResponse DataType. /// public const uint CreateMonitoredItemsResponse = 752; /// /// The identifier for the MonitoredItemModifyRequest DataType. /// public const uint MonitoredItemModifyRequest = 755; /// /// The identifier for the MonitoredItemModifyResult DataType. /// public const uint MonitoredItemModifyResult = 758; /// /// The identifier for the ModifyMonitoredItemsRequest DataType. /// public const uint ModifyMonitoredItemsRequest = 761; /// /// The identifier for the ModifyMonitoredItemsResponse DataType. /// public const uint ModifyMonitoredItemsResponse = 764; /// /// The identifier for the SetMonitoringModeRequest DataType. /// public const uint SetMonitoringModeRequest = 767; /// /// The identifier for the SetMonitoringModeResponse DataType. /// public const uint SetMonitoringModeResponse = 770; /// /// The identifier for the SetTriggeringRequest DataType. /// public const uint SetTriggeringRequest = 773; /// /// The identifier for the SetTriggeringResponse DataType. /// public const uint SetTriggeringResponse = 776; /// /// The identifier for the DeleteMonitoredItemsRequest DataType. /// public const uint DeleteMonitoredItemsRequest = 779; /// /// The identifier for the DeleteMonitoredItemsResponse DataType. /// public const uint DeleteMonitoredItemsResponse = 782; /// /// The identifier for the CreateSubscriptionRequest DataType. /// public const uint CreateSubscriptionRequest = 785; /// /// The identifier for the CreateSubscriptionResponse DataType. /// public const uint CreateSubscriptionResponse = 788; /// /// The identifier for the ModifySubscriptionRequest DataType. /// public const uint ModifySubscriptionRequest = 791; /// /// The identifier for the ModifySubscriptionResponse DataType. /// public const uint ModifySubscriptionResponse = 794; /// /// The identifier for the SetPublishingModeRequest DataType. /// public const uint SetPublishingModeRequest = 797; /// /// The identifier for the SetPublishingModeResponse DataType. /// public const uint SetPublishingModeResponse = 800; /// /// The identifier for the NotificationMessage DataType. /// public const uint NotificationMessage = 803; /// /// The identifier for the NotificationData DataType. /// public const uint NotificationData = 945; /// /// The identifier for the DataChangeNotification DataType. /// public const uint DataChangeNotification = 809; /// /// The identifier for the MonitoredItemNotification DataType. /// public const uint MonitoredItemNotification = 806; /// /// The identifier for the EventNotificationList DataType. /// public const uint EventNotificationList = 914; /// /// The identifier for the EventFieldList DataType. /// public const uint EventFieldList = 917; /// /// The identifier for the HistoryEventFieldList DataType. /// public const uint HistoryEventFieldList = 920; /// /// The identifier for the StatusChangeNotification DataType. /// public const uint StatusChangeNotification = 818; /// /// The identifier for the SubscriptionAcknowledgement DataType. /// public const uint SubscriptionAcknowledgement = 821; /// /// The identifier for the PublishRequest DataType. /// public const uint PublishRequest = 824; /// /// The identifier for the PublishResponse DataType. /// public const uint PublishResponse = 827; /// /// The identifier for the RepublishRequest DataType. /// public const uint RepublishRequest = 830; /// /// The identifier for the RepublishResponse DataType. /// public const uint RepublishResponse = 833; /// /// The identifier for the TransferResult DataType. /// public const uint TransferResult = 836; /// /// The identifier for the TransferSubscriptionsRequest DataType. /// public const uint TransferSubscriptionsRequest = 839; /// /// The identifier for the TransferSubscriptionsResponse DataType. /// public const uint TransferSubscriptionsResponse = 842; /// /// The identifier for the DeleteSubscriptionsRequest DataType. /// public const uint DeleteSubscriptionsRequest = 845; /// /// The identifier for the DeleteSubscriptionsResponse DataType. /// public const uint DeleteSubscriptionsResponse = 848; /// /// The identifier for the EnumeratedTestType DataType. /// public const uint EnumeratedTestType = 398; /// /// The identifier for the ScalarTestType DataType. /// public const uint ScalarTestType = 399; /// /// The identifier for the ArrayTestType DataType. /// public const uint ArrayTestType = 402; /// /// The identifier for the CompositeTestType DataType. /// public const uint CompositeTestType = 405; /// /// The identifier for the TestStackRequest DataType. /// public const uint TestStackRequest = 408; /// /// The identifier for the TestStackResponse DataType. /// public const uint TestStackResponse = 411; /// /// The identifier for the TestStackExRequest DataType. /// public const uint TestStackExRequest = 414; /// /// The identifier for the TestStackExResponse DataType. /// public const uint TestStackExResponse = 417; /// /// The identifier for the BuildInfo DataType. /// public const uint BuildInfo = 338; /// /// The identifier for the RedundancySupport DataType. /// public const uint RedundancySupport = 851; /// /// The identifier for the ServerState DataType. /// public const uint ServerState = 852; /// /// The identifier for the RedundantServerDataType DataType. /// public const uint RedundantServerDataType = 853; /// /// The identifier for the EndpointUrlListDataType DataType. /// public const uint EndpointUrlListDataType = 11943; /// /// The identifier for the NetworkGroupDataType DataType. /// public const uint NetworkGroupDataType = 11944; /// /// The identifier for the SamplingIntervalDiagnosticsDataType DataType. /// public const uint SamplingIntervalDiagnosticsDataType = 856; /// /// The identifier for the ServerDiagnosticsSummaryDataType DataType. /// public const uint ServerDiagnosticsSummaryDataType = 859; /// /// The identifier for the ServerStatusDataType DataType. /// public const uint ServerStatusDataType = 862; /// /// The identifier for the SessionDiagnosticsDataType DataType. /// public const uint SessionDiagnosticsDataType = 865; /// /// The identifier for the SessionSecurityDiagnosticsDataType DataType. /// public const uint SessionSecurityDiagnosticsDataType = 868; /// /// The identifier for the ServiceCounterDataType DataType. /// public const uint ServiceCounterDataType = 871; /// /// The identifier for the StatusResult DataType. /// public const uint StatusResult = 299; /// /// The identifier for the SubscriptionDiagnosticsDataType DataType. /// public const uint SubscriptionDiagnosticsDataType = 874; /// /// The identifier for the ModelChangeStructureVerbMask DataType. /// public const uint ModelChangeStructureVerbMask = 11941; /// /// The identifier for the ModelChangeStructureDataType DataType. /// public const uint ModelChangeStructureDataType = 877; /// /// The identifier for the SemanticChangeStructureDataType DataType. /// public const uint SemanticChangeStructureDataType = 897; /// /// The identifier for the Range DataType. /// public const uint Range = 884; /// /// The identifier for the EUInformation DataType. /// public const uint EUInformation = 887; /// /// The identifier for the AxisScaleEnumeration DataType. /// public const uint AxisScaleEnumeration = 12077; /// /// The identifier for the ComplexNumberType DataType. /// public const uint ComplexNumberType = 12171; /// /// The identifier for the DoubleComplexNumberType DataType. /// public const uint DoubleComplexNumberType = 12172; /// /// The identifier for the AxisInformation DataType. /// public const uint AxisInformation = 12079; /// /// The identifier for the XVType DataType. /// public const uint XVType = 12080; /// /// The identifier for the ProgramDiagnosticDataType DataType. /// public const uint ProgramDiagnosticDataType = 894; /// /// The identifier for the Annotation DataType. /// public const uint Annotation = 891; /// /// The identifier for the ExceptionDeviationFormat DataType. /// public const uint ExceptionDeviationFormat = 890; } #endregion #region Method Identifiers /// /// A class that declares constants for all Methods in the Model Design. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class Methods { /// /// The identifier for the ServerType_GetMonitoredItems Method. /// public const uint ServerType_GetMonitoredItems = 11489; /// /// The identifier for the FileType_Open Method. /// public const uint FileType_Open = 11580; /// /// The identifier for the FileType_Close Method. /// public const uint FileType_Close = 11583; /// /// The identifier for the FileType_Read Method. /// public const uint FileType_Read = 11585; /// /// The identifier for the FileType_Write Method. /// public const uint FileType_Write = 11588; /// /// The identifier for the FileType_GetPosition Method. /// public const uint FileType_GetPosition = 11590; /// /// The identifier for the FileType_SetPosition Method. /// public const uint FileType_SetPosition = 11593; /// /// The identifier for the AddressSpaceFileType_ExportNamespace Method. /// public const uint AddressSpaceFileType_ExportNamespace = 11615; /// /// The identifier for the Server_Namespaces_AddressSpaceFile_Open Method. /// public const uint Server_Namespaces_AddressSpaceFile_Open = 11721; /// /// The identifier for the Server_Namespaces_AddressSpaceFile_Close Method. /// public const uint Server_Namespaces_AddressSpaceFile_Close = 11724; /// /// The identifier for the Server_Namespaces_AddressSpaceFile_Read Method. /// public const uint Server_Namespaces_AddressSpaceFile_Read = 11726; /// /// The identifier for the Server_Namespaces_AddressSpaceFile_Write Method. /// public const uint Server_Namespaces_AddressSpaceFile_Write = 11729; /// /// The identifier for the Server_Namespaces_AddressSpaceFile_GetPosition Method. /// public const uint Server_Namespaces_AddressSpaceFile_GetPosition = 11731; /// /// The identifier for the Server_Namespaces_AddressSpaceFile_SetPosition Method. /// public const uint Server_Namespaces_AddressSpaceFile_SetPosition = 11734; /// /// The identifier for the Server_GetMonitoredItems Method. /// public const uint Server_GetMonitoredItems = 11492; /// /// The identifier for the GetMonitoredItemsMethodType Method. /// public const uint GetMonitoredItemsMethodType = 11495; /// /// The identifier for the OpenMethodType Method. /// public const uint OpenMethodType = 11738; /// /// The identifier for the CloseMethodType Method. /// public const uint CloseMethodType = 11741; /// /// The identifier for the ReadMethodType Method. /// public const uint ReadMethodType = 11743; /// /// The identifier for the WriteMethodType Method. /// public const uint WriteMethodType = 11746; /// /// The identifier for the GetPositionMethodType Method. /// public const uint GetPositionMethodType = 11748; /// /// The identifier for the SetPositionMethodType Method. /// public const uint SetPositionMethodType = 11751; /// /// The identifier for the ConditionType_Disable Method. /// public const uint ConditionType_Disable = 9028; /// /// The identifier for the ConditionType_Enable Method. /// public const uint ConditionType_Enable = 9027; /// /// The identifier for the ConditionType_AddComment Method. /// public const uint ConditionType_AddComment = 9029; /// /// The identifier for the ConditionType_ConditionRefresh Method. /// public const uint ConditionType_ConditionRefresh = 3875; /// /// The identifier for the ConditionRefreshMethodType Method. /// public const uint ConditionRefreshMethodType = 9007; /// /// The identifier for the AddCommentMethodType Method. /// public const uint AddCommentMethodType = 3863; /// /// The identifier for the DialogConditionType_Respond Method. /// public const uint DialogConditionType_Respond = 9069; /// /// The identifier for the DialogResponseMethodType Method. /// public const uint DialogResponseMethodType = 9031; /// /// The identifier for the AcknowledgeableConditionType_Acknowledge Method. /// public const uint AcknowledgeableConditionType_Acknowledge = 9111; /// /// The identifier for the AcknowledgeableConditionType_Confirm Method. /// public const uint AcknowledgeableConditionType_Confirm = 9113; /// /// The identifier for the AlarmConditionType_ShelvingState_Unshelve Method. /// public const uint AlarmConditionType_ShelvingState_Unshelve = 9211; /// /// The identifier for the AlarmConditionType_ShelvingState_OneShotShelve Method. /// public const uint AlarmConditionType_ShelvingState_OneShotShelve = 9212; /// /// The identifier for the AlarmConditionType_ShelvingState_TimedShelve Method. /// public const uint AlarmConditionType_ShelvingState_TimedShelve = 9213; /// /// The identifier for the ShelvedStateMachineType_Unshelve Method. /// public const uint ShelvedStateMachineType_Unshelve = 2947; /// /// The identifier for the ShelvedStateMachineType_OneShotShelve Method. /// public const uint ShelvedStateMachineType_OneShotShelve = 2948; /// /// The identifier for the ShelvedStateMachineType_TimedShelve Method. /// public const uint ShelvedStateMachineType_TimedShelve = 2949; /// /// The identifier for the TimedShelveMethodType Method. /// public const uint TimedShelveMethodType = 6102; /// /// The identifier for the ProgramStateMachineType_Start Method. /// public const uint ProgramStateMachineType_Start = 2426; /// /// The identifier for the ProgramStateMachineType_Suspend Method. /// public const uint ProgramStateMachineType_Suspend = 2427; /// /// The identifier for the ProgramStateMachineType_Resume Method. /// public const uint ProgramStateMachineType_Resume = 2428; /// /// The identifier for the ProgramStateMachineType_Halt Method. /// public const uint ProgramStateMachineType_Halt = 2429; /// /// The identifier for the ProgramStateMachineType_Reset Method. /// public const uint ProgramStateMachineType_Reset = 2430; /// /// The identifier for the LockType_Lock Method. /// public const uint LockType_Lock = 8922; /// /// The identifier for the LockType_Unlock Method. /// public const uint LockType_Unlock = 8923; /// /// The identifier for the ServerLock_Lock Method. /// public const uint ServerLock_Lock = 8925; /// /// The identifier for the ServerLock_Unlock Method. /// public const uint ServerLock_Unlock = 8926; } #endregion #region Object Identifiers /// /// A class that declares constants for all Objects in the Model Design. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class Objects { /// /// The identifier for the DefaultBinary Object. /// public const uint DefaultBinary = 3062; /// /// The identifier for the DefaultXml Object. /// public const uint DefaultXml = 3063; /// /// The identifier for the ModellingRule_Mandatory Object. /// public const uint ModellingRule_Mandatory = 78; /// /// The identifier for the ModellingRule_Optional Object. /// public const uint ModellingRule_Optional = 80; /// /// The identifier for the ModellingRule_ExposesItsArray Object. /// public const uint ModellingRule_ExposesItsArray = 83; /// /// The identifier for the ModellingRule_MandatoryShared Object. /// public const uint ModellingRule_MandatoryShared = 79; /// /// The identifier for the ModellingRule_OptionalPlaceholder Object. /// public const uint ModellingRule_OptionalPlaceholder = 11508; /// /// The identifier for the ModellingRule_MandatoryPlaceholder Object. /// public const uint ModellingRule_MandatoryPlaceholder = 11510; /// /// The identifier for the RootFolder Object. /// public const uint RootFolder = 84; /// /// The identifier for the ObjectsFolder Object. /// public const uint ObjectsFolder = 85; /// /// The identifier for the TypesFolder Object. /// public const uint TypesFolder = 86; /// /// The identifier for the ViewsFolder Object. /// public const uint ViewsFolder = 87; /// /// The identifier for the ObjectTypesFolder Object. /// public const uint ObjectTypesFolder = 88; /// /// The identifier for the VariableTypesFolder Object. /// public const uint VariableTypesFolder = 89; /// /// The identifier for the DataTypesFolder Object. /// public const uint DataTypesFolder = 90; /// /// The identifier for the ReferenceTypesFolder Object. /// public const uint ReferenceTypesFolder = 91; /// /// The identifier for the XmlSchema_TypeSystem Object. /// public const uint XmlSchema_TypeSystem = 92; /// /// The identifier for the OPCBinarySchema_TypeSystem Object. /// public const uint OPCBinarySchema_TypeSystem = 93; /// /// The identifier for the ServerType_ServerCapabilities Object. /// public const uint ServerType_ServerCapabilities = 2009; /// /// The identifier for the ServerType_ServerCapabilities_ModellingRules Object. /// public const uint ServerType_ServerCapabilities_ModellingRules = 3093; /// /// The identifier for the ServerType_ServerCapabilities_AggregateFunctions Object. /// public const uint ServerType_ServerCapabilities_AggregateFunctions = 3094; /// /// The identifier for the ServerType_ServerDiagnostics Object. /// public const uint ServerType_ServerDiagnostics = 2010; /// /// The identifier for the ServerType_ServerDiagnostics_SessionsDiagnosticsSummary Object. /// public const uint ServerType_ServerDiagnostics_SessionsDiagnosticsSummary = 3111; /// /// The identifier for the ServerType_VendorServerInfo Object. /// public const uint ServerType_VendorServerInfo = 2011; /// /// The identifier for the ServerType_ServerRedundancy Object. /// public const uint ServerType_ServerRedundancy = 2012; /// /// The identifier for the ServerType_Namespaces Object. /// public const uint ServerType_Namespaces = 11527; /// /// The identifier for the ServerCapabilitiesType_OperationLimits Object. /// public const uint ServerCapabilitiesType_OperationLimits = 11551; /// /// The identifier for the ServerCapabilitiesType_ModellingRules Object. /// public const uint ServerCapabilitiesType_ModellingRules = 2019; /// /// The identifier for the ServerCapabilitiesType_AggregateFunctions Object. /// public const uint ServerCapabilitiesType_AggregateFunctions = 2754; /// /// The identifier for the ServerDiagnosticsType_SessionsDiagnosticsSummary Object. /// public const uint ServerDiagnosticsType_SessionsDiagnosticsSummary = 2744; /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder Object. /// public const uint SessionsDiagnosticsSummaryType_SessionPlaceholder = 12097; /// /// The identifier for the NamespaceMetadataType_NamespaceFile Object. /// public const uint NamespaceMetadataType_NamespaceFile = 11624; /// /// The identifier for the NamespacesType_NamespaceIdentifier Object. /// public const uint NamespacesType_NamespaceIdentifier = 11646; /// /// The identifier for the NamespacesType_AddressSpaceFile Object. /// public const uint NamespacesType_AddressSpaceFile = 11675; /// /// The identifier for the EventTypesFolder Object. /// public const uint EventTypesFolder = 3048; /// /// The identifier for the Server Object. /// public const uint Server = 2253; /// /// The identifier for the Server_ServerCapabilities Object. /// public const uint Server_ServerCapabilities = 2268; /// /// The identifier for the Server_ServerCapabilities_ModellingRules Object. /// public const uint Server_ServerCapabilities_ModellingRules = 2996; /// /// The identifier for the Server_ServerCapabilities_AggregateFunctions Object. /// public const uint Server_ServerCapabilities_AggregateFunctions = 2997; /// /// The identifier for the Server_ServerDiagnostics Object. /// public const uint Server_ServerDiagnostics = 2274; /// /// The identifier for the Server_ServerDiagnostics_SessionsDiagnosticsSummary Object. /// public const uint Server_ServerDiagnostics_SessionsDiagnosticsSummary = 3706; /// /// The identifier for the Server_VendorServerInfo Object. /// public const uint Server_VendorServerInfo = 2295; /// /// The identifier for the Server_ServerRedundancy Object. /// public const uint Server_ServerRedundancy = 2296; /// /// The identifier for the Server_Namespaces Object. /// public const uint Server_Namespaces = 11715; /// /// The identifier for the HistoryServerCapabilities Object. /// public const uint HistoryServerCapabilities = 11192; /// /// The identifier for the HistoryServerCapabilities_AggregateFunctions Object. /// public const uint HistoryServerCapabilities_AggregateFunctions = 11201; /// /// The identifier for the AlarmConditionType_ShelvingState Object. /// public const uint AlarmConditionType_ShelvingState = 9178; /// /// The identifier for the ShelvedStateMachineType_Unshelved Object. /// public const uint ShelvedStateMachineType_Unshelved = 2930; /// /// The identifier for the ShelvedStateMachineType_TimedShelved Object. /// public const uint ShelvedStateMachineType_TimedShelved = 2932; /// /// The identifier for the ShelvedStateMachineType_OneShotShelved Object. /// public const uint ShelvedStateMachineType_OneShotShelved = 2933; /// /// The identifier for the ShelvedStateMachineType_UnshelvedToTimedShelved Object. /// public const uint ShelvedStateMachineType_UnshelvedToTimedShelved = 2935; /// /// The identifier for the ShelvedStateMachineType_UnshelvedToOneShotShelved Object. /// public const uint ShelvedStateMachineType_UnshelvedToOneShotShelved = 2936; /// /// The identifier for the ShelvedStateMachineType_TimedShelvedToUnshelved Object. /// public const uint ShelvedStateMachineType_TimedShelvedToUnshelved = 2940; /// /// The identifier for the ShelvedStateMachineType_TimedShelvedToOneShotShelved Object. /// public const uint ShelvedStateMachineType_TimedShelvedToOneShotShelved = 2942; /// /// The identifier for the ShelvedStateMachineType_OneShotShelvedToUnshelved Object. /// public const uint ShelvedStateMachineType_OneShotShelvedToUnshelved = 2943; /// /// The identifier for the ShelvedStateMachineType_OneShotShelvedToTimedShelved Object. /// public const uint ShelvedStateMachineType_OneShotShelvedToTimedShelved = 2945; /// /// The identifier for the ExclusiveLimitStateMachineType_HighHigh Object. /// public const uint ExclusiveLimitStateMachineType_HighHigh = 9329; /// /// The identifier for the ExclusiveLimitStateMachineType_High Object. /// public const uint ExclusiveLimitStateMachineType_High = 9331; /// /// The identifier for the ExclusiveLimitStateMachineType_Low Object. /// public const uint ExclusiveLimitStateMachineType_Low = 9333; /// /// The identifier for the ExclusiveLimitStateMachineType_LowLow Object. /// public const uint ExclusiveLimitStateMachineType_LowLow = 9335; /// /// The identifier for the ExclusiveLimitStateMachineType_LowLowToLow Object. /// public const uint ExclusiveLimitStateMachineType_LowLowToLow = 9337; /// /// The identifier for the ExclusiveLimitStateMachineType_LowToLowLow Object. /// public const uint ExclusiveLimitStateMachineType_LowToLowLow = 9338; /// /// The identifier for the ExclusiveLimitStateMachineType_HighHighToHigh Object. /// public const uint ExclusiveLimitStateMachineType_HighHighToHigh = 9339; /// /// The identifier for the ExclusiveLimitStateMachineType_HighToHighHigh Object. /// public const uint ExclusiveLimitStateMachineType_HighToHighHigh = 9340; /// /// The identifier for the ExclusiveLimitAlarmType_LimitState Object. /// public const uint ExclusiveLimitAlarmType_LimitState = 9455; /// /// The identifier for the ProgramStateMachineType_FinalResultData Object. /// public const uint ProgramStateMachineType_FinalResultData = 3850; /// /// The identifier for the ProgramStateMachineType_Ready Object. /// public const uint ProgramStateMachineType_Ready = 2400; /// /// The identifier for the ProgramStateMachineType_Running Object. /// public const uint ProgramStateMachineType_Running = 2402; /// /// The identifier for the ProgramStateMachineType_Suspended Object. /// public const uint ProgramStateMachineType_Suspended = 2404; /// /// The identifier for the ProgramStateMachineType_Halted Object. /// public const uint ProgramStateMachineType_Halted = 2406; /// /// The identifier for the ProgramStateMachineType_HaltedToReady Object. /// public const uint ProgramStateMachineType_HaltedToReady = 2408; /// /// The identifier for the ProgramStateMachineType_ReadyToRunning Object. /// public const uint ProgramStateMachineType_ReadyToRunning = 2410; /// /// The identifier for the ProgramStateMachineType_RunningToHalted Object. /// public const uint ProgramStateMachineType_RunningToHalted = 2412; /// /// The identifier for the ProgramStateMachineType_RunningToReady Object. /// public const uint ProgramStateMachineType_RunningToReady = 2414; /// /// The identifier for the ProgramStateMachineType_RunningToSuspended Object. /// public const uint ProgramStateMachineType_RunningToSuspended = 2416; /// /// The identifier for the ProgramStateMachineType_SuspendedToRunning Object. /// public const uint ProgramStateMachineType_SuspendedToRunning = 2418; /// /// The identifier for the ProgramStateMachineType_SuspendedToHalted Object. /// public const uint ProgramStateMachineType_SuspendedToHalted = 2420; /// /// The identifier for the ProgramStateMachineType_SuspendedToReady Object. /// public const uint ProgramStateMachineType_SuspendedToReady = 2422; /// /// The identifier for the ProgramStateMachineType_ReadyToHalted Object. /// public const uint ProgramStateMachineType_ReadyToHalted = 2424; /// /// The identifier for the HistoricalDataConfigurationType_AggregateConfiguration Object. /// public const uint HistoricalDataConfigurationType_AggregateConfiguration = 3059; /// /// The identifier for the HistoricalDataConfigurationType_AggregateFunctions Object. /// public const uint HistoricalDataConfigurationType_AggregateFunctions = 11876; /// /// The identifier for the HAConfiguration Object. /// public const uint HAConfiguration = 11202; /// /// The identifier for the HAConfiguration_AggregateConfiguration Object. /// public const uint HAConfiguration_AggregateConfiguration = 11203; /// /// The identifier for the HistoryServerCapabilitiesType_AggregateFunctions Object. /// public const uint HistoryServerCapabilitiesType_AggregateFunctions = 11172; /// /// The identifier for the AggregateFunction_Interpolative Object. /// public const uint AggregateFunction_Interpolative = 2341; /// /// The identifier for the AggregateFunction_Average Object. /// public const uint AggregateFunction_Average = 2342; /// /// The identifier for the AggregateFunction_TimeAverage Object. /// public const uint AggregateFunction_TimeAverage = 2343; /// /// The identifier for the AggregateFunction_TimeAverage2 Object. /// public const uint AggregateFunction_TimeAverage2 = 11285; /// /// The identifier for the AggregateFunction_Total Object. /// public const uint AggregateFunction_Total = 2344; /// /// The identifier for the AggregateFunction_Total2 Object. /// public const uint AggregateFunction_Total2 = 11304; /// /// The identifier for the AggregateFunction_Minimum Object. /// public const uint AggregateFunction_Minimum = 2346; /// /// The identifier for the AggregateFunction_Maximum Object. /// public const uint AggregateFunction_Maximum = 2347; /// /// The identifier for the AggregateFunction_MinimumActualTime Object. /// public const uint AggregateFunction_MinimumActualTime = 2348; /// /// The identifier for the AggregateFunction_MaximumActualTime Object. /// public const uint AggregateFunction_MaximumActualTime = 2349; /// /// The identifier for the AggregateFunction_Range Object. /// public const uint AggregateFunction_Range = 2350; /// /// The identifier for the AggregateFunction_Minimum2 Object. /// public const uint AggregateFunction_Minimum2 = 11286; /// /// The identifier for the AggregateFunction_Maximum2 Object. /// public const uint AggregateFunction_Maximum2 = 11287; /// /// The identifier for the AggregateFunction_MinimumActualTime2 Object. /// public const uint AggregateFunction_MinimumActualTime2 = 11305; /// /// The identifier for the AggregateFunction_MaximumActualTime2 Object. /// public const uint AggregateFunction_MaximumActualTime2 = 11306; /// /// The identifier for the AggregateFunction_Range2 Object. /// public const uint AggregateFunction_Range2 = 11288; /// /// The identifier for the AggregateFunction_AnnotationCount Object. /// public const uint AggregateFunction_AnnotationCount = 2351; /// /// The identifier for the AggregateFunction_Count Object. /// public const uint AggregateFunction_Count = 2352; /// /// The identifier for the AggregateFunction_DurationInStateZero Object. /// public const uint AggregateFunction_DurationInStateZero = 11307; /// /// The identifier for the AggregateFunction_DurationInStateNonZero Object. /// public const uint AggregateFunction_DurationInStateNonZero = 11308; /// /// The identifier for the AggregateFunction_NumberOfTransitions Object. /// public const uint AggregateFunction_NumberOfTransitions = 2355; /// /// The identifier for the AggregateFunction_Start Object. /// public const uint AggregateFunction_Start = 2357; /// /// The identifier for the AggregateFunction_End Object. /// public const uint AggregateFunction_End = 2358; /// /// The identifier for the AggregateFunction_Delta Object. /// public const uint AggregateFunction_Delta = 2359; /// /// The identifier for the AggregateFunction_StartBound Object. /// public const uint AggregateFunction_StartBound = 11505; /// /// The identifier for the AggregateFunction_EndBound Object. /// public const uint AggregateFunction_EndBound = 11506; /// /// The identifier for the AggregateFunction_DeltaBounds Object. /// public const uint AggregateFunction_DeltaBounds = 11507; /// /// The identifier for the AggregateFunction_DurationGood Object. /// public const uint AggregateFunction_DurationGood = 2360; /// /// The identifier for the AggregateFunction_DurationBad Object. /// public const uint AggregateFunction_DurationBad = 2361; /// /// The identifier for the AggregateFunction_PercentGood Object. /// public const uint AggregateFunction_PercentGood = 2362; /// /// The identifier for the AggregateFunction_PercentBad Object. /// public const uint AggregateFunction_PercentBad = 2363; /// /// The identifier for the AggregateFunction_WorstQuality Object. /// public const uint AggregateFunction_WorstQuality = 2364; /// /// The identifier for the AggregateFunction_WorstQuality2 Object. /// public const uint AggregateFunction_WorstQuality2 = 11292; /// /// The identifier for the AggregateFunction_StandardDeviationSample Object. /// public const uint AggregateFunction_StandardDeviationSample = 11426; /// /// The identifier for the AggregateFunction_StandardDeviationPopulation Object. /// public const uint AggregateFunction_StandardDeviationPopulation = 11427; /// /// The identifier for the AggregateFunction_VarianceSample Object. /// public const uint AggregateFunction_VarianceSample = 11428; /// /// The identifier for the AggregateFunction_VariancePopulation Object. /// public const uint AggregateFunction_VariancePopulation = 11429; /// /// The identifier for the ServerLock Object. /// public const uint ServerLock = 8924; /// /// The identifier for the Node_Encoding_DefaultXml Object. /// public const uint Node_Encoding_DefaultXml = 259; /// /// The identifier for the InstanceNode_Encoding_DefaultXml Object. /// public const uint InstanceNode_Encoding_DefaultXml = 11887; /// /// The identifier for the TypeNode_Encoding_DefaultXml Object. /// public const uint TypeNode_Encoding_DefaultXml = 11888; /// /// The identifier for the ObjectNode_Encoding_DefaultXml Object. /// public const uint ObjectNode_Encoding_DefaultXml = 262; /// /// The identifier for the ObjectTypeNode_Encoding_DefaultXml Object. /// public const uint ObjectTypeNode_Encoding_DefaultXml = 265; /// /// The identifier for the VariableNode_Encoding_DefaultXml Object. /// public const uint VariableNode_Encoding_DefaultXml = 268; /// /// The identifier for the VariableTypeNode_Encoding_DefaultXml Object. /// public const uint VariableTypeNode_Encoding_DefaultXml = 271; /// /// The identifier for the ReferenceTypeNode_Encoding_DefaultXml Object. /// public const uint ReferenceTypeNode_Encoding_DefaultXml = 274; /// /// The identifier for the MethodNode_Encoding_DefaultXml Object. /// public const uint MethodNode_Encoding_DefaultXml = 277; /// /// The identifier for the ViewNode_Encoding_DefaultXml Object. /// public const uint ViewNode_Encoding_DefaultXml = 280; /// /// The identifier for the DataTypeNode_Encoding_DefaultXml Object. /// public const uint DataTypeNode_Encoding_DefaultXml = 283; /// /// The identifier for the ReferenceNode_Encoding_DefaultXml Object. /// public const uint ReferenceNode_Encoding_DefaultXml = 286; /// /// The identifier for the Argument_Encoding_DefaultXml Object. /// public const uint Argument_Encoding_DefaultXml = 297; /// /// The identifier for the EnumValueType_Encoding_DefaultXml Object. /// public const uint EnumValueType_Encoding_DefaultXml = 7616; /// /// The identifier for the TimeZoneDataType_Encoding_DefaultXml Object. /// public const uint TimeZoneDataType_Encoding_DefaultXml = 8913; /// /// The identifier for the ApplicationDescription_Encoding_DefaultXml Object. /// public const uint ApplicationDescription_Encoding_DefaultXml = 309; /// /// The identifier for the RequestHeader_Encoding_DefaultXml Object. /// public const uint RequestHeader_Encoding_DefaultXml = 390; /// /// The identifier for the ResponseHeader_Encoding_DefaultXml Object. /// public const uint ResponseHeader_Encoding_DefaultXml = 393; /// /// The identifier for the ServiceFault_Encoding_DefaultXml Object. /// public const uint ServiceFault_Encoding_DefaultXml = 396; /// /// The identifier for the DnsServiceRecord_Encoding_DefaultXml Object. /// public const uint DnsServiceRecord_Encoding_DefaultXml = 12192; /// /// The identifier for the FindDnsServicesRequest_Encoding_DefaultXml Object. /// public const uint FindDnsServicesRequest_Encoding_DefaultXml = 12193; /// /// The identifier for the FindDnsServicesResponse_Encoding_DefaultXml Object. /// public const uint FindDnsServicesResponse_Encoding_DefaultXml = 12194; /// /// The identifier for the FindServersRequest_Encoding_DefaultXml Object. /// public const uint FindServersRequest_Encoding_DefaultXml = 421; /// /// The identifier for the FindServersResponse_Encoding_DefaultXml Object. /// public const uint FindServersResponse_Encoding_DefaultXml = 424; /// /// The identifier for the UserTokenPolicy_Encoding_DefaultXml Object. /// public const uint UserTokenPolicy_Encoding_DefaultXml = 305; /// /// The identifier for the EndpointDescription_Encoding_DefaultXml Object. /// public const uint EndpointDescription_Encoding_DefaultXml = 313; /// /// The identifier for the GetEndpointsRequest_Encoding_DefaultXml Object. /// public const uint GetEndpointsRequest_Encoding_DefaultXml = 427; /// /// The identifier for the GetEndpointsResponse_Encoding_DefaultXml Object. /// public const uint GetEndpointsResponse_Encoding_DefaultXml = 430; /// /// The identifier for the RegisteredServer_Encoding_DefaultXml Object. /// public const uint RegisteredServer_Encoding_DefaultXml = 433; /// /// The identifier for the RegisterServerRequest_Encoding_DefaultXml Object. /// public const uint RegisterServerRequest_Encoding_DefaultXml = 436; /// /// The identifier for the RegisterServerResponse_Encoding_DefaultXml Object. /// public const uint RegisterServerResponse_Encoding_DefaultXml = 439; /// /// The identifier for the ChannelSecurityToken_Encoding_DefaultXml Object. /// public const uint ChannelSecurityToken_Encoding_DefaultXml = 442; /// /// The identifier for the OpenSecureChannelRequest_Encoding_DefaultXml Object. /// public const uint OpenSecureChannelRequest_Encoding_DefaultXml = 445; /// /// The identifier for the OpenSecureChannelResponse_Encoding_DefaultXml Object. /// public const uint OpenSecureChannelResponse_Encoding_DefaultXml = 448; /// /// The identifier for the CloseSecureChannelRequest_Encoding_DefaultXml Object. /// public const uint CloseSecureChannelRequest_Encoding_DefaultXml = 451; /// /// The identifier for the CloseSecureChannelResponse_Encoding_DefaultXml Object. /// public const uint CloseSecureChannelResponse_Encoding_DefaultXml = 454; /// /// The identifier for the SignedSoftwareCertificate_Encoding_DefaultXml Object. /// public const uint SignedSoftwareCertificate_Encoding_DefaultXml = 345; /// /// The identifier for the SignatureData_Encoding_DefaultXml Object. /// public const uint SignatureData_Encoding_DefaultXml = 457; /// /// The identifier for the CreateSessionRequest_Encoding_DefaultXml Object. /// public const uint CreateSessionRequest_Encoding_DefaultXml = 460; /// /// The identifier for the CreateSessionResponse_Encoding_DefaultXml Object. /// public const uint CreateSessionResponse_Encoding_DefaultXml = 463; /// /// The identifier for the UserIdentityToken_Encoding_DefaultXml Object. /// public const uint UserIdentityToken_Encoding_DefaultXml = 317; /// /// The identifier for the AnonymousIdentityToken_Encoding_DefaultXml Object. /// public const uint AnonymousIdentityToken_Encoding_DefaultXml = 320; /// /// The identifier for the UserNameIdentityToken_Encoding_DefaultXml Object. /// public const uint UserNameIdentityToken_Encoding_DefaultXml = 323; /// /// The identifier for the X509IdentityToken_Encoding_DefaultXml Object. /// public const uint X509IdentityToken_Encoding_DefaultXml = 326; /// /// The identifier for the IssuedIdentityToken_Encoding_DefaultXml Object. /// public const uint IssuedIdentityToken_Encoding_DefaultXml = 939; /// /// The identifier for the ActivateSessionRequest_Encoding_DefaultXml Object. /// public const uint ActivateSessionRequest_Encoding_DefaultXml = 466; /// /// The identifier for the ActivateSessionResponse_Encoding_DefaultXml Object. /// public const uint ActivateSessionResponse_Encoding_DefaultXml = 469; /// /// The identifier for the CloseSessionRequest_Encoding_DefaultXml Object. /// public const uint CloseSessionRequest_Encoding_DefaultXml = 472; /// /// The identifier for the CloseSessionResponse_Encoding_DefaultXml Object. /// public const uint CloseSessionResponse_Encoding_DefaultXml = 475; /// /// The identifier for the CancelRequest_Encoding_DefaultXml Object. /// public const uint CancelRequest_Encoding_DefaultXml = 478; /// /// The identifier for the CancelResponse_Encoding_DefaultXml Object. /// public const uint CancelResponse_Encoding_DefaultXml = 481; /// /// The identifier for the NodeAttributes_Encoding_DefaultXml Object. /// public const uint NodeAttributes_Encoding_DefaultXml = 350; /// /// The identifier for the ObjectAttributes_Encoding_DefaultXml Object. /// public const uint ObjectAttributes_Encoding_DefaultXml = 353; /// /// The identifier for the VariableAttributes_Encoding_DefaultXml Object. /// public const uint VariableAttributes_Encoding_DefaultXml = 356; /// /// The identifier for the MethodAttributes_Encoding_DefaultXml Object. /// public const uint MethodAttributes_Encoding_DefaultXml = 359; /// /// The identifier for the ObjectTypeAttributes_Encoding_DefaultXml Object. /// public const uint ObjectTypeAttributes_Encoding_DefaultXml = 362; /// /// The identifier for the VariableTypeAttributes_Encoding_DefaultXml Object. /// public const uint VariableTypeAttributes_Encoding_DefaultXml = 365; /// /// The identifier for the ReferenceTypeAttributes_Encoding_DefaultXml Object. /// public const uint ReferenceTypeAttributes_Encoding_DefaultXml = 368; /// /// The identifier for the DataTypeAttributes_Encoding_DefaultXml Object. /// public const uint DataTypeAttributes_Encoding_DefaultXml = 371; /// /// The identifier for the ViewAttributes_Encoding_DefaultXml Object. /// public const uint ViewAttributes_Encoding_DefaultXml = 374; /// /// The identifier for the AddNodesItem_Encoding_DefaultXml Object. /// public const uint AddNodesItem_Encoding_DefaultXml = 377; /// /// The identifier for the AddNodesResult_Encoding_DefaultXml Object. /// public const uint AddNodesResult_Encoding_DefaultXml = 484; /// /// The identifier for the AddNodesRequest_Encoding_DefaultXml Object. /// public const uint AddNodesRequest_Encoding_DefaultXml = 487; /// /// The identifier for the AddNodesResponse_Encoding_DefaultXml Object. /// public const uint AddNodesResponse_Encoding_DefaultXml = 490; /// /// The identifier for the AddReferencesItem_Encoding_DefaultXml Object. /// public const uint AddReferencesItem_Encoding_DefaultXml = 380; /// /// The identifier for the AddReferencesRequest_Encoding_DefaultXml Object. /// public const uint AddReferencesRequest_Encoding_DefaultXml = 493; /// /// The identifier for the AddReferencesResponse_Encoding_DefaultXml Object. /// public const uint AddReferencesResponse_Encoding_DefaultXml = 496; /// /// The identifier for the DeleteNodesItem_Encoding_DefaultXml Object. /// public const uint DeleteNodesItem_Encoding_DefaultXml = 383; /// /// The identifier for the DeleteNodesRequest_Encoding_DefaultXml Object. /// public const uint DeleteNodesRequest_Encoding_DefaultXml = 499; /// /// The identifier for the DeleteNodesResponse_Encoding_DefaultXml Object. /// public const uint DeleteNodesResponse_Encoding_DefaultXml = 502; /// /// The identifier for the DeleteReferencesItem_Encoding_DefaultXml Object. /// public const uint DeleteReferencesItem_Encoding_DefaultXml = 386; /// /// The identifier for the DeleteReferencesRequest_Encoding_DefaultXml Object. /// public const uint DeleteReferencesRequest_Encoding_DefaultXml = 505; /// /// The identifier for the DeleteReferencesResponse_Encoding_DefaultXml Object. /// public const uint DeleteReferencesResponse_Encoding_DefaultXml = 508; /// /// The identifier for the ViewDescription_Encoding_DefaultXml Object. /// public const uint ViewDescription_Encoding_DefaultXml = 512; /// /// The identifier for the BrowseDescription_Encoding_DefaultXml Object. /// public const uint BrowseDescription_Encoding_DefaultXml = 515; /// /// The identifier for the ReferenceDescription_Encoding_DefaultXml Object. /// public const uint ReferenceDescription_Encoding_DefaultXml = 519; /// /// The identifier for the BrowseResult_Encoding_DefaultXml Object. /// public const uint BrowseResult_Encoding_DefaultXml = 523; /// /// The identifier for the BrowseRequest_Encoding_DefaultXml Object. /// public const uint BrowseRequest_Encoding_DefaultXml = 526; /// /// The identifier for the BrowseResponse_Encoding_DefaultXml Object. /// public const uint BrowseResponse_Encoding_DefaultXml = 529; /// /// The identifier for the BrowseNextRequest_Encoding_DefaultXml Object. /// public const uint BrowseNextRequest_Encoding_DefaultXml = 532; /// /// The identifier for the BrowseNextResponse_Encoding_DefaultXml Object. /// public const uint BrowseNextResponse_Encoding_DefaultXml = 535; /// /// The identifier for the RelativePathElement_Encoding_DefaultXml Object. /// public const uint RelativePathElement_Encoding_DefaultXml = 538; /// /// The identifier for the RelativePath_Encoding_DefaultXml Object. /// public const uint RelativePath_Encoding_DefaultXml = 541; /// /// The identifier for the BrowsePath_Encoding_DefaultXml Object. /// public const uint BrowsePath_Encoding_DefaultXml = 544; /// /// The identifier for the BrowsePathTarget_Encoding_DefaultXml Object. /// public const uint BrowsePathTarget_Encoding_DefaultXml = 547; /// /// The identifier for the BrowsePathResult_Encoding_DefaultXml Object. /// public const uint BrowsePathResult_Encoding_DefaultXml = 550; /// /// The identifier for the TranslateBrowsePathsToNodeIdsRequest_Encoding_DefaultXml Object. /// public const uint TranslateBrowsePathsToNodeIdsRequest_Encoding_DefaultXml = 553; /// /// The identifier for the TranslateBrowsePathsToNodeIdsResponse_Encoding_DefaultXml Object. /// public const uint TranslateBrowsePathsToNodeIdsResponse_Encoding_DefaultXml = 556; /// /// The identifier for the RegisterNodesRequest_Encoding_DefaultXml Object. /// public const uint RegisterNodesRequest_Encoding_DefaultXml = 559; /// /// The identifier for the RegisterNodesResponse_Encoding_DefaultXml Object. /// public const uint RegisterNodesResponse_Encoding_DefaultXml = 562; /// /// The identifier for the UnregisterNodesRequest_Encoding_DefaultXml Object. /// public const uint UnregisterNodesRequest_Encoding_DefaultXml = 565; /// /// The identifier for the UnregisterNodesResponse_Encoding_DefaultXml Object. /// public const uint UnregisterNodesResponse_Encoding_DefaultXml = 568; /// /// The identifier for the EndpointConfiguration_Encoding_DefaultXml Object. /// public const uint EndpointConfiguration_Encoding_DefaultXml = 332; /// /// The identifier for the SupportedProfile_Encoding_DefaultXml Object. /// public const uint SupportedProfile_Encoding_DefaultXml = 336; /// /// The identifier for the SoftwareCertificate_Encoding_DefaultXml Object. /// public const uint SoftwareCertificate_Encoding_DefaultXml = 342; /// /// The identifier for the QueryDataDescription_Encoding_DefaultXml Object. /// public const uint QueryDataDescription_Encoding_DefaultXml = 571; /// /// The identifier for the NodeTypeDescription_Encoding_DefaultXml Object. /// public const uint NodeTypeDescription_Encoding_DefaultXml = 574; /// /// The identifier for the QueryDataSet_Encoding_DefaultXml Object. /// public const uint QueryDataSet_Encoding_DefaultXml = 578; /// /// The identifier for the NodeReference_Encoding_DefaultXml Object. /// public const uint NodeReference_Encoding_DefaultXml = 581; /// /// The identifier for the ContentFilterElement_Encoding_DefaultXml Object. /// public const uint ContentFilterElement_Encoding_DefaultXml = 584; /// /// The identifier for the ContentFilter_Encoding_DefaultXml Object. /// public const uint ContentFilter_Encoding_DefaultXml = 587; /// /// The identifier for the FilterOperand_Encoding_DefaultXml Object. /// public const uint FilterOperand_Encoding_DefaultXml = 590; /// /// The identifier for the ElementOperand_Encoding_DefaultXml Object. /// public const uint ElementOperand_Encoding_DefaultXml = 593; /// /// The identifier for the LiteralOperand_Encoding_DefaultXml Object. /// public const uint LiteralOperand_Encoding_DefaultXml = 596; /// /// The identifier for the AttributeOperand_Encoding_DefaultXml Object. /// public const uint AttributeOperand_Encoding_DefaultXml = 599; /// /// The identifier for the SimpleAttributeOperand_Encoding_DefaultXml Object. /// public const uint SimpleAttributeOperand_Encoding_DefaultXml = 602; /// /// The identifier for the ContentFilterElementResult_Encoding_DefaultXml Object. /// public const uint ContentFilterElementResult_Encoding_DefaultXml = 605; /// /// The identifier for the ContentFilterResult_Encoding_DefaultXml Object. /// public const uint ContentFilterResult_Encoding_DefaultXml = 608; /// /// The identifier for the ParsingResult_Encoding_DefaultXml Object. /// public const uint ParsingResult_Encoding_DefaultXml = 611; /// /// The identifier for the QueryFirstRequest_Encoding_DefaultXml Object. /// public const uint QueryFirstRequest_Encoding_DefaultXml = 614; /// /// The identifier for the QueryFirstResponse_Encoding_DefaultXml Object. /// public const uint QueryFirstResponse_Encoding_DefaultXml = 617; /// /// The identifier for the QueryNextRequest_Encoding_DefaultXml Object. /// public const uint QueryNextRequest_Encoding_DefaultXml = 620; /// /// The identifier for the QueryNextResponse_Encoding_DefaultXml Object. /// public const uint QueryNextResponse_Encoding_DefaultXml = 623; /// /// The identifier for the ReadValueId_Encoding_DefaultXml Object. /// public const uint ReadValueId_Encoding_DefaultXml = 627; /// /// The identifier for the ReadRequest_Encoding_DefaultXml Object. /// public const uint ReadRequest_Encoding_DefaultXml = 630; /// /// The identifier for the ReadResponse_Encoding_DefaultXml Object. /// public const uint ReadResponse_Encoding_DefaultXml = 633; /// /// The identifier for the HistoryReadValueId_Encoding_DefaultXml Object. /// public const uint HistoryReadValueId_Encoding_DefaultXml = 636; /// /// The identifier for the HistoryReadResult_Encoding_DefaultXml Object. /// public const uint HistoryReadResult_Encoding_DefaultXml = 639; /// /// The identifier for the HistoryReadDetails_Encoding_DefaultXml Object. /// public const uint HistoryReadDetails_Encoding_DefaultXml = 642; /// /// The identifier for the ReadEventDetails_Encoding_DefaultXml Object. /// public const uint ReadEventDetails_Encoding_DefaultXml = 645; /// /// The identifier for the ReadRawModifiedDetails_Encoding_DefaultXml Object. /// public const uint ReadRawModifiedDetails_Encoding_DefaultXml = 648; /// /// The identifier for the ReadProcessedDetails_Encoding_DefaultXml Object. /// public const uint ReadProcessedDetails_Encoding_DefaultXml = 651; /// /// The identifier for the ReadAtTimeDetails_Encoding_DefaultXml Object. /// public const uint ReadAtTimeDetails_Encoding_DefaultXml = 654; /// /// The identifier for the HistoryData_Encoding_DefaultXml Object. /// public const uint HistoryData_Encoding_DefaultXml = 657; /// /// The identifier for the ModificationInfo_Encoding_DefaultXml Object. /// public const uint ModificationInfo_Encoding_DefaultXml = 11218; /// /// The identifier for the HistoryModifiedData_Encoding_DefaultXml Object. /// public const uint HistoryModifiedData_Encoding_DefaultXml = 11219; /// /// The identifier for the HistoryEvent_Encoding_DefaultXml Object. /// public const uint HistoryEvent_Encoding_DefaultXml = 660; /// /// The identifier for the HistoryReadRequest_Encoding_DefaultXml Object. /// public const uint HistoryReadRequest_Encoding_DefaultXml = 663; /// /// The identifier for the HistoryReadResponse_Encoding_DefaultXml Object. /// public const uint HistoryReadResponse_Encoding_DefaultXml = 666; /// /// The identifier for the WriteValue_Encoding_DefaultXml Object. /// public const uint WriteValue_Encoding_DefaultXml = 669; /// /// The identifier for the WriteRequest_Encoding_DefaultXml Object. /// public const uint WriteRequest_Encoding_DefaultXml = 672; /// /// The identifier for the WriteResponse_Encoding_DefaultXml Object. /// public const uint WriteResponse_Encoding_DefaultXml = 675; /// /// The identifier for the HistoryUpdateDetails_Encoding_DefaultXml Object. /// public const uint HistoryUpdateDetails_Encoding_DefaultXml = 678; /// /// The identifier for the UpdateDataDetails_Encoding_DefaultXml Object. /// public const uint UpdateDataDetails_Encoding_DefaultXml = 681; /// /// The identifier for the UpdateStructureDataDetails_Encoding_DefaultXml Object. /// public const uint UpdateStructureDataDetails_Encoding_DefaultXml = 11296; /// /// The identifier for the UpdateEventDetails_Encoding_DefaultXml Object. /// public const uint UpdateEventDetails_Encoding_DefaultXml = 684; /// /// The identifier for the DeleteRawModifiedDetails_Encoding_DefaultXml Object. /// public const uint DeleteRawModifiedDetails_Encoding_DefaultXml = 687; /// /// The identifier for the DeleteAtTimeDetails_Encoding_DefaultXml Object. /// public const uint DeleteAtTimeDetails_Encoding_DefaultXml = 690; /// /// The identifier for the DeleteEventDetails_Encoding_DefaultXml Object. /// public const uint DeleteEventDetails_Encoding_DefaultXml = 693; /// /// The identifier for the HistoryUpdateResult_Encoding_DefaultXml Object. /// public const uint HistoryUpdateResult_Encoding_DefaultXml = 696; /// /// The identifier for the HistoryUpdateEventResult_Encoding_DefaultXml Object. /// public const uint HistoryUpdateEventResult_Encoding_DefaultXml = 930; /// /// The identifier for the HistoryUpdateRequest_Encoding_DefaultXml Object. /// public const uint HistoryUpdateRequest_Encoding_DefaultXml = 699; /// /// The identifier for the HistoryUpdateResponse_Encoding_DefaultXml Object. /// public const uint HistoryUpdateResponse_Encoding_DefaultXml = 702; /// /// The identifier for the CallMethodRequest_Encoding_DefaultXml Object. /// public const uint CallMethodRequest_Encoding_DefaultXml = 705; /// /// The identifier for the CallMethodResult_Encoding_DefaultXml Object. /// public const uint CallMethodResult_Encoding_DefaultXml = 708; /// /// The identifier for the CallRequest_Encoding_DefaultXml Object. /// public const uint CallRequest_Encoding_DefaultXml = 711; /// /// The identifier for the CallResponse_Encoding_DefaultXml Object. /// public const uint CallResponse_Encoding_DefaultXml = 714; /// /// The identifier for the MonitoringFilter_Encoding_DefaultXml Object. /// public const uint MonitoringFilter_Encoding_DefaultXml = 720; /// /// The identifier for the DataChangeFilter_Encoding_DefaultXml Object. /// public const uint DataChangeFilter_Encoding_DefaultXml = 723; /// /// The identifier for the EventFilter_Encoding_DefaultXml Object. /// public const uint EventFilter_Encoding_DefaultXml = 726; /// /// The identifier for the AggregateConfiguration_Encoding_DefaultXml Object. /// public const uint AggregateConfiguration_Encoding_DefaultXml = 949; /// /// The identifier for the AggregateFilter_Encoding_DefaultXml Object. /// public const uint AggregateFilter_Encoding_DefaultXml = 729; /// /// The identifier for the MonitoringFilterResult_Encoding_DefaultXml Object. /// public const uint MonitoringFilterResult_Encoding_DefaultXml = 732; /// /// The identifier for the EventFilterResult_Encoding_DefaultXml Object. /// public const uint EventFilterResult_Encoding_DefaultXml = 735; /// /// The identifier for the AggregateFilterResult_Encoding_DefaultXml Object. /// public const uint AggregateFilterResult_Encoding_DefaultXml = 738; /// /// The identifier for the MonitoringParameters_Encoding_DefaultXml Object. /// public const uint MonitoringParameters_Encoding_DefaultXml = 741; /// /// The identifier for the MonitoredItemCreateRequest_Encoding_DefaultXml Object. /// public const uint MonitoredItemCreateRequest_Encoding_DefaultXml = 744; /// /// The identifier for the MonitoredItemCreateResult_Encoding_DefaultXml Object. /// public const uint MonitoredItemCreateResult_Encoding_DefaultXml = 747; /// /// The identifier for the CreateMonitoredItemsRequest_Encoding_DefaultXml Object. /// public const uint CreateMonitoredItemsRequest_Encoding_DefaultXml = 750; /// /// The identifier for the CreateMonitoredItemsResponse_Encoding_DefaultXml Object. /// public const uint CreateMonitoredItemsResponse_Encoding_DefaultXml = 753; /// /// The identifier for the MonitoredItemModifyRequest_Encoding_DefaultXml Object. /// public const uint MonitoredItemModifyRequest_Encoding_DefaultXml = 756; /// /// The identifier for the MonitoredItemModifyResult_Encoding_DefaultXml Object. /// public const uint MonitoredItemModifyResult_Encoding_DefaultXml = 759; /// /// The identifier for the ModifyMonitoredItemsRequest_Encoding_DefaultXml Object. /// public const uint ModifyMonitoredItemsRequest_Encoding_DefaultXml = 762; /// /// The identifier for the ModifyMonitoredItemsResponse_Encoding_DefaultXml Object. /// public const uint ModifyMonitoredItemsResponse_Encoding_DefaultXml = 765; /// /// The identifier for the SetMonitoringModeRequest_Encoding_DefaultXml Object. /// public const uint SetMonitoringModeRequest_Encoding_DefaultXml = 768; /// /// The identifier for the SetMonitoringModeResponse_Encoding_DefaultXml Object. /// public const uint SetMonitoringModeResponse_Encoding_DefaultXml = 771; /// /// The identifier for the SetTriggeringRequest_Encoding_DefaultXml Object. /// public const uint SetTriggeringRequest_Encoding_DefaultXml = 774; /// /// The identifier for the SetTriggeringResponse_Encoding_DefaultXml Object. /// public const uint SetTriggeringResponse_Encoding_DefaultXml = 777; /// /// The identifier for the DeleteMonitoredItemsRequest_Encoding_DefaultXml Object. /// public const uint DeleteMonitoredItemsRequest_Encoding_DefaultXml = 780; /// /// The identifier for the DeleteMonitoredItemsResponse_Encoding_DefaultXml Object. /// public const uint DeleteMonitoredItemsResponse_Encoding_DefaultXml = 783; /// /// The identifier for the CreateSubscriptionRequest_Encoding_DefaultXml Object. /// public const uint CreateSubscriptionRequest_Encoding_DefaultXml = 786; /// /// The identifier for the CreateSubscriptionResponse_Encoding_DefaultXml Object. /// public const uint CreateSubscriptionResponse_Encoding_DefaultXml = 789; /// /// The identifier for the ModifySubscriptionRequest_Encoding_DefaultXml Object. /// public const uint ModifySubscriptionRequest_Encoding_DefaultXml = 792; /// /// The identifier for the ModifySubscriptionResponse_Encoding_DefaultXml Object. /// public const uint ModifySubscriptionResponse_Encoding_DefaultXml = 795; /// /// The identifier for the SetPublishingModeRequest_Encoding_DefaultXml Object. /// public const uint SetPublishingModeRequest_Encoding_DefaultXml = 798; /// /// The identifier for the SetPublishingModeResponse_Encoding_DefaultXml Object. /// public const uint SetPublishingModeResponse_Encoding_DefaultXml = 801; /// /// The identifier for the NotificationMessage_Encoding_DefaultXml Object. /// public const uint NotificationMessage_Encoding_DefaultXml = 804; /// /// The identifier for the NotificationData_Encoding_DefaultXml Object. /// public const uint NotificationData_Encoding_DefaultXml = 946; /// /// The identifier for the DataChangeNotification_Encoding_DefaultXml Object. /// public const uint DataChangeNotification_Encoding_DefaultXml = 810; /// /// The identifier for the MonitoredItemNotification_Encoding_DefaultXml Object. /// public const uint MonitoredItemNotification_Encoding_DefaultXml = 807; /// /// The identifier for the EventNotificationList_Encoding_DefaultXml Object. /// public const uint EventNotificationList_Encoding_DefaultXml = 915; /// /// The identifier for the EventFieldList_Encoding_DefaultXml Object. /// public const uint EventFieldList_Encoding_DefaultXml = 918; /// /// The identifier for the HistoryEventFieldList_Encoding_DefaultXml Object. /// public const uint HistoryEventFieldList_Encoding_DefaultXml = 921; /// /// The identifier for the StatusChangeNotification_Encoding_DefaultXml Object. /// public const uint StatusChangeNotification_Encoding_DefaultXml = 819; /// /// The identifier for the SubscriptionAcknowledgement_Encoding_DefaultXml Object. /// public const uint SubscriptionAcknowledgement_Encoding_DefaultXml = 822; /// /// The identifier for the PublishRequest_Encoding_DefaultXml Object. /// public const uint PublishRequest_Encoding_DefaultXml = 825; /// /// The identifier for the PublishResponse_Encoding_DefaultXml Object. /// public const uint PublishResponse_Encoding_DefaultXml = 828; /// /// The identifier for the RepublishRequest_Encoding_DefaultXml Object. /// public const uint RepublishRequest_Encoding_DefaultXml = 831; /// /// The identifier for the RepublishResponse_Encoding_DefaultXml Object. /// public const uint RepublishResponse_Encoding_DefaultXml = 834; /// /// The identifier for the TransferResult_Encoding_DefaultXml Object. /// public const uint TransferResult_Encoding_DefaultXml = 837; /// /// The identifier for the TransferSubscriptionsRequest_Encoding_DefaultXml Object. /// public const uint TransferSubscriptionsRequest_Encoding_DefaultXml = 840; /// /// The identifier for the TransferSubscriptionsResponse_Encoding_DefaultXml Object. /// public const uint TransferSubscriptionsResponse_Encoding_DefaultXml = 843; /// /// The identifier for the DeleteSubscriptionsRequest_Encoding_DefaultXml Object. /// public const uint DeleteSubscriptionsRequest_Encoding_DefaultXml = 846; /// /// The identifier for the DeleteSubscriptionsResponse_Encoding_DefaultXml Object. /// public const uint DeleteSubscriptionsResponse_Encoding_DefaultXml = 849; /// /// The identifier for the ScalarTestType_Encoding_DefaultXml Object. /// public const uint ScalarTestType_Encoding_DefaultXml = 400; /// /// The identifier for the ArrayTestType_Encoding_DefaultXml Object. /// public const uint ArrayTestType_Encoding_DefaultXml = 403; /// /// The identifier for the CompositeTestType_Encoding_DefaultXml Object. /// public const uint CompositeTestType_Encoding_DefaultXml = 406; /// /// The identifier for the TestStackRequest_Encoding_DefaultXml Object. /// public const uint TestStackRequest_Encoding_DefaultXml = 409; /// /// The identifier for the TestStackResponse_Encoding_DefaultXml Object. /// public const uint TestStackResponse_Encoding_DefaultXml = 412; /// /// The identifier for the TestStackExRequest_Encoding_DefaultXml Object. /// public const uint TestStackExRequest_Encoding_DefaultXml = 415; /// /// The identifier for the TestStackExResponse_Encoding_DefaultXml Object. /// public const uint TestStackExResponse_Encoding_DefaultXml = 418; /// /// The identifier for the BuildInfo_Encoding_DefaultXml Object. /// public const uint BuildInfo_Encoding_DefaultXml = 339; /// /// The identifier for the RedundantServerDataType_Encoding_DefaultXml Object. /// public const uint RedundantServerDataType_Encoding_DefaultXml = 854; /// /// The identifier for the EndpointUrlListDataType_Encoding_DefaultXml Object. /// public const uint EndpointUrlListDataType_Encoding_DefaultXml = 11949; /// /// The identifier for the NetworkGroupDataType_Encoding_DefaultXml Object. /// public const uint NetworkGroupDataType_Encoding_DefaultXml = 11950; /// /// The identifier for the SamplingIntervalDiagnosticsDataType_Encoding_DefaultXml Object. /// public const uint SamplingIntervalDiagnosticsDataType_Encoding_DefaultXml = 857; /// /// The identifier for the ServerDiagnosticsSummaryDataType_Encoding_DefaultXml Object. /// public const uint ServerDiagnosticsSummaryDataType_Encoding_DefaultXml = 860; /// /// The identifier for the ServerStatusDataType_Encoding_DefaultXml Object. /// public const uint ServerStatusDataType_Encoding_DefaultXml = 863; /// /// The identifier for the SessionDiagnosticsDataType_Encoding_DefaultXml Object. /// public const uint SessionDiagnosticsDataType_Encoding_DefaultXml = 866; /// /// The identifier for the SessionSecurityDiagnosticsDataType_Encoding_DefaultXml Object. /// public const uint SessionSecurityDiagnosticsDataType_Encoding_DefaultXml = 869; /// /// The identifier for the ServiceCounterDataType_Encoding_DefaultXml Object. /// public const uint ServiceCounterDataType_Encoding_DefaultXml = 872; /// /// The identifier for the StatusResult_Encoding_DefaultXml Object. /// public const uint StatusResult_Encoding_DefaultXml = 300; /// /// The identifier for the SubscriptionDiagnosticsDataType_Encoding_DefaultXml Object. /// public const uint SubscriptionDiagnosticsDataType_Encoding_DefaultXml = 875; /// /// The identifier for the ModelChangeStructureDataType_Encoding_DefaultXml Object. /// public const uint ModelChangeStructureDataType_Encoding_DefaultXml = 878; /// /// The identifier for the SemanticChangeStructureDataType_Encoding_DefaultXml Object. /// public const uint SemanticChangeStructureDataType_Encoding_DefaultXml = 898; /// /// The identifier for the Range_Encoding_DefaultXml Object. /// public const uint Range_Encoding_DefaultXml = 885; /// /// The identifier for the EUInformation_Encoding_DefaultXml Object. /// public const uint EUInformation_Encoding_DefaultXml = 888; /// /// The identifier for the ComplexNumberType_Encoding_DefaultXml Object. /// public const uint ComplexNumberType_Encoding_DefaultXml = 12173; /// /// The identifier for the DoubleComplexNumberType_Encoding_DefaultXml Object. /// public const uint DoubleComplexNumberType_Encoding_DefaultXml = 12174; /// /// The identifier for the AxisInformation_Encoding_DefaultXml Object. /// public const uint AxisInformation_Encoding_DefaultXml = 12081; /// /// The identifier for the XVType_Encoding_DefaultXml Object. /// public const uint XVType_Encoding_DefaultXml = 12082; /// /// The identifier for the ProgramDiagnosticDataType_Encoding_DefaultXml Object. /// public const uint ProgramDiagnosticDataType_Encoding_DefaultXml = 895; /// /// The identifier for the Annotation_Encoding_DefaultXml Object. /// public const uint Annotation_Encoding_DefaultXml = 892; /// /// The identifier for the Node_Encoding_DefaultBinary Object. /// public const uint Node_Encoding_DefaultBinary = 260; /// /// The identifier for the InstanceNode_Encoding_DefaultBinary Object. /// public const uint InstanceNode_Encoding_DefaultBinary = 11889; /// /// The identifier for the TypeNode_Encoding_DefaultBinary Object. /// public const uint TypeNode_Encoding_DefaultBinary = 11890; /// /// The identifier for the ObjectNode_Encoding_DefaultBinary Object. /// public const uint ObjectNode_Encoding_DefaultBinary = 263; /// /// The identifier for the ObjectTypeNode_Encoding_DefaultBinary Object. /// public const uint ObjectTypeNode_Encoding_DefaultBinary = 266; /// /// The identifier for the VariableNode_Encoding_DefaultBinary Object. /// public const uint VariableNode_Encoding_DefaultBinary = 269; /// /// The identifier for the VariableTypeNode_Encoding_DefaultBinary Object. /// public const uint VariableTypeNode_Encoding_DefaultBinary = 272; /// /// The identifier for the ReferenceTypeNode_Encoding_DefaultBinary Object. /// public const uint ReferenceTypeNode_Encoding_DefaultBinary = 275; /// /// The identifier for the MethodNode_Encoding_DefaultBinary Object. /// public const uint MethodNode_Encoding_DefaultBinary = 278; /// /// The identifier for the ViewNode_Encoding_DefaultBinary Object. /// public const uint ViewNode_Encoding_DefaultBinary = 281; /// /// The identifier for the DataTypeNode_Encoding_DefaultBinary Object. /// public const uint DataTypeNode_Encoding_DefaultBinary = 284; /// /// The identifier for the ReferenceNode_Encoding_DefaultBinary Object. /// public const uint ReferenceNode_Encoding_DefaultBinary = 287; /// /// The identifier for the Argument_Encoding_DefaultBinary Object. /// public const uint Argument_Encoding_DefaultBinary = 298; /// /// The identifier for the EnumValueType_Encoding_DefaultBinary Object. /// public const uint EnumValueType_Encoding_DefaultBinary = 8251; /// /// The identifier for the TimeZoneDataType_Encoding_DefaultBinary Object. /// public const uint TimeZoneDataType_Encoding_DefaultBinary = 8917; /// /// The identifier for the ApplicationDescription_Encoding_DefaultBinary Object. /// public const uint ApplicationDescription_Encoding_DefaultBinary = 310; /// /// The identifier for the RequestHeader_Encoding_DefaultBinary Object. /// public const uint RequestHeader_Encoding_DefaultBinary = 391; /// /// The identifier for the ResponseHeader_Encoding_DefaultBinary Object. /// public const uint ResponseHeader_Encoding_DefaultBinary = 394; /// /// The identifier for the ServiceFault_Encoding_DefaultBinary Object. /// public const uint ServiceFault_Encoding_DefaultBinary = 397; /// /// The identifier for the DnsServiceRecord_Encoding_DefaultBinary Object. /// public const uint DnsServiceRecord_Encoding_DefaultBinary = 12198; /// /// The identifier for the FindDnsServicesRequest_Encoding_DefaultBinary Object. /// public const uint FindDnsServicesRequest_Encoding_DefaultBinary = 12199; /// /// The identifier for the FindDnsServicesResponse_Encoding_DefaultBinary Object. /// public const uint FindDnsServicesResponse_Encoding_DefaultBinary = 12200; /// /// The identifier for the FindServersRequest_Encoding_DefaultBinary Object. /// public const uint FindServersRequest_Encoding_DefaultBinary = 422; /// /// The identifier for the FindServersResponse_Encoding_DefaultBinary Object. /// public const uint FindServersResponse_Encoding_DefaultBinary = 425; /// /// The identifier for the UserTokenPolicy_Encoding_DefaultBinary Object. /// public const uint UserTokenPolicy_Encoding_DefaultBinary = 306; /// /// The identifier for the EndpointDescription_Encoding_DefaultBinary Object. /// public const uint EndpointDescription_Encoding_DefaultBinary = 314; /// /// The identifier for the GetEndpointsRequest_Encoding_DefaultBinary Object. /// public const uint GetEndpointsRequest_Encoding_DefaultBinary = 428; /// /// The identifier for the GetEndpointsResponse_Encoding_DefaultBinary Object. /// public const uint GetEndpointsResponse_Encoding_DefaultBinary = 431; /// /// The identifier for the RegisteredServer_Encoding_DefaultBinary Object. /// public const uint RegisteredServer_Encoding_DefaultBinary = 434; /// /// The identifier for the RegisterServerRequest_Encoding_DefaultBinary Object. /// public const uint RegisterServerRequest_Encoding_DefaultBinary = 437; /// /// The identifier for the RegisterServerResponse_Encoding_DefaultBinary Object. /// public const uint RegisterServerResponse_Encoding_DefaultBinary = 440; /// /// The identifier for the ChannelSecurityToken_Encoding_DefaultBinary Object. /// public const uint ChannelSecurityToken_Encoding_DefaultBinary = 443; /// /// The identifier for the OpenSecureChannelRequest_Encoding_DefaultBinary Object. /// public const uint OpenSecureChannelRequest_Encoding_DefaultBinary = 446; /// /// The identifier for the OpenSecureChannelResponse_Encoding_DefaultBinary Object. /// public const uint OpenSecureChannelResponse_Encoding_DefaultBinary = 449; /// /// The identifier for the CloseSecureChannelRequest_Encoding_DefaultBinary Object. /// public const uint CloseSecureChannelRequest_Encoding_DefaultBinary = 452; /// /// The identifier for the CloseSecureChannelResponse_Encoding_DefaultBinary Object. /// public const uint CloseSecureChannelResponse_Encoding_DefaultBinary = 455; /// /// The identifier for the SignedSoftwareCertificate_Encoding_DefaultBinary Object. /// public const uint SignedSoftwareCertificate_Encoding_DefaultBinary = 346; /// /// The identifier for the SignatureData_Encoding_DefaultBinary Object. /// public const uint SignatureData_Encoding_DefaultBinary = 458; /// /// The identifier for the CreateSessionRequest_Encoding_DefaultBinary Object. /// public const uint CreateSessionRequest_Encoding_DefaultBinary = 461; /// /// The identifier for the CreateSessionResponse_Encoding_DefaultBinary Object. /// public const uint CreateSessionResponse_Encoding_DefaultBinary = 464; /// /// The identifier for the UserIdentityToken_Encoding_DefaultBinary Object. /// public const uint UserIdentityToken_Encoding_DefaultBinary = 318; /// /// The identifier for the AnonymousIdentityToken_Encoding_DefaultBinary Object. /// public const uint AnonymousIdentityToken_Encoding_DefaultBinary = 321; /// /// The identifier for the UserNameIdentityToken_Encoding_DefaultBinary Object. /// public const uint UserNameIdentityToken_Encoding_DefaultBinary = 324; /// /// The identifier for the X509IdentityToken_Encoding_DefaultBinary Object. /// public const uint X509IdentityToken_Encoding_DefaultBinary = 327; /// /// The identifier for the IssuedIdentityToken_Encoding_DefaultBinary Object. /// public const uint IssuedIdentityToken_Encoding_DefaultBinary = 940; /// /// The identifier for the ActivateSessionRequest_Encoding_DefaultBinary Object. /// public const uint ActivateSessionRequest_Encoding_DefaultBinary = 467; /// /// The identifier for the ActivateSessionResponse_Encoding_DefaultBinary Object. /// public const uint ActivateSessionResponse_Encoding_DefaultBinary = 470; /// /// The identifier for the CloseSessionRequest_Encoding_DefaultBinary Object. /// public const uint CloseSessionRequest_Encoding_DefaultBinary = 473; /// /// The identifier for the CloseSessionResponse_Encoding_DefaultBinary Object. /// public const uint CloseSessionResponse_Encoding_DefaultBinary = 476; /// /// The identifier for the CancelRequest_Encoding_DefaultBinary Object. /// public const uint CancelRequest_Encoding_DefaultBinary = 479; /// /// The identifier for the CancelResponse_Encoding_DefaultBinary Object. /// public const uint CancelResponse_Encoding_DefaultBinary = 482; /// /// The identifier for the NodeAttributes_Encoding_DefaultBinary Object. /// public const uint NodeAttributes_Encoding_DefaultBinary = 351; /// /// The identifier for the ObjectAttributes_Encoding_DefaultBinary Object. /// public const uint ObjectAttributes_Encoding_DefaultBinary = 354; /// /// The identifier for the VariableAttributes_Encoding_DefaultBinary Object. /// public const uint VariableAttributes_Encoding_DefaultBinary = 357; /// /// The identifier for the MethodAttributes_Encoding_DefaultBinary Object. /// public const uint MethodAttributes_Encoding_DefaultBinary = 360; /// /// The identifier for the ObjectTypeAttributes_Encoding_DefaultBinary Object. /// public const uint ObjectTypeAttributes_Encoding_DefaultBinary = 363; /// /// The identifier for the VariableTypeAttributes_Encoding_DefaultBinary Object. /// public const uint VariableTypeAttributes_Encoding_DefaultBinary = 366; /// /// The identifier for the ReferenceTypeAttributes_Encoding_DefaultBinary Object. /// public const uint ReferenceTypeAttributes_Encoding_DefaultBinary = 369; /// /// The identifier for the DataTypeAttributes_Encoding_DefaultBinary Object. /// public const uint DataTypeAttributes_Encoding_DefaultBinary = 372; /// /// The identifier for the ViewAttributes_Encoding_DefaultBinary Object. /// public const uint ViewAttributes_Encoding_DefaultBinary = 375; /// /// The identifier for the AddNodesItem_Encoding_DefaultBinary Object. /// public const uint AddNodesItem_Encoding_DefaultBinary = 378; /// /// The identifier for the AddNodesResult_Encoding_DefaultBinary Object. /// public const uint AddNodesResult_Encoding_DefaultBinary = 485; /// /// The identifier for the AddNodesRequest_Encoding_DefaultBinary Object. /// public const uint AddNodesRequest_Encoding_DefaultBinary = 488; /// /// The identifier for the AddNodesResponse_Encoding_DefaultBinary Object. /// public const uint AddNodesResponse_Encoding_DefaultBinary = 491; /// /// The identifier for the AddReferencesItem_Encoding_DefaultBinary Object. /// public const uint AddReferencesItem_Encoding_DefaultBinary = 381; /// /// The identifier for the AddReferencesRequest_Encoding_DefaultBinary Object. /// public const uint AddReferencesRequest_Encoding_DefaultBinary = 494; /// /// The identifier for the AddReferencesResponse_Encoding_DefaultBinary Object. /// public const uint AddReferencesResponse_Encoding_DefaultBinary = 497; /// /// The identifier for the DeleteNodesItem_Encoding_DefaultBinary Object. /// public const uint DeleteNodesItem_Encoding_DefaultBinary = 384; /// /// The identifier for the DeleteNodesRequest_Encoding_DefaultBinary Object. /// public const uint DeleteNodesRequest_Encoding_DefaultBinary = 500; /// /// The identifier for the DeleteNodesResponse_Encoding_DefaultBinary Object. /// public const uint DeleteNodesResponse_Encoding_DefaultBinary = 503; /// /// The identifier for the DeleteReferencesItem_Encoding_DefaultBinary Object. /// public const uint DeleteReferencesItem_Encoding_DefaultBinary = 387; /// /// The identifier for the DeleteReferencesRequest_Encoding_DefaultBinary Object. /// public const uint DeleteReferencesRequest_Encoding_DefaultBinary = 506; /// /// The identifier for the DeleteReferencesResponse_Encoding_DefaultBinary Object. /// public const uint DeleteReferencesResponse_Encoding_DefaultBinary = 509; /// /// The identifier for the ViewDescription_Encoding_DefaultBinary Object. /// public const uint ViewDescription_Encoding_DefaultBinary = 513; /// /// The identifier for the BrowseDescription_Encoding_DefaultBinary Object. /// public const uint BrowseDescription_Encoding_DefaultBinary = 516; /// /// The identifier for the ReferenceDescription_Encoding_DefaultBinary Object. /// public const uint ReferenceDescription_Encoding_DefaultBinary = 520; /// /// The identifier for the BrowseResult_Encoding_DefaultBinary Object. /// public const uint BrowseResult_Encoding_DefaultBinary = 524; /// /// The identifier for the BrowseRequest_Encoding_DefaultBinary Object. /// public const uint BrowseRequest_Encoding_DefaultBinary = 527; /// /// The identifier for the BrowseResponse_Encoding_DefaultBinary Object. /// public const uint BrowseResponse_Encoding_DefaultBinary = 530; /// /// The identifier for the BrowseNextRequest_Encoding_DefaultBinary Object. /// public const uint BrowseNextRequest_Encoding_DefaultBinary = 533; /// /// The identifier for the BrowseNextResponse_Encoding_DefaultBinary Object. /// public const uint BrowseNextResponse_Encoding_DefaultBinary = 536; /// /// The identifier for the RelativePathElement_Encoding_DefaultBinary Object. /// public const uint RelativePathElement_Encoding_DefaultBinary = 539; /// /// The identifier for the RelativePath_Encoding_DefaultBinary Object. /// public const uint RelativePath_Encoding_DefaultBinary = 542; /// /// The identifier for the BrowsePath_Encoding_DefaultBinary Object. /// public const uint BrowsePath_Encoding_DefaultBinary = 545; /// /// The identifier for the BrowsePathTarget_Encoding_DefaultBinary Object. /// public const uint BrowsePathTarget_Encoding_DefaultBinary = 548; /// /// The identifier for the BrowsePathResult_Encoding_DefaultBinary Object. /// public const uint BrowsePathResult_Encoding_DefaultBinary = 551; /// /// The identifier for the TranslateBrowsePathsToNodeIdsRequest_Encoding_DefaultBinary Object. /// public const uint TranslateBrowsePathsToNodeIdsRequest_Encoding_DefaultBinary = 554; /// /// The identifier for the TranslateBrowsePathsToNodeIdsResponse_Encoding_DefaultBinary Object. /// public const uint TranslateBrowsePathsToNodeIdsResponse_Encoding_DefaultBinary = 557; /// /// The identifier for the RegisterNodesRequest_Encoding_DefaultBinary Object. /// public const uint RegisterNodesRequest_Encoding_DefaultBinary = 560; /// /// The identifier for the RegisterNodesResponse_Encoding_DefaultBinary Object. /// public const uint RegisterNodesResponse_Encoding_DefaultBinary = 563; /// /// The identifier for the UnregisterNodesRequest_Encoding_DefaultBinary Object. /// public const uint UnregisterNodesRequest_Encoding_DefaultBinary = 566; /// /// The identifier for the UnregisterNodesResponse_Encoding_DefaultBinary Object. /// public const uint UnregisterNodesResponse_Encoding_DefaultBinary = 569; /// /// The identifier for the EndpointConfiguration_Encoding_DefaultBinary Object. /// public const uint EndpointConfiguration_Encoding_DefaultBinary = 333; /// /// The identifier for the SupportedProfile_Encoding_DefaultBinary Object. /// public const uint SupportedProfile_Encoding_DefaultBinary = 337; /// /// The identifier for the SoftwareCertificate_Encoding_DefaultBinary Object. /// public const uint SoftwareCertificate_Encoding_DefaultBinary = 343; /// /// The identifier for the QueryDataDescription_Encoding_DefaultBinary Object. /// public const uint QueryDataDescription_Encoding_DefaultBinary = 572; /// /// The identifier for the NodeTypeDescription_Encoding_DefaultBinary Object. /// public const uint NodeTypeDescription_Encoding_DefaultBinary = 575; /// /// The identifier for the QueryDataSet_Encoding_DefaultBinary Object. /// public const uint QueryDataSet_Encoding_DefaultBinary = 579; /// /// The identifier for the NodeReference_Encoding_DefaultBinary Object. /// public const uint NodeReference_Encoding_DefaultBinary = 582; /// /// The identifier for the ContentFilterElement_Encoding_DefaultBinary Object. /// public const uint ContentFilterElement_Encoding_DefaultBinary = 585; /// /// The identifier for the ContentFilter_Encoding_DefaultBinary Object. /// public const uint ContentFilter_Encoding_DefaultBinary = 588; /// /// The identifier for the FilterOperand_Encoding_DefaultBinary Object. /// public const uint FilterOperand_Encoding_DefaultBinary = 591; /// /// The identifier for the ElementOperand_Encoding_DefaultBinary Object. /// public const uint ElementOperand_Encoding_DefaultBinary = 594; /// /// The identifier for the LiteralOperand_Encoding_DefaultBinary Object. /// public const uint LiteralOperand_Encoding_DefaultBinary = 597; /// /// The identifier for the AttributeOperand_Encoding_DefaultBinary Object. /// public const uint AttributeOperand_Encoding_DefaultBinary = 600; /// /// The identifier for the SimpleAttributeOperand_Encoding_DefaultBinary Object. /// public const uint SimpleAttributeOperand_Encoding_DefaultBinary = 603; /// /// The identifier for the ContentFilterElementResult_Encoding_DefaultBinary Object. /// public const uint ContentFilterElementResult_Encoding_DefaultBinary = 606; /// /// The identifier for the ContentFilterResult_Encoding_DefaultBinary Object. /// public const uint ContentFilterResult_Encoding_DefaultBinary = 609; /// /// The identifier for the ParsingResult_Encoding_DefaultBinary Object. /// public const uint ParsingResult_Encoding_DefaultBinary = 612; /// /// The identifier for the QueryFirstRequest_Encoding_DefaultBinary Object. /// public const uint QueryFirstRequest_Encoding_DefaultBinary = 615; /// /// The identifier for the QueryFirstResponse_Encoding_DefaultBinary Object. /// public const uint QueryFirstResponse_Encoding_DefaultBinary = 618; /// /// The identifier for the QueryNextRequest_Encoding_DefaultBinary Object. /// public const uint QueryNextRequest_Encoding_DefaultBinary = 621; /// /// The identifier for the QueryNextResponse_Encoding_DefaultBinary Object. /// public const uint QueryNextResponse_Encoding_DefaultBinary = 624; /// /// The identifier for the ReadValueId_Encoding_DefaultBinary Object. /// public const uint ReadValueId_Encoding_DefaultBinary = 628; /// /// The identifier for the ReadRequest_Encoding_DefaultBinary Object. /// public const uint ReadRequest_Encoding_DefaultBinary = 631; /// /// The identifier for the ReadResponse_Encoding_DefaultBinary Object. /// public const uint ReadResponse_Encoding_DefaultBinary = 634; /// /// The identifier for the HistoryReadValueId_Encoding_DefaultBinary Object. /// public const uint HistoryReadValueId_Encoding_DefaultBinary = 637; /// /// The identifier for the HistoryReadResult_Encoding_DefaultBinary Object. /// public const uint HistoryReadResult_Encoding_DefaultBinary = 640; /// /// The identifier for the HistoryReadDetails_Encoding_DefaultBinary Object. /// public const uint HistoryReadDetails_Encoding_DefaultBinary = 643; /// /// The identifier for the ReadEventDetails_Encoding_DefaultBinary Object. /// public const uint ReadEventDetails_Encoding_DefaultBinary = 646; /// /// The identifier for the ReadRawModifiedDetails_Encoding_DefaultBinary Object. /// public const uint ReadRawModifiedDetails_Encoding_DefaultBinary = 649; /// /// The identifier for the ReadProcessedDetails_Encoding_DefaultBinary Object. /// public const uint ReadProcessedDetails_Encoding_DefaultBinary = 652; /// /// The identifier for the ReadAtTimeDetails_Encoding_DefaultBinary Object. /// public const uint ReadAtTimeDetails_Encoding_DefaultBinary = 655; /// /// The identifier for the HistoryData_Encoding_DefaultBinary Object. /// public const uint HistoryData_Encoding_DefaultBinary = 658; /// /// The identifier for the ModificationInfo_Encoding_DefaultBinary Object. /// public const uint ModificationInfo_Encoding_DefaultBinary = 11226; /// /// The identifier for the HistoryModifiedData_Encoding_DefaultBinary Object. /// public const uint HistoryModifiedData_Encoding_DefaultBinary = 11227; /// /// The identifier for the HistoryEvent_Encoding_DefaultBinary Object. /// public const uint HistoryEvent_Encoding_DefaultBinary = 661; /// /// The identifier for the HistoryReadRequest_Encoding_DefaultBinary Object. /// public const uint HistoryReadRequest_Encoding_DefaultBinary = 664; /// /// The identifier for the HistoryReadResponse_Encoding_DefaultBinary Object. /// public const uint HistoryReadResponse_Encoding_DefaultBinary = 667; /// /// The identifier for the WriteValue_Encoding_DefaultBinary Object. /// public const uint WriteValue_Encoding_DefaultBinary = 670; /// /// The identifier for the WriteRequest_Encoding_DefaultBinary Object. /// public const uint WriteRequest_Encoding_DefaultBinary = 673; /// /// The identifier for the WriteResponse_Encoding_DefaultBinary Object. /// public const uint WriteResponse_Encoding_DefaultBinary = 676; /// /// The identifier for the HistoryUpdateDetails_Encoding_DefaultBinary Object. /// public const uint HistoryUpdateDetails_Encoding_DefaultBinary = 679; /// /// The identifier for the UpdateDataDetails_Encoding_DefaultBinary Object. /// public const uint UpdateDataDetails_Encoding_DefaultBinary = 682; /// /// The identifier for the UpdateStructureDataDetails_Encoding_DefaultBinary Object. /// public const uint UpdateStructureDataDetails_Encoding_DefaultBinary = 11300; /// /// The identifier for the UpdateEventDetails_Encoding_DefaultBinary Object. /// public const uint UpdateEventDetails_Encoding_DefaultBinary = 685; /// /// The identifier for the DeleteRawModifiedDetails_Encoding_DefaultBinary Object. /// public const uint DeleteRawModifiedDetails_Encoding_DefaultBinary = 688; /// /// The identifier for the DeleteAtTimeDetails_Encoding_DefaultBinary Object. /// public const uint DeleteAtTimeDetails_Encoding_DefaultBinary = 691; /// /// The identifier for the DeleteEventDetails_Encoding_DefaultBinary Object. /// public const uint DeleteEventDetails_Encoding_DefaultBinary = 694; /// /// The identifier for the HistoryUpdateResult_Encoding_DefaultBinary Object. /// public const uint HistoryUpdateResult_Encoding_DefaultBinary = 697; /// /// The identifier for the HistoryUpdateEventResult_Encoding_DefaultBinary Object. /// public const uint HistoryUpdateEventResult_Encoding_DefaultBinary = 931; /// /// The identifier for the HistoryUpdateRequest_Encoding_DefaultBinary Object. /// public const uint HistoryUpdateRequest_Encoding_DefaultBinary = 700; /// /// The identifier for the HistoryUpdateResponse_Encoding_DefaultBinary Object. /// public const uint HistoryUpdateResponse_Encoding_DefaultBinary = 703; /// /// The identifier for the CallMethodRequest_Encoding_DefaultBinary Object. /// public const uint CallMethodRequest_Encoding_DefaultBinary = 706; /// /// The identifier for the CallMethodResult_Encoding_DefaultBinary Object. /// public const uint CallMethodResult_Encoding_DefaultBinary = 709; /// /// The identifier for the CallRequest_Encoding_DefaultBinary Object. /// public const uint CallRequest_Encoding_DefaultBinary = 712; /// /// The identifier for the CallResponse_Encoding_DefaultBinary Object. /// public const uint CallResponse_Encoding_DefaultBinary = 715; /// /// The identifier for the MonitoringFilter_Encoding_DefaultBinary Object. /// public const uint MonitoringFilter_Encoding_DefaultBinary = 721; /// /// The identifier for the DataChangeFilter_Encoding_DefaultBinary Object. /// public const uint DataChangeFilter_Encoding_DefaultBinary = 724; /// /// The identifier for the EventFilter_Encoding_DefaultBinary Object. /// public const uint EventFilter_Encoding_DefaultBinary = 727; /// /// The identifier for the AggregateConfiguration_Encoding_DefaultBinary Object. /// public const uint AggregateConfiguration_Encoding_DefaultBinary = 950; /// /// The identifier for the AggregateFilter_Encoding_DefaultBinary Object. /// public const uint AggregateFilter_Encoding_DefaultBinary = 730; /// /// The identifier for the MonitoringFilterResult_Encoding_DefaultBinary Object. /// public const uint MonitoringFilterResult_Encoding_DefaultBinary = 733; /// /// The identifier for the EventFilterResult_Encoding_DefaultBinary Object. /// public const uint EventFilterResult_Encoding_DefaultBinary = 736; /// /// The identifier for the AggregateFilterResult_Encoding_DefaultBinary Object. /// public const uint AggregateFilterResult_Encoding_DefaultBinary = 739; /// /// The identifier for the MonitoringParameters_Encoding_DefaultBinary Object. /// public const uint MonitoringParameters_Encoding_DefaultBinary = 742; /// /// The identifier for the MonitoredItemCreateRequest_Encoding_DefaultBinary Object. /// public const uint MonitoredItemCreateRequest_Encoding_DefaultBinary = 745; /// /// The identifier for the MonitoredItemCreateResult_Encoding_DefaultBinary Object. /// public const uint MonitoredItemCreateResult_Encoding_DefaultBinary = 748; /// /// The identifier for the CreateMonitoredItemsRequest_Encoding_DefaultBinary Object. /// public const uint CreateMonitoredItemsRequest_Encoding_DefaultBinary = 751; /// /// The identifier for the CreateMonitoredItemsResponse_Encoding_DefaultBinary Object. /// public const uint CreateMonitoredItemsResponse_Encoding_DefaultBinary = 754; /// /// The identifier for the MonitoredItemModifyRequest_Encoding_DefaultBinary Object. /// public const uint MonitoredItemModifyRequest_Encoding_DefaultBinary = 757; /// /// The identifier for the MonitoredItemModifyResult_Encoding_DefaultBinary Object. /// public const uint MonitoredItemModifyResult_Encoding_DefaultBinary = 760; /// /// The identifier for the ModifyMonitoredItemsRequest_Encoding_DefaultBinary Object. /// public const uint ModifyMonitoredItemsRequest_Encoding_DefaultBinary = 763; /// /// The identifier for the ModifyMonitoredItemsResponse_Encoding_DefaultBinary Object. /// public const uint ModifyMonitoredItemsResponse_Encoding_DefaultBinary = 766; /// /// The identifier for the SetMonitoringModeRequest_Encoding_DefaultBinary Object. /// public const uint SetMonitoringModeRequest_Encoding_DefaultBinary = 769; /// /// The identifier for the SetMonitoringModeResponse_Encoding_DefaultBinary Object. /// public const uint SetMonitoringModeResponse_Encoding_DefaultBinary = 772; /// /// The identifier for the SetTriggeringRequest_Encoding_DefaultBinary Object. /// public const uint SetTriggeringRequest_Encoding_DefaultBinary = 775; /// /// The identifier for the SetTriggeringResponse_Encoding_DefaultBinary Object. /// public const uint SetTriggeringResponse_Encoding_DefaultBinary = 778; /// /// The identifier for the DeleteMonitoredItemsRequest_Encoding_DefaultBinary Object. /// public const uint DeleteMonitoredItemsRequest_Encoding_DefaultBinary = 781; /// /// The identifier for the DeleteMonitoredItemsResponse_Encoding_DefaultBinary Object. /// public const uint DeleteMonitoredItemsResponse_Encoding_DefaultBinary = 784; /// /// The identifier for the CreateSubscriptionRequest_Encoding_DefaultBinary Object. /// public const uint CreateSubscriptionRequest_Encoding_DefaultBinary = 787; /// /// The identifier for the CreateSubscriptionResponse_Encoding_DefaultBinary Object. /// public const uint CreateSubscriptionResponse_Encoding_DefaultBinary = 790; /// /// The identifier for the ModifySubscriptionRequest_Encoding_DefaultBinary Object. /// public const uint ModifySubscriptionRequest_Encoding_DefaultBinary = 793; /// /// The identifier for the ModifySubscriptionResponse_Encoding_DefaultBinary Object. /// public const uint ModifySubscriptionResponse_Encoding_DefaultBinary = 796; /// /// The identifier for the SetPublishingModeRequest_Encoding_DefaultBinary Object. /// public const uint SetPublishingModeRequest_Encoding_DefaultBinary = 799; /// /// The identifier for the SetPublishingModeResponse_Encoding_DefaultBinary Object. /// public const uint SetPublishingModeResponse_Encoding_DefaultBinary = 802; /// /// The identifier for the NotificationMessage_Encoding_DefaultBinary Object. /// public const uint NotificationMessage_Encoding_DefaultBinary = 805; /// /// The identifier for the NotificationData_Encoding_DefaultBinary Object. /// public const uint NotificationData_Encoding_DefaultBinary = 947; /// /// The identifier for the DataChangeNotification_Encoding_DefaultBinary Object. /// public const uint DataChangeNotification_Encoding_DefaultBinary = 811; /// /// The identifier for the MonitoredItemNotification_Encoding_DefaultBinary Object. /// public const uint MonitoredItemNotification_Encoding_DefaultBinary = 808; /// /// The identifier for the EventNotificationList_Encoding_DefaultBinary Object. /// public const uint EventNotificationList_Encoding_DefaultBinary = 916; /// /// The identifier for the EventFieldList_Encoding_DefaultBinary Object. /// public const uint EventFieldList_Encoding_DefaultBinary = 919; /// /// The identifier for the HistoryEventFieldList_Encoding_DefaultBinary Object. /// public const uint HistoryEventFieldList_Encoding_DefaultBinary = 922; /// /// The identifier for the StatusChangeNotification_Encoding_DefaultBinary Object. /// public const uint StatusChangeNotification_Encoding_DefaultBinary = 820; /// /// The identifier for the SubscriptionAcknowledgement_Encoding_DefaultBinary Object. /// public const uint SubscriptionAcknowledgement_Encoding_DefaultBinary = 823; /// /// The identifier for the PublishRequest_Encoding_DefaultBinary Object. /// public const uint PublishRequest_Encoding_DefaultBinary = 826; /// /// The identifier for the PublishResponse_Encoding_DefaultBinary Object. /// public const uint PublishResponse_Encoding_DefaultBinary = 829; /// /// The identifier for the RepublishRequest_Encoding_DefaultBinary Object. /// public const uint RepublishRequest_Encoding_DefaultBinary = 832; /// /// The identifier for the RepublishResponse_Encoding_DefaultBinary Object. /// public const uint RepublishResponse_Encoding_DefaultBinary = 835; /// /// The identifier for the TransferResult_Encoding_DefaultBinary Object. /// public const uint TransferResult_Encoding_DefaultBinary = 838; /// /// The identifier for the TransferSubscriptionsRequest_Encoding_DefaultBinary Object. /// public const uint TransferSubscriptionsRequest_Encoding_DefaultBinary = 841; /// /// The identifier for the TransferSubscriptionsResponse_Encoding_DefaultBinary Object. /// public const uint TransferSubscriptionsResponse_Encoding_DefaultBinary = 844; /// /// The identifier for the DeleteSubscriptionsRequest_Encoding_DefaultBinary Object. /// public const uint DeleteSubscriptionsRequest_Encoding_DefaultBinary = 847; /// /// The identifier for the DeleteSubscriptionsResponse_Encoding_DefaultBinary Object. /// public const uint DeleteSubscriptionsResponse_Encoding_DefaultBinary = 850; /// /// The identifier for the ScalarTestType_Encoding_DefaultBinary Object. /// public const uint ScalarTestType_Encoding_DefaultBinary = 401; /// /// The identifier for the ArrayTestType_Encoding_DefaultBinary Object. /// public const uint ArrayTestType_Encoding_DefaultBinary = 404; /// /// The identifier for the CompositeTestType_Encoding_DefaultBinary Object. /// public const uint CompositeTestType_Encoding_DefaultBinary = 407; /// /// The identifier for the TestStackRequest_Encoding_DefaultBinary Object. /// public const uint TestStackRequest_Encoding_DefaultBinary = 410; /// /// The identifier for the TestStackResponse_Encoding_DefaultBinary Object. /// public const uint TestStackResponse_Encoding_DefaultBinary = 413; /// /// The identifier for the TestStackExRequest_Encoding_DefaultBinary Object. /// public const uint TestStackExRequest_Encoding_DefaultBinary = 416; /// /// The identifier for the TestStackExResponse_Encoding_DefaultBinary Object. /// public const uint TestStackExResponse_Encoding_DefaultBinary = 419; /// /// The identifier for the BuildInfo_Encoding_DefaultBinary Object. /// public const uint BuildInfo_Encoding_DefaultBinary = 340; /// /// The identifier for the RedundantServerDataType_Encoding_DefaultBinary Object. /// public const uint RedundantServerDataType_Encoding_DefaultBinary = 855; /// /// The identifier for the EndpointUrlListDataType_Encoding_DefaultBinary Object. /// public const uint EndpointUrlListDataType_Encoding_DefaultBinary = 11957; /// /// The identifier for the NetworkGroupDataType_Encoding_DefaultBinary Object. /// public const uint NetworkGroupDataType_Encoding_DefaultBinary = 11958; /// /// The identifier for the SamplingIntervalDiagnosticsDataType_Encoding_DefaultBinary Object. /// public const uint SamplingIntervalDiagnosticsDataType_Encoding_DefaultBinary = 858; /// /// The identifier for the ServerDiagnosticsSummaryDataType_Encoding_DefaultBinary Object. /// public const uint ServerDiagnosticsSummaryDataType_Encoding_DefaultBinary = 861; /// /// The identifier for the ServerStatusDataType_Encoding_DefaultBinary Object. /// public const uint ServerStatusDataType_Encoding_DefaultBinary = 864; /// /// The identifier for the SessionDiagnosticsDataType_Encoding_DefaultBinary Object. /// public const uint SessionDiagnosticsDataType_Encoding_DefaultBinary = 867; /// /// The identifier for the SessionSecurityDiagnosticsDataType_Encoding_DefaultBinary Object. /// public const uint SessionSecurityDiagnosticsDataType_Encoding_DefaultBinary = 870; /// /// The identifier for the ServiceCounterDataType_Encoding_DefaultBinary Object. /// public const uint ServiceCounterDataType_Encoding_DefaultBinary = 873; /// /// The identifier for the StatusResult_Encoding_DefaultBinary Object. /// public const uint StatusResult_Encoding_DefaultBinary = 301; /// /// The identifier for the SubscriptionDiagnosticsDataType_Encoding_DefaultBinary Object. /// public const uint SubscriptionDiagnosticsDataType_Encoding_DefaultBinary = 876; /// /// The identifier for the ModelChangeStructureDataType_Encoding_DefaultBinary Object. /// public const uint ModelChangeStructureDataType_Encoding_DefaultBinary = 879; /// /// The identifier for the SemanticChangeStructureDataType_Encoding_DefaultBinary Object. /// public const uint SemanticChangeStructureDataType_Encoding_DefaultBinary = 899; /// /// The identifier for the Range_Encoding_DefaultBinary Object. /// public const uint Range_Encoding_DefaultBinary = 886; /// /// The identifier for the EUInformation_Encoding_DefaultBinary Object. /// public const uint EUInformation_Encoding_DefaultBinary = 889; /// /// The identifier for the ComplexNumberType_Encoding_DefaultBinary Object. /// public const uint ComplexNumberType_Encoding_DefaultBinary = 12181; /// /// The identifier for the DoubleComplexNumberType_Encoding_DefaultBinary Object. /// public const uint DoubleComplexNumberType_Encoding_DefaultBinary = 12182; /// /// The identifier for the AxisInformation_Encoding_DefaultBinary Object. /// public const uint AxisInformation_Encoding_DefaultBinary = 12089; /// /// The identifier for the XVType_Encoding_DefaultBinary Object. /// public const uint XVType_Encoding_DefaultBinary = 12090; /// /// The identifier for the ProgramDiagnosticDataType_Encoding_DefaultBinary Object. /// public const uint ProgramDiagnosticDataType_Encoding_DefaultBinary = 896; /// /// The identifier for the Annotation_Encoding_DefaultBinary Object. /// public const uint Annotation_Encoding_DefaultBinary = 893; } #endregion #region ObjectType Identifiers /// /// A class that declares constants for all ObjectTypes in the Model Design. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class ObjectTypes { /// /// The identifier for the BaseObjectType ObjectType. /// public const uint BaseObjectType = 58; /// /// The identifier for the FolderType ObjectType. /// public const uint FolderType = 61; /// /// The identifier for the DataTypeSystemType ObjectType. /// public const uint DataTypeSystemType = 75; /// /// The identifier for the DataTypeEncodingType ObjectType. /// public const uint DataTypeEncodingType = 76; /// /// The identifier for the ModellingRuleType ObjectType. /// public const uint ModellingRuleType = 77; /// /// The identifier for the ServerType ObjectType. /// public const uint ServerType = 2004; /// /// The identifier for the ServerCapabilitiesType ObjectType. /// public const uint ServerCapabilitiesType = 2013; /// /// The identifier for the ServerDiagnosticsType ObjectType. /// public const uint ServerDiagnosticsType = 2020; /// /// The identifier for the SessionsDiagnosticsSummaryType ObjectType. /// public const uint SessionsDiagnosticsSummaryType = 2026; /// /// The identifier for the SessionDiagnosticsObjectType ObjectType. /// public const uint SessionDiagnosticsObjectType = 2029; /// /// The identifier for the VendorServerInfoType ObjectType. /// public const uint VendorServerInfoType = 2033; /// /// The identifier for the ServerRedundancyType ObjectType. /// public const uint ServerRedundancyType = 2034; /// /// The identifier for the TransparentRedundancyType ObjectType. /// public const uint TransparentRedundancyType = 2036; /// /// The identifier for the NonTransparentRedundancyType ObjectType. /// public const uint NonTransparentRedundancyType = 2039; /// /// The identifier for the NonTransparentNetworkRedundancyType ObjectType. /// public const uint NonTransparentNetworkRedundancyType = 11945; /// /// The identifier for the OperationLimitsType ObjectType. /// public const uint OperationLimitsType = 11564; /// /// The identifier for the FileType ObjectType. /// public const uint FileType = 11575; /// /// The identifier for the AddressSpaceFileType ObjectType. /// public const uint AddressSpaceFileType = 11595; /// /// The identifier for the NamespaceMetadataType ObjectType. /// public const uint NamespaceMetadataType = 11616; /// /// The identifier for the NamespacesType ObjectType. /// public const uint NamespacesType = 11645; /// /// The identifier for the BaseEventType ObjectType. /// public const uint BaseEventType = 2041; /// /// The identifier for the AuditEventType ObjectType. /// public const uint AuditEventType = 2052; /// /// The identifier for the AuditSecurityEventType ObjectType. /// public const uint AuditSecurityEventType = 2058; /// /// The identifier for the AuditChannelEventType ObjectType. /// public const uint AuditChannelEventType = 2059; /// /// The identifier for the AuditOpenSecureChannelEventType ObjectType. /// public const uint AuditOpenSecureChannelEventType = 2060; /// /// The identifier for the AuditSessionEventType ObjectType. /// public const uint AuditSessionEventType = 2069; /// /// The identifier for the AuditCreateSessionEventType ObjectType. /// public const uint AuditCreateSessionEventType = 2071; /// /// The identifier for the AuditUrlMismatchEventType ObjectType. /// public const uint AuditUrlMismatchEventType = 2748; /// /// The identifier for the AuditActivateSessionEventType ObjectType. /// public const uint AuditActivateSessionEventType = 2075; /// /// The identifier for the AuditCancelEventType ObjectType. /// public const uint AuditCancelEventType = 2078; /// /// The identifier for the AuditCertificateEventType ObjectType. /// public const uint AuditCertificateEventType = 2080; /// /// The identifier for the AuditCertificateDataMismatchEventType ObjectType. /// public const uint AuditCertificateDataMismatchEventType = 2082; /// /// The identifier for the AuditCertificateExpiredEventType ObjectType. /// public const uint AuditCertificateExpiredEventType = 2085; /// /// The identifier for the AuditCertificateInvalidEventType ObjectType. /// public const uint AuditCertificateInvalidEventType = 2086; /// /// The identifier for the AuditCertificateUntrustedEventType ObjectType. /// public const uint AuditCertificateUntrustedEventType = 2087; /// /// The identifier for the AuditCertificateRevokedEventType ObjectType. /// public const uint AuditCertificateRevokedEventType = 2088; /// /// The identifier for the AuditCertificateMismatchEventType ObjectType. /// public const uint AuditCertificateMismatchEventType = 2089; /// /// The identifier for the AuditNodeManagementEventType ObjectType. /// public const uint AuditNodeManagementEventType = 2090; /// /// The identifier for the AuditAddNodesEventType ObjectType. /// public const uint AuditAddNodesEventType = 2091; /// /// The identifier for the AuditDeleteNodesEventType ObjectType. /// public const uint AuditDeleteNodesEventType = 2093; /// /// The identifier for the AuditAddReferencesEventType ObjectType. /// public const uint AuditAddReferencesEventType = 2095; /// /// The identifier for the AuditDeleteReferencesEventType ObjectType. /// public const uint AuditDeleteReferencesEventType = 2097; /// /// The identifier for the AuditUpdateEventType ObjectType. /// public const uint AuditUpdateEventType = 2099; /// /// The identifier for the AuditWriteUpdateEventType ObjectType. /// public const uint AuditWriteUpdateEventType = 2100; /// /// The identifier for the AuditHistoryUpdateEventType ObjectType. /// public const uint AuditHistoryUpdateEventType = 2104; /// /// The identifier for the AuditUpdateMethodEventType ObjectType. /// public const uint AuditUpdateMethodEventType = 2127; /// /// The identifier for the SystemEventType ObjectType. /// public const uint SystemEventType = 2130; /// /// The identifier for the DeviceFailureEventType ObjectType. /// public const uint DeviceFailureEventType = 2131; /// /// The identifier for the SystemStatusChangeEventType ObjectType. /// public const uint SystemStatusChangeEventType = 11446; /// /// The identifier for the BaseModelChangeEventType ObjectType. /// public const uint BaseModelChangeEventType = 2132; /// /// The identifier for the GeneralModelChangeEventType ObjectType. /// public const uint GeneralModelChangeEventType = 2133; /// /// The identifier for the SemanticChangeEventType ObjectType. /// public const uint SemanticChangeEventType = 2738; /// /// The identifier for the EventQueueOverflowEventType ObjectType. /// public const uint EventQueueOverflowEventType = 3035; /// /// The identifier for the ProgressEventType ObjectType. /// public const uint ProgressEventType = 11436; /// /// The identifier for the AggregateFunctionType ObjectType. /// public const uint AggregateFunctionType = 2340; /// /// The identifier for the StateMachineType ObjectType. /// public const uint StateMachineType = 2299; /// /// The identifier for the FiniteStateMachineType ObjectType. /// public const uint FiniteStateMachineType = 2771; /// /// The identifier for the StateType ObjectType. /// public const uint StateType = 2307; /// /// The identifier for the InitialStateType ObjectType. /// public const uint InitialStateType = 2309; /// /// The identifier for the TransitionType ObjectType. /// public const uint TransitionType = 2310; /// /// The identifier for the TransitionEventType ObjectType. /// public const uint TransitionEventType = 2311; /// /// The identifier for the AuditUpdateStateEventType ObjectType. /// public const uint AuditUpdateStateEventType = 2315; /// /// The identifier for the ConditionType ObjectType. /// public const uint ConditionType = 2782; /// /// The identifier for the DialogConditionType ObjectType. /// public const uint DialogConditionType = 2830; /// /// The identifier for the AcknowledgeableConditionType ObjectType. /// public const uint AcknowledgeableConditionType = 2881; /// /// The identifier for the AlarmConditionType ObjectType. /// public const uint AlarmConditionType = 2915; /// /// The identifier for the ShelvedStateMachineType ObjectType. /// public const uint ShelvedStateMachineType = 2929; /// /// The identifier for the LimitAlarmType ObjectType. /// public const uint LimitAlarmType = 2955; /// /// The identifier for the ExclusiveLimitStateMachineType ObjectType. /// public const uint ExclusiveLimitStateMachineType = 9318; /// /// The identifier for the ExclusiveLimitAlarmType ObjectType. /// public const uint ExclusiveLimitAlarmType = 9341; /// /// The identifier for the NonExclusiveLimitAlarmType ObjectType. /// public const uint NonExclusiveLimitAlarmType = 9906; /// /// The identifier for the NonExclusiveLevelAlarmType ObjectType. /// public const uint NonExclusiveLevelAlarmType = 10060; /// /// The identifier for the ExclusiveLevelAlarmType ObjectType. /// public const uint ExclusiveLevelAlarmType = 9482; /// /// The identifier for the NonExclusiveDeviationAlarmType ObjectType. /// public const uint NonExclusiveDeviationAlarmType = 10368; /// /// The identifier for the ExclusiveDeviationAlarmType ObjectType. /// public const uint ExclusiveDeviationAlarmType = 9764; /// /// The identifier for the NonExclusiveRateOfChangeAlarmType ObjectType. /// public const uint NonExclusiveRateOfChangeAlarmType = 10214; /// /// The identifier for the ExclusiveRateOfChangeAlarmType ObjectType. /// public const uint ExclusiveRateOfChangeAlarmType = 9623; /// /// The identifier for the DiscreteAlarmType ObjectType. /// public const uint DiscreteAlarmType = 10523; /// /// The identifier for the OffNormalAlarmType ObjectType. /// public const uint OffNormalAlarmType = 10637; /// /// The identifier for the SystemOffNormalAlarmType ObjectType. /// public const uint SystemOffNormalAlarmType = 11753; /// /// The identifier for the TripAlarmType ObjectType. /// public const uint TripAlarmType = 10751; /// /// The identifier for the BaseConditionClassType ObjectType. /// public const uint BaseConditionClassType = 11163; /// /// The identifier for the ProcessConditionClassType ObjectType. /// public const uint ProcessConditionClassType = 11164; /// /// The identifier for the MaintenanceConditionClassType ObjectType. /// public const uint MaintenanceConditionClassType = 11165; /// /// The identifier for the SystemConditionClassType ObjectType. /// public const uint SystemConditionClassType = 11166; /// /// The identifier for the AuditConditionEventType ObjectType. /// public const uint AuditConditionEventType = 2790; /// /// The identifier for the AuditConditionEnableEventType ObjectType. /// public const uint AuditConditionEnableEventType = 2803; /// /// The identifier for the AuditConditionCommentEventType ObjectType. /// public const uint AuditConditionCommentEventType = 2829; /// /// The identifier for the AuditConditionRespondEventType ObjectType. /// public const uint AuditConditionRespondEventType = 8927; /// /// The identifier for the AuditConditionAcknowledgeEventType ObjectType. /// public const uint AuditConditionAcknowledgeEventType = 8944; /// /// The identifier for the AuditConditionConfirmEventType ObjectType. /// public const uint AuditConditionConfirmEventType = 8961; /// /// The identifier for the AuditConditionShelvingEventType ObjectType. /// public const uint AuditConditionShelvingEventType = 11093; /// /// The identifier for the RefreshStartEventType ObjectType. /// public const uint RefreshStartEventType = 2787; /// /// The identifier for the RefreshEndEventType ObjectType. /// public const uint RefreshEndEventType = 2788; /// /// The identifier for the RefreshRequiredEventType ObjectType. /// public const uint RefreshRequiredEventType = 2789; /// /// The identifier for the ProgramStateMachineType ObjectType. /// public const uint ProgramStateMachineType = 2391; /// /// The identifier for the ProgramTransitionEventType ObjectType. /// public const uint ProgramTransitionEventType = 2378; /// /// The identifier for the AuditProgramTransitionEventType ObjectType. /// public const uint AuditProgramTransitionEventType = 11856; /// /// The identifier for the ProgramTransitionAuditEventType ObjectType. /// public const uint ProgramTransitionAuditEventType = 3806; /// /// The identifier for the HistoricalDataConfigurationType ObjectType. /// public const uint HistoricalDataConfigurationType = 2318; /// /// The identifier for the HistoryServerCapabilitiesType ObjectType. /// public const uint HistoryServerCapabilitiesType = 2330; /// /// The identifier for the AuditHistoryEventUpdateEventType ObjectType. /// public const uint AuditHistoryEventUpdateEventType = 2999; /// /// The identifier for the AuditHistoryValueUpdateEventType ObjectType. /// public const uint AuditHistoryValueUpdateEventType = 3006; /// /// The identifier for the AuditHistoryDeleteEventType ObjectType. /// public const uint AuditHistoryDeleteEventType = 3012; /// /// The identifier for the AuditHistoryRawModifyDeleteEventType ObjectType. /// public const uint AuditHistoryRawModifyDeleteEventType = 3014; /// /// The identifier for the AuditHistoryAtTimeDeleteEventType ObjectType. /// public const uint AuditHistoryAtTimeDeleteEventType = 3019; /// /// The identifier for the AuditHistoryEventDeleteEventType ObjectType. /// public const uint AuditHistoryEventDeleteEventType = 3022; /// /// The identifier for the AggregateConfigurationType ObjectType. /// public const uint AggregateConfigurationType = 11187; /// /// The identifier for the LockType ObjectType. /// public const uint LockType = 8921; } #endregion #region ReferenceType Identifiers /// /// A class that declares constants for all ReferenceTypes in the Model Design. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class ReferenceTypes { /// /// The identifier for the References ReferenceType. /// public const uint References = 31; /// /// The identifier for the NonHierarchicalReferences ReferenceType. /// public const uint NonHierarchicalReferences = 32; /// /// The identifier for the HierarchicalReferences ReferenceType. /// public const uint HierarchicalReferences = 33; /// /// The identifier for the HasChild ReferenceType. /// public const uint HasChild = 34; /// /// The identifier for the Organizes ReferenceType. /// public const uint Organizes = 35; /// /// The identifier for the HasEventSource ReferenceType. /// public const uint HasEventSource = 36; /// /// The identifier for the HasModellingRule ReferenceType. /// public const uint HasModellingRule = 37; /// /// The identifier for the HasEncoding ReferenceType. /// public const uint HasEncoding = 38; /// /// The identifier for the HasDescription ReferenceType. /// public const uint HasDescription = 39; /// /// The identifier for the HasTypeDefinition ReferenceType. /// public const uint HasTypeDefinition = 40; /// /// The identifier for the GeneratesEvent ReferenceType. /// public const uint GeneratesEvent = 41; /// /// The identifier for the AlwaysGeneratesEvent ReferenceType. /// public const uint AlwaysGeneratesEvent = 3065; /// /// The identifier for the Aggregates ReferenceType. /// public const uint Aggregates = 44; /// /// The identifier for the HasSubtype ReferenceType. /// public const uint HasSubtype = 45; /// /// The identifier for the HasProperty ReferenceType. /// public const uint HasProperty = 46; /// /// The identifier for the HasComponent ReferenceType. /// public const uint HasComponent = 47; /// /// The identifier for the HasNotifier ReferenceType. /// public const uint HasNotifier = 48; /// /// The identifier for the HasOrderedComponent ReferenceType. /// public const uint HasOrderedComponent = 49; /// /// The identifier for the FromState ReferenceType. /// public const uint FromState = 51; /// /// The identifier for the ToState ReferenceType. /// public const uint ToState = 52; /// /// The identifier for the HasCause ReferenceType. /// public const uint HasCause = 53; /// /// The identifier for the HasEffect ReferenceType. /// public const uint HasEffect = 54; /// /// The identifier for the HasSubStateMachine ReferenceType. /// public const uint HasSubStateMachine = 117; /// /// The identifier for the HasHistoricalConfiguration ReferenceType. /// public const uint HasHistoricalConfiguration = 56; /// /// The identifier for the HasTrueSubState ReferenceType. /// public const uint HasTrueSubState = 9004; /// /// The identifier for the HasFalseSubState ReferenceType. /// public const uint HasFalseSubState = 9005; /// /// The identifier for the HasCondition ReferenceType. /// public const uint HasCondition = 9006; } #endregion #region Variable Identifiers /// /// A class that declares constants for all Variables in the Model Design. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class Variables { /// /// The identifier for the DataTypeDescriptionType_DataTypeVersion Variable. /// public const uint DataTypeDescriptionType_DataTypeVersion = 104; /// /// The identifier for the DataTypeDescriptionType_DictionaryFragment Variable. /// public const uint DataTypeDescriptionType_DictionaryFragment = 105; /// /// The identifier for the DataTypeDictionaryType_DataTypeVersion Variable. /// public const uint DataTypeDictionaryType_DataTypeVersion = 106; /// /// The identifier for the DataTypeDictionaryType_NamespaceUri Variable. /// public const uint DataTypeDictionaryType_NamespaceUri = 107; /// /// The identifier for the NamingRuleType_EnumValues Variable. /// public const uint NamingRuleType_EnumValues = 12169; /// /// The identifier for the ModellingRuleType_NamingRule Variable. /// public const uint ModellingRuleType_NamingRule = 111; /// /// The identifier for the ModellingRule_Mandatory_NamingRule Variable. /// public const uint ModellingRule_Mandatory_NamingRule = 112; /// /// The identifier for the ModellingRule_Optional_NamingRule Variable. /// public const uint ModellingRule_Optional_NamingRule = 113; /// /// The identifier for the ModellingRule_ExposesItsArray_NamingRule Variable. /// public const uint ModellingRule_ExposesItsArray_NamingRule = 114; /// /// The identifier for the ModellingRule_MandatoryShared_NamingRule Variable. /// public const uint ModellingRule_MandatoryShared_NamingRule = 116; /// /// The identifier for the ModellingRule_OptionalPlaceholder_NamingRule Variable. /// public const uint ModellingRule_OptionalPlaceholder_NamingRule = 11509; /// /// The identifier for the ModellingRule_MandatoryPlaceholder_NamingRule Variable. /// public const uint ModellingRule_MandatoryPlaceholder_NamingRule = 11511; /// /// The identifier for the NodeVersion Variable. /// public const uint NodeVersion = 3068; /// /// The identifier for the ViewVersion Variable. /// public const uint ViewVersion = 12170; /// /// The identifier for the Icon Variable. /// public const uint Icon = 3067; /// /// The identifier for the LocalTime Variable. /// public const uint LocalTime = 3069; /// /// The identifier for the AllowNulls Variable. /// public const uint AllowNulls = 3070; /// /// The identifier for the ValueAsText Variable. /// public const uint ValueAsText = 11433; /// /// The identifier for the MaxStringLength Variable. /// public const uint MaxStringLength = 11498; /// /// The identifier for the MaxArrayLength Variable. /// public const uint MaxArrayLength = 11512; /// /// The identifier for the EngineeringUnits Variable. /// public const uint EngineeringUnits = 11513; /// /// The identifier for the EnumStrings Variable. /// public const uint EnumStrings = 11432; /// /// The identifier for the EnumValues Variable. /// public const uint EnumValues = 3071; /// /// The identifier for the InputArguments Variable. /// public const uint InputArguments = 3072; /// /// The identifier for the OutputArguments Variable. /// public const uint OutputArguments = 3073; /// /// The identifier for the ServerType_ServerArray Variable. /// public const uint ServerType_ServerArray = 2005; /// /// The identifier for the ServerType_NamespaceArray Variable. /// public const uint ServerType_NamespaceArray = 2006; /// /// The identifier for the ServerType_ServerStatus Variable. /// public const uint ServerType_ServerStatus = 2007; /// /// The identifier for the ServerType_ServerStatus_StartTime Variable. /// public const uint ServerType_ServerStatus_StartTime = 3074; /// /// The identifier for the ServerType_ServerStatus_CurrentTime Variable. /// public const uint ServerType_ServerStatus_CurrentTime = 3075; /// /// The identifier for the ServerType_ServerStatus_State Variable. /// public const uint ServerType_ServerStatus_State = 3076; /// /// The identifier for the ServerType_ServerStatus_BuildInfo Variable. /// public const uint ServerType_ServerStatus_BuildInfo = 3077; /// /// The identifier for the ServerType_ServerStatus_BuildInfo_ProductUri Variable. /// public const uint ServerType_ServerStatus_BuildInfo_ProductUri = 3078; /// /// The identifier for the ServerType_ServerStatus_BuildInfo_ManufacturerName Variable. /// public const uint ServerType_ServerStatus_BuildInfo_ManufacturerName = 3079; /// /// The identifier for the ServerType_ServerStatus_BuildInfo_ProductName Variable. /// public const uint ServerType_ServerStatus_BuildInfo_ProductName = 3080; /// /// The identifier for the ServerType_ServerStatus_BuildInfo_SoftwareVersion Variable. /// public const uint ServerType_ServerStatus_BuildInfo_SoftwareVersion = 3081; /// /// The identifier for the ServerType_ServerStatus_BuildInfo_BuildNumber Variable. /// public const uint ServerType_ServerStatus_BuildInfo_BuildNumber = 3082; /// /// The identifier for the ServerType_ServerStatus_BuildInfo_BuildDate Variable. /// public const uint ServerType_ServerStatus_BuildInfo_BuildDate = 3083; /// /// The identifier for the ServerType_ServerStatus_SecondsTillShutdown Variable. /// public const uint ServerType_ServerStatus_SecondsTillShutdown = 3084; /// /// The identifier for the ServerType_ServerStatus_ShutdownReason Variable. /// public const uint ServerType_ServerStatus_ShutdownReason = 3085; /// /// The identifier for the ServerType_ServiceLevel Variable. /// public const uint ServerType_ServiceLevel = 2008; /// /// The identifier for the ServerType_Auditing Variable. /// public const uint ServerType_Auditing = 2742; /// /// The identifier for the ServerType_ServerCapabilities_ServerProfileArray Variable. /// public const uint ServerType_ServerCapabilities_ServerProfileArray = 3086; /// /// The identifier for the ServerType_ServerCapabilities_LocaleIdArray Variable. /// public const uint ServerType_ServerCapabilities_LocaleIdArray = 3087; /// /// The identifier for the ServerType_ServerCapabilities_MinSupportedSampleRate Variable. /// public const uint ServerType_ServerCapabilities_MinSupportedSampleRate = 3088; /// /// The identifier for the ServerType_ServerCapabilities_MaxBrowseContinuationPoints Variable. /// public const uint ServerType_ServerCapabilities_MaxBrowseContinuationPoints = 3089; /// /// The identifier for the ServerType_ServerCapabilities_MaxQueryContinuationPoints Variable. /// public const uint ServerType_ServerCapabilities_MaxQueryContinuationPoints = 3090; /// /// The identifier for the ServerType_ServerCapabilities_MaxHistoryContinuationPoints Variable. /// public const uint ServerType_ServerCapabilities_MaxHistoryContinuationPoints = 3091; /// /// The identifier for the ServerType_ServerCapabilities_SoftwareCertificates Variable. /// public const uint ServerType_ServerCapabilities_SoftwareCertificates = 3092; /// /// The identifier for the ServerType_ServerDiagnostics_ServerDiagnosticsSummary Variable. /// public const uint ServerType_ServerDiagnostics_ServerDiagnosticsSummary = 3095; /// /// The identifier for the ServerType_ServerDiagnostics_ServerDiagnosticsSummary_ServerViewCount Variable. /// public const uint ServerType_ServerDiagnostics_ServerDiagnosticsSummary_ServerViewCount = 3096; /// /// The identifier for the ServerType_ServerDiagnostics_ServerDiagnosticsSummary_CurrentSessionCount Variable. /// public const uint ServerType_ServerDiagnostics_ServerDiagnosticsSummary_CurrentSessionCount = 3097; /// /// The identifier for the ServerType_ServerDiagnostics_ServerDiagnosticsSummary_CumulatedSessionCount Variable. /// public const uint ServerType_ServerDiagnostics_ServerDiagnosticsSummary_CumulatedSessionCount = 3098; /// /// The identifier for the ServerType_ServerDiagnostics_ServerDiagnosticsSummary_SecurityRejectedSessionCount Variable. /// public const uint ServerType_ServerDiagnostics_ServerDiagnosticsSummary_SecurityRejectedSessionCount = 3099; /// /// The identifier for the ServerType_ServerDiagnostics_ServerDiagnosticsSummary_RejectedSessionCount Variable. /// public const uint ServerType_ServerDiagnostics_ServerDiagnosticsSummary_RejectedSessionCount = 3100; /// /// The identifier for the ServerType_ServerDiagnostics_ServerDiagnosticsSummary_SessionTimeoutCount Variable. /// public const uint ServerType_ServerDiagnostics_ServerDiagnosticsSummary_SessionTimeoutCount = 3101; /// /// The identifier for the ServerType_ServerDiagnostics_ServerDiagnosticsSummary_SessionAbortCount Variable. /// public const uint ServerType_ServerDiagnostics_ServerDiagnosticsSummary_SessionAbortCount = 3102; /// /// The identifier for the ServerType_ServerDiagnostics_ServerDiagnosticsSummary_PublishingIntervalCount Variable. /// public const uint ServerType_ServerDiagnostics_ServerDiagnosticsSummary_PublishingIntervalCount = 3104; /// /// The identifier for the ServerType_ServerDiagnostics_ServerDiagnosticsSummary_CurrentSubscriptionCount Variable. /// public const uint ServerType_ServerDiagnostics_ServerDiagnosticsSummary_CurrentSubscriptionCount = 3105; /// /// The identifier for the ServerType_ServerDiagnostics_ServerDiagnosticsSummary_CumulatedSubscriptionCount Variable. /// public const uint ServerType_ServerDiagnostics_ServerDiagnosticsSummary_CumulatedSubscriptionCount = 3106; /// /// The identifier for the ServerType_ServerDiagnostics_ServerDiagnosticsSummary_SecurityRejectedRequestsCount Variable. /// public const uint ServerType_ServerDiagnostics_ServerDiagnosticsSummary_SecurityRejectedRequestsCount = 3107; /// /// The identifier for the ServerType_ServerDiagnostics_ServerDiagnosticsSummary_RejectedRequestsCount Variable. /// public const uint ServerType_ServerDiagnostics_ServerDiagnosticsSummary_RejectedRequestsCount = 3108; /// /// The identifier for the ServerType_ServerDiagnostics_SubscriptionDiagnosticsArray Variable. /// public const uint ServerType_ServerDiagnostics_SubscriptionDiagnosticsArray = 3110; /// /// The identifier for the ServerType_ServerDiagnostics_SessionsDiagnosticsSummary_SessionDiagnosticsArray Variable. /// public const uint ServerType_ServerDiagnostics_SessionsDiagnosticsSummary_SessionDiagnosticsArray = 3112; /// /// The identifier for the ServerType_ServerDiagnostics_SessionsDiagnosticsSummary_SessionSecurityDiagnosticsArray Variable. /// public const uint ServerType_ServerDiagnostics_SessionsDiagnosticsSummary_SessionSecurityDiagnosticsArray = 3113; /// /// The identifier for the ServerType_ServerDiagnostics_EnabledFlag Variable. /// public const uint ServerType_ServerDiagnostics_EnabledFlag = 3114; /// /// The identifier for the ServerType_ServerRedundancy_RedundancySupport Variable. /// public const uint ServerType_ServerRedundancy_RedundancySupport = 3115; /// /// The identifier for the ServerType_GetMonitoredItems_InputArguments Variable. /// public const uint ServerType_GetMonitoredItems_InputArguments = 11490; /// /// The identifier for the ServerType_GetMonitoredItems_OutputArguments Variable. /// public const uint ServerType_GetMonitoredItems_OutputArguments = 11491; /// /// The identifier for the ServerCapabilitiesType_ServerProfileArray Variable. /// public const uint ServerCapabilitiesType_ServerProfileArray = 2014; /// /// The identifier for the ServerCapabilitiesType_LocaleIdArray Variable. /// public const uint ServerCapabilitiesType_LocaleIdArray = 2016; /// /// The identifier for the ServerCapabilitiesType_MinSupportedSampleRate Variable. /// public const uint ServerCapabilitiesType_MinSupportedSampleRate = 2017; /// /// The identifier for the ServerCapabilitiesType_MaxBrowseContinuationPoints Variable. /// public const uint ServerCapabilitiesType_MaxBrowseContinuationPoints = 2732; /// /// The identifier for the ServerCapabilitiesType_MaxQueryContinuationPoints Variable. /// public const uint ServerCapabilitiesType_MaxQueryContinuationPoints = 2733; /// /// The identifier for the ServerCapabilitiesType_MaxHistoryContinuationPoints Variable. /// public const uint ServerCapabilitiesType_MaxHistoryContinuationPoints = 2734; /// /// The identifier for the ServerCapabilitiesType_SoftwareCertificates Variable. /// public const uint ServerCapabilitiesType_SoftwareCertificates = 3049; /// /// The identifier for the ServerCapabilitiesType_MaxArrayLength Variable. /// public const uint ServerCapabilitiesType_MaxArrayLength = 11549; /// /// The identifier for the ServerCapabilitiesType_MaxStringLength Variable. /// public const uint ServerCapabilitiesType_MaxStringLength = 11550; /// /// The identifier for the ServerCapabilitiesType_VendorCapability Variable. /// public const uint ServerCapabilitiesType_VendorCapability = 11562; /// /// The identifier for the ServerDiagnosticsType_ServerDiagnosticsSummary Variable. /// public const uint ServerDiagnosticsType_ServerDiagnosticsSummary = 2021; /// /// The identifier for the ServerDiagnosticsType_ServerDiagnosticsSummary_ServerViewCount Variable. /// public const uint ServerDiagnosticsType_ServerDiagnosticsSummary_ServerViewCount = 3116; /// /// The identifier for the ServerDiagnosticsType_ServerDiagnosticsSummary_CurrentSessionCount Variable. /// public const uint ServerDiagnosticsType_ServerDiagnosticsSummary_CurrentSessionCount = 3117; /// /// The identifier for the ServerDiagnosticsType_ServerDiagnosticsSummary_CumulatedSessionCount Variable. /// public const uint ServerDiagnosticsType_ServerDiagnosticsSummary_CumulatedSessionCount = 3118; /// /// The identifier for the ServerDiagnosticsType_ServerDiagnosticsSummary_SecurityRejectedSessionCount Variable. /// public const uint ServerDiagnosticsType_ServerDiagnosticsSummary_SecurityRejectedSessionCount = 3119; /// /// The identifier for the ServerDiagnosticsType_ServerDiagnosticsSummary_RejectedSessionCount Variable. /// public const uint ServerDiagnosticsType_ServerDiagnosticsSummary_RejectedSessionCount = 3120; /// /// The identifier for the ServerDiagnosticsType_ServerDiagnosticsSummary_SessionTimeoutCount Variable. /// public const uint ServerDiagnosticsType_ServerDiagnosticsSummary_SessionTimeoutCount = 3121; /// /// The identifier for the ServerDiagnosticsType_ServerDiagnosticsSummary_SessionAbortCount Variable. /// public const uint ServerDiagnosticsType_ServerDiagnosticsSummary_SessionAbortCount = 3122; /// /// The identifier for the ServerDiagnosticsType_ServerDiagnosticsSummary_PublishingIntervalCount Variable. /// public const uint ServerDiagnosticsType_ServerDiagnosticsSummary_PublishingIntervalCount = 3124; /// /// The identifier for the ServerDiagnosticsType_ServerDiagnosticsSummary_CurrentSubscriptionCount Variable. /// public const uint ServerDiagnosticsType_ServerDiagnosticsSummary_CurrentSubscriptionCount = 3125; /// /// The identifier for the ServerDiagnosticsType_ServerDiagnosticsSummary_CumulatedSubscriptionCount Variable. /// public const uint ServerDiagnosticsType_ServerDiagnosticsSummary_CumulatedSubscriptionCount = 3126; /// /// The identifier for the ServerDiagnosticsType_ServerDiagnosticsSummary_SecurityRejectedRequestsCount Variable. /// public const uint ServerDiagnosticsType_ServerDiagnosticsSummary_SecurityRejectedRequestsCount = 3127; /// /// The identifier for the ServerDiagnosticsType_ServerDiagnosticsSummary_RejectedRequestsCount Variable. /// public const uint ServerDiagnosticsType_ServerDiagnosticsSummary_RejectedRequestsCount = 3128; /// /// The identifier for the ServerDiagnosticsType_SamplingIntervalDiagnosticsArray Variable. /// public const uint ServerDiagnosticsType_SamplingIntervalDiagnosticsArray = 2022; /// /// The identifier for the ServerDiagnosticsType_SubscriptionDiagnosticsArray Variable. /// public const uint ServerDiagnosticsType_SubscriptionDiagnosticsArray = 2023; /// /// The identifier for the ServerDiagnosticsType_SessionsDiagnosticsSummary_SessionDiagnosticsArray Variable. /// public const uint ServerDiagnosticsType_SessionsDiagnosticsSummary_SessionDiagnosticsArray = 3129; /// /// The identifier for the ServerDiagnosticsType_SessionsDiagnosticsSummary_SessionSecurityDiagnosticsArray Variable. /// public const uint ServerDiagnosticsType_SessionsDiagnosticsSummary_SessionSecurityDiagnosticsArray = 3130; /// /// The identifier for the ServerDiagnosticsType_EnabledFlag Variable. /// public const uint ServerDiagnosticsType_EnabledFlag = 2025; /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionDiagnosticsArray Variable. /// public const uint SessionsDiagnosticsSummaryType_SessionDiagnosticsArray = 2027; /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionSecurityDiagnosticsArray Variable. /// public const uint SessionsDiagnosticsSummaryType_SessionSecurityDiagnosticsArray = 2028; /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics Variable. /// public const uint SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics = 12098; /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_SessionId Variable. /// public const uint SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_SessionId = 12099; /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_SessionName Variable. /// public const uint SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_SessionName = 12100; /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_ClientDescription Variable. /// public const uint SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_ClientDescription = 12101; /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_ServerUri Variable. /// public const uint SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_ServerUri = 12102; /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_EndpointUrl Variable. /// public const uint SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_EndpointUrl = 12103; /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_LocaleIds Variable. /// public const uint SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_LocaleIds = 12104; /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_ActualSessionTimeout Variable. /// public const uint SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_ActualSessionTimeout = 12105; /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_MaxResponseMessageSize Variable. /// public const uint SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_MaxResponseMessageSize = 12106; /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_ClientConnectionTime Variable. /// public const uint SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_ClientConnectionTime = 12107; /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_ClientLastContactTime Variable. /// public const uint SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_ClientLastContactTime = 12108; /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_CurrentSubscriptionsCount Variable. /// public const uint SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_CurrentSubscriptionsCount = 12109; /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_CurrentMonitoredItemsCount Variable. /// public const uint SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_CurrentMonitoredItemsCount = 12110; /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_CurrentPublishRequestsInQueue Variable. /// public const uint SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_CurrentPublishRequestsInQueue = 12111; /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_TotalRequestCount Variable. /// public const uint SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_TotalRequestCount = 12112; /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_UnauthorizedRequestCount Variable. /// public const uint SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_UnauthorizedRequestCount = 12113; /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_ReadCount Variable. /// public const uint SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_ReadCount = 12114; /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_HistoryReadCount Variable. /// public const uint SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_HistoryReadCount = 12115; /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_WriteCount Variable. /// public const uint SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_WriteCount = 12116; /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_HistoryUpdateCount Variable. /// public const uint SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_HistoryUpdateCount = 12117; /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_CallCount Variable. /// public const uint SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_CallCount = 12118; /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_CreateMonitoredItemsCount Variable. /// public const uint SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_CreateMonitoredItemsCount = 12119; /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_ModifyMonitoredItemsCount Variable. /// public const uint SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_ModifyMonitoredItemsCount = 12120; /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_SetMonitoringModeCount Variable. /// public const uint SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_SetMonitoringModeCount = 12121; /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_SetTriggeringCount Variable. /// public const uint SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_SetTriggeringCount = 12122; /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_DeleteMonitoredItemsCount Variable. /// public const uint SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_DeleteMonitoredItemsCount = 12123; /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_CreateSubscriptionCount Variable. /// public const uint SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_CreateSubscriptionCount = 12124; /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_ModifySubscriptionCount Variable. /// public const uint SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_ModifySubscriptionCount = 12125; /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_SetPublishingModeCount Variable. /// public const uint SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_SetPublishingModeCount = 12126; /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_PublishCount Variable. /// public const uint SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_PublishCount = 12127; /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_RepublishCount Variable. /// public const uint SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_RepublishCount = 12128; /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_TransferSubscriptionsCount Variable. /// public const uint SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_TransferSubscriptionsCount = 12129; /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_DeleteSubscriptionsCount Variable. /// public const uint SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_DeleteSubscriptionsCount = 12130; /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_AddNodesCount Variable. /// public const uint SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_AddNodesCount = 12131; /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_AddReferencesCount Variable. /// public const uint SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_AddReferencesCount = 12132; /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_DeleteNodesCount Variable. /// public const uint SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_DeleteNodesCount = 12133; /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_DeleteReferencesCount Variable. /// public const uint SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_DeleteReferencesCount = 12134; /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_BrowseCount Variable. /// public const uint SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_BrowseCount = 12135; /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_BrowseNextCount Variable. /// public const uint SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_BrowseNextCount = 12136; /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_TranslateBrowsePathsToNodeIdsCount Variable. /// public const uint SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_TranslateBrowsePathsToNodeIdsCount = 12137; /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_QueryFirstCount Variable. /// public const uint SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_QueryFirstCount = 12138; /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_QueryNextCount Variable. /// public const uint SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_QueryNextCount = 12139; /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_RegisterNodesCount Variable. /// public const uint SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_RegisterNodesCount = 12140; /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_UnregisterNodesCount Variable. /// public const uint SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_UnregisterNodesCount = 12141; /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionSecurityDiagnostics Variable. /// public const uint SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionSecurityDiagnostics = 12142; /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionSecurityDiagnostics_SessionId Variable. /// public const uint SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionSecurityDiagnostics_SessionId = 12143; /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionSecurityDiagnostics_ClientUserIdOfSession Variable. /// public const uint SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionSecurityDiagnostics_ClientUserIdOfSession = 12144; /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionSecurityDiagnostics_ClientUserIdHistory Variable. /// public const uint SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionSecurityDiagnostics_ClientUserIdHistory = 12145; /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionSecurityDiagnostics_AuthenticationMechanism Variable. /// public const uint SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionSecurityDiagnostics_AuthenticationMechanism = 12146; /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionSecurityDiagnostics_Encoding Variable. /// public const uint SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionSecurityDiagnostics_Encoding = 12147; /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionSecurityDiagnostics_TransportProtocol Variable. /// public const uint SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionSecurityDiagnostics_TransportProtocol = 12148; /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionSecurityDiagnostics_SecurityMode Variable. /// public const uint SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionSecurityDiagnostics_SecurityMode = 12149; /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionSecurityDiagnostics_SecurityPolicyUri Variable. /// public const uint SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionSecurityDiagnostics_SecurityPolicyUri = 12150; /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionSecurityDiagnostics_ClientCertificate Variable. /// public const uint SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionSecurityDiagnostics_ClientCertificate = 12151; /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SubscriptionDiagnosticsArray Variable. /// public const uint SessionsDiagnosticsSummaryType_SessionPlaceholder_SubscriptionDiagnosticsArray = 12152; /// /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics Variable. /// public const uint SessionDiagnosticsObjectType_SessionDiagnostics = 2030; /// /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_SessionId Variable. /// public const uint SessionDiagnosticsObjectType_SessionDiagnostics_SessionId = 3131; /// /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_SessionName Variable. /// public const uint SessionDiagnosticsObjectType_SessionDiagnostics_SessionName = 3132; /// /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_ClientDescription Variable. /// public const uint SessionDiagnosticsObjectType_SessionDiagnostics_ClientDescription = 3133; /// /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_ServerUri Variable. /// public const uint SessionDiagnosticsObjectType_SessionDiagnostics_ServerUri = 3134; /// /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_EndpointUrl Variable. /// public const uint SessionDiagnosticsObjectType_SessionDiagnostics_EndpointUrl = 3135; /// /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_LocaleIds Variable. /// public const uint SessionDiagnosticsObjectType_SessionDiagnostics_LocaleIds = 3136; /// /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_ActualSessionTimeout Variable. /// public const uint SessionDiagnosticsObjectType_SessionDiagnostics_ActualSessionTimeout = 3137; /// /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_MaxResponseMessageSize Variable. /// public const uint SessionDiagnosticsObjectType_SessionDiagnostics_MaxResponseMessageSize = 3138; /// /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_ClientConnectionTime Variable. /// public const uint SessionDiagnosticsObjectType_SessionDiagnostics_ClientConnectionTime = 3139; /// /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_ClientLastContactTime Variable. /// public const uint SessionDiagnosticsObjectType_SessionDiagnostics_ClientLastContactTime = 3140; /// /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_CurrentSubscriptionsCount Variable. /// public const uint SessionDiagnosticsObjectType_SessionDiagnostics_CurrentSubscriptionsCount = 3141; /// /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_CurrentMonitoredItemsCount Variable. /// public const uint SessionDiagnosticsObjectType_SessionDiagnostics_CurrentMonitoredItemsCount = 3142; /// /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_CurrentPublishRequestsInQueue Variable. /// public const uint SessionDiagnosticsObjectType_SessionDiagnostics_CurrentPublishRequestsInQueue = 3143; /// /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_TotalRequestCount Variable. /// public const uint SessionDiagnosticsObjectType_SessionDiagnostics_TotalRequestCount = 8898; /// /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_UnauthorizedRequestCount Variable. /// public const uint SessionDiagnosticsObjectType_SessionDiagnostics_UnauthorizedRequestCount = 11891; /// /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_ReadCount Variable. /// public const uint SessionDiagnosticsObjectType_SessionDiagnostics_ReadCount = 3151; /// /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_HistoryReadCount Variable. /// public const uint SessionDiagnosticsObjectType_SessionDiagnostics_HistoryReadCount = 3152; /// /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_WriteCount Variable. /// public const uint SessionDiagnosticsObjectType_SessionDiagnostics_WriteCount = 3153; /// /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_HistoryUpdateCount Variable. /// public const uint SessionDiagnosticsObjectType_SessionDiagnostics_HistoryUpdateCount = 3154; /// /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_CallCount Variable. /// public const uint SessionDiagnosticsObjectType_SessionDiagnostics_CallCount = 3155; /// /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_CreateMonitoredItemsCount Variable. /// public const uint SessionDiagnosticsObjectType_SessionDiagnostics_CreateMonitoredItemsCount = 3156; /// /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_ModifyMonitoredItemsCount Variable. /// public const uint SessionDiagnosticsObjectType_SessionDiagnostics_ModifyMonitoredItemsCount = 3157; /// /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_SetMonitoringModeCount Variable. /// public const uint SessionDiagnosticsObjectType_SessionDiagnostics_SetMonitoringModeCount = 3158; /// /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_SetTriggeringCount Variable. /// public const uint SessionDiagnosticsObjectType_SessionDiagnostics_SetTriggeringCount = 3159; /// /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_DeleteMonitoredItemsCount Variable. /// public const uint SessionDiagnosticsObjectType_SessionDiagnostics_DeleteMonitoredItemsCount = 3160; /// /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_CreateSubscriptionCount Variable. /// public const uint SessionDiagnosticsObjectType_SessionDiagnostics_CreateSubscriptionCount = 3161; /// /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_ModifySubscriptionCount Variable. /// public const uint SessionDiagnosticsObjectType_SessionDiagnostics_ModifySubscriptionCount = 3162; /// /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_SetPublishingModeCount Variable. /// public const uint SessionDiagnosticsObjectType_SessionDiagnostics_SetPublishingModeCount = 3163; /// /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_PublishCount Variable. /// public const uint SessionDiagnosticsObjectType_SessionDiagnostics_PublishCount = 3164; /// /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_RepublishCount Variable. /// public const uint SessionDiagnosticsObjectType_SessionDiagnostics_RepublishCount = 3165; /// /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_TransferSubscriptionsCount Variable. /// public const uint SessionDiagnosticsObjectType_SessionDiagnostics_TransferSubscriptionsCount = 3166; /// /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_DeleteSubscriptionsCount Variable. /// public const uint SessionDiagnosticsObjectType_SessionDiagnostics_DeleteSubscriptionsCount = 3167; /// /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_AddNodesCount Variable. /// public const uint SessionDiagnosticsObjectType_SessionDiagnostics_AddNodesCount = 3168; /// /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_AddReferencesCount Variable. /// public const uint SessionDiagnosticsObjectType_SessionDiagnostics_AddReferencesCount = 3169; /// /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_DeleteNodesCount Variable. /// public const uint SessionDiagnosticsObjectType_SessionDiagnostics_DeleteNodesCount = 3170; /// /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_DeleteReferencesCount Variable. /// public const uint SessionDiagnosticsObjectType_SessionDiagnostics_DeleteReferencesCount = 3171; /// /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_BrowseCount Variable. /// public const uint SessionDiagnosticsObjectType_SessionDiagnostics_BrowseCount = 3172; /// /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_BrowseNextCount Variable. /// public const uint SessionDiagnosticsObjectType_SessionDiagnostics_BrowseNextCount = 3173; /// /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_TranslateBrowsePathsToNodeIdsCount Variable. /// public const uint SessionDiagnosticsObjectType_SessionDiagnostics_TranslateBrowsePathsToNodeIdsCount = 3174; /// /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_QueryFirstCount Variable. /// public const uint SessionDiagnosticsObjectType_SessionDiagnostics_QueryFirstCount = 3175; /// /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_QueryNextCount Variable. /// public const uint SessionDiagnosticsObjectType_SessionDiagnostics_QueryNextCount = 3176; /// /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_RegisterNodesCount Variable. /// public const uint SessionDiagnosticsObjectType_SessionDiagnostics_RegisterNodesCount = 3177; /// /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_UnregisterNodesCount Variable. /// public const uint SessionDiagnosticsObjectType_SessionDiagnostics_UnregisterNodesCount = 3178; /// /// The identifier for the SessionDiagnosticsObjectType_SessionSecurityDiagnostics Variable. /// public const uint SessionDiagnosticsObjectType_SessionSecurityDiagnostics = 2031; /// /// The identifier for the SessionDiagnosticsObjectType_SessionSecurityDiagnostics_SessionId Variable. /// public const uint SessionDiagnosticsObjectType_SessionSecurityDiagnostics_SessionId = 3179; /// /// The identifier for the SessionDiagnosticsObjectType_SessionSecurityDiagnostics_ClientUserIdOfSession Variable. /// public const uint SessionDiagnosticsObjectType_SessionSecurityDiagnostics_ClientUserIdOfSession = 3180; /// /// The identifier for the SessionDiagnosticsObjectType_SessionSecurityDiagnostics_ClientUserIdHistory Variable. /// public const uint SessionDiagnosticsObjectType_SessionSecurityDiagnostics_ClientUserIdHistory = 3181; /// /// The identifier for the SessionDiagnosticsObjectType_SessionSecurityDiagnostics_AuthenticationMechanism Variable. /// public const uint SessionDiagnosticsObjectType_SessionSecurityDiagnostics_AuthenticationMechanism = 3182; /// /// The identifier for the SessionDiagnosticsObjectType_SessionSecurityDiagnostics_Encoding Variable. /// public const uint SessionDiagnosticsObjectType_SessionSecurityDiagnostics_Encoding = 3183; /// /// The identifier for the SessionDiagnosticsObjectType_SessionSecurityDiagnostics_TransportProtocol Variable. /// public const uint SessionDiagnosticsObjectType_SessionSecurityDiagnostics_TransportProtocol = 3184; /// /// The identifier for the SessionDiagnosticsObjectType_SessionSecurityDiagnostics_SecurityMode Variable. /// public const uint SessionDiagnosticsObjectType_SessionSecurityDiagnostics_SecurityMode = 3185; /// /// The identifier for the SessionDiagnosticsObjectType_SessionSecurityDiagnostics_SecurityPolicyUri Variable. /// public const uint SessionDiagnosticsObjectType_SessionSecurityDiagnostics_SecurityPolicyUri = 3186; /// /// The identifier for the SessionDiagnosticsObjectType_SessionSecurityDiagnostics_ClientCertificate Variable. /// public const uint SessionDiagnosticsObjectType_SessionSecurityDiagnostics_ClientCertificate = 3187; /// /// The identifier for the SessionDiagnosticsObjectType_SubscriptionDiagnosticsArray Variable. /// public const uint SessionDiagnosticsObjectType_SubscriptionDiagnosticsArray = 2032; /// /// The identifier for the ServerRedundancyType_RedundancySupport Variable. /// public const uint ServerRedundancyType_RedundancySupport = 2035; /// /// The identifier for the TransparentRedundancyType_CurrentServerId Variable. /// public const uint TransparentRedundancyType_CurrentServerId = 2037; /// /// The identifier for the TransparentRedundancyType_RedundantServerArray Variable. /// public const uint TransparentRedundancyType_RedundantServerArray = 2038; /// /// The identifier for the NonTransparentRedundancyType_ServerUriArray Variable. /// public const uint NonTransparentRedundancyType_ServerUriArray = 2040; /// /// The identifier for the NonTransparentNetworkRedundancyType_ServerNetworkGroups Variable. /// public const uint NonTransparentNetworkRedundancyType_ServerNetworkGroups = 11948; /// /// The identifier for the OperationLimitsType_MaxNodesPerRead Variable. /// public const uint OperationLimitsType_MaxNodesPerRead = 11565; /// /// The identifier for the OperationLimitsType_MaxNodesPerHistoryReadData Variable. /// public const uint OperationLimitsType_MaxNodesPerHistoryReadData = 12161; /// /// The identifier for the OperationLimitsType_MaxNodesPerHistoryReadEvents Variable. /// public const uint OperationLimitsType_MaxNodesPerHistoryReadEvents = 12162; /// /// The identifier for the OperationLimitsType_MaxNodesPerWrite Variable. /// public const uint OperationLimitsType_MaxNodesPerWrite = 11567; /// /// The identifier for the OperationLimitsType_MaxNodesPerHistoryUpdateData Variable. /// public const uint OperationLimitsType_MaxNodesPerHistoryUpdateData = 12163; /// /// The identifier for the OperationLimitsType_MaxNodesPerHistoryUpdateEvents Variable. /// public const uint OperationLimitsType_MaxNodesPerHistoryUpdateEvents = 12164; /// /// The identifier for the OperationLimitsType_MaxNodesPerMethodCall Variable. /// public const uint OperationLimitsType_MaxNodesPerMethodCall = 11569; /// /// The identifier for the OperationLimitsType_MaxNodesPerBrowse Variable. /// public const uint OperationLimitsType_MaxNodesPerBrowse = 11570; /// /// The identifier for the OperationLimitsType_MaxNodesPerRegisterNodes Variable. /// public const uint OperationLimitsType_MaxNodesPerRegisterNodes = 11571; /// /// The identifier for the OperationLimitsType_MaxNodesPerTranslateBrowsePathsToNodeIds Variable. /// public const uint OperationLimitsType_MaxNodesPerTranslateBrowsePathsToNodeIds = 11572; /// /// The identifier for the OperationLimitsType_MaxNodesPerNodeManagement Variable. /// public const uint OperationLimitsType_MaxNodesPerNodeManagement = 11573; /// /// The identifier for the OperationLimitsType_MaxMonitoredItemsPerCall Variable. /// public const uint OperationLimitsType_MaxMonitoredItemsPerCall = 11574; /// /// The identifier for the FileType_Size Variable. /// public const uint FileType_Size = 11576; /// /// The identifier for the FileType_Writeable Variable. /// public const uint FileType_Writeable = 11577; /// /// The identifier for the FileType_UserWriteable Variable. /// public const uint FileType_UserWriteable = 11578; /// /// The identifier for the FileType_OpenCount Variable. /// public const uint FileType_OpenCount = 11579; /// /// The identifier for the FileType_Open_InputArguments Variable. /// public const uint FileType_Open_InputArguments = 11581; /// /// The identifier for the FileType_Open_OutputArguments Variable. /// public const uint FileType_Open_OutputArguments = 11582; /// /// The identifier for the FileType_Close_InputArguments Variable. /// public const uint FileType_Close_InputArguments = 11584; /// /// The identifier for the FileType_Read_InputArguments Variable. /// public const uint FileType_Read_InputArguments = 11586; /// /// The identifier for the FileType_Read_OutputArguments Variable. /// public const uint FileType_Read_OutputArguments = 11587; /// /// The identifier for the FileType_Write_InputArguments Variable. /// public const uint FileType_Write_InputArguments = 11589; /// /// The identifier for the FileType_GetPosition_InputArguments Variable. /// public const uint FileType_GetPosition_InputArguments = 11591; /// /// The identifier for the FileType_GetPosition_OutputArguments Variable. /// public const uint FileType_GetPosition_OutputArguments = 11592; /// /// The identifier for the FileType_SetPosition_InputArguments Variable. /// public const uint FileType_SetPosition_InputArguments = 11594; /// /// The identifier for the NamespaceMetadataType_NamespaceUri Variable. /// public const uint NamespaceMetadataType_NamespaceUri = 11617; /// /// The identifier for the NamespaceMetadataType_NamespaceVersion Variable. /// public const uint NamespaceMetadataType_NamespaceVersion = 11618; /// /// The identifier for the NamespaceMetadataType_NamespacePublicationDate Variable. /// public const uint NamespaceMetadataType_NamespacePublicationDate = 11619; /// /// The identifier for the NamespaceMetadataType_IsNamespaceSubset Variable. /// public const uint NamespaceMetadataType_IsNamespaceSubset = 11620; /// /// The identifier for the NamespaceMetadataType_StaticNodeIdIndentifierTypes Variable. /// public const uint NamespaceMetadataType_StaticNodeIdIndentifierTypes = 11621; /// /// The identifier for the NamespaceMetadataType_StaticNumericNodeIdRange Variable. /// public const uint NamespaceMetadataType_StaticNumericNodeIdRange = 11622; /// /// The identifier for the NamespaceMetadataType_StaticStringNodeIdPattern Variable. /// public const uint NamespaceMetadataType_StaticStringNodeIdPattern = 11623; /// /// The identifier for the NamespacesType_NamespaceIdentifier_NamespaceUri Variable. /// public const uint NamespacesType_NamespaceIdentifier_NamespaceUri = 11647; /// /// The identifier for the NamespacesType_NamespaceIdentifier_NamespaceVersion Variable. /// public const uint NamespacesType_NamespaceIdentifier_NamespaceVersion = 11648; /// /// The identifier for the NamespacesType_NamespaceIdentifier_NamespacePublicationDate Variable. /// public const uint NamespacesType_NamespaceIdentifier_NamespacePublicationDate = 11649; /// /// The identifier for the NamespacesType_NamespaceIdentifier_IsNamespaceSubset Variable. /// public const uint NamespacesType_NamespaceIdentifier_IsNamespaceSubset = 11650; /// /// The identifier for the NamespacesType_NamespaceIdentifier_StaticNodeIdIndentifierTypes Variable. /// public const uint NamespacesType_NamespaceIdentifier_StaticNodeIdIndentifierTypes = 11651; /// /// The identifier for the NamespacesType_NamespaceIdentifier_StaticNumericNodeIdRange Variable. /// public const uint NamespacesType_NamespaceIdentifier_StaticNumericNodeIdRange = 11652; /// /// The identifier for the NamespacesType_NamespaceIdentifier_StaticStringNodeIdPattern Variable. /// public const uint NamespacesType_NamespaceIdentifier_StaticStringNodeIdPattern = 11653; /// /// The identifier for the BaseEventType_EventId Variable. /// public const uint BaseEventType_EventId = 2042; /// /// The identifier for the BaseEventType_EventType Variable. /// public const uint BaseEventType_EventType = 2043; /// /// The identifier for the BaseEventType_SourceNode Variable. /// public const uint BaseEventType_SourceNode = 2044; /// /// The identifier for the BaseEventType_SourceName Variable. /// public const uint BaseEventType_SourceName = 2045; /// /// The identifier for the BaseEventType_Time Variable. /// public const uint BaseEventType_Time = 2046; /// /// The identifier for the BaseEventType_ReceiveTime Variable. /// public const uint BaseEventType_ReceiveTime = 2047; /// /// The identifier for the BaseEventType_LocalTime Variable. /// public const uint BaseEventType_LocalTime = 3190; /// /// The identifier for the BaseEventType_Message Variable. /// public const uint BaseEventType_Message = 2050; /// /// The identifier for the BaseEventType_Severity Variable. /// public const uint BaseEventType_Severity = 2051; /// /// The identifier for the AuditEventType_ActionTimeStamp Variable. /// public const uint AuditEventType_ActionTimeStamp = 2053; /// /// The identifier for the AuditEventType_Status Variable. /// public const uint AuditEventType_Status = 2054; /// /// The identifier for the AuditEventType_ServerId Variable. /// public const uint AuditEventType_ServerId = 2055; /// /// The identifier for the AuditEventType_ClientAuditEntryId Variable. /// public const uint AuditEventType_ClientAuditEntryId = 2056; /// /// The identifier for the AuditEventType_ClientUserId Variable. /// public const uint AuditEventType_ClientUserId = 2057; /// /// The identifier for the AuditChannelEventType_SecureChannelId Variable. /// public const uint AuditChannelEventType_SecureChannelId = 2745; /// /// The identifier for the AuditOpenSecureChannelEventType_ClientCertificate Variable. /// public const uint AuditOpenSecureChannelEventType_ClientCertificate = 2061; /// /// The identifier for the AuditOpenSecureChannelEventType_ClientCertificateThumbprint Variable. /// public const uint AuditOpenSecureChannelEventType_ClientCertificateThumbprint = 2746; /// /// The identifier for the AuditOpenSecureChannelEventType_RequestType Variable. /// public const uint AuditOpenSecureChannelEventType_RequestType = 2062; /// /// The identifier for the AuditOpenSecureChannelEventType_SecurityPolicyUri Variable. /// public const uint AuditOpenSecureChannelEventType_SecurityPolicyUri = 2063; /// /// The identifier for the AuditOpenSecureChannelEventType_SecurityMode Variable. /// public const uint AuditOpenSecureChannelEventType_SecurityMode = 2065; /// /// The identifier for the AuditOpenSecureChannelEventType_RequestedLifetime Variable. /// public const uint AuditOpenSecureChannelEventType_RequestedLifetime = 2066; /// /// The identifier for the AuditSessionEventType_SessionId Variable. /// public const uint AuditSessionEventType_SessionId = 2070; /// /// The identifier for the AuditCreateSessionEventType_SecureChannelId Variable. /// public const uint AuditCreateSessionEventType_SecureChannelId = 2072; /// /// The identifier for the AuditCreateSessionEventType_ClientCertificate Variable. /// public const uint AuditCreateSessionEventType_ClientCertificate = 2073; /// /// The identifier for the AuditCreateSessionEventType_ClientCertificateThumbprint Variable. /// public const uint AuditCreateSessionEventType_ClientCertificateThumbprint = 2747; /// /// The identifier for the AuditCreateSessionEventType_RevisedSessionTimeout Variable. /// public const uint AuditCreateSessionEventType_RevisedSessionTimeout = 2074; /// /// The identifier for the AuditUrlMismatchEventType_EndpointUrl Variable. /// public const uint AuditUrlMismatchEventType_EndpointUrl = 2749; /// /// The identifier for the AuditActivateSessionEventType_ClientSoftwareCertificates Variable. /// public const uint AuditActivateSessionEventType_ClientSoftwareCertificates = 2076; /// /// The identifier for the AuditActivateSessionEventType_UserIdentityToken Variable. /// public const uint AuditActivateSessionEventType_UserIdentityToken = 2077; /// /// The identifier for the AuditActivateSessionEventType_SecureChannelId Variable. /// public const uint AuditActivateSessionEventType_SecureChannelId = 11485; /// /// The identifier for the AuditCancelEventType_RequestHandle Variable. /// public const uint AuditCancelEventType_RequestHandle = 2079; /// /// The identifier for the AuditCertificateEventType_Certificate Variable. /// public const uint AuditCertificateEventType_Certificate = 2081; /// /// The identifier for the AuditCertificateDataMismatchEventType_InvalidHostname Variable. /// public const uint AuditCertificateDataMismatchEventType_InvalidHostname = 2083; /// /// The identifier for the AuditCertificateDataMismatchEventType_InvalidUri Variable. /// public const uint AuditCertificateDataMismatchEventType_InvalidUri = 2084; /// /// The identifier for the AuditAddNodesEventType_NodesToAdd Variable. /// public const uint AuditAddNodesEventType_NodesToAdd = 2092; /// /// The identifier for the AuditDeleteNodesEventType_NodesToDelete Variable. /// public const uint AuditDeleteNodesEventType_NodesToDelete = 2094; /// /// The identifier for the AuditAddReferencesEventType_ReferencesToAdd Variable. /// public const uint AuditAddReferencesEventType_ReferencesToAdd = 2096; /// /// The identifier for the AuditDeleteReferencesEventType_ReferencesToDelete Variable. /// public const uint AuditDeleteReferencesEventType_ReferencesToDelete = 2098; /// /// The identifier for the AuditWriteUpdateEventType_AttributeId Variable. /// public const uint AuditWriteUpdateEventType_AttributeId = 2750; /// /// The identifier for the AuditWriteUpdateEventType_IndexRange Variable. /// public const uint AuditWriteUpdateEventType_IndexRange = 2101; /// /// The identifier for the AuditWriteUpdateEventType_OldValue Variable. /// public const uint AuditWriteUpdateEventType_OldValue = 2102; /// /// The identifier for the AuditWriteUpdateEventType_NewValue Variable. /// public const uint AuditWriteUpdateEventType_NewValue = 2103; /// /// The identifier for the AuditHistoryUpdateEventType_ParameterDataTypeId Variable. /// public const uint AuditHistoryUpdateEventType_ParameterDataTypeId = 2751; /// /// The identifier for the AuditUpdateMethodEventType_MethodId Variable. /// public const uint AuditUpdateMethodEventType_MethodId = 2128; /// /// The identifier for the AuditUpdateMethodEventType_InputArguments Variable. /// public const uint AuditUpdateMethodEventType_InputArguments = 2129; /// /// The identifier for the SystemStatusChangeEventType_SystemState Variable. /// public const uint SystemStatusChangeEventType_SystemState = 11696; /// /// The identifier for the GeneralModelChangeEventType_Changes Variable. /// public const uint GeneralModelChangeEventType_Changes = 2134; /// /// The identifier for the SemanticChangeEventType_Changes Variable. /// public const uint SemanticChangeEventType_Changes = 2739; /// /// The identifier for the ServerStatusType_StartTime Variable. /// public const uint ServerStatusType_StartTime = 2139; /// /// The identifier for the ServerStatusType_CurrentTime Variable. /// public const uint ServerStatusType_CurrentTime = 2140; /// /// The identifier for the ServerStatusType_State Variable. /// public const uint ServerStatusType_State = 2141; /// /// The identifier for the ServerStatusType_BuildInfo Variable. /// public const uint ServerStatusType_BuildInfo = 2142; /// /// The identifier for the ServerStatusType_BuildInfo_ProductUri Variable. /// public const uint ServerStatusType_BuildInfo_ProductUri = 3698; /// /// The identifier for the ServerStatusType_BuildInfo_ManufacturerName Variable. /// public const uint ServerStatusType_BuildInfo_ManufacturerName = 3699; /// /// The identifier for the ServerStatusType_BuildInfo_ProductName Variable. /// public const uint ServerStatusType_BuildInfo_ProductName = 3700; /// /// The identifier for the ServerStatusType_BuildInfo_SoftwareVersion Variable. /// public const uint ServerStatusType_BuildInfo_SoftwareVersion = 3701; /// /// The identifier for the ServerStatusType_BuildInfo_BuildNumber Variable. /// public const uint ServerStatusType_BuildInfo_BuildNumber = 3702; /// /// The identifier for the ServerStatusType_BuildInfo_BuildDate Variable. /// public const uint ServerStatusType_BuildInfo_BuildDate = 3703; /// /// The identifier for the ServerStatusType_SecondsTillShutdown Variable. /// public const uint ServerStatusType_SecondsTillShutdown = 2752; /// /// The identifier for the ServerStatusType_ShutdownReason Variable. /// public const uint ServerStatusType_ShutdownReason = 2753; /// /// The identifier for the BuildInfoType_ProductUri Variable. /// public const uint BuildInfoType_ProductUri = 3052; /// /// The identifier for the BuildInfoType_ManufacturerName Variable. /// public const uint BuildInfoType_ManufacturerName = 3053; /// /// The identifier for the BuildInfoType_ProductName Variable. /// public const uint BuildInfoType_ProductName = 3054; /// /// The identifier for the BuildInfoType_SoftwareVersion Variable. /// public const uint BuildInfoType_SoftwareVersion = 3055; /// /// The identifier for the BuildInfoType_BuildNumber Variable. /// public const uint BuildInfoType_BuildNumber = 3056; /// /// The identifier for the BuildInfoType_BuildDate Variable. /// public const uint BuildInfoType_BuildDate = 3057; /// /// The identifier for the ServerDiagnosticsSummaryType_ServerViewCount Variable. /// public const uint ServerDiagnosticsSummaryType_ServerViewCount = 2151; /// /// The identifier for the ServerDiagnosticsSummaryType_CurrentSessionCount Variable. /// public const uint ServerDiagnosticsSummaryType_CurrentSessionCount = 2152; /// /// The identifier for the ServerDiagnosticsSummaryType_CumulatedSessionCount Variable. /// public const uint ServerDiagnosticsSummaryType_CumulatedSessionCount = 2153; /// /// The identifier for the ServerDiagnosticsSummaryType_SecurityRejectedSessionCount Variable. /// public const uint ServerDiagnosticsSummaryType_SecurityRejectedSessionCount = 2154; /// /// The identifier for the ServerDiagnosticsSummaryType_RejectedSessionCount Variable. /// public const uint ServerDiagnosticsSummaryType_RejectedSessionCount = 2155; /// /// The identifier for the ServerDiagnosticsSummaryType_SessionTimeoutCount Variable. /// public const uint ServerDiagnosticsSummaryType_SessionTimeoutCount = 2156; /// /// The identifier for the ServerDiagnosticsSummaryType_SessionAbortCount Variable. /// public const uint ServerDiagnosticsSummaryType_SessionAbortCount = 2157; /// /// The identifier for the ServerDiagnosticsSummaryType_PublishingIntervalCount Variable. /// public const uint ServerDiagnosticsSummaryType_PublishingIntervalCount = 2159; /// /// The identifier for the ServerDiagnosticsSummaryType_CurrentSubscriptionCount Variable. /// public const uint ServerDiagnosticsSummaryType_CurrentSubscriptionCount = 2160; /// /// The identifier for the ServerDiagnosticsSummaryType_CumulatedSubscriptionCount Variable. /// public const uint ServerDiagnosticsSummaryType_CumulatedSubscriptionCount = 2161; /// /// The identifier for the ServerDiagnosticsSummaryType_SecurityRejectedRequestsCount Variable. /// public const uint ServerDiagnosticsSummaryType_SecurityRejectedRequestsCount = 2162; /// /// The identifier for the ServerDiagnosticsSummaryType_RejectedRequestsCount Variable. /// public const uint ServerDiagnosticsSummaryType_RejectedRequestsCount = 2163; /// /// The identifier for the SamplingIntervalDiagnosticsType_SamplingInterval Variable. /// public const uint SamplingIntervalDiagnosticsType_SamplingInterval = 2166; /// /// The identifier for the SamplingIntervalDiagnosticsType_SampledMonitoredItemsCount Variable. /// public const uint SamplingIntervalDiagnosticsType_SampledMonitoredItemsCount = 11697; /// /// The identifier for the SamplingIntervalDiagnosticsType_MaxSampledMonitoredItemsCount Variable. /// public const uint SamplingIntervalDiagnosticsType_MaxSampledMonitoredItemsCount = 11698; /// /// The identifier for the SamplingIntervalDiagnosticsType_DisabledMonitoredItemsSamplingCount Variable. /// public const uint SamplingIntervalDiagnosticsType_DisabledMonitoredItemsSamplingCount = 11699; /// /// The identifier for the SubscriptionDiagnosticsType_SessionId Variable. /// public const uint SubscriptionDiagnosticsType_SessionId = 2173; /// /// The identifier for the SubscriptionDiagnosticsType_SubscriptionId Variable. /// public const uint SubscriptionDiagnosticsType_SubscriptionId = 2174; /// /// The identifier for the SubscriptionDiagnosticsType_Priority Variable. /// public const uint SubscriptionDiagnosticsType_Priority = 2175; /// /// The identifier for the SubscriptionDiagnosticsType_PublishingInterval Variable. /// public const uint SubscriptionDiagnosticsType_PublishingInterval = 2176; /// /// The identifier for the SubscriptionDiagnosticsType_MaxKeepAliveCount Variable. /// public const uint SubscriptionDiagnosticsType_MaxKeepAliveCount = 2177; /// /// The identifier for the SubscriptionDiagnosticsType_MaxLifetimeCount Variable. /// public const uint SubscriptionDiagnosticsType_MaxLifetimeCount = 8888; /// /// The identifier for the SubscriptionDiagnosticsType_MaxNotificationsPerPublish Variable. /// public const uint SubscriptionDiagnosticsType_MaxNotificationsPerPublish = 2179; /// /// The identifier for the SubscriptionDiagnosticsType_PublishingEnabled Variable. /// public const uint SubscriptionDiagnosticsType_PublishingEnabled = 2180; /// /// The identifier for the SubscriptionDiagnosticsType_ModifyCount Variable. /// public const uint SubscriptionDiagnosticsType_ModifyCount = 2181; /// /// The identifier for the SubscriptionDiagnosticsType_EnableCount Variable. /// public const uint SubscriptionDiagnosticsType_EnableCount = 2182; /// /// The identifier for the SubscriptionDiagnosticsType_DisableCount Variable. /// public const uint SubscriptionDiagnosticsType_DisableCount = 2183; /// /// The identifier for the SubscriptionDiagnosticsType_RepublishRequestCount Variable. /// public const uint SubscriptionDiagnosticsType_RepublishRequestCount = 2184; /// /// The identifier for the SubscriptionDiagnosticsType_RepublishMessageRequestCount Variable. /// public const uint SubscriptionDiagnosticsType_RepublishMessageRequestCount = 2185; /// /// The identifier for the SubscriptionDiagnosticsType_RepublishMessageCount Variable. /// public const uint SubscriptionDiagnosticsType_RepublishMessageCount = 2186; /// /// The identifier for the SubscriptionDiagnosticsType_TransferRequestCount Variable. /// public const uint SubscriptionDiagnosticsType_TransferRequestCount = 2187; /// /// The identifier for the SubscriptionDiagnosticsType_TransferredToAltClientCount Variable. /// public const uint SubscriptionDiagnosticsType_TransferredToAltClientCount = 2188; /// /// The identifier for the SubscriptionDiagnosticsType_TransferredToSameClientCount Variable. /// public const uint SubscriptionDiagnosticsType_TransferredToSameClientCount = 2189; /// /// The identifier for the SubscriptionDiagnosticsType_PublishRequestCount Variable. /// public const uint SubscriptionDiagnosticsType_PublishRequestCount = 2190; /// /// The identifier for the SubscriptionDiagnosticsType_DataChangeNotificationsCount Variable. /// public const uint SubscriptionDiagnosticsType_DataChangeNotificationsCount = 2191; /// /// The identifier for the SubscriptionDiagnosticsType_EventNotificationsCount Variable. /// public const uint SubscriptionDiagnosticsType_EventNotificationsCount = 2998; /// /// The identifier for the SubscriptionDiagnosticsType_NotificationsCount Variable. /// public const uint SubscriptionDiagnosticsType_NotificationsCount = 2193; /// /// The identifier for the SubscriptionDiagnosticsType_LatePublishRequestCount Variable. /// public const uint SubscriptionDiagnosticsType_LatePublishRequestCount = 8889; /// /// The identifier for the SubscriptionDiagnosticsType_CurrentKeepAliveCount Variable. /// public const uint SubscriptionDiagnosticsType_CurrentKeepAliveCount = 8890; /// /// The identifier for the SubscriptionDiagnosticsType_CurrentLifetimeCount Variable. /// public const uint SubscriptionDiagnosticsType_CurrentLifetimeCount = 8891; /// /// The identifier for the SubscriptionDiagnosticsType_UnacknowledgedMessageCount Variable. /// public const uint SubscriptionDiagnosticsType_UnacknowledgedMessageCount = 8892; /// /// The identifier for the SubscriptionDiagnosticsType_DiscardedMessageCount Variable. /// public const uint SubscriptionDiagnosticsType_DiscardedMessageCount = 8893; /// /// The identifier for the SubscriptionDiagnosticsType_MonitoredItemCount Variable. /// public const uint SubscriptionDiagnosticsType_MonitoredItemCount = 8894; /// /// The identifier for the SubscriptionDiagnosticsType_DisabledMonitoredItemCount Variable. /// public const uint SubscriptionDiagnosticsType_DisabledMonitoredItemCount = 8895; /// /// The identifier for the SubscriptionDiagnosticsType_MonitoringQueueOverflowCount Variable. /// public const uint SubscriptionDiagnosticsType_MonitoringQueueOverflowCount = 8896; /// /// The identifier for the SubscriptionDiagnosticsType_NextSequenceNumber Variable. /// public const uint SubscriptionDiagnosticsType_NextSequenceNumber = 8897; /// /// The identifier for the SubscriptionDiagnosticsType_EventQueueOverFlowCount Variable. /// public const uint SubscriptionDiagnosticsType_EventQueueOverFlowCount = 8902; /// /// The identifier for the SessionDiagnosticsVariableType_SessionId Variable. /// public const uint SessionDiagnosticsVariableType_SessionId = 2198; /// /// The identifier for the SessionDiagnosticsVariableType_SessionName Variable. /// public const uint SessionDiagnosticsVariableType_SessionName = 2199; /// /// The identifier for the SessionDiagnosticsVariableType_ClientDescription Variable. /// public const uint SessionDiagnosticsVariableType_ClientDescription = 2200; /// /// The identifier for the SessionDiagnosticsVariableType_ServerUri Variable. /// public const uint SessionDiagnosticsVariableType_ServerUri = 2201; /// /// The identifier for the SessionDiagnosticsVariableType_EndpointUrl Variable. /// public const uint SessionDiagnosticsVariableType_EndpointUrl = 2202; /// /// The identifier for the SessionDiagnosticsVariableType_LocaleIds Variable. /// public const uint SessionDiagnosticsVariableType_LocaleIds = 2203; /// /// The identifier for the SessionDiagnosticsVariableType_ActualSessionTimeout Variable. /// public const uint SessionDiagnosticsVariableType_ActualSessionTimeout = 2204; /// /// The identifier for the SessionDiagnosticsVariableType_MaxResponseMessageSize Variable. /// public const uint SessionDiagnosticsVariableType_MaxResponseMessageSize = 3050; /// /// The identifier for the SessionDiagnosticsVariableType_ClientConnectionTime Variable. /// public const uint SessionDiagnosticsVariableType_ClientConnectionTime = 2205; /// /// The identifier for the SessionDiagnosticsVariableType_ClientLastContactTime Variable. /// public const uint SessionDiagnosticsVariableType_ClientLastContactTime = 2206; /// /// The identifier for the SessionDiagnosticsVariableType_CurrentSubscriptionsCount Variable. /// public const uint SessionDiagnosticsVariableType_CurrentSubscriptionsCount = 2207; /// /// The identifier for the SessionDiagnosticsVariableType_CurrentMonitoredItemsCount Variable. /// public const uint SessionDiagnosticsVariableType_CurrentMonitoredItemsCount = 2208; /// /// The identifier for the SessionDiagnosticsVariableType_CurrentPublishRequestsInQueue Variable. /// public const uint SessionDiagnosticsVariableType_CurrentPublishRequestsInQueue = 2209; /// /// The identifier for the SessionDiagnosticsVariableType_TotalRequestCount Variable. /// public const uint SessionDiagnosticsVariableType_TotalRequestCount = 8900; /// /// The identifier for the SessionDiagnosticsVariableType_UnauthorizedRequestCount Variable. /// public const uint SessionDiagnosticsVariableType_UnauthorizedRequestCount = 11892; /// /// The identifier for the SessionDiagnosticsVariableType_ReadCount Variable. /// public const uint SessionDiagnosticsVariableType_ReadCount = 2217; /// /// The identifier for the SessionDiagnosticsVariableType_HistoryReadCount Variable. /// public const uint SessionDiagnosticsVariableType_HistoryReadCount = 2218; /// /// The identifier for the SessionDiagnosticsVariableType_WriteCount Variable. /// public const uint SessionDiagnosticsVariableType_WriteCount = 2219; /// /// The identifier for the SessionDiagnosticsVariableType_HistoryUpdateCount Variable. /// public const uint SessionDiagnosticsVariableType_HistoryUpdateCount = 2220; /// /// The identifier for the SessionDiagnosticsVariableType_CallCount Variable. /// public const uint SessionDiagnosticsVariableType_CallCount = 2221; /// /// The identifier for the SessionDiagnosticsVariableType_CreateMonitoredItemsCount Variable. /// public const uint SessionDiagnosticsVariableType_CreateMonitoredItemsCount = 2222; /// /// The identifier for the SessionDiagnosticsVariableType_ModifyMonitoredItemsCount Variable. /// public const uint SessionDiagnosticsVariableType_ModifyMonitoredItemsCount = 2223; /// /// The identifier for the SessionDiagnosticsVariableType_SetMonitoringModeCount Variable. /// public const uint SessionDiagnosticsVariableType_SetMonitoringModeCount = 2224; /// /// The identifier for the SessionDiagnosticsVariableType_SetTriggeringCount Variable. /// public const uint SessionDiagnosticsVariableType_SetTriggeringCount = 2225; /// /// The identifier for the SessionDiagnosticsVariableType_DeleteMonitoredItemsCount Variable. /// public const uint SessionDiagnosticsVariableType_DeleteMonitoredItemsCount = 2226; /// /// The identifier for the SessionDiagnosticsVariableType_CreateSubscriptionCount Variable. /// public const uint SessionDiagnosticsVariableType_CreateSubscriptionCount = 2227; /// /// The identifier for the SessionDiagnosticsVariableType_ModifySubscriptionCount Variable. /// public const uint SessionDiagnosticsVariableType_ModifySubscriptionCount = 2228; /// /// The identifier for the SessionDiagnosticsVariableType_SetPublishingModeCount Variable. /// public const uint SessionDiagnosticsVariableType_SetPublishingModeCount = 2229; /// /// The identifier for the SessionDiagnosticsVariableType_PublishCount Variable. /// public const uint SessionDiagnosticsVariableType_PublishCount = 2230; /// /// The identifier for the SessionDiagnosticsVariableType_RepublishCount Variable. /// public const uint SessionDiagnosticsVariableType_RepublishCount = 2231; /// /// The identifier for the SessionDiagnosticsVariableType_TransferSubscriptionsCount Variable. /// public const uint SessionDiagnosticsVariableType_TransferSubscriptionsCount = 2232; /// /// The identifier for the SessionDiagnosticsVariableType_DeleteSubscriptionsCount Variable. /// public const uint SessionDiagnosticsVariableType_DeleteSubscriptionsCount = 2233; /// /// The identifier for the SessionDiagnosticsVariableType_AddNodesCount Variable. /// public const uint SessionDiagnosticsVariableType_AddNodesCount = 2234; /// /// The identifier for the SessionDiagnosticsVariableType_AddReferencesCount Variable. /// public const uint SessionDiagnosticsVariableType_AddReferencesCount = 2235; /// /// The identifier for the SessionDiagnosticsVariableType_DeleteNodesCount Variable. /// public const uint SessionDiagnosticsVariableType_DeleteNodesCount = 2236; /// /// The identifier for the SessionDiagnosticsVariableType_DeleteReferencesCount Variable. /// public const uint SessionDiagnosticsVariableType_DeleteReferencesCount = 2237; /// /// The identifier for the SessionDiagnosticsVariableType_BrowseCount Variable. /// public const uint SessionDiagnosticsVariableType_BrowseCount = 2238; /// /// The identifier for the SessionDiagnosticsVariableType_BrowseNextCount Variable. /// public const uint SessionDiagnosticsVariableType_BrowseNextCount = 2239; /// /// The identifier for the SessionDiagnosticsVariableType_TranslateBrowsePathsToNodeIdsCount Variable. /// public const uint SessionDiagnosticsVariableType_TranslateBrowsePathsToNodeIdsCount = 2240; /// /// The identifier for the SessionDiagnosticsVariableType_QueryFirstCount Variable. /// public const uint SessionDiagnosticsVariableType_QueryFirstCount = 2241; /// /// The identifier for the SessionDiagnosticsVariableType_QueryNextCount Variable. /// public const uint SessionDiagnosticsVariableType_QueryNextCount = 2242; /// /// The identifier for the SessionDiagnosticsVariableType_RegisterNodesCount Variable. /// public const uint SessionDiagnosticsVariableType_RegisterNodesCount = 2730; /// /// The identifier for the SessionDiagnosticsVariableType_UnregisterNodesCount Variable. /// public const uint SessionDiagnosticsVariableType_UnregisterNodesCount = 2731; /// /// The identifier for the SessionSecurityDiagnosticsType_SessionId Variable. /// public const uint SessionSecurityDiagnosticsType_SessionId = 2245; /// /// The identifier for the SessionSecurityDiagnosticsType_ClientUserIdOfSession Variable. /// public const uint SessionSecurityDiagnosticsType_ClientUserIdOfSession = 2246; /// /// The identifier for the SessionSecurityDiagnosticsType_ClientUserIdHistory Variable. /// public const uint SessionSecurityDiagnosticsType_ClientUserIdHistory = 2247; /// /// The identifier for the SessionSecurityDiagnosticsType_AuthenticationMechanism Variable. /// public const uint SessionSecurityDiagnosticsType_AuthenticationMechanism = 2248; /// /// The identifier for the SessionSecurityDiagnosticsType_Encoding Variable. /// public const uint SessionSecurityDiagnosticsType_Encoding = 2249; /// /// The identifier for the SessionSecurityDiagnosticsType_TransportProtocol Variable. /// public const uint SessionSecurityDiagnosticsType_TransportProtocol = 2250; /// /// The identifier for the SessionSecurityDiagnosticsType_SecurityMode Variable. /// public const uint SessionSecurityDiagnosticsType_SecurityMode = 2251; /// /// The identifier for the SessionSecurityDiagnosticsType_SecurityPolicyUri Variable. /// public const uint SessionSecurityDiagnosticsType_SecurityPolicyUri = 2252; /// /// The identifier for the SessionSecurityDiagnosticsType_ClientCertificate Variable. /// public const uint SessionSecurityDiagnosticsType_ClientCertificate = 3058; /// /// The identifier for the OptionSetType_OptionSetValues Variable. /// public const uint OptionSetType_OptionSetValues = 11488; /// /// The identifier for the OptionSetType_BitMask Variable. /// public const uint OptionSetType_BitMask = 11701; /// /// The identifier for the Server_ServerArray Variable. /// public const uint Server_ServerArray = 2254; /// /// The identifier for the Server_NamespaceArray Variable. /// public const uint Server_NamespaceArray = 2255; /// /// The identifier for the Server_ServerStatus Variable. /// public const uint Server_ServerStatus = 2256; /// /// The identifier for the Server_ServerStatus_StartTime Variable. /// public const uint Server_ServerStatus_StartTime = 2257; /// /// The identifier for the Server_ServerStatus_CurrentTime Variable. /// public const uint Server_ServerStatus_CurrentTime = 2258; /// /// The identifier for the Server_ServerStatus_State Variable. /// public const uint Server_ServerStatus_State = 2259; /// /// The identifier for the Server_ServerStatus_BuildInfo Variable. /// public const uint Server_ServerStatus_BuildInfo = 2260; /// /// The identifier for the Server_ServerStatus_BuildInfo_ProductUri Variable. /// public const uint Server_ServerStatus_BuildInfo_ProductUri = 2262; /// /// The identifier for the Server_ServerStatus_BuildInfo_ManufacturerName Variable. /// public const uint Server_ServerStatus_BuildInfo_ManufacturerName = 2263; /// /// The identifier for the Server_ServerStatus_BuildInfo_ProductName Variable. /// public const uint Server_ServerStatus_BuildInfo_ProductName = 2261; /// /// The identifier for the Server_ServerStatus_BuildInfo_SoftwareVersion Variable. /// public const uint Server_ServerStatus_BuildInfo_SoftwareVersion = 2264; /// /// The identifier for the Server_ServerStatus_BuildInfo_BuildNumber Variable. /// public const uint Server_ServerStatus_BuildInfo_BuildNumber = 2265; /// /// The identifier for the Server_ServerStatus_BuildInfo_BuildDate Variable. /// public const uint Server_ServerStatus_BuildInfo_BuildDate = 2266; /// /// The identifier for the Server_ServerStatus_SecondsTillShutdown Variable. /// public const uint Server_ServerStatus_SecondsTillShutdown = 2992; /// /// The identifier for the Server_ServerStatus_ShutdownReason Variable. /// public const uint Server_ServerStatus_ShutdownReason = 2993; /// /// The identifier for the Server_ServiceLevel Variable. /// public const uint Server_ServiceLevel = 2267; /// /// The identifier for the Server_Auditing Variable. /// public const uint Server_Auditing = 2994; /// /// The identifier for the Server_ServerCapabilities_ServerProfileArray Variable. /// public const uint Server_ServerCapabilities_ServerProfileArray = 2269; /// /// The identifier for the Server_ServerCapabilities_LocaleIdArray Variable. /// public const uint Server_ServerCapabilities_LocaleIdArray = 2271; /// /// The identifier for the Server_ServerCapabilities_MinSupportedSampleRate Variable. /// public const uint Server_ServerCapabilities_MinSupportedSampleRate = 2272; /// /// The identifier for the Server_ServerCapabilities_MaxBrowseContinuationPoints Variable. /// public const uint Server_ServerCapabilities_MaxBrowseContinuationPoints = 2735; /// /// The identifier for the Server_ServerCapabilities_MaxQueryContinuationPoints Variable. /// public const uint Server_ServerCapabilities_MaxQueryContinuationPoints = 2736; /// /// The identifier for the Server_ServerCapabilities_MaxHistoryContinuationPoints Variable. /// public const uint Server_ServerCapabilities_MaxHistoryContinuationPoints = 2737; /// /// The identifier for the Server_ServerCapabilities_SoftwareCertificates Variable. /// public const uint Server_ServerCapabilities_SoftwareCertificates = 3704; /// /// The identifier for the Server_ServerCapabilities_MaxArrayLength Variable. /// public const uint Server_ServerCapabilities_MaxArrayLength = 11702; /// /// The identifier for the Server_ServerCapabilities_MaxStringLength Variable. /// public const uint Server_ServerCapabilities_MaxStringLength = 11703; /// /// The identifier for the Server_ServerCapabilities_OperationLimits_MaxNodesPerRead Variable. /// public const uint Server_ServerCapabilities_OperationLimits_MaxNodesPerRead = 11705; /// /// The identifier for the Server_ServerCapabilities_OperationLimits_MaxNodesPerHistoryReadData Variable. /// public const uint Server_ServerCapabilities_OperationLimits_MaxNodesPerHistoryReadData = 12165; /// /// The identifier for the Server_ServerCapabilities_OperationLimits_MaxNodesPerHistoryReadEvents Variable. /// public const uint Server_ServerCapabilities_OperationLimits_MaxNodesPerHistoryReadEvents = 12166; /// /// The identifier for the Server_ServerCapabilities_OperationLimits_MaxNodesPerWrite Variable. /// public const uint Server_ServerCapabilities_OperationLimits_MaxNodesPerWrite = 11707; /// /// The identifier for the Server_ServerCapabilities_OperationLimits_MaxNodesPerHistoryUpdateData Variable. /// public const uint Server_ServerCapabilities_OperationLimits_MaxNodesPerHistoryUpdateData = 12167; /// /// The identifier for the Server_ServerCapabilities_OperationLimits_MaxNodesPerHistoryUpdateEvents Variable. /// public const uint Server_ServerCapabilities_OperationLimits_MaxNodesPerHistoryUpdateEvents = 12168; /// /// The identifier for the Server_ServerCapabilities_OperationLimits_MaxNodesPerMethodCall Variable. /// public const uint Server_ServerCapabilities_OperationLimits_MaxNodesPerMethodCall = 11709; /// /// The identifier for the Server_ServerCapabilities_OperationLimits_MaxNodesPerBrowse Variable. /// public const uint Server_ServerCapabilities_OperationLimits_MaxNodesPerBrowse = 11710; /// /// The identifier for the Server_ServerCapabilities_OperationLimits_MaxNodesPerRegisterNodes Variable. /// public const uint Server_ServerCapabilities_OperationLimits_MaxNodesPerRegisterNodes = 11711; /// /// The identifier for the Server_ServerCapabilities_OperationLimits_MaxNodesPerTranslateBrowsePathsToNodeIds Variable. /// public const uint Server_ServerCapabilities_OperationLimits_MaxNodesPerTranslateBrowsePathsToNodeIds = 11712; /// /// The identifier for the Server_ServerCapabilities_OperationLimits_MaxNodesPerNodeManagement Variable. /// public const uint Server_ServerCapabilities_OperationLimits_MaxNodesPerNodeManagement = 11713; /// /// The identifier for the Server_ServerCapabilities_OperationLimits_MaxMonitoredItemsPerCall Variable. /// public const uint Server_ServerCapabilities_OperationLimits_MaxMonitoredItemsPerCall = 11714; /// /// The identifier for the Server_ServerDiagnostics_ServerDiagnosticsSummary Variable. /// public const uint Server_ServerDiagnostics_ServerDiagnosticsSummary = 2275; /// /// The identifier for the Server_ServerDiagnostics_ServerDiagnosticsSummary_ServerViewCount Variable. /// public const uint Server_ServerDiagnostics_ServerDiagnosticsSummary_ServerViewCount = 2276; /// /// The identifier for the Server_ServerDiagnostics_ServerDiagnosticsSummary_CurrentSessionCount Variable. /// public const uint Server_ServerDiagnostics_ServerDiagnosticsSummary_CurrentSessionCount = 2277; /// /// The identifier for the Server_ServerDiagnostics_ServerDiagnosticsSummary_CumulatedSessionCount Variable. /// public const uint Server_ServerDiagnostics_ServerDiagnosticsSummary_CumulatedSessionCount = 2278; /// /// The identifier for the Server_ServerDiagnostics_ServerDiagnosticsSummary_SecurityRejectedSessionCount Variable. /// public const uint Server_ServerDiagnostics_ServerDiagnosticsSummary_SecurityRejectedSessionCount = 2279; /// /// The identifier for the Server_ServerDiagnostics_ServerDiagnosticsSummary_RejectedSessionCount Variable. /// public const uint Server_ServerDiagnostics_ServerDiagnosticsSummary_RejectedSessionCount = 3705; /// /// The identifier for the Server_ServerDiagnostics_ServerDiagnosticsSummary_SessionTimeoutCount Variable. /// public const uint Server_ServerDiagnostics_ServerDiagnosticsSummary_SessionTimeoutCount = 2281; /// /// The identifier for the Server_ServerDiagnostics_ServerDiagnosticsSummary_SessionAbortCount Variable. /// public const uint Server_ServerDiagnostics_ServerDiagnosticsSummary_SessionAbortCount = 2282; /// /// The identifier for the Server_ServerDiagnostics_ServerDiagnosticsSummary_PublishingIntervalCount Variable. /// public const uint Server_ServerDiagnostics_ServerDiagnosticsSummary_PublishingIntervalCount = 2284; /// /// The identifier for the Server_ServerDiagnostics_ServerDiagnosticsSummary_CurrentSubscriptionCount Variable. /// public const uint Server_ServerDiagnostics_ServerDiagnosticsSummary_CurrentSubscriptionCount = 2285; /// /// The identifier for the Server_ServerDiagnostics_ServerDiagnosticsSummary_CumulatedSubscriptionCount Variable. /// public const uint Server_ServerDiagnostics_ServerDiagnosticsSummary_CumulatedSubscriptionCount = 2286; /// /// The identifier for the Server_ServerDiagnostics_ServerDiagnosticsSummary_SecurityRejectedRequestsCount Variable. /// public const uint Server_ServerDiagnostics_ServerDiagnosticsSummary_SecurityRejectedRequestsCount = 2287; /// /// The identifier for the Server_ServerDiagnostics_ServerDiagnosticsSummary_RejectedRequestsCount Variable. /// public const uint Server_ServerDiagnostics_ServerDiagnosticsSummary_RejectedRequestsCount = 2288; /// /// The identifier for the Server_ServerDiagnostics_SamplingIntervalDiagnosticsArray Variable. /// public const uint Server_ServerDiagnostics_SamplingIntervalDiagnosticsArray = 2289; /// /// The identifier for the Server_ServerDiagnostics_SubscriptionDiagnosticsArray Variable. /// public const uint Server_ServerDiagnostics_SubscriptionDiagnosticsArray = 2290; /// /// The identifier for the Server_ServerDiagnostics_SessionsDiagnosticsSummary_SessionDiagnosticsArray Variable. /// public const uint Server_ServerDiagnostics_SessionsDiagnosticsSummary_SessionDiagnosticsArray = 3707; /// /// The identifier for the Server_ServerDiagnostics_SessionsDiagnosticsSummary_SessionSecurityDiagnosticsArray Variable. /// public const uint Server_ServerDiagnostics_SessionsDiagnosticsSummary_SessionSecurityDiagnosticsArray = 3708; /// /// The identifier for the Server_ServerDiagnostics_EnabledFlag Variable. /// public const uint Server_ServerDiagnostics_EnabledFlag = 2294; /// /// The identifier for the Server_ServerRedundancy_RedundancySupport Variable. /// public const uint Server_ServerRedundancy_RedundancySupport = 3709; /// /// The identifier for the Server_Namespaces_AddressSpaceFile_Size Variable. /// public const uint Server_Namespaces_AddressSpaceFile_Size = 11717; /// /// The identifier for the Server_Namespaces_AddressSpaceFile_Writeable Variable. /// public const uint Server_Namespaces_AddressSpaceFile_Writeable = 11718; /// /// The identifier for the Server_Namespaces_AddressSpaceFile_UserWriteable Variable. /// public const uint Server_Namespaces_AddressSpaceFile_UserWriteable = 11719; /// /// The identifier for the Server_Namespaces_AddressSpaceFile_OpenCount Variable. /// public const uint Server_Namespaces_AddressSpaceFile_OpenCount = 11720; /// /// The identifier for the Server_Namespaces_AddressSpaceFile_Open_InputArguments Variable. /// public const uint Server_Namespaces_AddressSpaceFile_Open_InputArguments = 11722; /// /// The identifier for the Server_Namespaces_AddressSpaceFile_Open_OutputArguments Variable. /// public const uint Server_Namespaces_AddressSpaceFile_Open_OutputArguments = 11723; /// /// The identifier for the Server_Namespaces_AddressSpaceFile_Close_InputArguments Variable. /// public const uint Server_Namespaces_AddressSpaceFile_Close_InputArguments = 11725; /// /// The identifier for the Server_Namespaces_AddressSpaceFile_Read_InputArguments Variable. /// public const uint Server_Namespaces_AddressSpaceFile_Read_InputArguments = 11727; /// /// The identifier for the Server_Namespaces_AddressSpaceFile_Read_OutputArguments Variable. /// public const uint Server_Namespaces_AddressSpaceFile_Read_OutputArguments = 11728; /// /// The identifier for the Server_Namespaces_AddressSpaceFile_Write_InputArguments Variable. /// public const uint Server_Namespaces_AddressSpaceFile_Write_InputArguments = 11730; /// /// The identifier for the Server_Namespaces_AddressSpaceFile_GetPosition_InputArguments Variable. /// public const uint Server_Namespaces_AddressSpaceFile_GetPosition_InputArguments = 11732; /// /// The identifier for the Server_Namespaces_AddressSpaceFile_GetPosition_OutputArguments Variable. /// public const uint Server_Namespaces_AddressSpaceFile_GetPosition_OutputArguments = 11733; /// /// The identifier for the Server_Namespaces_AddressSpaceFile_SetPosition_InputArguments Variable. /// public const uint Server_Namespaces_AddressSpaceFile_SetPosition_InputArguments = 11735; /// /// The identifier for the Server_GetMonitoredItems_InputArguments Variable. /// public const uint Server_GetMonitoredItems_InputArguments = 11493; /// /// The identifier for the Server_GetMonitoredItems_OutputArguments Variable. /// public const uint Server_GetMonitoredItems_OutputArguments = 11494; /// /// The identifier for the Server_ServerRedundancy_CurrentServerId Variable. /// public const uint Server_ServerRedundancy_CurrentServerId = 11312; /// /// The identifier for the Server_ServerRedundancy_RedundantServerArray Variable. /// public const uint Server_ServerRedundancy_RedundantServerArray = 11313; /// /// The identifier for the Server_ServerRedundancy_ServerUriArray Variable. /// public const uint Server_ServerRedundancy_ServerUriArray = 11314; /// /// The identifier for the HistoryServerCapabilities_AccessHistoryDataCapability Variable. /// public const uint HistoryServerCapabilities_AccessHistoryDataCapability = 11193; /// /// The identifier for the HistoryServerCapabilities_AccessHistoryEventsCapability Variable. /// public const uint HistoryServerCapabilities_AccessHistoryEventsCapability = 11242; /// /// The identifier for the HistoryServerCapabilities_MaxReturnDataValues Variable. /// public const uint HistoryServerCapabilities_MaxReturnDataValues = 11273; /// /// The identifier for the HistoryServerCapabilities_MaxReturnEventValues Variable. /// public const uint HistoryServerCapabilities_MaxReturnEventValues = 11274; /// /// The identifier for the HistoryServerCapabilities_InsertDataCapability Variable. /// public const uint HistoryServerCapabilities_InsertDataCapability = 11196; /// /// The identifier for the HistoryServerCapabilities_ReplaceDataCapability Variable. /// public const uint HistoryServerCapabilities_ReplaceDataCapability = 11197; /// /// The identifier for the HistoryServerCapabilities_UpdateDataCapability Variable. /// public const uint HistoryServerCapabilities_UpdateDataCapability = 11198; /// /// The identifier for the HistoryServerCapabilities_DeleteRawCapability Variable. /// public const uint HistoryServerCapabilities_DeleteRawCapability = 11199; /// /// The identifier for the HistoryServerCapabilities_DeleteAtTimeCapability Variable. /// public const uint HistoryServerCapabilities_DeleteAtTimeCapability = 11200; /// /// The identifier for the HistoryServerCapabilities_InsertEventCapability Variable. /// public const uint HistoryServerCapabilities_InsertEventCapability = 11281; /// /// The identifier for the HistoryServerCapabilities_ReplaceEventCapability Variable. /// public const uint HistoryServerCapabilities_ReplaceEventCapability = 11282; /// /// The identifier for the HistoryServerCapabilities_UpdateEventCapability Variable. /// public const uint HistoryServerCapabilities_UpdateEventCapability = 11283; /// /// The identifier for the HistoryServerCapabilities_DeleteEventCapability Variable. /// public const uint HistoryServerCapabilities_DeleteEventCapability = 11502; /// /// The identifier for the HistoryServerCapabilities_InsertAnnotationCapability Variable. /// public const uint HistoryServerCapabilities_InsertAnnotationCapability = 11275; /// /// The identifier for the GetMonitoredItemsMethodType_InputArguments Variable. /// public const uint GetMonitoredItemsMethodType_InputArguments = 11496; /// /// The identifier for the GetMonitoredItemsMethodType_OutputArguments Variable. /// public const uint GetMonitoredItemsMethodType_OutputArguments = 11497; /// /// The identifier for the StateMachineType_CurrentState Variable. /// public const uint StateMachineType_CurrentState = 2769; /// /// The identifier for the StateMachineType_CurrentState_Id Variable. /// public const uint StateMachineType_CurrentState_Id = 3720; /// /// The identifier for the StateMachineType_LastTransition Variable. /// public const uint StateMachineType_LastTransition = 2770; /// /// The identifier for the StateMachineType_LastTransition_Id Variable. /// public const uint StateMachineType_LastTransition_Id = 3724; /// /// The identifier for the StateVariableType_Id Variable. /// public const uint StateVariableType_Id = 2756; /// /// The identifier for the StateVariableType_Name Variable. /// public const uint StateVariableType_Name = 2757; /// /// The identifier for the StateVariableType_Number Variable. /// public const uint StateVariableType_Number = 2758; /// /// The identifier for the StateVariableType_EffectiveDisplayName Variable. /// public const uint StateVariableType_EffectiveDisplayName = 2759; /// /// The identifier for the TransitionVariableType_Id Variable. /// public const uint TransitionVariableType_Id = 2763; /// /// The identifier for the TransitionVariableType_Name Variable. /// public const uint TransitionVariableType_Name = 2764; /// /// The identifier for the TransitionVariableType_Number Variable. /// public const uint TransitionVariableType_Number = 2765; /// /// The identifier for the TransitionVariableType_TransitionTime Variable. /// public const uint TransitionVariableType_TransitionTime = 2766; /// /// The identifier for the TransitionVariableType_EffectiveTransitionTime Variable. /// public const uint TransitionVariableType_EffectiveTransitionTime = 11456; /// /// The identifier for the FiniteStateMachineType_CurrentState Variable. /// public const uint FiniteStateMachineType_CurrentState = 2772; /// /// The identifier for the FiniteStateMachineType_LastTransition Variable. /// public const uint FiniteStateMachineType_LastTransition = 2773; /// /// The identifier for the FiniteStateVariableType_Id Variable. /// public const uint FiniteStateVariableType_Id = 2761; /// /// The identifier for the FiniteTransitionVariableType_Id Variable. /// public const uint FiniteTransitionVariableType_Id = 2768; /// /// The identifier for the StateType_StateNumber Variable. /// public const uint StateType_StateNumber = 2308; /// /// The identifier for the TransitionType_TransitionNumber Variable. /// public const uint TransitionType_TransitionNumber = 2312; /// /// The identifier for the TransitionEventType_Transition Variable. /// public const uint TransitionEventType_Transition = 2774; /// /// The identifier for the TransitionEventType_Transition_Id Variable. /// public const uint TransitionEventType_Transition_Id = 3754; /// /// The identifier for the TransitionEventType_FromState Variable. /// public const uint TransitionEventType_FromState = 2775; /// /// The identifier for the TransitionEventType_FromState_Id Variable. /// public const uint TransitionEventType_FromState_Id = 3746; /// /// The identifier for the TransitionEventType_ToState Variable. /// public const uint TransitionEventType_ToState = 2776; /// /// The identifier for the TransitionEventType_ToState_Id Variable. /// public const uint TransitionEventType_ToState_Id = 3750; /// /// The identifier for the AuditUpdateStateEventType_OldStateId Variable. /// public const uint AuditUpdateStateEventType_OldStateId = 2777; /// /// The identifier for the AuditUpdateStateEventType_NewStateId Variable. /// public const uint AuditUpdateStateEventType_NewStateId = 2778; /// /// The identifier for the OpenFileMode_EnumValues Variable. /// public const uint OpenFileMode_EnumValues = 11940; /// /// The identifier for the OpenMethodType_InputArguments Variable. /// public const uint OpenMethodType_InputArguments = 11739; /// /// The identifier for the OpenMethodType_OutputArguments Variable. /// public const uint OpenMethodType_OutputArguments = 11740; /// /// The identifier for the CloseMethodType_InputArguments Variable. /// public const uint CloseMethodType_InputArguments = 11742; /// /// The identifier for the ReadMethodType_InputArguments Variable. /// public const uint ReadMethodType_InputArguments = 11744; /// /// The identifier for the ReadMethodType_OutputArguments Variable. /// public const uint ReadMethodType_OutputArguments = 11745; /// /// The identifier for the WriteMethodType_InputArguments Variable. /// public const uint WriteMethodType_InputArguments = 11747; /// /// The identifier for the GetPositionMethodType_InputArguments Variable. /// public const uint GetPositionMethodType_InputArguments = 11749; /// /// The identifier for the GetPositionMethodType_OutputArguments Variable. /// public const uint GetPositionMethodType_OutputArguments = 11750; /// /// The identifier for the SetPositionMethodType_InputArguments Variable. /// public const uint SetPositionMethodType_InputArguments = 11752; /// /// The identifier for the DataItemType_Definition Variable. /// public const uint DataItemType_Definition = 2366; /// /// The identifier for the DataItemType_ValuePrecision Variable. /// public const uint DataItemType_ValuePrecision = 2367; /// /// The identifier for the AnalogItemType_InstrumentRange Variable. /// public const uint AnalogItemType_InstrumentRange = 2370; /// /// The identifier for the AnalogItemType_EURange Variable. /// public const uint AnalogItemType_EURange = 2369; /// /// The identifier for the AnalogItemType_EngineeringUnits Variable. /// public const uint AnalogItemType_EngineeringUnits = 2371; /// /// The identifier for the TwoStateDiscreteType_FalseState Variable. /// public const uint TwoStateDiscreteType_FalseState = 2374; /// /// The identifier for the TwoStateDiscreteType_TrueState Variable. /// public const uint TwoStateDiscreteType_TrueState = 2375; /// /// The identifier for the MultiStateDiscreteType_EnumStrings Variable. /// public const uint MultiStateDiscreteType_EnumStrings = 2377; /// /// The identifier for the MultiStateValueDiscreteType_EnumValues Variable. /// public const uint MultiStateValueDiscreteType_EnumValues = 11241; /// /// The identifier for the MultiStateValueDiscreteType_ValueAsText Variable. /// public const uint MultiStateValueDiscreteType_ValueAsText = 11461; /// /// The identifier for the ArrayItemType_InstrumentRange Variable. /// public const uint ArrayItemType_InstrumentRange = 12024; /// /// The identifier for the ArrayItemType_EURange Variable. /// public const uint ArrayItemType_EURange = 12025; /// /// The identifier for the ArrayItemType_EngineeringUnits Variable. /// public const uint ArrayItemType_EngineeringUnits = 12026; /// /// The identifier for the ArrayItemType_Title Variable. /// public const uint ArrayItemType_Title = 12027; /// /// The identifier for the ArrayItemType_AxisScaleType Variable. /// public const uint ArrayItemType_AxisScaleType = 12028; /// /// The identifier for the YArrayItemType_XAxisDefinition Variable. /// public const uint YArrayItemType_XAxisDefinition = 12037; /// /// The identifier for the XYArrayItemType_XAxisDefinition Variable. /// public const uint XYArrayItemType_XAxisDefinition = 12046; /// /// The identifier for the ImageItemType_XAxisDefinition Variable. /// public const uint ImageItemType_XAxisDefinition = 12055; /// /// The identifier for the ImageItemType_YAxisDefinition Variable. /// public const uint ImageItemType_YAxisDefinition = 12056; /// /// The identifier for the CubeItemType_XAxisDefinition Variable. /// public const uint CubeItemType_XAxisDefinition = 12065; /// /// The identifier for the CubeItemType_YAxisDefinition Variable. /// public const uint CubeItemType_YAxisDefinition = 12066; /// /// The identifier for the CubeItemType_ZAxisDefinition Variable. /// public const uint CubeItemType_ZAxisDefinition = 12067; /// /// The identifier for the NDimensionArrayItemType_AxisDefinition Variable. /// public const uint NDimensionArrayItemType_AxisDefinition = 12076; /// /// The identifier for the TwoStateVariableType_Id Variable. /// public const uint TwoStateVariableType_Id = 8996; /// /// The identifier for the TwoStateVariableType_TransitionTime Variable. /// public const uint TwoStateVariableType_TransitionTime = 9000; /// /// The identifier for the TwoStateVariableType_EffectiveTransitionTime Variable. /// public const uint TwoStateVariableType_EffectiveTransitionTime = 9001; /// /// The identifier for the TwoStateVariableType_TrueState Variable. /// public const uint TwoStateVariableType_TrueState = 11110; /// /// The identifier for the TwoStateVariableType_FalseState Variable. /// public const uint TwoStateVariableType_FalseState = 11111; /// /// The identifier for the ConditionVariableType_SourceTimestamp Variable. /// public const uint ConditionVariableType_SourceTimestamp = 9003; /// /// The identifier for the ConditionType_ConditionClassId Variable. /// public const uint ConditionType_ConditionClassId = 11112; /// /// The identifier for the ConditionType_ConditionClassName Variable. /// public const uint ConditionType_ConditionClassName = 11113; /// /// The identifier for the ConditionType_ConditionName Variable. /// public const uint ConditionType_ConditionName = 9009; /// /// The identifier for the ConditionType_BranchId Variable. /// public const uint ConditionType_BranchId = 9010; /// /// The identifier for the ConditionType_Retain Variable. /// public const uint ConditionType_Retain = 3874; /// /// The identifier for the ConditionType_EnabledState Variable. /// public const uint ConditionType_EnabledState = 9011; /// /// The identifier for the ConditionType_EnabledState_Id Variable. /// public const uint ConditionType_EnabledState_Id = 9012; /// /// The identifier for the ConditionType_EnabledState_EffectiveDisplayName Variable. /// public const uint ConditionType_EnabledState_EffectiveDisplayName = 9015; /// /// The identifier for the ConditionType_EnabledState_TransitionTime Variable. /// public const uint ConditionType_EnabledState_TransitionTime = 9016; /// /// The identifier for the ConditionType_EnabledState_EffectiveTransitionTime Variable. /// public const uint ConditionType_EnabledState_EffectiveTransitionTime = 9017; /// /// The identifier for the ConditionType_EnabledState_TrueState Variable. /// public const uint ConditionType_EnabledState_TrueState = 9018; /// /// The identifier for the ConditionType_EnabledState_FalseState Variable. /// public const uint ConditionType_EnabledState_FalseState = 9019; /// /// The identifier for the ConditionType_Quality Variable. /// public const uint ConditionType_Quality = 9020; /// /// The identifier for the ConditionType_Quality_SourceTimestamp Variable. /// public const uint ConditionType_Quality_SourceTimestamp = 9021; /// /// The identifier for the ConditionType_LastSeverity Variable. /// public const uint ConditionType_LastSeverity = 9022; /// /// The identifier for the ConditionType_LastSeverity_SourceTimestamp Variable. /// public const uint ConditionType_LastSeverity_SourceTimestamp = 9023; /// /// The identifier for the ConditionType_Comment Variable. /// public const uint ConditionType_Comment = 9024; /// /// The identifier for the ConditionType_Comment_SourceTimestamp Variable. /// public const uint ConditionType_Comment_SourceTimestamp = 9025; /// /// The identifier for the ConditionType_ClientUserId Variable. /// public const uint ConditionType_ClientUserId = 9026; /// /// The identifier for the ConditionType_AddComment_InputArguments Variable. /// public const uint ConditionType_AddComment_InputArguments = 9030; /// /// The identifier for the ConditionType_ConditionRefresh_InputArguments Variable. /// public const uint ConditionType_ConditionRefresh_InputArguments = 3876; /// /// The identifier for the ConditionRefreshMethodType_InputArguments Variable. /// public const uint ConditionRefreshMethodType_InputArguments = 9008; /// /// The identifier for the AddCommentMethodType_InputArguments Variable. /// public const uint AddCommentMethodType_InputArguments = 3864; /// /// The identifier for the DialogConditionType_EnabledState Variable. /// public const uint DialogConditionType_EnabledState = 9035; /// /// The identifier for the DialogConditionType_DialogState Variable. /// public const uint DialogConditionType_DialogState = 9055; /// /// The identifier for the DialogConditionType_DialogState_Id Variable. /// public const uint DialogConditionType_DialogState_Id = 9056; /// /// The identifier for the DialogConditionType_DialogState_TransitionTime Variable. /// public const uint DialogConditionType_DialogState_TransitionTime = 9060; /// /// The identifier for the DialogConditionType_DialogState_TrueState Variable. /// public const uint DialogConditionType_DialogState_TrueState = 9062; /// /// The identifier for the DialogConditionType_DialogState_FalseState Variable. /// public const uint DialogConditionType_DialogState_FalseState = 9063; /// /// The identifier for the DialogConditionType_Prompt Variable. /// public const uint DialogConditionType_Prompt = 2831; /// /// The identifier for the DialogConditionType_ResponseOptionSet Variable. /// public const uint DialogConditionType_ResponseOptionSet = 9064; /// /// The identifier for the DialogConditionType_DefaultResponse Variable. /// public const uint DialogConditionType_DefaultResponse = 9065; /// /// The identifier for the DialogConditionType_OkResponse Variable. /// public const uint DialogConditionType_OkResponse = 9066; /// /// The identifier for the DialogConditionType_CancelResponse Variable. /// public const uint DialogConditionType_CancelResponse = 9067; /// /// The identifier for the DialogConditionType_LastResponse Variable. /// public const uint DialogConditionType_LastResponse = 9068; /// /// The identifier for the DialogConditionType_Respond_InputArguments Variable. /// public const uint DialogConditionType_Respond_InputArguments = 9070; /// /// The identifier for the DialogResponseMethodType_InputArguments Variable. /// public const uint DialogResponseMethodType_InputArguments = 9032; /// /// The identifier for the AcknowledgeableConditionType_EnabledState Variable. /// public const uint AcknowledgeableConditionType_EnabledState = 9073; /// /// The identifier for the AcknowledgeableConditionType_AckedState Variable. /// public const uint AcknowledgeableConditionType_AckedState = 9093; /// /// The identifier for the AcknowledgeableConditionType_AckedState_Id Variable. /// public const uint AcknowledgeableConditionType_AckedState_Id = 9094; /// /// The identifier for the AcknowledgeableConditionType_AckedState_TransitionTime Variable. /// public const uint AcknowledgeableConditionType_AckedState_TransitionTime = 9098; /// /// The identifier for the AcknowledgeableConditionType_AckedState_TrueState Variable. /// public const uint AcknowledgeableConditionType_AckedState_TrueState = 9100; /// /// The identifier for the AcknowledgeableConditionType_AckedState_FalseState Variable. /// public const uint AcknowledgeableConditionType_AckedState_FalseState = 9101; /// /// The identifier for the AcknowledgeableConditionType_ConfirmedState Variable. /// public const uint AcknowledgeableConditionType_ConfirmedState = 9102; /// /// The identifier for the AcknowledgeableConditionType_ConfirmedState_Id Variable. /// public const uint AcknowledgeableConditionType_ConfirmedState_Id = 9103; /// /// The identifier for the AcknowledgeableConditionType_ConfirmedState_TransitionTime Variable. /// public const uint AcknowledgeableConditionType_ConfirmedState_TransitionTime = 9107; /// /// The identifier for the AcknowledgeableConditionType_ConfirmedState_TrueState Variable. /// public const uint AcknowledgeableConditionType_ConfirmedState_TrueState = 9109; /// /// The identifier for the AcknowledgeableConditionType_ConfirmedState_FalseState Variable. /// public const uint AcknowledgeableConditionType_ConfirmedState_FalseState = 9110; /// /// The identifier for the AcknowledgeableConditionType_Acknowledge_InputArguments Variable. /// public const uint AcknowledgeableConditionType_Acknowledge_InputArguments = 9112; /// /// The identifier for the AcknowledgeableConditionType_Confirm_InputArguments Variable. /// public const uint AcknowledgeableConditionType_Confirm_InputArguments = 9114; /// /// The identifier for the AlarmConditionType_EnabledState Variable. /// public const uint AlarmConditionType_EnabledState = 9118; /// /// The identifier for the AlarmConditionType_ActiveState Variable. /// public const uint AlarmConditionType_ActiveState = 9160; /// /// The identifier for the AlarmConditionType_ActiveState_Id Variable. /// public const uint AlarmConditionType_ActiveState_Id = 9161; /// /// The identifier for the AlarmConditionType_ActiveState_EffectiveDisplayName Variable. /// public const uint AlarmConditionType_ActiveState_EffectiveDisplayName = 9164; /// /// The identifier for the AlarmConditionType_ActiveState_TransitionTime Variable. /// public const uint AlarmConditionType_ActiveState_TransitionTime = 9165; /// /// The identifier for the AlarmConditionType_ActiveState_EffectiveTransitionTime Variable. /// public const uint AlarmConditionType_ActiveState_EffectiveTransitionTime = 9166; /// /// The identifier for the AlarmConditionType_ActiveState_TrueState Variable. /// public const uint AlarmConditionType_ActiveState_TrueState = 9167; /// /// The identifier for the AlarmConditionType_ActiveState_FalseState Variable. /// public const uint AlarmConditionType_ActiveState_FalseState = 9168; /// /// The identifier for the AlarmConditionType_InputNode Variable. /// public const uint AlarmConditionType_InputNode = 11120; /// /// The identifier for the AlarmConditionType_SuppressedState Variable. /// public const uint AlarmConditionType_SuppressedState = 9169; /// /// The identifier for the AlarmConditionType_SuppressedState_TransitionTime Variable. /// public const uint AlarmConditionType_SuppressedState_TransitionTime = 9174; /// /// The identifier for the AlarmConditionType_SuppressedState_TrueState Variable. /// public const uint AlarmConditionType_SuppressedState_TrueState = 9176; /// /// The identifier for the AlarmConditionType_SuppressedState_FalseState Variable. /// public const uint AlarmConditionType_SuppressedState_FalseState = 9177; /// /// The identifier for the AlarmConditionType_ShelvingState_LastTransition Variable. /// public const uint AlarmConditionType_ShelvingState_LastTransition = 9184; /// /// The identifier for the AlarmConditionType_ShelvingState_LastTransition_TransitionTime Variable. /// public const uint AlarmConditionType_ShelvingState_LastTransition_TransitionTime = 9188; /// /// The identifier for the AlarmConditionType_ShelvingState_UnshelveTime Variable. /// public const uint AlarmConditionType_ShelvingState_UnshelveTime = 9189; /// /// The identifier for the AlarmConditionType_ShelvingState_TimedShelve_InputArguments Variable. /// public const uint AlarmConditionType_ShelvingState_TimedShelve_InputArguments = 9214; /// /// The identifier for the AlarmConditionType_SuppressedOrShelved Variable. /// public const uint AlarmConditionType_SuppressedOrShelved = 9215; /// /// The identifier for the AlarmConditionType_MaxTimeShelved Variable. /// public const uint AlarmConditionType_MaxTimeShelved = 9216; /// /// The identifier for the ShelvedStateMachineType_UnshelveTime Variable. /// public const uint ShelvedStateMachineType_UnshelveTime = 9115; /// /// The identifier for the ShelvedStateMachineType_Unshelved_StateNumber Variable. /// public const uint ShelvedStateMachineType_Unshelved_StateNumber = 6098; /// /// The identifier for the ShelvedStateMachineType_TimedShelved_StateNumber Variable. /// public const uint ShelvedStateMachineType_TimedShelved_StateNumber = 6100; /// /// The identifier for the ShelvedStateMachineType_OneShotShelved_StateNumber Variable. /// public const uint ShelvedStateMachineType_OneShotShelved_StateNumber = 6101; /// /// The identifier for the ShelvedStateMachineType_UnshelvedToTimedShelved_TransitionNumber Variable. /// public const uint ShelvedStateMachineType_UnshelvedToTimedShelved_TransitionNumber = 11322; /// /// The identifier for the ShelvedStateMachineType_UnshelvedToOneShotShelved_TransitionNumber Variable. /// public const uint ShelvedStateMachineType_UnshelvedToOneShotShelved_TransitionNumber = 11323; /// /// The identifier for the ShelvedStateMachineType_TimedShelvedToUnshelved_TransitionNumber Variable. /// public const uint ShelvedStateMachineType_TimedShelvedToUnshelved_TransitionNumber = 11324; /// /// The identifier for the ShelvedStateMachineType_TimedShelvedToOneShotShelved_TransitionNumber Variable. /// public const uint ShelvedStateMachineType_TimedShelvedToOneShotShelved_TransitionNumber = 11325; /// /// The identifier for the ShelvedStateMachineType_OneShotShelvedToUnshelved_TransitionNumber Variable. /// public const uint ShelvedStateMachineType_OneShotShelvedToUnshelved_TransitionNumber = 11326; /// /// The identifier for the ShelvedStateMachineType_OneShotShelvedToTimedShelved_TransitionNumber Variable. /// public const uint ShelvedStateMachineType_OneShotShelvedToTimedShelved_TransitionNumber = 11327; /// /// The identifier for the ShelvedStateMachineType_TimedShelve_InputArguments Variable. /// public const uint ShelvedStateMachineType_TimedShelve_InputArguments = 2991; /// /// The identifier for the TimedShelveMethodType_InputArguments Variable. /// public const uint TimedShelveMethodType_InputArguments = 6103; /// /// The identifier for the LimitAlarmType_HighHighLimit Variable. /// public const uint LimitAlarmType_HighHighLimit = 11124; /// /// The identifier for the LimitAlarmType_HighLimit Variable. /// public const uint LimitAlarmType_HighLimit = 11125; /// /// The identifier for the LimitAlarmType_LowLimit Variable. /// public const uint LimitAlarmType_LowLimit = 11126; /// /// The identifier for the LimitAlarmType_LowLowLimit Variable. /// public const uint LimitAlarmType_LowLowLimit = 11127; /// /// The identifier for the ExclusiveLimitStateMachineType_HighHigh_StateNumber Variable. /// public const uint ExclusiveLimitStateMachineType_HighHigh_StateNumber = 9330; /// /// The identifier for the ExclusiveLimitStateMachineType_High_StateNumber Variable. /// public const uint ExclusiveLimitStateMachineType_High_StateNumber = 9332; /// /// The identifier for the ExclusiveLimitStateMachineType_Low_StateNumber Variable. /// public const uint ExclusiveLimitStateMachineType_Low_StateNumber = 9334; /// /// The identifier for the ExclusiveLimitStateMachineType_LowLow_StateNumber Variable. /// public const uint ExclusiveLimitStateMachineType_LowLow_StateNumber = 9336; /// /// The identifier for the ExclusiveLimitStateMachineType_LowLowToLow_TransitionNumber Variable. /// public const uint ExclusiveLimitStateMachineType_LowLowToLow_TransitionNumber = 11340; /// /// The identifier for the ExclusiveLimitStateMachineType_LowToLowLow_TransitionNumber Variable. /// public const uint ExclusiveLimitStateMachineType_LowToLowLow_TransitionNumber = 11341; /// /// The identifier for the ExclusiveLimitStateMachineType_HighHighToHigh_TransitionNumber Variable. /// public const uint ExclusiveLimitStateMachineType_HighHighToHigh_TransitionNumber = 11342; /// /// The identifier for the ExclusiveLimitStateMachineType_HighToHighHigh_TransitionNumber Variable. /// public const uint ExclusiveLimitStateMachineType_HighToHighHigh_TransitionNumber = 11343; /// /// The identifier for the ExclusiveLimitAlarmType_ActiveState Variable. /// public const uint ExclusiveLimitAlarmType_ActiveState = 9398; /// /// The identifier for the ExclusiveLimitAlarmType_LimitState_LastTransition Variable. /// public const uint ExclusiveLimitAlarmType_LimitState_LastTransition = 9461; /// /// The identifier for the ExclusiveLimitAlarmType_LimitState_LastTransition_TransitionTime Variable. /// public const uint ExclusiveLimitAlarmType_LimitState_LastTransition_TransitionTime = 9465; /// /// The identifier for the NonExclusiveLimitAlarmType_ActiveState Variable. /// public const uint NonExclusiveLimitAlarmType_ActiveState = 9963; /// /// The identifier for the NonExclusiveLimitAlarmType_HighHighState Variable. /// public const uint NonExclusiveLimitAlarmType_HighHighState = 10020; /// /// The identifier for the NonExclusiveLimitAlarmType_HighHighState_TransitionTime Variable. /// public const uint NonExclusiveLimitAlarmType_HighHighState_TransitionTime = 10025; /// /// The identifier for the NonExclusiveLimitAlarmType_HighHighState_TrueState Variable. /// public const uint NonExclusiveLimitAlarmType_HighHighState_TrueState = 10027; /// /// The identifier for the NonExclusiveLimitAlarmType_HighHighState_FalseState Variable. /// public const uint NonExclusiveLimitAlarmType_HighHighState_FalseState = 10028; /// /// The identifier for the NonExclusiveLimitAlarmType_HighState Variable. /// public const uint NonExclusiveLimitAlarmType_HighState = 10029; /// /// The identifier for the NonExclusiveLimitAlarmType_HighState_TransitionTime Variable. /// public const uint NonExclusiveLimitAlarmType_HighState_TransitionTime = 10034; /// /// The identifier for the NonExclusiveLimitAlarmType_HighState_TrueState Variable. /// public const uint NonExclusiveLimitAlarmType_HighState_TrueState = 10036; /// /// The identifier for the NonExclusiveLimitAlarmType_HighState_FalseState Variable. /// public const uint NonExclusiveLimitAlarmType_HighState_FalseState = 10037; /// /// The identifier for the NonExclusiveLimitAlarmType_LowState Variable. /// public const uint NonExclusiveLimitAlarmType_LowState = 10038; /// /// The identifier for the NonExclusiveLimitAlarmType_LowState_TransitionTime Variable. /// public const uint NonExclusiveLimitAlarmType_LowState_TransitionTime = 10043; /// /// The identifier for the NonExclusiveLimitAlarmType_LowState_TrueState Variable. /// public const uint NonExclusiveLimitAlarmType_LowState_TrueState = 10045; /// /// The identifier for the NonExclusiveLimitAlarmType_LowState_FalseState Variable. /// public const uint NonExclusiveLimitAlarmType_LowState_FalseState = 10046; /// /// The identifier for the NonExclusiveLimitAlarmType_LowLowState Variable. /// public const uint NonExclusiveLimitAlarmType_LowLowState = 10047; /// /// The identifier for the NonExclusiveLimitAlarmType_LowLowState_TransitionTime Variable. /// public const uint NonExclusiveLimitAlarmType_LowLowState_TransitionTime = 10052; /// /// The identifier for the NonExclusiveLimitAlarmType_LowLowState_TrueState Variable. /// public const uint NonExclusiveLimitAlarmType_LowLowState_TrueState = 10054; /// /// The identifier for the NonExclusiveLimitAlarmType_LowLowState_FalseState Variable. /// public const uint NonExclusiveLimitAlarmType_LowLowState_FalseState = 10055; /// /// The identifier for the NonExclusiveDeviationAlarmType_SetpointNode Variable. /// public const uint NonExclusiveDeviationAlarmType_SetpointNode = 10522; /// /// The identifier for the ExclusiveDeviationAlarmType_SetpointNode Variable. /// public const uint ExclusiveDeviationAlarmType_SetpointNode = 9905; /// /// The identifier for the OffNormalAlarmType_NormalState Variable. /// public const uint OffNormalAlarmType_NormalState = 11158; /// /// The identifier for the AuditConditionCommentEventType_EventId Variable. /// public const uint AuditConditionCommentEventType_EventId = 4170; /// /// The identifier for the AuditConditionCommentEventType_Comment Variable. /// public const uint AuditConditionCommentEventType_Comment = 11851; /// /// The identifier for the AuditConditionRespondEventType_SelectedResponse Variable. /// public const uint AuditConditionRespondEventType_SelectedResponse = 11852; /// /// The identifier for the AuditConditionAcknowledgeEventType_EventId Variable. /// public const uint AuditConditionAcknowledgeEventType_EventId = 8945; /// /// The identifier for the AuditConditionAcknowledgeEventType_Comment Variable. /// public const uint AuditConditionAcknowledgeEventType_Comment = 11853; /// /// The identifier for the AuditConditionConfirmEventType_EventId Variable. /// public const uint AuditConditionConfirmEventType_EventId = 8962; /// /// The identifier for the AuditConditionConfirmEventType_Comment Variable. /// public const uint AuditConditionConfirmEventType_Comment = 11854; /// /// The identifier for the AuditConditionShelvingEventType_ShelvingTime Variable. /// public const uint AuditConditionShelvingEventType_ShelvingTime = 11855; /// /// The identifier for the ProgramStateMachineType_CurrentState Variable. /// public const uint ProgramStateMachineType_CurrentState = 3830; /// /// The identifier for the ProgramStateMachineType_CurrentState_Number Variable. /// public const uint ProgramStateMachineType_CurrentState_Number = 3833; /// /// The identifier for the ProgramStateMachineType_LastTransition Variable. /// public const uint ProgramStateMachineType_LastTransition = 3835; /// /// The identifier for the ProgramStateMachineType_LastTransition_Number Variable. /// public const uint ProgramStateMachineType_LastTransition_Number = 3838; /// /// The identifier for the ProgramStateMachineType_LastTransition_TransitionTime Variable. /// public const uint ProgramStateMachineType_LastTransition_TransitionTime = 3839; /// /// The identifier for the ProgramStateMachineType_Creatable Variable. /// public const uint ProgramStateMachineType_Creatable = 2392; /// /// The identifier for the ProgramStateMachineType_Deletable Variable. /// public const uint ProgramStateMachineType_Deletable = 2393; /// /// The identifier for the ProgramStateMachineType_AutoDelete Variable. /// public const uint ProgramStateMachineType_AutoDelete = 2394; /// /// The identifier for the ProgramStateMachineType_RecycleCount Variable. /// public const uint ProgramStateMachineType_RecycleCount = 2395; /// /// The identifier for the ProgramStateMachineType_InstanceCount Variable. /// public const uint ProgramStateMachineType_InstanceCount = 2396; /// /// The identifier for the ProgramStateMachineType_MaxInstanceCount Variable. /// public const uint ProgramStateMachineType_MaxInstanceCount = 2397; /// /// The identifier for the ProgramStateMachineType_MaxRecycleCount Variable. /// public const uint ProgramStateMachineType_MaxRecycleCount = 2398; /// /// The identifier for the ProgramStateMachineType_ProgramDiagnostics Variable. /// public const uint ProgramStateMachineType_ProgramDiagnostics = 2399; /// /// The identifier for the ProgramStateMachineType_ProgramDiagnostics_CreateSessionId Variable. /// public const uint ProgramStateMachineType_ProgramDiagnostics_CreateSessionId = 3840; /// /// The identifier for the ProgramStateMachineType_ProgramDiagnostics_CreateClientName Variable. /// public const uint ProgramStateMachineType_ProgramDiagnostics_CreateClientName = 3841; /// /// The identifier for the ProgramStateMachineType_ProgramDiagnostics_InvocationCreationTime Variable. /// public const uint ProgramStateMachineType_ProgramDiagnostics_InvocationCreationTime = 3842; /// /// The identifier for the ProgramStateMachineType_ProgramDiagnostics_LastTransitionTime Variable. /// public const uint ProgramStateMachineType_ProgramDiagnostics_LastTransitionTime = 3843; /// /// The identifier for the ProgramStateMachineType_ProgramDiagnostics_LastMethodCall Variable. /// public const uint ProgramStateMachineType_ProgramDiagnostics_LastMethodCall = 3844; /// /// The identifier for the ProgramStateMachineType_ProgramDiagnostics_LastMethodSessionId Variable. /// public const uint ProgramStateMachineType_ProgramDiagnostics_LastMethodSessionId = 3845; /// /// The identifier for the ProgramStateMachineType_ProgramDiagnostics_LastMethodInputArguments Variable. /// public const uint ProgramStateMachineType_ProgramDiagnostics_LastMethodInputArguments = 3846; /// /// The identifier for the ProgramStateMachineType_ProgramDiagnostics_LastMethodOutputArguments Variable. /// public const uint ProgramStateMachineType_ProgramDiagnostics_LastMethodOutputArguments = 3847; /// /// The identifier for the ProgramStateMachineType_ProgramDiagnostics_LastMethodCallTime Variable. /// public const uint ProgramStateMachineType_ProgramDiagnostics_LastMethodCallTime = 3848; /// /// The identifier for the ProgramStateMachineType_ProgramDiagnostics_LastMethodReturnStatus Variable. /// public const uint ProgramStateMachineType_ProgramDiagnostics_LastMethodReturnStatus = 3849; /// /// The identifier for the ProgramStateMachineType_Ready_StateNumber Variable. /// public const uint ProgramStateMachineType_Ready_StateNumber = 2401; /// /// The identifier for the ProgramStateMachineType_Running_StateNumber Variable. /// public const uint ProgramStateMachineType_Running_StateNumber = 2403; /// /// The identifier for the ProgramStateMachineType_Suspended_StateNumber Variable. /// public const uint ProgramStateMachineType_Suspended_StateNumber = 2405; /// /// The identifier for the ProgramStateMachineType_Halted_StateNumber Variable. /// public const uint ProgramStateMachineType_Halted_StateNumber = 2407; /// /// The identifier for the ProgramStateMachineType_HaltedToReady_TransitionNumber Variable. /// public const uint ProgramStateMachineType_HaltedToReady_TransitionNumber = 2409; /// /// The identifier for the ProgramStateMachineType_ReadyToRunning_TransitionNumber Variable. /// public const uint ProgramStateMachineType_ReadyToRunning_TransitionNumber = 2411; /// /// The identifier for the ProgramStateMachineType_RunningToHalted_TransitionNumber Variable. /// public const uint ProgramStateMachineType_RunningToHalted_TransitionNumber = 2413; /// /// The identifier for the ProgramStateMachineType_RunningToReady_TransitionNumber Variable. /// public const uint ProgramStateMachineType_RunningToReady_TransitionNumber = 2415; /// /// The identifier for the ProgramStateMachineType_RunningToSuspended_TransitionNumber Variable. /// public const uint ProgramStateMachineType_RunningToSuspended_TransitionNumber = 2417; /// /// The identifier for the ProgramStateMachineType_SuspendedToRunning_TransitionNumber Variable. /// public const uint ProgramStateMachineType_SuspendedToRunning_TransitionNumber = 2419; /// /// The identifier for the ProgramStateMachineType_SuspendedToHalted_TransitionNumber Variable. /// public const uint ProgramStateMachineType_SuspendedToHalted_TransitionNumber = 2421; /// /// The identifier for the ProgramStateMachineType_SuspendedToReady_TransitionNumber Variable. /// public const uint ProgramStateMachineType_SuspendedToReady_TransitionNumber = 2423; /// /// The identifier for the ProgramStateMachineType_ReadyToHalted_TransitionNumber Variable. /// public const uint ProgramStateMachineType_ReadyToHalted_TransitionNumber = 2425; /// /// The identifier for the ProgramTransitionEventType_IntermediateResult Variable. /// public const uint ProgramTransitionEventType_IntermediateResult = 2379; /// /// The identifier for the AuditProgramTransitionEventType_TransitionNumber Variable. /// public const uint AuditProgramTransitionEventType_TransitionNumber = 11875; /// /// The identifier for the ProgramTransitionAuditEventType_Transition Variable. /// public const uint ProgramTransitionAuditEventType_Transition = 3825; /// /// The identifier for the ProgramDiagnosticType_CreateSessionId Variable. /// public const uint ProgramDiagnosticType_CreateSessionId = 2381; /// /// The identifier for the ProgramDiagnosticType_CreateClientName Variable. /// public const uint ProgramDiagnosticType_CreateClientName = 2382; /// /// The identifier for the ProgramDiagnosticType_InvocationCreationTime Variable. /// public const uint ProgramDiagnosticType_InvocationCreationTime = 2383; /// /// The identifier for the ProgramDiagnosticType_LastTransitionTime Variable. /// public const uint ProgramDiagnosticType_LastTransitionTime = 2384; /// /// The identifier for the ProgramDiagnosticType_LastMethodCall Variable. /// public const uint ProgramDiagnosticType_LastMethodCall = 2385; /// /// The identifier for the ProgramDiagnosticType_LastMethodSessionId Variable. /// public const uint ProgramDiagnosticType_LastMethodSessionId = 2386; /// /// The identifier for the ProgramDiagnosticType_LastMethodInputArguments Variable. /// public const uint ProgramDiagnosticType_LastMethodInputArguments = 2387; /// /// The identifier for the ProgramDiagnosticType_LastMethodOutputArguments Variable. /// public const uint ProgramDiagnosticType_LastMethodOutputArguments = 2388; /// /// The identifier for the ProgramDiagnosticType_LastMethodCallTime Variable. /// public const uint ProgramDiagnosticType_LastMethodCallTime = 2389; /// /// The identifier for the ProgramDiagnosticType_LastMethodReturnStatus Variable. /// public const uint ProgramDiagnosticType_LastMethodReturnStatus = 2390; /// /// The identifier for the Annotations Variable. /// public const uint Annotations = 11214; /// /// The identifier for the HistoricalDataConfigurationType_AggregateConfiguration_TreatUncertainAsBad Variable. /// public const uint HistoricalDataConfigurationType_AggregateConfiguration_TreatUncertainAsBad = 11168; /// /// The identifier for the HistoricalDataConfigurationType_AggregateConfiguration_PercentDataBad Variable. /// public const uint HistoricalDataConfigurationType_AggregateConfiguration_PercentDataBad = 11169; /// /// The identifier for the HistoricalDataConfigurationType_AggregateConfiguration_PercentDataGood Variable. /// public const uint HistoricalDataConfigurationType_AggregateConfiguration_PercentDataGood = 11170; /// /// The identifier for the HistoricalDataConfigurationType_AggregateConfiguration_UseSlopedExtrapolation Variable. /// public const uint HistoricalDataConfigurationType_AggregateConfiguration_UseSlopedExtrapolation = 11171; /// /// The identifier for the HistoricalDataConfigurationType_Stepped Variable. /// public const uint HistoricalDataConfigurationType_Stepped = 2323; /// /// The identifier for the HistoricalDataConfigurationType_Definition Variable. /// public const uint HistoricalDataConfigurationType_Definition = 2324; /// /// The identifier for the HistoricalDataConfigurationType_MaxTimeInterval Variable. /// public const uint HistoricalDataConfigurationType_MaxTimeInterval = 2325; /// /// The identifier for the HistoricalDataConfigurationType_MinTimeInterval Variable. /// public const uint HistoricalDataConfigurationType_MinTimeInterval = 2326; /// /// The identifier for the HistoricalDataConfigurationType_ExceptionDeviation Variable. /// public const uint HistoricalDataConfigurationType_ExceptionDeviation = 2327; /// /// The identifier for the HistoricalDataConfigurationType_ExceptionDeviationFormat Variable. /// public const uint HistoricalDataConfigurationType_ExceptionDeviationFormat = 2328; /// /// The identifier for the HistoricalDataConfigurationType_StartOfArchive Variable. /// public const uint HistoricalDataConfigurationType_StartOfArchive = 11499; /// /// The identifier for the HistoricalDataConfigurationType_StartOfOnlineArchive Variable. /// public const uint HistoricalDataConfigurationType_StartOfOnlineArchive = 11500; /// /// The identifier for the HAConfiguration_AggregateConfiguration_TreatUncertainAsBad Variable. /// public const uint HAConfiguration_AggregateConfiguration_TreatUncertainAsBad = 11204; /// /// The identifier for the HAConfiguration_AggregateConfiguration_PercentDataBad Variable. /// public const uint HAConfiguration_AggregateConfiguration_PercentDataBad = 11205; /// /// The identifier for the HAConfiguration_AggregateConfiguration_PercentDataGood Variable. /// public const uint HAConfiguration_AggregateConfiguration_PercentDataGood = 11206; /// /// The identifier for the HAConfiguration_AggregateConfiguration_UseSlopedExtrapolation Variable. /// public const uint HAConfiguration_AggregateConfiguration_UseSlopedExtrapolation = 11207; /// /// The identifier for the HAConfiguration_Stepped Variable. /// public const uint HAConfiguration_Stepped = 11208; /// /// The identifier for the HistoricalEventFilter Variable. /// public const uint HistoricalEventFilter = 11215; /// /// The identifier for the HistoryServerCapabilitiesType_AccessHistoryDataCapability Variable. /// public const uint HistoryServerCapabilitiesType_AccessHistoryDataCapability = 2331; /// /// The identifier for the HistoryServerCapabilitiesType_AccessHistoryEventsCapability Variable. /// public const uint HistoryServerCapabilitiesType_AccessHistoryEventsCapability = 2332; /// /// The identifier for the HistoryServerCapabilitiesType_MaxReturnDataValues Variable. /// public const uint HistoryServerCapabilitiesType_MaxReturnDataValues = 11268; /// /// The identifier for the HistoryServerCapabilitiesType_MaxReturnEventValues Variable. /// public const uint HistoryServerCapabilitiesType_MaxReturnEventValues = 11269; /// /// The identifier for the HistoryServerCapabilitiesType_InsertDataCapability Variable. /// public const uint HistoryServerCapabilitiesType_InsertDataCapability = 2334; /// /// The identifier for the HistoryServerCapabilitiesType_ReplaceDataCapability Variable. /// public const uint HistoryServerCapabilitiesType_ReplaceDataCapability = 2335; /// /// The identifier for the HistoryServerCapabilitiesType_UpdateDataCapability Variable. /// public const uint HistoryServerCapabilitiesType_UpdateDataCapability = 2336; /// /// The identifier for the HistoryServerCapabilitiesType_DeleteRawCapability Variable. /// public const uint HistoryServerCapabilitiesType_DeleteRawCapability = 2337; /// /// The identifier for the HistoryServerCapabilitiesType_DeleteAtTimeCapability Variable. /// public const uint HistoryServerCapabilitiesType_DeleteAtTimeCapability = 2338; /// /// The identifier for the HistoryServerCapabilitiesType_InsertEventCapability Variable. /// public const uint HistoryServerCapabilitiesType_InsertEventCapability = 11278; /// /// The identifier for the HistoryServerCapabilitiesType_ReplaceEventCapability Variable. /// public const uint HistoryServerCapabilitiesType_ReplaceEventCapability = 11279; /// /// The identifier for the HistoryServerCapabilitiesType_UpdateEventCapability Variable. /// public const uint HistoryServerCapabilitiesType_UpdateEventCapability = 11280; /// /// The identifier for the HistoryServerCapabilitiesType_DeleteEventCapability Variable. /// public const uint HistoryServerCapabilitiesType_DeleteEventCapability = 11501; /// /// The identifier for the HistoryServerCapabilitiesType_InsertAnnotationCapability Variable. /// public const uint HistoryServerCapabilitiesType_InsertAnnotationCapability = 11270; /// /// The identifier for the AuditHistoryEventUpdateEventType_UpdatedNode Variable. /// public const uint AuditHistoryEventUpdateEventType_UpdatedNode = 3025; /// /// The identifier for the AuditHistoryEventUpdateEventType_PerformInsertReplace Variable. /// public const uint AuditHistoryEventUpdateEventType_PerformInsertReplace = 3028; /// /// The identifier for the AuditHistoryEventUpdateEventType_Filter Variable. /// public const uint AuditHistoryEventUpdateEventType_Filter = 3003; /// /// The identifier for the AuditHistoryEventUpdateEventType_NewValues Variable. /// public const uint AuditHistoryEventUpdateEventType_NewValues = 3029; /// /// The identifier for the AuditHistoryEventUpdateEventType_OldValues Variable. /// public const uint AuditHistoryEventUpdateEventType_OldValues = 3030; /// /// The identifier for the AuditHistoryValueUpdateEventType_UpdatedNode Variable. /// public const uint AuditHistoryValueUpdateEventType_UpdatedNode = 3026; /// /// The identifier for the AuditHistoryValueUpdateEventType_PerformInsertReplace Variable. /// public const uint AuditHistoryValueUpdateEventType_PerformInsertReplace = 3031; /// /// The identifier for the AuditHistoryValueUpdateEventType_NewValues Variable. /// public const uint AuditHistoryValueUpdateEventType_NewValues = 3032; /// /// The identifier for the AuditHistoryValueUpdateEventType_OldValues Variable. /// public const uint AuditHistoryValueUpdateEventType_OldValues = 3033; /// /// The identifier for the AuditHistoryDeleteEventType_UpdatedNode Variable. /// public const uint AuditHistoryDeleteEventType_UpdatedNode = 3027; /// /// The identifier for the AuditHistoryRawModifyDeleteEventType_IsDeleteModified Variable. /// public const uint AuditHistoryRawModifyDeleteEventType_IsDeleteModified = 3015; /// /// The identifier for the AuditHistoryRawModifyDeleteEventType_StartTime Variable. /// public const uint AuditHistoryRawModifyDeleteEventType_StartTime = 3016; /// /// The identifier for the AuditHistoryRawModifyDeleteEventType_EndTime Variable. /// public const uint AuditHistoryRawModifyDeleteEventType_EndTime = 3017; /// /// The identifier for the AuditHistoryRawModifyDeleteEventType_OldValues Variable. /// public const uint AuditHistoryRawModifyDeleteEventType_OldValues = 3034; /// /// The identifier for the AuditHistoryAtTimeDeleteEventType_ReqTimes Variable. /// public const uint AuditHistoryAtTimeDeleteEventType_ReqTimes = 3020; /// /// The identifier for the AuditHistoryAtTimeDeleteEventType_OldValues Variable. /// public const uint AuditHistoryAtTimeDeleteEventType_OldValues = 3021; /// /// The identifier for the AuditHistoryEventDeleteEventType_EventIds Variable. /// public const uint AuditHistoryEventDeleteEventType_EventIds = 3023; /// /// The identifier for the AuditHistoryEventDeleteEventType_OldValues Variable. /// public const uint AuditHistoryEventDeleteEventType_OldValues = 3024; /// /// The identifier for the AggregateConfigurationType_TreatUncertainAsBad Variable. /// public const uint AggregateConfigurationType_TreatUncertainAsBad = 11188; /// /// The identifier for the AggregateConfigurationType_PercentDataBad Variable. /// public const uint AggregateConfigurationType_PercentDataBad = 11189; /// /// The identifier for the AggregateConfigurationType_PercentDataGood Variable. /// public const uint AggregateConfigurationType_PercentDataGood = 11190; /// /// The identifier for the AggregateConfigurationType_UseSlopedExtrapolation Variable. /// public const uint AggregateConfigurationType_UseSlopedExtrapolation = 11191; /// /// The identifier for the IdType_EnumStrings Variable. /// public const uint IdType_EnumStrings = 7591; /// /// The identifier for the NodeClass_EnumValues Variable. /// public const uint NodeClass_EnumValues = 11878; /// /// The identifier for the ApplicationType_EnumStrings Variable. /// public const uint ApplicationType_EnumStrings = 7597; /// /// The identifier for the MessageSecurityMode_EnumStrings Variable. /// public const uint MessageSecurityMode_EnumStrings = 7595; /// /// The identifier for the UserTokenType_EnumStrings Variable. /// public const uint UserTokenType_EnumStrings = 7596; /// /// The identifier for the SecurityTokenRequestType_EnumStrings Variable. /// public const uint SecurityTokenRequestType_EnumStrings = 7598; /// /// The identifier for the NodeAttributesMask_EnumValues Variable. /// public const uint NodeAttributesMask_EnumValues = 11881; /// /// The identifier for the AttributeWriteMask_EnumValues Variable. /// public const uint AttributeWriteMask_EnumValues = 11882; /// /// The identifier for the BrowseDirection_EnumStrings Variable. /// public const uint BrowseDirection_EnumStrings = 7603; /// /// The identifier for the BrowseResultMask_EnumValues Variable. /// public const uint BrowseResultMask_EnumValues = 11883; /// /// The identifier for the ComplianceLevel_EnumStrings Variable. /// public const uint ComplianceLevel_EnumStrings = 7599; /// /// The identifier for the FilterOperator_EnumStrings Variable. /// public const uint FilterOperator_EnumStrings = 7605; /// /// The identifier for the TimestampsToReturn_EnumStrings Variable. /// public const uint TimestampsToReturn_EnumStrings = 7606; /// /// The identifier for the HistoryUpdateType_EnumValues Variable. /// public const uint HistoryUpdateType_EnumValues = 11884; /// /// The identifier for the PerformUpdateType_EnumValues Variable. /// public const uint PerformUpdateType_EnumValues = 11885; /// /// The identifier for the MonitoringMode_EnumStrings Variable. /// public const uint MonitoringMode_EnumStrings = 7608; /// /// The identifier for the DataChangeTrigger_EnumStrings Variable. /// public const uint DataChangeTrigger_EnumStrings = 7609; /// /// The identifier for the DeadbandType_EnumStrings Variable. /// public const uint DeadbandType_EnumStrings = 7610; /// /// The identifier for the EnumeratedTestType_EnumValues Variable. /// public const uint EnumeratedTestType_EnumValues = 11886; /// /// The identifier for the RedundancySupport_EnumStrings Variable. /// public const uint RedundancySupport_EnumStrings = 7611; /// /// The identifier for the ServerState_EnumStrings Variable. /// public const uint ServerState_EnumStrings = 7612; /// /// The identifier for the ModelChangeStructureVerbMask_EnumValues Variable. /// public const uint ModelChangeStructureVerbMask_EnumValues = 11942; /// /// The identifier for the AxisScaleEnumeration_EnumStrings Variable. /// public const uint AxisScaleEnumeration_EnumStrings = 12078; /// /// The identifier for the ExceptionDeviationFormat_EnumStrings Variable. /// public const uint ExceptionDeviationFormat_EnumStrings = 7614; /// /// The identifier for the OpcUa_XmlSchema Variable. /// public const uint OpcUa_XmlSchema = 8252; /// /// The identifier for the OpcUa_XmlSchema_NamespaceUri Variable. /// public const uint OpcUa_XmlSchema_NamespaceUri = 8254; /// /// The identifier for the OpcUa_XmlSchema_Argument Variable. /// public const uint OpcUa_XmlSchema_Argument = 8285; /// /// The identifier for the OpcUa_XmlSchema_EnumValueType Variable. /// public const uint OpcUa_XmlSchema_EnumValueType = 8291; /// /// The identifier for the OpcUa_XmlSchema_TimeZoneDataType Variable. /// public const uint OpcUa_XmlSchema_TimeZoneDataType = 8918; /// /// The identifier for the OpcUa_XmlSchema_ApplicationDescription Variable. /// public const uint OpcUa_XmlSchema_ApplicationDescription = 8300; /// /// The identifier for the OpcUa_XmlSchema_DnsServiceRecord Variable. /// public const uint OpcUa_XmlSchema_DnsServiceRecord = 12195; /// /// The identifier for the OpcUa_XmlSchema_UserTokenPolicy Variable. /// public const uint OpcUa_XmlSchema_UserTokenPolicy = 8297; /// /// The identifier for the OpcUa_XmlSchema_EndpointDescription Variable. /// public const uint OpcUa_XmlSchema_EndpointDescription = 8303; /// /// The identifier for the OpcUa_XmlSchema_RegisteredServer Variable. /// public const uint OpcUa_XmlSchema_RegisteredServer = 8417; /// /// The identifier for the OpcUa_XmlSchema_SignedSoftwareCertificate Variable. /// public const uint OpcUa_XmlSchema_SignedSoftwareCertificate = 8333; /// /// The identifier for the OpcUa_XmlSchema_UserIdentityToken Variable. /// public const uint OpcUa_XmlSchema_UserIdentityToken = 8306; /// /// The identifier for the OpcUa_XmlSchema_AnonymousIdentityToken Variable. /// public const uint OpcUa_XmlSchema_AnonymousIdentityToken = 8309; /// /// The identifier for the OpcUa_XmlSchema_UserNameIdentityToken Variable. /// public const uint OpcUa_XmlSchema_UserNameIdentityToken = 8312; /// /// The identifier for the OpcUa_XmlSchema_X509IdentityToken Variable. /// public const uint OpcUa_XmlSchema_X509IdentityToken = 8315; /// /// The identifier for the OpcUa_XmlSchema_IssuedIdentityToken Variable. /// public const uint OpcUa_XmlSchema_IssuedIdentityToken = 8318; /// /// The identifier for the OpcUa_XmlSchema_AddNodesItem Variable. /// public const uint OpcUa_XmlSchema_AddNodesItem = 8363; /// /// The identifier for the OpcUa_XmlSchema_AddReferencesItem Variable. /// public const uint OpcUa_XmlSchema_AddReferencesItem = 8366; /// /// The identifier for the OpcUa_XmlSchema_DeleteNodesItem Variable. /// public const uint OpcUa_XmlSchema_DeleteNodesItem = 8369; /// /// The identifier for the OpcUa_XmlSchema_DeleteReferencesItem Variable. /// public const uint OpcUa_XmlSchema_DeleteReferencesItem = 8372; /// /// The identifier for the OpcUa_XmlSchema_EndpointConfiguration Variable. /// public const uint OpcUa_XmlSchema_EndpointConfiguration = 8321; /// /// The identifier for the OpcUa_XmlSchema_SupportedProfile Variable. /// public const uint OpcUa_XmlSchema_SupportedProfile = 8324; /// /// The identifier for the OpcUa_XmlSchema_SoftwareCertificate Variable. /// public const uint OpcUa_XmlSchema_SoftwareCertificate = 8330; /// /// The identifier for the OpcUa_XmlSchema_ContentFilterElement Variable. /// public const uint OpcUa_XmlSchema_ContentFilterElement = 8564; /// /// The identifier for the OpcUa_XmlSchema_ContentFilter Variable. /// public const uint OpcUa_XmlSchema_ContentFilter = 8567; /// /// The identifier for the OpcUa_XmlSchema_FilterOperand Variable. /// public const uint OpcUa_XmlSchema_FilterOperand = 8570; /// /// The identifier for the OpcUa_XmlSchema_ElementOperand Variable. /// public const uint OpcUa_XmlSchema_ElementOperand = 8573; /// /// The identifier for the OpcUa_XmlSchema_LiteralOperand Variable. /// public const uint OpcUa_XmlSchema_LiteralOperand = 8576; /// /// The identifier for the OpcUa_XmlSchema_AttributeOperand Variable. /// public const uint OpcUa_XmlSchema_AttributeOperand = 8579; /// /// The identifier for the OpcUa_XmlSchema_SimpleAttributeOperand Variable. /// public const uint OpcUa_XmlSchema_SimpleAttributeOperand = 8582; /// /// The identifier for the OpcUa_XmlSchema_HistoryEvent Variable. /// public const uint OpcUa_XmlSchema_HistoryEvent = 8639; /// /// The identifier for the OpcUa_XmlSchema_MonitoringFilter Variable. /// public const uint OpcUa_XmlSchema_MonitoringFilter = 8702; /// /// The identifier for the OpcUa_XmlSchema_EventFilter Variable. /// public const uint OpcUa_XmlSchema_EventFilter = 8708; /// /// The identifier for the OpcUa_XmlSchema_AggregateConfiguration Variable. /// public const uint OpcUa_XmlSchema_AggregateConfiguration = 8711; /// /// The identifier for the OpcUa_XmlSchema_HistoryEventFieldList Variable. /// public const uint OpcUa_XmlSchema_HistoryEventFieldList = 8807; /// /// The identifier for the OpcUa_XmlSchema_ScalarTestType Variable. /// public const uint OpcUa_XmlSchema_ScalarTestType = 8384; /// /// The identifier for the OpcUa_XmlSchema_ArrayTestType Variable. /// public const uint OpcUa_XmlSchema_ArrayTestType = 8387; /// /// The identifier for the OpcUa_XmlSchema_CompositeTestType Variable. /// public const uint OpcUa_XmlSchema_CompositeTestType = 8390; /// /// The identifier for the OpcUa_XmlSchema_BuildInfo Variable. /// public const uint OpcUa_XmlSchema_BuildInfo = 8327; /// /// The identifier for the OpcUa_XmlSchema_RedundantServerDataType Variable. /// public const uint OpcUa_XmlSchema_RedundantServerDataType = 8843; /// /// The identifier for the OpcUa_XmlSchema_EndpointUrlListDataType Variable. /// public const uint OpcUa_XmlSchema_EndpointUrlListDataType = 11951; /// /// The identifier for the OpcUa_XmlSchema_NetworkGroupDataType Variable. /// public const uint OpcUa_XmlSchema_NetworkGroupDataType = 11954; /// /// The identifier for the OpcUa_XmlSchema_SamplingIntervalDiagnosticsDataType Variable. /// public const uint OpcUa_XmlSchema_SamplingIntervalDiagnosticsDataType = 8846; /// /// The identifier for the OpcUa_XmlSchema_ServerDiagnosticsSummaryDataType Variable. /// public const uint OpcUa_XmlSchema_ServerDiagnosticsSummaryDataType = 8849; /// /// The identifier for the OpcUa_XmlSchema_ServerStatusDataType Variable. /// public const uint OpcUa_XmlSchema_ServerStatusDataType = 8852; /// /// The identifier for the OpcUa_XmlSchema_SessionDiagnosticsDataType Variable. /// public const uint OpcUa_XmlSchema_SessionDiagnosticsDataType = 8855; /// /// The identifier for the OpcUa_XmlSchema_SessionSecurityDiagnosticsDataType Variable. /// public const uint OpcUa_XmlSchema_SessionSecurityDiagnosticsDataType = 8858; /// /// The identifier for the OpcUa_XmlSchema_ServiceCounterDataType Variable. /// public const uint OpcUa_XmlSchema_ServiceCounterDataType = 8861; /// /// The identifier for the OpcUa_XmlSchema_StatusResult Variable. /// public const uint OpcUa_XmlSchema_StatusResult = 8294; /// /// The identifier for the OpcUa_XmlSchema_SubscriptionDiagnosticsDataType Variable. /// public const uint OpcUa_XmlSchema_SubscriptionDiagnosticsDataType = 8864; /// /// The identifier for the OpcUa_XmlSchema_ModelChangeStructureDataType Variable. /// public const uint OpcUa_XmlSchema_ModelChangeStructureDataType = 8867; /// /// The identifier for the OpcUa_XmlSchema_SemanticChangeStructureDataType Variable. /// public const uint OpcUa_XmlSchema_SemanticChangeStructureDataType = 8870; /// /// The identifier for the OpcUa_XmlSchema_Range Variable. /// public const uint OpcUa_XmlSchema_Range = 8873; /// /// The identifier for the OpcUa_XmlSchema_EUInformation Variable. /// public const uint OpcUa_XmlSchema_EUInformation = 8876; /// /// The identifier for the OpcUa_XmlSchema_ComplexNumberType Variable. /// public const uint OpcUa_XmlSchema_ComplexNumberType = 12175; /// /// The identifier for the OpcUa_XmlSchema_DoubleComplexNumberType Variable. /// public const uint OpcUa_XmlSchema_DoubleComplexNumberType = 12178; /// /// The identifier for the OpcUa_XmlSchema_AxisInformation Variable. /// public const uint OpcUa_XmlSchema_AxisInformation = 12083; /// /// The identifier for the OpcUa_XmlSchema_XVType Variable. /// public const uint OpcUa_XmlSchema_XVType = 12086; /// /// The identifier for the OpcUa_XmlSchema_ProgramDiagnosticDataType Variable. /// public const uint OpcUa_XmlSchema_ProgramDiagnosticDataType = 8882; /// /// The identifier for the OpcUa_XmlSchema_Annotation Variable. /// public const uint OpcUa_XmlSchema_Annotation = 8879; /// /// The identifier for the OpcUa_BinarySchema Variable. /// public const uint OpcUa_BinarySchema = 7617; /// /// The identifier for the OpcUa_BinarySchema_NamespaceUri Variable. /// public const uint OpcUa_BinarySchema_NamespaceUri = 7619; /// /// The identifier for the OpcUa_BinarySchema_Argument Variable. /// public const uint OpcUa_BinarySchema_Argument = 7650; /// /// The identifier for the OpcUa_BinarySchema_EnumValueType Variable. /// public const uint OpcUa_BinarySchema_EnumValueType = 7656; /// /// The identifier for the OpcUa_BinarySchema_TimeZoneDataType Variable. /// public const uint OpcUa_BinarySchema_TimeZoneDataType = 8914; /// /// The identifier for the OpcUa_BinarySchema_ApplicationDescription Variable. /// public const uint OpcUa_BinarySchema_ApplicationDescription = 7665; /// /// The identifier for the OpcUa_BinarySchema_DnsServiceRecord Variable. /// public const uint OpcUa_BinarySchema_DnsServiceRecord = 12201; /// /// The identifier for the OpcUa_BinarySchema_UserTokenPolicy Variable. /// public const uint OpcUa_BinarySchema_UserTokenPolicy = 7662; /// /// The identifier for the OpcUa_BinarySchema_EndpointDescription Variable. /// public const uint OpcUa_BinarySchema_EndpointDescription = 7668; /// /// The identifier for the OpcUa_BinarySchema_RegisteredServer Variable. /// public const uint OpcUa_BinarySchema_RegisteredServer = 7782; /// /// The identifier for the OpcUa_BinarySchema_SignedSoftwareCertificate Variable. /// public const uint OpcUa_BinarySchema_SignedSoftwareCertificate = 7698; /// /// The identifier for the OpcUa_BinarySchema_UserIdentityToken Variable. /// public const uint OpcUa_BinarySchema_UserIdentityToken = 7671; /// /// The identifier for the OpcUa_BinarySchema_AnonymousIdentityToken Variable. /// public const uint OpcUa_BinarySchema_AnonymousIdentityToken = 7674; /// /// The identifier for the OpcUa_BinarySchema_UserNameIdentityToken Variable. /// public const uint OpcUa_BinarySchema_UserNameIdentityToken = 7677; /// /// The identifier for the OpcUa_BinarySchema_X509IdentityToken Variable. /// public const uint OpcUa_BinarySchema_X509IdentityToken = 7680; /// /// The identifier for the OpcUa_BinarySchema_IssuedIdentityToken Variable. /// public const uint OpcUa_BinarySchema_IssuedIdentityToken = 7683; /// /// The identifier for the OpcUa_BinarySchema_AddNodesItem Variable. /// public const uint OpcUa_BinarySchema_AddNodesItem = 7728; /// /// The identifier for the OpcUa_BinarySchema_AddReferencesItem Variable. /// public const uint OpcUa_BinarySchema_AddReferencesItem = 7731; /// /// The identifier for the OpcUa_BinarySchema_DeleteNodesItem Variable. /// public const uint OpcUa_BinarySchema_DeleteNodesItem = 7734; /// /// The identifier for the OpcUa_BinarySchema_DeleteReferencesItem Variable. /// public const uint OpcUa_BinarySchema_DeleteReferencesItem = 7737; /// /// The identifier for the OpcUa_BinarySchema_EndpointConfiguration Variable. /// public const uint OpcUa_BinarySchema_EndpointConfiguration = 7686; /// /// The identifier for the OpcUa_BinarySchema_SupportedProfile Variable. /// public const uint OpcUa_BinarySchema_SupportedProfile = 7689; /// /// The identifier for the OpcUa_BinarySchema_SoftwareCertificate Variable. /// public const uint OpcUa_BinarySchema_SoftwareCertificate = 7695; /// /// The identifier for the OpcUa_BinarySchema_ContentFilterElement Variable. /// public const uint OpcUa_BinarySchema_ContentFilterElement = 7929; /// /// The identifier for the OpcUa_BinarySchema_ContentFilter Variable. /// public const uint OpcUa_BinarySchema_ContentFilter = 7932; /// /// The identifier for the OpcUa_BinarySchema_FilterOperand Variable. /// public const uint OpcUa_BinarySchema_FilterOperand = 7935; /// /// The identifier for the OpcUa_BinarySchema_ElementOperand Variable. /// public const uint OpcUa_BinarySchema_ElementOperand = 7938; /// /// The identifier for the OpcUa_BinarySchema_LiteralOperand Variable. /// public const uint OpcUa_BinarySchema_LiteralOperand = 7941; /// /// The identifier for the OpcUa_BinarySchema_AttributeOperand Variable. /// public const uint OpcUa_BinarySchema_AttributeOperand = 7944; /// /// The identifier for the OpcUa_BinarySchema_SimpleAttributeOperand Variable. /// public const uint OpcUa_BinarySchema_SimpleAttributeOperand = 7947; /// /// The identifier for the OpcUa_BinarySchema_HistoryEvent Variable. /// public const uint OpcUa_BinarySchema_HistoryEvent = 8004; /// /// The identifier for the OpcUa_BinarySchema_MonitoringFilter Variable. /// public const uint OpcUa_BinarySchema_MonitoringFilter = 8067; /// /// The identifier for the OpcUa_BinarySchema_EventFilter Variable. /// public const uint OpcUa_BinarySchema_EventFilter = 8073; /// /// The identifier for the OpcUa_BinarySchema_AggregateConfiguration Variable. /// public const uint OpcUa_BinarySchema_AggregateConfiguration = 8076; /// /// The identifier for the OpcUa_BinarySchema_HistoryEventFieldList Variable. /// public const uint OpcUa_BinarySchema_HistoryEventFieldList = 8172; /// /// The identifier for the OpcUa_BinarySchema_ScalarTestType Variable. /// public const uint OpcUa_BinarySchema_ScalarTestType = 7749; /// /// The identifier for the OpcUa_BinarySchema_ArrayTestType Variable. /// public const uint OpcUa_BinarySchema_ArrayTestType = 7752; /// /// The identifier for the OpcUa_BinarySchema_CompositeTestType Variable. /// public const uint OpcUa_BinarySchema_CompositeTestType = 7755; /// /// The identifier for the OpcUa_BinarySchema_BuildInfo Variable. /// public const uint OpcUa_BinarySchema_BuildInfo = 7692; /// /// The identifier for the OpcUa_BinarySchema_RedundantServerDataType Variable. /// public const uint OpcUa_BinarySchema_RedundantServerDataType = 8208; /// /// The identifier for the OpcUa_BinarySchema_EndpointUrlListDataType Variable. /// public const uint OpcUa_BinarySchema_EndpointUrlListDataType = 11959; /// /// The identifier for the OpcUa_BinarySchema_NetworkGroupDataType Variable. /// public const uint OpcUa_BinarySchema_NetworkGroupDataType = 11962; /// /// The identifier for the OpcUa_BinarySchema_SamplingIntervalDiagnosticsDataType Variable. /// public const uint OpcUa_BinarySchema_SamplingIntervalDiagnosticsDataType = 8211; /// /// The identifier for the OpcUa_BinarySchema_ServerDiagnosticsSummaryDataType Variable. /// public const uint OpcUa_BinarySchema_ServerDiagnosticsSummaryDataType = 8214; /// /// The identifier for the OpcUa_BinarySchema_ServerStatusDataType Variable. /// public const uint OpcUa_BinarySchema_ServerStatusDataType = 8217; /// /// The identifier for the OpcUa_BinarySchema_SessionDiagnosticsDataType Variable. /// public const uint OpcUa_BinarySchema_SessionDiagnosticsDataType = 8220; /// /// The identifier for the OpcUa_BinarySchema_SessionSecurityDiagnosticsDataType Variable. /// public const uint OpcUa_BinarySchema_SessionSecurityDiagnosticsDataType = 8223; /// /// The identifier for the OpcUa_BinarySchema_ServiceCounterDataType Variable. /// public const uint OpcUa_BinarySchema_ServiceCounterDataType = 8226; /// /// The identifier for the OpcUa_BinarySchema_StatusResult Variable. /// public const uint OpcUa_BinarySchema_StatusResult = 7659; /// /// The identifier for the OpcUa_BinarySchema_SubscriptionDiagnosticsDataType Variable. /// public const uint OpcUa_BinarySchema_SubscriptionDiagnosticsDataType = 8229; /// /// The identifier for the OpcUa_BinarySchema_ModelChangeStructureDataType Variable. /// public const uint OpcUa_BinarySchema_ModelChangeStructureDataType = 8232; /// /// The identifier for the OpcUa_BinarySchema_SemanticChangeStructureDataType Variable. /// public const uint OpcUa_BinarySchema_SemanticChangeStructureDataType = 8235; /// /// The identifier for the OpcUa_BinarySchema_Range Variable. /// public const uint OpcUa_BinarySchema_Range = 8238; /// /// The identifier for the OpcUa_BinarySchema_EUInformation Variable. /// public const uint OpcUa_BinarySchema_EUInformation = 8241; /// /// The identifier for the OpcUa_BinarySchema_ComplexNumberType Variable. /// public const uint OpcUa_BinarySchema_ComplexNumberType = 12183; /// /// The identifier for the OpcUa_BinarySchema_DoubleComplexNumberType Variable. /// public const uint OpcUa_BinarySchema_DoubleComplexNumberType = 12186; /// /// The identifier for the OpcUa_BinarySchema_AxisInformation Variable. /// public const uint OpcUa_BinarySchema_AxisInformation = 12091; /// /// The identifier for the OpcUa_BinarySchema_XVType Variable. /// public const uint OpcUa_BinarySchema_XVType = 12094; /// /// The identifier for the OpcUa_BinarySchema_ProgramDiagnosticDataType Variable. /// public const uint OpcUa_BinarySchema_ProgramDiagnosticDataType = 8247; /// /// The identifier for the OpcUa_BinarySchema_Annotation Variable. /// public const uint OpcUa_BinarySchema_Annotation = 8244; } #endregion #region VariableType Identifiers /// /// A class that declares constants for all VariableTypes in the Model Design. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class VariableTypes { /// /// The identifier for the BaseVariableType VariableType. /// public const uint BaseVariableType = 62; /// /// The identifier for the BaseDataVariableType VariableType. /// public const uint BaseDataVariableType = 63; /// /// The identifier for the PropertyType VariableType. /// public const uint PropertyType = 68; /// /// The identifier for the DataTypeDescriptionType VariableType. /// public const uint DataTypeDescriptionType = 69; /// /// The identifier for the DataTypeDictionaryType VariableType. /// public const uint DataTypeDictionaryType = 72; /// /// The identifier for the ServerVendorCapabilityType VariableType. /// public const uint ServerVendorCapabilityType = 2137; /// /// The identifier for the ServerStatusType VariableType. /// public const uint ServerStatusType = 2138; /// /// The identifier for the BuildInfoType VariableType. /// public const uint BuildInfoType = 3051; /// /// The identifier for the ServerDiagnosticsSummaryType VariableType. /// public const uint ServerDiagnosticsSummaryType = 2150; /// /// The identifier for the SamplingIntervalDiagnosticsArrayType VariableType. /// public const uint SamplingIntervalDiagnosticsArrayType = 2164; /// /// The identifier for the SamplingIntervalDiagnosticsType VariableType. /// public const uint SamplingIntervalDiagnosticsType = 2165; /// /// The identifier for the SubscriptionDiagnosticsArrayType VariableType. /// public const uint SubscriptionDiagnosticsArrayType = 2171; /// /// The identifier for the SubscriptionDiagnosticsType VariableType. /// public const uint SubscriptionDiagnosticsType = 2172; /// /// The identifier for the SessionDiagnosticsArrayType VariableType. /// public const uint SessionDiagnosticsArrayType = 2196; /// /// The identifier for the SessionDiagnosticsVariableType VariableType. /// public const uint SessionDiagnosticsVariableType = 2197; /// /// The identifier for the SessionSecurityDiagnosticsArrayType VariableType. /// public const uint SessionSecurityDiagnosticsArrayType = 2243; /// /// The identifier for the SessionSecurityDiagnosticsType VariableType. /// public const uint SessionSecurityDiagnosticsType = 2244; /// /// The identifier for the OptionSetType VariableType. /// public const uint OptionSetType = 11487; /// /// The identifier for the StateVariableType VariableType. /// public const uint StateVariableType = 2755; /// /// The identifier for the TransitionVariableType VariableType. /// public const uint TransitionVariableType = 2762; /// /// The identifier for the FiniteStateVariableType VariableType. /// public const uint FiniteStateVariableType = 2760; /// /// The identifier for the FiniteTransitionVariableType VariableType. /// public const uint FiniteTransitionVariableType = 2767; /// /// The identifier for the DataItemType VariableType. /// public const uint DataItemType = 2365; /// /// The identifier for the AnalogItemType VariableType. /// public const uint AnalogItemType = 2368; /// /// The identifier for the DiscreteItemType VariableType. /// public const uint DiscreteItemType = 2372; /// /// The identifier for the TwoStateDiscreteType VariableType. /// public const uint TwoStateDiscreteType = 2373; /// /// The identifier for the MultiStateDiscreteType VariableType. /// public const uint MultiStateDiscreteType = 2376; /// /// The identifier for the MultiStateValueDiscreteType VariableType. /// public const uint MultiStateValueDiscreteType = 11238; /// /// The identifier for the ArrayItemType VariableType. /// public const uint ArrayItemType = 12021; /// /// The identifier for the YArrayItemType VariableType. /// public const uint YArrayItemType = 12029; /// /// The identifier for the XYArrayItemType VariableType. /// public const uint XYArrayItemType = 12038; /// /// The identifier for the ImageItemType VariableType. /// public const uint ImageItemType = 12047; /// /// The identifier for the CubeItemType VariableType. /// public const uint CubeItemType = 12057; /// /// The identifier for the NDimensionArrayItemType VariableType. /// public const uint NDimensionArrayItemType = 12068; /// /// The identifier for the TwoStateVariableType VariableType. /// public const uint TwoStateVariableType = 8995; /// /// The identifier for the ConditionVariableType VariableType. /// public const uint ConditionVariableType = 9002; /// /// The identifier for the ProgramDiagnosticType VariableType. /// public const uint ProgramDiagnosticType = 2380; } #endregion #region DataType Node Identifiers /// /// A class that declares constants for all DataTypes in the Model Design. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class DataTypeIds { /// /// The identifier for the BaseDataType DataType. /// public static readonly NodeId BaseDataType = new NodeId(DataTypes.BaseDataType); /// /// The identifier for the Number DataType. /// public static readonly NodeId Number = new NodeId(DataTypes.Number); /// /// The identifier for the Integer DataType. /// public static readonly NodeId Integer = new NodeId(DataTypes.Integer); /// /// The identifier for the UInteger DataType. /// public static readonly NodeId UInteger = new NodeId(DataTypes.UInteger); /// /// The identifier for the Enumeration DataType. /// public static readonly NodeId Enumeration = new NodeId(DataTypes.Enumeration); /// /// The identifier for the Boolean DataType. /// public static readonly NodeId Boolean = new NodeId(DataTypes.Boolean); /// /// The identifier for the SByte DataType. /// public static readonly NodeId SByte = new NodeId(DataTypes.SByte); /// /// The identifier for the Byte DataType. /// public static readonly NodeId Byte = new NodeId(DataTypes.Byte); /// /// The identifier for the Int16 DataType. /// public static readonly NodeId Int16 = new NodeId(DataTypes.Int16); /// /// The identifier for the UInt16 DataType. /// public static readonly NodeId UInt16 = new NodeId(DataTypes.UInt16); /// /// The identifier for the Int32 DataType. /// public static readonly NodeId Int32 = new NodeId(DataTypes.Int32); /// /// The identifier for the UInt32 DataType. /// public static readonly NodeId UInt32 = new NodeId(DataTypes.UInt32); /// /// The identifier for the Int64 DataType. /// public static readonly NodeId Int64 = new NodeId(DataTypes.Int64); /// /// The identifier for the UInt64 DataType. /// public static readonly NodeId UInt64 = new NodeId(DataTypes.UInt64); /// /// The identifier for the Float DataType. /// public static readonly NodeId Float = new NodeId(DataTypes.Float); /// /// The identifier for the Double DataType. /// public static readonly NodeId Double = new NodeId(DataTypes.Double); /// /// The identifier for the String DataType. /// public static readonly NodeId String = new NodeId(DataTypes.String); /// /// The identifier for the DateTime DataType. /// public static readonly NodeId DateTime = new NodeId(DataTypes.DateTime); /// /// The identifier for the Guid DataType. /// public static readonly NodeId Guid = new NodeId(DataTypes.Guid); /// /// The identifier for the ByteString DataType. /// public static readonly NodeId ByteString = new NodeId(DataTypes.ByteString); /// /// The identifier for the XmlElement DataType. /// public static readonly NodeId XmlElement = new NodeId(DataTypes.XmlElement); /// /// The identifier for the NodeId DataType. /// public static readonly NodeId NodeId = new NodeId(DataTypes.NodeId); /// /// The identifier for the ExpandedNodeId DataType. /// public static readonly NodeId ExpandedNodeId = new NodeId(DataTypes.ExpandedNodeId); /// /// The identifier for the StatusCode DataType. /// public static readonly NodeId StatusCode = new NodeId(DataTypes.StatusCode); /// /// The identifier for the QualifiedName DataType. /// public static readonly NodeId QualifiedName = new NodeId(DataTypes.QualifiedName); /// /// The identifier for the LocalizedText DataType. /// public static readonly NodeId LocalizedText = new NodeId(DataTypes.LocalizedText); /// /// The identifier for the Structure DataType. /// public static readonly NodeId Structure = new NodeId(DataTypes.Structure); /// /// The identifier for the DataValue DataType. /// public static readonly NodeId DataValue = new NodeId(DataTypes.DataValue); /// /// The identifier for the DiagnosticInfo DataType. /// public static readonly NodeId DiagnosticInfo = new NodeId(DataTypes.DiagnosticInfo); /// /// The identifier for the Image DataType. /// public static readonly NodeId Image = new NodeId(DataTypes.Image); /// /// The identifier for the NamingRuleType DataType. /// public static readonly NodeId NamingRuleType = new NodeId(DataTypes.NamingRuleType); /// /// The identifier for the ImageBMP DataType. /// public static readonly NodeId ImageBMP = new NodeId(DataTypes.ImageBMP); /// /// The identifier for the ImageGIF DataType. /// public static readonly NodeId ImageGIF = new NodeId(DataTypes.ImageGIF); /// /// The identifier for the ImageJPG DataType. /// public static readonly NodeId ImageJPG = new NodeId(DataTypes.ImageJPG); /// /// The identifier for the ImagePNG DataType. /// public static readonly NodeId ImagePNG = new NodeId(DataTypes.ImagePNG); /// /// The identifier for the BitFieldMaskDataType DataType. /// public static readonly NodeId BitFieldMaskDataType = new NodeId(DataTypes.BitFieldMaskDataType); /// /// The identifier for the OpenFileMode DataType. /// public static readonly NodeId OpenFileMode = new NodeId(DataTypes.OpenFileMode); /// /// The identifier for the IdType DataType. /// public static readonly NodeId IdType = new NodeId(DataTypes.IdType); /// /// The identifier for the NodeClass DataType. /// public static readonly NodeId NodeClass = new NodeId(DataTypes.NodeClass); /// /// The identifier for the Node DataType. /// public static readonly NodeId Node = new NodeId(DataTypes.Node); /// /// The identifier for the InstanceNode DataType. /// public static readonly NodeId InstanceNode = new NodeId(DataTypes.InstanceNode); /// /// The identifier for the TypeNode DataType. /// public static readonly NodeId TypeNode = new NodeId(DataTypes.TypeNode); /// /// The identifier for the ObjectNode DataType. /// public static readonly NodeId ObjectNode = new NodeId(DataTypes.ObjectNode); /// /// The identifier for the ObjectTypeNode DataType. /// public static readonly NodeId ObjectTypeNode = new NodeId(DataTypes.ObjectTypeNode); /// /// The identifier for the VariableNode DataType. /// public static readonly NodeId VariableNode = new NodeId(DataTypes.VariableNode); /// /// The identifier for the VariableTypeNode DataType. /// public static readonly NodeId VariableTypeNode = new NodeId(DataTypes.VariableTypeNode); /// /// The identifier for the ReferenceTypeNode DataType. /// public static readonly NodeId ReferenceTypeNode = new NodeId(DataTypes.ReferenceTypeNode); /// /// The identifier for the MethodNode DataType. /// public static readonly NodeId MethodNode = new NodeId(DataTypes.MethodNode); /// /// The identifier for the ViewNode DataType. /// public static readonly NodeId ViewNode = new NodeId(DataTypes.ViewNode); /// /// The identifier for the DataTypeNode DataType. /// public static readonly NodeId DataTypeNode = new NodeId(DataTypes.DataTypeNode); /// /// The identifier for the ReferenceNode DataType. /// public static readonly NodeId ReferenceNode = new NodeId(DataTypes.ReferenceNode); /// /// The identifier for the Argument DataType. /// public static readonly NodeId Argument = new NodeId(DataTypes.Argument); /// /// The identifier for the EnumValueType DataType. /// public static readonly NodeId EnumValueType = new NodeId(DataTypes.EnumValueType); /// /// The identifier for the Duration DataType. /// public static readonly NodeId Duration = new NodeId(DataTypes.Duration); /// /// The identifier for the UtcTime DataType. /// public static readonly NodeId UtcTime = new NodeId(DataTypes.UtcTime); /// /// The identifier for the LocaleId DataType. /// public static readonly NodeId LocaleId = new NodeId(DataTypes.LocaleId); /// /// The identifier for the TimeZoneDataType DataType. /// public static readonly NodeId TimeZoneDataType = new NodeId(DataTypes.TimeZoneDataType); /// /// The identifier for the IntegerId DataType. /// public static readonly NodeId IntegerId = new NodeId(DataTypes.IntegerId); /// /// The identifier for the ApplicationType DataType. /// public static readonly NodeId ApplicationType = new NodeId(DataTypes.ApplicationType); /// /// The identifier for the ApplicationDescription DataType. /// public static readonly NodeId ApplicationDescription = new NodeId(DataTypes.ApplicationDescription); /// /// The identifier for the RequestHeader DataType. /// public static readonly NodeId RequestHeader = new NodeId(DataTypes.RequestHeader); /// /// The identifier for the ResponseHeader DataType. /// public static readonly NodeId ResponseHeader = new NodeId(DataTypes.ResponseHeader); /// /// The identifier for the ServiceFault DataType. /// public static readonly NodeId ServiceFault = new NodeId(DataTypes.ServiceFault); /// /// The identifier for the DnsServiceRecord DataType. /// public static readonly NodeId DnsServiceRecord = new NodeId(DataTypes.DnsServiceRecord); /// /// The identifier for the FindDnsServicesRequest DataType. /// public static readonly NodeId FindDnsServicesRequest = new NodeId(DataTypes.FindDnsServicesRequest); /// /// The identifier for the FindDnsServicesResponse DataType. /// public static readonly NodeId FindDnsServicesResponse = new NodeId(DataTypes.FindDnsServicesResponse); /// /// The identifier for the FindServersRequest DataType. /// public static readonly NodeId FindServersRequest = new NodeId(DataTypes.FindServersRequest); /// /// The identifier for the FindServersResponse DataType. /// public static readonly NodeId FindServersResponse = new NodeId(DataTypes.FindServersResponse); /// /// The identifier for the ApplicationInstanceCertificate DataType. /// public static readonly NodeId ApplicationInstanceCertificate = new NodeId(DataTypes.ApplicationInstanceCertificate); /// /// The identifier for the MessageSecurityMode DataType. /// public static readonly NodeId MessageSecurityMode = new NodeId(DataTypes.MessageSecurityMode); /// /// The identifier for the UserTokenType DataType. /// public static readonly NodeId UserTokenType = new NodeId(DataTypes.UserTokenType); /// /// The identifier for the UserTokenPolicy DataType. /// public static readonly NodeId UserTokenPolicy = new NodeId(DataTypes.UserTokenPolicy); /// /// The identifier for the EndpointDescription DataType. /// public static readonly NodeId EndpointDescription = new NodeId(DataTypes.EndpointDescription); /// /// The identifier for the GetEndpointsRequest DataType. /// public static readonly NodeId GetEndpointsRequest = new NodeId(DataTypes.GetEndpointsRequest); /// /// The identifier for the GetEndpointsResponse DataType. /// public static readonly NodeId GetEndpointsResponse = new NodeId(DataTypes.GetEndpointsResponse); /// /// The identifier for the RegisteredServer DataType. /// public static readonly NodeId RegisteredServer = new NodeId(DataTypes.RegisteredServer); /// /// The identifier for the RegisterServerRequest DataType. /// public static readonly NodeId RegisterServerRequest = new NodeId(DataTypes.RegisterServerRequest); /// /// The identifier for the RegisterServerResponse DataType. /// public static readonly NodeId RegisterServerResponse = new NodeId(DataTypes.RegisterServerResponse); /// /// The identifier for the SecurityTokenRequestType DataType. /// public static readonly NodeId SecurityTokenRequestType = new NodeId(DataTypes.SecurityTokenRequestType); /// /// The identifier for the ChannelSecurityToken DataType. /// public static readonly NodeId ChannelSecurityToken = new NodeId(DataTypes.ChannelSecurityToken); /// /// The identifier for the OpenSecureChannelRequest DataType. /// public static readonly NodeId OpenSecureChannelRequest = new NodeId(DataTypes.OpenSecureChannelRequest); /// /// The identifier for the OpenSecureChannelResponse DataType. /// public static readonly NodeId OpenSecureChannelResponse = new NodeId(DataTypes.OpenSecureChannelResponse); /// /// The identifier for the CloseSecureChannelRequest DataType. /// public static readonly NodeId CloseSecureChannelRequest = new NodeId(DataTypes.CloseSecureChannelRequest); /// /// The identifier for the CloseSecureChannelResponse DataType. /// public static readonly NodeId CloseSecureChannelResponse = new NodeId(DataTypes.CloseSecureChannelResponse); /// /// The identifier for the SignedSoftwareCertificate DataType. /// public static readonly NodeId SignedSoftwareCertificate = new NodeId(DataTypes.SignedSoftwareCertificate); /// /// The identifier for the SessionAuthenticationToken DataType. /// public static readonly NodeId SessionAuthenticationToken = new NodeId(DataTypes.SessionAuthenticationToken); /// /// The identifier for the SignatureData DataType. /// public static readonly NodeId SignatureData = new NodeId(DataTypes.SignatureData); /// /// The identifier for the CreateSessionRequest DataType. /// public static readonly NodeId CreateSessionRequest = new NodeId(DataTypes.CreateSessionRequest); /// /// The identifier for the CreateSessionResponse DataType. /// public static readonly NodeId CreateSessionResponse = new NodeId(DataTypes.CreateSessionResponse); /// /// The identifier for the UserIdentityToken DataType. /// public static readonly NodeId UserIdentityToken = new NodeId(DataTypes.UserIdentityToken); /// /// The identifier for the AnonymousIdentityToken DataType. /// public static readonly NodeId AnonymousIdentityToken = new NodeId(DataTypes.AnonymousIdentityToken); /// /// The identifier for the UserNameIdentityToken DataType. /// public static readonly NodeId UserNameIdentityToken = new NodeId(DataTypes.UserNameIdentityToken); /// /// The identifier for the X509IdentityToken DataType. /// public static readonly NodeId X509IdentityToken = new NodeId(DataTypes.X509IdentityToken); /// /// The identifier for the IssuedIdentityToken DataType. /// public static readonly NodeId IssuedIdentityToken = new NodeId(DataTypes.IssuedIdentityToken); /// /// The identifier for the ActivateSessionRequest DataType. /// public static readonly NodeId ActivateSessionRequest = new NodeId(DataTypes.ActivateSessionRequest); /// /// The identifier for the ActivateSessionResponse DataType. /// public static readonly NodeId ActivateSessionResponse = new NodeId(DataTypes.ActivateSessionResponse); /// /// The identifier for the CloseSessionRequest DataType. /// public static readonly NodeId CloseSessionRequest = new NodeId(DataTypes.CloseSessionRequest); /// /// The identifier for the CloseSessionResponse DataType. /// public static readonly NodeId CloseSessionResponse = new NodeId(DataTypes.CloseSessionResponse); /// /// The identifier for the CancelRequest DataType. /// public static readonly NodeId CancelRequest = new NodeId(DataTypes.CancelRequest); /// /// The identifier for the CancelResponse DataType. /// public static readonly NodeId CancelResponse = new NodeId(DataTypes.CancelResponse); /// /// The identifier for the NodeAttributesMask DataType. /// public static readonly NodeId NodeAttributesMask = new NodeId(DataTypes.NodeAttributesMask); /// /// The identifier for the NodeAttributes DataType. /// public static readonly NodeId NodeAttributes = new NodeId(DataTypes.NodeAttributes); /// /// The identifier for the ObjectAttributes DataType. /// public static readonly NodeId ObjectAttributes = new NodeId(DataTypes.ObjectAttributes); /// /// The identifier for the VariableAttributes DataType. /// public static readonly NodeId VariableAttributes = new NodeId(DataTypes.VariableAttributes); /// /// The identifier for the MethodAttributes DataType. /// public static readonly NodeId MethodAttributes = new NodeId(DataTypes.MethodAttributes); /// /// The identifier for the ObjectTypeAttributes DataType. /// public static readonly NodeId ObjectTypeAttributes = new NodeId(DataTypes.ObjectTypeAttributes); /// /// The identifier for the VariableTypeAttributes DataType. /// public static readonly NodeId VariableTypeAttributes = new NodeId(DataTypes.VariableTypeAttributes); /// /// The identifier for the ReferenceTypeAttributes DataType. /// public static readonly NodeId ReferenceTypeAttributes = new NodeId(DataTypes.ReferenceTypeAttributes); /// /// The identifier for the DataTypeAttributes DataType. /// public static readonly NodeId DataTypeAttributes = new NodeId(DataTypes.DataTypeAttributes); /// /// The identifier for the ViewAttributes DataType. /// public static readonly NodeId ViewAttributes = new NodeId(DataTypes.ViewAttributes); /// /// The identifier for the AddNodesItem DataType. /// public static readonly NodeId AddNodesItem = new NodeId(DataTypes.AddNodesItem); /// /// The identifier for the AddNodesResult DataType. /// public static readonly NodeId AddNodesResult = new NodeId(DataTypes.AddNodesResult); /// /// The identifier for the AddNodesRequest DataType. /// public static readonly NodeId AddNodesRequest = new NodeId(DataTypes.AddNodesRequest); /// /// The identifier for the AddNodesResponse DataType. /// public static readonly NodeId AddNodesResponse = new NodeId(DataTypes.AddNodesResponse); /// /// The identifier for the AddReferencesItem DataType. /// public static readonly NodeId AddReferencesItem = new NodeId(DataTypes.AddReferencesItem); /// /// The identifier for the AddReferencesRequest DataType. /// public static readonly NodeId AddReferencesRequest = new NodeId(DataTypes.AddReferencesRequest); /// /// The identifier for the AddReferencesResponse DataType. /// public static readonly NodeId AddReferencesResponse = new NodeId(DataTypes.AddReferencesResponse); /// /// The identifier for the DeleteNodesItem DataType. /// public static readonly NodeId DeleteNodesItem = new NodeId(DataTypes.DeleteNodesItem); /// /// The identifier for the DeleteNodesRequest DataType. /// public static readonly NodeId DeleteNodesRequest = new NodeId(DataTypes.DeleteNodesRequest); /// /// The identifier for the DeleteNodesResponse DataType. /// public static readonly NodeId DeleteNodesResponse = new NodeId(DataTypes.DeleteNodesResponse); /// /// The identifier for the DeleteReferencesItem DataType. /// public static readonly NodeId DeleteReferencesItem = new NodeId(DataTypes.DeleteReferencesItem); /// /// The identifier for the DeleteReferencesRequest DataType. /// public static readonly NodeId DeleteReferencesRequest = new NodeId(DataTypes.DeleteReferencesRequest); /// /// The identifier for the DeleteReferencesResponse DataType. /// public static readonly NodeId DeleteReferencesResponse = new NodeId(DataTypes.DeleteReferencesResponse); /// /// The identifier for the AttributeWriteMask DataType. /// public static readonly NodeId AttributeWriteMask = new NodeId(DataTypes.AttributeWriteMask); /// /// The identifier for the BrowseDirection DataType. /// public static readonly NodeId BrowseDirection = new NodeId(DataTypes.BrowseDirection); /// /// The identifier for the ViewDescription DataType. /// public static readonly NodeId ViewDescription = new NodeId(DataTypes.ViewDescription); /// /// The identifier for the BrowseDescription DataType. /// public static readonly NodeId BrowseDescription = new NodeId(DataTypes.BrowseDescription); /// /// The identifier for the BrowseResultMask DataType. /// public static readonly NodeId BrowseResultMask = new NodeId(DataTypes.BrowseResultMask); /// /// The identifier for the ReferenceDescription DataType. /// public static readonly NodeId ReferenceDescription = new NodeId(DataTypes.ReferenceDescription); /// /// The identifier for the ContinuationPoint DataType. /// public static readonly NodeId ContinuationPoint = new NodeId(DataTypes.ContinuationPoint); /// /// The identifier for the BrowseResult DataType. /// public static readonly NodeId BrowseResult = new NodeId(DataTypes.BrowseResult); /// /// The identifier for the BrowseRequest DataType. /// public static readonly NodeId BrowseRequest = new NodeId(DataTypes.BrowseRequest); /// /// The identifier for the BrowseResponse DataType. /// public static readonly NodeId BrowseResponse = new NodeId(DataTypes.BrowseResponse); /// /// The identifier for the BrowseNextRequest DataType. /// public static readonly NodeId BrowseNextRequest = new NodeId(DataTypes.BrowseNextRequest); /// /// The identifier for the BrowseNextResponse DataType. /// public static readonly NodeId BrowseNextResponse = new NodeId(DataTypes.BrowseNextResponse); /// /// The identifier for the RelativePathElement DataType. /// public static readonly NodeId RelativePathElement = new NodeId(DataTypes.RelativePathElement); /// /// The identifier for the RelativePath DataType. /// public static readonly NodeId RelativePath = new NodeId(DataTypes.RelativePath); /// /// The identifier for the BrowsePath DataType. /// public static readonly NodeId BrowsePath = new NodeId(DataTypes.BrowsePath); /// /// The identifier for the BrowsePathTarget DataType. /// public static readonly NodeId BrowsePathTarget = new NodeId(DataTypes.BrowsePathTarget); /// /// The identifier for the BrowsePathResult DataType. /// public static readonly NodeId BrowsePathResult = new NodeId(DataTypes.BrowsePathResult); /// /// The identifier for the TranslateBrowsePathsToNodeIdsRequest DataType. /// public static readonly NodeId TranslateBrowsePathsToNodeIdsRequest = new NodeId(DataTypes.TranslateBrowsePathsToNodeIdsRequest); /// /// The identifier for the TranslateBrowsePathsToNodeIdsResponse DataType. /// public static readonly NodeId TranslateBrowsePathsToNodeIdsResponse = new NodeId(DataTypes.TranslateBrowsePathsToNodeIdsResponse); /// /// The identifier for the RegisterNodesRequest DataType. /// public static readonly NodeId RegisterNodesRequest = new NodeId(DataTypes.RegisterNodesRequest); /// /// The identifier for the RegisterNodesResponse DataType. /// public static readonly NodeId RegisterNodesResponse = new NodeId(DataTypes.RegisterNodesResponse); /// /// The identifier for the UnregisterNodesRequest DataType. /// public static readonly NodeId UnregisterNodesRequest = new NodeId(DataTypes.UnregisterNodesRequest); /// /// The identifier for the UnregisterNodesResponse DataType. /// public static readonly NodeId UnregisterNodesResponse = new NodeId(DataTypes.UnregisterNodesResponse); /// /// The identifier for the Counter DataType. /// public static readonly NodeId Counter = new NodeId(DataTypes.Counter); /// /// The identifier for the NumericRange DataType. /// public static readonly NodeId NumericRange = new NodeId(DataTypes.NumericRange); /// /// The identifier for the Time DataType. /// public static readonly NodeId Time = new NodeId(DataTypes.Time); /// /// The identifier for the Date DataType. /// public static readonly NodeId Date = new NodeId(DataTypes.Date); /// /// The identifier for the EndpointConfiguration DataType. /// public static readonly NodeId EndpointConfiguration = new NodeId(DataTypes.EndpointConfiguration); /// /// The identifier for the ComplianceLevel DataType. /// public static readonly NodeId ComplianceLevel = new NodeId(DataTypes.ComplianceLevel); /// /// The identifier for the SupportedProfile DataType. /// public static readonly NodeId SupportedProfile = new NodeId(DataTypes.SupportedProfile); /// /// The identifier for the SoftwareCertificate DataType. /// public static readonly NodeId SoftwareCertificate = new NodeId(DataTypes.SoftwareCertificate); /// /// The identifier for the QueryDataDescription DataType. /// public static readonly NodeId QueryDataDescription = new NodeId(DataTypes.QueryDataDescription); /// /// The identifier for the NodeTypeDescription DataType. /// public static readonly NodeId NodeTypeDescription = new NodeId(DataTypes.NodeTypeDescription); /// /// The identifier for the FilterOperator DataType. /// public static readonly NodeId FilterOperator = new NodeId(DataTypes.FilterOperator); /// /// The identifier for the QueryDataSet DataType. /// public static readonly NodeId QueryDataSet = new NodeId(DataTypes.QueryDataSet); /// /// The identifier for the NodeReference DataType. /// public static readonly NodeId NodeReference = new NodeId(DataTypes.NodeReference); /// /// The identifier for the ContentFilterElement DataType. /// public static readonly NodeId ContentFilterElement = new NodeId(DataTypes.ContentFilterElement); /// /// The identifier for the ContentFilter DataType. /// public static readonly NodeId ContentFilter = new NodeId(DataTypes.ContentFilter); /// /// The identifier for the FilterOperand DataType. /// public static readonly NodeId FilterOperand = new NodeId(DataTypes.FilterOperand); /// /// The identifier for the ElementOperand DataType. /// public static readonly NodeId ElementOperand = new NodeId(DataTypes.ElementOperand); /// /// The identifier for the LiteralOperand DataType. /// public static readonly NodeId LiteralOperand = new NodeId(DataTypes.LiteralOperand); /// /// The identifier for the AttributeOperand DataType. /// public static readonly NodeId AttributeOperand = new NodeId(DataTypes.AttributeOperand); /// /// The identifier for the SimpleAttributeOperand DataType. /// public static readonly NodeId SimpleAttributeOperand = new NodeId(DataTypes.SimpleAttributeOperand); /// /// The identifier for the ContentFilterElementResult DataType. /// public static readonly NodeId ContentFilterElementResult = new NodeId(DataTypes.ContentFilterElementResult); /// /// The identifier for the ContentFilterResult DataType. /// public static readonly NodeId ContentFilterResult = new NodeId(DataTypes.ContentFilterResult); /// /// The identifier for the ParsingResult DataType. /// public static readonly NodeId ParsingResult = new NodeId(DataTypes.ParsingResult); /// /// The identifier for the QueryFirstRequest DataType. /// public static readonly NodeId QueryFirstRequest = new NodeId(DataTypes.QueryFirstRequest); /// /// The identifier for the QueryFirstResponse DataType. /// public static readonly NodeId QueryFirstResponse = new NodeId(DataTypes.QueryFirstResponse); /// /// The identifier for the QueryNextRequest DataType. /// public static readonly NodeId QueryNextRequest = new NodeId(DataTypes.QueryNextRequest); /// /// The identifier for the QueryNextResponse DataType. /// public static readonly NodeId QueryNextResponse = new NodeId(DataTypes.QueryNextResponse); /// /// The identifier for the TimestampsToReturn DataType. /// public static readonly NodeId TimestampsToReturn = new NodeId(DataTypes.TimestampsToReturn); /// /// The identifier for the ReadValueId DataType. /// public static readonly NodeId ReadValueId = new NodeId(DataTypes.ReadValueId); /// /// The identifier for the ReadRequest DataType. /// public static readonly NodeId ReadRequest = new NodeId(DataTypes.ReadRequest); /// /// The identifier for the ReadResponse DataType. /// public static readonly NodeId ReadResponse = new NodeId(DataTypes.ReadResponse); /// /// The identifier for the HistoryReadValueId DataType. /// public static readonly NodeId HistoryReadValueId = new NodeId(DataTypes.HistoryReadValueId); /// /// The identifier for the HistoryReadResult DataType. /// public static readonly NodeId HistoryReadResult = new NodeId(DataTypes.HistoryReadResult); /// /// The identifier for the HistoryReadDetails DataType. /// public static readonly NodeId HistoryReadDetails = new NodeId(DataTypes.HistoryReadDetails); /// /// The identifier for the ReadEventDetails DataType. /// public static readonly NodeId ReadEventDetails = new NodeId(DataTypes.ReadEventDetails); /// /// The identifier for the ReadRawModifiedDetails DataType. /// public static readonly NodeId ReadRawModifiedDetails = new NodeId(DataTypes.ReadRawModifiedDetails); /// /// The identifier for the ReadProcessedDetails DataType. /// public static readonly NodeId ReadProcessedDetails = new NodeId(DataTypes.ReadProcessedDetails); /// /// The identifier for the ReadAtTimeDetails DataType. /// public static readonly NodeId ReadAtTimeDetails = new NodeId(DataTypes.ReadAtTimeDetails); /// /// The identifier for the HistoryData DataType. /// public static readonly NodeId HistoryData = new NodeId(DataTypes.HistoryData); /// /// The identifier for the ModificationInfo DataType. /// public static readonly NodeId ModificationInfo = new NodeId(DataTypes.ModificationInfo); /// /// The identifier for the HistoryModifiedData DataType. /// public static readonly NodeId HistoryModifiedData = new NodeId(DataTypes.HistoryModifiedData); /// /// The identifier for the HistoryEvent DataType. /// public static readonly NodeId HistoryEvent = new NodeId(DataTypes.HistoryEvent); /// /// The identifier for the HistoryReadRequest DataType. /// public static readonly NodeId HistoryReadRequest = new NodeId(DataTypes.HistoryReadRequest); /// /// The identifier for the HistoryReadResponse DataType. /// public static readonly NodeId HistoryReadResponse = new NodeId(DataTypes.HistoryReadResponse); /// /// The identifier for the WriteValue DataType. /// public static readonly NodeId WriteValue = new NodeId(DataTypes.WriteValue); /// /// The identifier for the WriteRequest DataType. /// public static readonly NodeId WriteRequest = new NodeId(DataTypes.WriteRequest); /// /// The identifier for the WriteResponse DataType. /// public static readonly NodeId WriteResponse = new NodeId(DataTypes.WriteResponse); /// /// The identifier for the HistoryUpdateDetails DataType. /// public static readonly NodeId HistoryUpdateDetails = new NodeId(DataTypes.HistoryUpdateDetails); /// /// The identifier for the HistoryUpdateType DataType. /// public static readonly NodeId HistoryUpdateType = new NodeId(DataTypes.HistoryUpdateType); /// /// The identifier for the PerformUpdateType DataType. /// public static readonly NodeId PerformUpdateType = new NodeId(DataTypes.PerformUpdateType); /// /// The identifier for the UpdateDataDetails DataType. /// public static readonly NodeId UpdateDataDetails = new NodeId(DataTypes.UpdateDataDetails); /// /// The identifier for the UpdateStructureDataDetails DataType. /// public static readonly NodeId UpdateStructureDataDetails = new NodeId(DataTypes.UpdateStructureDataDetails); /// /// The identifier for the UpdateEventDetails DataType. /// public static readonly NodeId UpdateEventDetails = new NodeId(DataTypes.UpdateEventDetails); /// /// The identifier for the DeleteRawModifiedDetails DataType. /// public static readonly NodeId DeleteRawModifiedDetails = new NodeId(DataTypes.DeleteRawModifiedDetails); /// /// The identifier for the DeleteAtTimeDetails DataType. /// public static readonly NodeId DeleteAtTimeDetails = new NodeId(DataTypes.DeleteAtTimeDetails); /// /// The identifier for the DeleteEventDetails DataType. /// public static readonly NodeId DeleteEventDetails = new NodeId(DataTypes.DeleteEventDetails); /// /// The identifier for the HistoryUpdateResult DataType. /// public static readonly NodeId HistoryUpdateResult = new NodeId(DataTypes.HistoryUpdateResult); /// /// The identifier for the HistoryUpdateEventResult DataType. /// public static readonly NodeId HistoryUpdateEventResult = new NodeId(DataTypes.HistoryUpdateEventResult); /// /// The identifier for the HistoryUpdateRequest DataType. /// public static readonly NodeId HistoryUpdateRequest = new NodeId(DataTypes.HistoryUpdateRequest); /// /// The identifier for the HistoryUpdateResponse DataType. /// public static readonly NodeId HistoryUpdateResponse = new NodeId(DataTypes.HistoryUpdateResponse); /// /// The identifier for the CallMethodRequest DataType. /// public static readonly NodeId CallMethodRequest = new NodeId(DataTypes.CallMethodRequest); /// /// The identifier for the CallMethodResult DataType. /// public static readonly NodeId CallMethodResult = new NodeId(DataTypes.CallMethodResult); /// /// The identifier for the CallRequest DataType. /// public static readonly NodeId CallRequest = new NodeId(DataTypes.CallRequest); /// /// The identifier for the CallResponse DataType. /// public static readonly NodeId CallResponse = new NodeId(DataTypes.CallResponse); /// /// The identifier for the MonitoringMode DataType. /// public static readonly NodeId MonitoringMode = new NodeId(DataTypes.MonitoringMode); /// /// The identifier for the DataChangeTrigger DataType. /// public static readonly NodeId DataChangeTrigger = new NodeId(DataTypes.DataChangeTrigger); /// /// The identifier for the DeadbandType DataType. /// public static readonly NodeId DeadbandType = new NodeId(DataTypes.DeadbandType); /// /// The identifier for the MonitoringFilter DataType. /// public static readonly NodeId MonitoringFilter = new NodeId(DataTypes.MonitoringFilter); /// /// The identifier for the DataChangeFilter DataType. /// public static readonly NodeId DataChangeFilter = new NodeId(DataTypes.DataChangeFilter); /// /// The identifier for the EventFilter DataType. /// public static readonly NodeId EventFilter = new NodeId(DataTypes.EventFilter); /// /// The identifier for the AggregateConfiguration DataType. /// public static readonly NodeId AggregateConfiguration = new NodeId(DataTypes.AggregateConfiguration); /// /// The identifier for the AggregateFilter DataType. /// public static readonly NodeId AggregateFilter = new NodeId(DataTypes.AggregateFilter); /// /// The identifier for the MonitoringFilterResult DataType. /// public static readonly NodeId MonitoringFilterResult = new NodeId(DataTypes.MonitoringFilterResult); /// /// The identifier for the EventFilterResult DataType. /// public static readonly NodeId EventFilterResult = new NodeId(DataTypes.EventFilterResult); /// /// The identifier for the AggregateFilterResult DataType. /// public static readonly NodeId AggregateFilterResult = new NodeId(DataTypes.AggregateFilterResult); /// /// The identifier for the MonitoringParameters DataType. /// public static readonly NodeId MonitoringParameters = new NodeId(DataTypes.MonitoringParameters); /// /// The identifier for the MonitoredItemCreateRequest DataType. /// public static readonly NodeId MonitoredItemCreateRequest = new NodeId(DataTypes.MonitoredItemCreateRequest); /// /// The identifier for the MonitoredItemCreateResult DataType. /// public static readonly NodeId MonitoredItemCreateResult = new NodeId(DataTypes.MonitoredItemCreateResult); /// /// The identifier for the CreateMonitoredItemsRequest DataType. /// public static readonly NodeId CreateMonitoredItemsRequest = new NodeId(DataTypes.CreateMonitoredItemsRequest); /// /// The identifier for the CreateMonitoredItemsResponse DataType. /// public static readonly NodeId CreateMonitoredItemsResponse = new NodeId(DataTypes.CreateMonitoredItemsResponse); /// /// The identifier for the MonitoredItemModifyRequest DataType. /// public static readonly NodeId MonitoredItemModifyRequest = new NodeId(DataTypes.MonitoredItemModifyRequest); /// /// The identifier for the MonitoredItemModifyResult DataType. /// public static readonly NodeId MonitoredItemModifyResult = new NodeId(DataTypes.MonitoredItemModifyResult); /// /// The identifier for the ModifyMonitoredItemsRequest DataType. /// public static readonly NodeId ModifyMonitoredItemsRequest = new NodeId(DataTypes.ModifyMonitoredItemsRequest); /// /// The identifier for the ModifyMonitoredItemsResponse DataType. /// public static readonly NodeId ModifyMonitoredItemsResponse = new NodeId(DataTypes.ModifyMonitoredItemsResponse); /// /// The identifier for the SetMonitoringModeRequest DataType. /// public static readonly NodeId SetMonitoringModeRequest = new NodeId(DataTypes.SetMonitoringModeRequest); /// /// The identifier for the SetMonitoringModeResponse DataType. /// public static readonly NodeId SetMonitoringModeResponse = new NodeId(DataTypes.SetMonitoringModeResponse); /// /// The identifier for the SetTriggeringRequest DataType. /// public static readonly NodeId SetTriggeringRequest = new NodeId(DataTypes.SetTriggeringRequest); /// /// The identifier for the SetTriggeringResponse DataType. /// public static readonly NodeId SetTriggeringResponse = new NodeId(DataTypes.SetTriggeringResponse); /// /// The identifier for the DeleteMonitoredItemsRequest DataType. /// public static readonly NodeId DeleteMonitoredItemsRequest = new NodeId(DataTypes.DeleteMonitoredItemsRequest); /// /// The identifier for the DeleteMonitoredItemsResponse DataType. /// public static readonly NodeId DeleteMonitoredItemsResponse = new NodeId(DataTypes.DeleteMonitoredItemsResponse); /// /// The identifier for the CreateSubscriptionRequest DataType. /// public static readonly NodeId CreateSubscriptionRequest = new NodeId(DataTypes.CreateSubscriptionRequest); /// /// The identifier for the CreateSubscriptionResponse DataType. /// public static readonly NodeId CreateSubscriptionResponse = new NodeId(DataTypes.CreateSubscriptionResponse); /// /// The identifier for the ModifySubscriptionRequest DataType. /// public static readonly NodeId ModifySubscriptionRequest = new NodeId(DataTypes.ModifySubscriptionRequest); /// /// The identifier for the ModifySubscriptionResponse DataType. /// public static readonly NodeId ModifySubscriptionResponse = new NodeId(DataTypes.ModifySubscriptionResponse); /// /// The identifier for the SetPublishingModeRequest DataType. /// public static readonly NodeId SetPublishingModeRequest = new NodeId(DataTypes.SetPublishingModeRequest); /// /// The identifier for the SetPublishingModeResponse DataType. /// public static readonly NodeId SetPublishingModeResponse = new NodeId(DataTypes.SetPublishingModeResponse); /// /// The identifier for the NotificationMessage DataType. /// public static readonly NodeId NotificationMessage = new NodeId(DataTypes.NotificationMessage); /// /// The identifier for the NotificationData DataType. /// public static readonly NodeId NotificationData = new NodeId(DataTypes.NotificationData); /// /// The identifier for the DataChangeNotification DataType. /// public static readonly NodeId DataChangeNotification = new NodeId(DataTypes.DataChangeNotification); /// /// The identifier for the MonitoredItemNotification DataType. /// public static readonly NodeId MonitoredItemNotification = new NodeId(DataTypes.MonitoredItemNotification); /// /// The identifier for the EventNotificationList DataType. /// public static readonly NodeId EventNotificationList = new NodeId(DataTypes.EventNotificationList); /// /// The identifier for the EventFieldList DataType. /// public static readonly NodeId EventFieldList = new NodeId(DataTypes.EventFieldList); /// /// The identifier for the HistoryEventFieldList DataType. /// public static readonly NodeId HistoryEventFieldList = new NodeId(DataTypes.HistoryEventFieldList); /// /// The identifier for the StatusChangeNotification DataType. /// public static readonly NodeId StatusChangeNotification = new NodeId(DataTypes.StatusChangeNotification); /// /// The identifier for the SubscriptionAcknowledgement DataType. /// public static readonly NodeId SubscriptionAcknowledgement = new NodeId(DataTypes.SubscriptionAcknowledgement); /// /// The identifier for the PublishRequest DataType. /// public static readonly NodeId PublishRequest = new NodeId(DataTypes.PublishRequest); /// /// The identifier for the PublishResponse DataType. /// public static readonly NodeId PublishResponse = new NodeId(DataTypes.PublishResponse); /// /// The identifier for the RepublishRequest DataType. /// public static readonly NodeId RepublishRequest = new NodeId(DataTypes.RepublishRequest); /// /// The identifier for the RepublishResponse DataType. /// public static readonly NodeId RepublishResponse = new NodeId(DataTypes.RepublishResponse); /// /// The identifier for the TransferResult DataType. /// public static readonly NodeId TransferResult = new NodeId(DataTypes.TransferResult); /// /// The identifier for the TransferSubscriptionsRequest DataType. /// public static readonly NodeId TransferSubscriptionsRequest = new NodeId(DataTypes.TransferSubscriptionsRequest); /// /// The identifier for the TransferSubscriptionsResponse DataType. /// public static readonly NodeId TransferSubscriptionsResponse = new NodeId(DataTypes.TransferSubscriptionsResponse); /// /// The identifier for the DeleteSubscriptionsRequest DataType. /// public static readonly NodeId DeleteSubscriptionsRequest = new NodeId(DataTypes.DeleteSubscriptionsRequest); /// /// The identifier for the DeleteSubscriptionsResponse DataType. /// public static readonly NodeId DeleteSubscriptionsResponse = new NodeId(DataTypes.DeleteSubscriptionsResponse); /// /// The identifier for the EnumeratedTestType DataType. /// public static readonly NodeId EnumeratedTestType = new NodeId(DataTypes.EnumeratedTestType); /// /// The identifier for the ScalarTestType DataType. /// public static readonly NodeId ScalarTestType = new NodeId(DataTypes.ScalarTestType); /// /// The identifier for the ArrayTestType DataType. /// public static readonly NodeId ArrayTestType = new NodeId(DataTypes.ArrayTestType); /// /// The identifier for the CompositeTestType DataType. /// public static readonly NodeId CompositeTestType = new NodeId(DataTypes.CompositeTestType); /// /// The identifier for the TestStackRequest DataType. /// public static readonly NodeId TestStackRequest = new NodeId(DataTypes.TestStackRequest); /// /// The identifier for the TestStackResponse DataType. /// public static readonly NodeId TestStackResponse = new NodeId(DataTypes.TestStackResponse); /// /// The identifier for the TestStackExRequest DataType. /// public static readonly NodeId TestStackExRequest = new NodeId(DataTypes.TestStackExRequest); /// /// The identifier for the TestStackExResponse DataType. /// public static readonly NodeId TestStackExResponse = new NodeId(DataTypes.TestStackExResponse); /// /// The identifier for the BuildInfo DataType. /// public static readonly NodeId BuildInfo = new NodeId(DataTypes.BuildInfo); /// /// The identifier for the RedundancySupport DataType. /// public static readonly NodeId RedundancySupport = new NodeId(DataTypes.RedundancySupport); /// /// The identifier for the ServerState DataType. /// public static readonly NodeId ServerState = new NodeId(DataTypes.ServerState); /// /// The identifier for the RedundantServerDataType DataType. /// public static readonly NodeId RedundantServerDataType = new NodeId(DataTypes.RedundantServerDataType); /// /// The identifier for the EndpointUrlListDataType DataType. /// public static readonly NodeId EndpointUrlListDataType = new NodeId(DataTypes.EndpointUrlListDataType); /// /// The identifier for the NetworkGroupDataType DataType. /// public static readonly NodeId NetworkGroupDataType = new NodeId(DataTypes.NetworkGroupDataType); /// /// The identifier for the SamplingIntervalDiagnosticsDataType DataType. /// public static readonly NodeId SamplingIntervalDiagnosticsDataType = new NodeId(DataTypes.SamplingIntervalDiagnosticsDataType); /// /// The identifier for the ServerDiagnosticsSummaryDataType DataType. /// public static readonly NodeId ServerDiagnosticsSummaryDataType = new NodeId(DataTypes.ServerDiagnosticsSummaryDataType); /// /// The identifier for the ServerStatusDataType DataType. /// public static readonly NodeId ServerStatusDataType = new NodeId(DataTypes.ServerStatusDataType); /// /// The identifier for the SessionDiagnosticsDataType DataType. /// public static readonly NodeId SessionDiagnosticsDataType = new NodeId(DataTypes.SessionDiagnosticsDataType); /// /// The identifier for the SessionSecurityDiagnosticsDataType DataType. /// public static readonly NodeId SessionSecurityDiagnosticsDataType = new NodeId(DataTypes.SessionSecurityDiagnosticsDataType); /// /// The identifier for the ServiceCounterDataType DataType. /// public static readonly NodeId ServiceCounterDataType = new NodeId(DataTypes.ServiceCounterDataType); /// /// The identifier for the StatusResult DataType. /// public static readonly NodeId StatusResult = new NodeId(DataTypes.StatusResult); /// /// The identifier for the SubscriptionDiagnosticsDataType DataType. /// public static readonly NodeId SubscriptionDiagnosticsDataType = new NodeId(DataTypes.SubscriptionDiagnosticsDataType); /// /// The identifier for the ModelChangeStructureVerbMask DataType. /// public static readonly NodeId ModelChangeStructureVerbMask = new NodeId(DataTypes.ModelChangeStructureVerbMask); /// /// The identifier for the ModelChangeStructureDataType DataType. /// public static readonly NodeId ModelChangeStructureDataType = new NodeId(DataTypes.ModelChangeStructureDataType); /// /// The identifier for the SemanticChangeStructureDataType DataType. /// public static readonly NodeId SemanticChangeStructureDataType = new NodeId(DataTypes.SemanticChangeStructureDataType); /// /// The identifier for the Range DataType. /// public static readonly NodeId Range = new NodeId(DataTypes.Range); /// /// The identifier for the EUInformation DataType. /// public static readonly NodeId EUInformation = new NodeId(DataTypes.EUInformation); /// /// The identifier for the AxisScaleEnumeration DataType. /// public static readonly NodeId AxisScaleEnumeration = new NodeId(DataTypes.AxisScaleEnumeration); /// /// The identifier for the ComplexNumberType DataType. /// public static readonly NodeId ComplexNumberType = new NodeId(DataTypes.ComplexNumberType); /// /// The identifier for the DoubleComplexNumberType DataType. /// public static readonly NodeId DoubleComplexNumberType = new NodeId(DataTypes.DoubleComplexNumberType); /// /// The identifier for the AxisInformation DataType. /// public static readonly NodeId AxisInformation = new NodeId(DataTypes.AxisInformation); /// /// The identifier for the XVType DataType. /// public static readonly NodeId XVType = new NodeId(DataTypes.XVType); /// /// The identifier for the ProgramDiagnosticDataType DataType. /// public static readonly NodeId ProgramDiagnosticDataType = new NodeId(DataTypes.ProgramDiagnosticDataType); /// /// The identifier for the Annotation DataType. /// public static readonly NodeId Annotation = new NodeId(DataTypes.Annotation); /// /// The identifier for the ExceptionDeviationFormat DataType. /// public static readonly NodeId ExceptionDeviationFormat = new NodeId(DataTypes.ExceptionDeviationFormat); } #endregion #region Method Node Identifiers /// /// A class that declares constants for all Methods in the Model Design. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class MethodIds { /// /// The identifier for the ServerType_GetMonitoredItems Method. /// public static readonly NodeId ServerType_GetMonitoredItems = new NodeId(Methods.ServerType_GetMonitoredItems); /// /// The identifier for the FileType_Open Method. /// public static readonly NodeId FileType_Open = new NodeId(Methods.FileType_Open); /// /// The identifier for the FileType_Close Method. /// public static readonly NodeId FileType_Close = new NodeId(Methods.FileType_Close); /// /// The identifier for the FileType_Read Method. /// public static readonly NodeId FileType_Read = new NodeId(Methods.FileType_Read); /// /// The identifier for the FileType_Write Method. /// public static readonly NodeId FileType_Write = new NodeId(Methods.FileType_Write); /// /// The identifier for the FileType_GetPosition Method. /// public static readonly NodeId FileType_GetPosition = new NodeId(Methods.FileType_GetPosition); /// /// The identifier for the FileType_SetPosition Method. /// public static readonly NodeId FileType_SetPosition = new NodeId(Methods.FileType_SetPosition); /// /// The identifier for the AddressSpaceFileType_ExportNamespace Method. /// public static readonly NodeId AddressSpaceFileType_ExportNamespace = new NodeId(Methods.AddressSpaceFileType_ExportNamespace); /// /// The identifier for the Server_Namespaces_AddressSpaceFile_Open Method. /// public static readonly NodeId Server_Namespaces_AddressSpaceFile_Open = new NodeId(Methods.Server_Namespaces_AddressSpaceFile_Open); /// /// The identifier for the Server_Namespaces_AddressSpaceFile_Close Method. /// public static readonly NodeId Server_Namespaces_AddressSpaceFile_Close = new NodeId(Methods.Server_Namespaces_AddressSpaceFile_Close); /// /// The identifier for the Server_Namespaces_AddressSpaceFile_Read Method. /// public static readonly NodeId Server_Namespaces_AddressSpaceFile_Read = new NodeId(Methods.Server_Namespaces_AddressSpaceFile_Read); /// /// The identifier for the Server_Namespaces_AddressSpaceFile_Write Method. /// public static readonly NodeId Server_Namespaces_AddressSpaceFile_Write = new NodeId(Methods.Server_Namespaces_AddressSpaceFile_Write); /// /// The identifier for the Server_Namespaces_AddressSpaceFile_GetPosition Method. /// public static readonly NodeId Server_Namespaces_AddressSpaceFile_GetPosition = new NodeId(Methods.Server_Namespaces_AddressSpaceFile_GetPosition); /// /// The identifier for the Server_Namespaces_AddressSpaceFile_SetPosition Method. /// public static readonly NodeId Server_Namespaces_AddressSpaceFile_SetPosition = new NodeId(Methods.Server_Namespaces_AddressSpaceFile_SetPosition); /// /// The identifier for the Server_GetMonitoredItems Method. /// public static readonly NodeId Server_GetMonitoredItems = new NodeId(Methods.Server_GetMonitoredItems); /// /// The identifier for the GetMonitoredItemsMethodType Method. /// public static readonly NodeId GetMonitoredItemsMethodType = new NodeId(Methods.GetMonitoredItemsMethodType); /// /// The identifier for the OpenMethodType Method. /// public static readonly NodeId OpenMethodType = new NodeId(Methods.OpenMethodType); /// /// The identifier for the CloseMethodType Method. /// public static readonly NodeId CloseMethodType = new NodeId(Methods.CloseMethodType); /// /// The identifier for the ReadMethodType Method. /// public static readonly NodeId ReadMethodType = new NodeId(Methods.ReadMethodType); /// /// The identifier for the WriteMethodType Method. /// public static readonly NodeId WriteMethodType = new NodeId(Methods.WriteMethodType); /// /// The identifier for the GetPositionMethodType Method. /// public static readonly NodeId GetPositionMethodType = new NodeId(Methods.GetPositionMethodType); /// /// The identifier for the SetPositionMethodType Method. /// public static readonly NodeId SetPositionMethodType = new NodeId(Methods.SetPositionMethodType); /// /// The identifier for the ConditionType_Disable Method. /// public static readonly NodeId ConditionType_Disable = new NodeId(Methods.ConditionType_Disable); /// /// The identifier for the ConditionType_Enable Method. /// public static readonly NodeId ConditionType_Enable = new NodeId(Methods.ConditionType_Enable); /// /// The identifier for the ConditionType_AddComment Method. /// public static readonly NodeId ConditionType_AddComment = new NodeId(Methods.ConditionType_AddComment); /// /// The identifier for the ConditionType_ConditionRefresh Method. /// public static readonly NodeId ConditionType_ConditionRefresh = new NodeId(Methods.ConditionType_ConditionRefresh); /// /// The identifier for the ConditionRefreshMethodType Method. /// public static readonly NodeId ConditionRefreshMethodType = new NodeId(Methods.ConditionRefreshMethodType); /// /// The identifier for the AddCommentMethodType Method. /// public static readonly NodeId AddCommentMethodType = new NodeId(Methods.AddCommentMethodType); /// /// The identifier for the DialogConditionType_Respond Method. /// public static readonly NodeId DialogConditionType_Respond = new NodeId(Methods.DialogConditionType_Respond); /// /// The identifier for the DialogResponseMethodType Method. /// public static readonly NodeId DialogResponseMethodType = new NodeId(Methods.DialogResponseMethodType); /// /// The identifier for the AcknowledgeableConditionType_Acknowledge Method. /// public static readonly NodeId AcknowledgeableConditionType_Acknowledge = new NodeId(Methods.AcknowledgeableConditionType_Acknowledge); /// /// The identifier for the AcknowledgeableConditionType_Confirm Method. /// public static readonly NodeId AcknowledgeableConditionType_Confirm = new NodeId(Methods.AcknowledgeableConditionType_Confirm); /// /// The identifier for the AlarmConditionType_ShelvingState_Unshelve Method. /// public static readonly NodeId AlarmConditionType_ShelvingState_Unshelve = new NodeId(Methods.AlarmConditionType_ShelvingState_Unshelve); /// /// The identifier for the AlarmConditionType_ShelvingState_OneShotShelve Method. /// public static readonly NodeId AlarmConditionType_ShelvingState_OneShotShelve = new NodeId(Methods.AlarmConditionType_ShelvingState_OneShotShelve); /// /// The identifier for the AlarmConditionType_ShelvingState_TimedShelve Method. /// public static readonly NodeId AlarmConditionType_ShelvingState_TimedShelve = new NodeId(Methods.AlarmConditionType_ShelvingState_TimedShelve); /// /// The identifier for the ShelvedStateMachineType_Unshelve Method. /// public static readonly NodeId ShelvedStateMachineType_Unshelve = new NodeId(Methods.ShelvedStateMachineType_Unshelve); /// /// The identifier for the ShelvedStateMachineType_OneShotShelve Method. /// public static readonly NodeId ShelvedStateMachineType_OneShotShelve = new NodeId(Methods.ShelvedStateMachineType_OneShotShelve); /// /// The identifier for the ShelvedStateMachineType_TimedShelve Method. /// public static readonly NodeId ShelvedStateMachineType_TimedShelve = new NodeId(Methods.ShelvedStateMachineType_TimedShelve); /// /// The identifier for the TimedShelveMethodType Method. /// public static readonly NodeId TimedShelveMethodType = new NodeId(Methods.TimedShelveMethodType); /// /// The identifier for the ProgramStateMachineType_Start Method. /// public static readonly NodeId ProgramStateMachineType_Start = new NodeId(Methods.ProgramStateMachineType_Start); /// /// The identifier for the ProgramStateMachineType_Suspend Method. /// public static readonly NodeId ProgramStateMachineType_Suspend = new NodeId(Methods.ProgramStateMachineType_Suspend); /// /// The identifier for the ProgramStateMachineType_Resume Method. /// public static readonly NodeId ProgramStateMachineType_Resume = new NodeId(Methods.ProgramStateMachineType_Resume); /// /// The identifier for the ProgramStateMachineType_Halt Method. /// public static readonly NodeId ProgramStateMachineType_Halt = new NodeId(Methods.ProgramStateMachineType_Halt); /// /// The identifier for the ProgramStateMachineType_Reset Method. /// public static readonly NodeId ProgramStateMachineType_Reset = new NodeId(Methods.ProgramStateMachineType_Reset); /// /// The identifier for the LockType_Lock Method. /// public static readonly NodeId LockType_Lock = new NodeId(Methods.LockType_Lock); /// /// The identifier for the LockType_Unlock Method. /// public static readonly NodeId LockType_Unlock = new NodeId(Methods.LockType_Unlock); /// /// The identifier for the ServerLock_Lock Method. /// public static readonly NodeId ServerLock_Lock = new NodeId(Methods.ServerLock_Lock); /// /// The identifier for the ServerLock_Unlock Method. /// public static readonly NodeId ServerLock_Unlock = new NodeId(Methods.ServerLock_Unlock); } #endregion #region Object Node Identifiers /// /// A class that declares constants for all Objects in the Model Design. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class ObjectIds { /// /// The identifier for the DefaultBinary Object. /// public static readonly NodeId DefaultBinary = new NodeId(Objects.DefaultBinary); /// /// The identifier for the DefaultXml Object. /// public static readonly NodeId DefaultXml = new NodeId(Objects.DefaultXml); /// /// The identifier for the ModellingRule_Mandatory Object. /// public static readonly NodeId ModellingRule_Mandatory = new NodeId(Objects.ModellingRule_Mandatory); /// /// The identifier for the ModellingRule_Optional Object. /// public static readonly NodeId ModellingRule_Optional = new NodeId(Objects.ModellingRule_Optional); /// /// The identifier for the ModellingRule_ExposesItsArray Object. /// public static readonly NodeId ModellingRule_ExposesItsArray = new NodeId(Objects.ModellingRule_ExposesItsArray); /// /// The identifier for the ModellingRule_MandatoryShared Object. /// public static readonly NodeId ModellingRule_MandatoryShared = new NodeId(Objects.ModellingRule_MandatoryShared); /// /// The identifier for the ModellingRule_OptionalPlaceholder Object. /// public static readonly NodeId ModellingRule_OptionalPlaceholder = new NodeId(Objects.ModellingRule_OptionalPlaceholder); /// /// The identifier for the ModellingRule_MandatoryPlaceholder Object. /// public static readonly NodeId ModellingRule_MandatoryPlaceholder = new NodeId(Objects.ModellingRule_MandatoryPlaceholder); /// /// The identifier for the RootFolder Object. /// public static readonly NodeId RootFolder = new NodeId(Objects.RootFolder); /// /// The identifier for the ObjectsFolder Object. /// public static readonly NodeId ObjectsFolder = new NodeId(Objects.ObjectsFolder); /// /// The identifier for the TypesFolder Object. /// public static readonly NodeId TypesFolder = new NodeId(Objects.TypesFolder); /// /// The identifier for the ViewsFolder Object. /// public static readonly NodeId ViewsFolder = new NodeId(Objects.ViewsFolder); /// /// The identifier for the ObjectTypesFolder Object. /// public static readonly NodeId ObjectTypesFolder = new NodeId(Objects.ObjectTypesFolder); /// /// The identifier for the VariableTypesFolder Object. /// public static readonly NodeId VariableTypesFolder = new NodeId(Objects.VariableTypesFolder); /// /// The identifier for the DataTypesFolder Object. /// public static readonly NodeId DataTypesFolder = new NodeId(Objects.DataTypesFolder); /// /// The identifier for the ReferenceTypesFolder Object. /// public static readonly NodeId ReferenceTypesFolder = new NodeId(Objects.ReferenceTypesFolder); /// /// The identifier for the XmlSchema_TypeSystem Object. /// public static readonly NodeId XmlSchema_TypeSystem = new NodeId(Objects.XmlSchema_TypeSystem); /// /// The identifier for the OPCBinarySchema_TypeSystem Object. /// public static readonly NodeId OPCBinarySchema_TypeSystem = new NodeId(Objects.OPCBinarySchema_TypeSystem); /// /// The identifier for the ServerType_ServerCapabilities Object. /// public static readonly NodeId ServerType_ServerCapabilities = new NodeId(Objects.ServerType_ServerCapabilities); /// /// The identifier for the ServerType_ServerCapabilities_ModellingRules Object. /// public static readonly NodeId ServerType_ServerCapabilities_ModellingRules = new NodeId(Objects.ServerType_ServerCapabilities_ModellingRules); /// /// The identifier for the ServerType_ServerCapabilities_AggregateFunctions Object. /// public static readonly NodeId ServerType_ServerCapabilities_AggregateFunctions = new NodeId(Objects.ServerType_ServerCapabilities_AggregateFunctions); /// /// The identifier for the ServerType_ServerDiagnostics Object. /// public static readonly NodeId ServerType_ServerDiagnostics = new NodeId(Objects.ServerType_ServerDiagnostics); /// /// The identifier for the ServerType_ServerDiagnostics_SessionsDiagnosticsSummary Object. /// public static readonly NodeId ServerType_ServerDiagnostics_SessionsDiagnosticsSummary = new NodeId(Objects.ServerType_ServerDiagnostics_SessionsDiagnosticsSummary); /// /// The identifier for the ServerType_VendorServerInfo Object. /// public static readonly NodeId ServerType_VendorServerInfo = new NodeId(Objects.ServerType_VendorServerInfo); /// /// The identifier for the ServerType_ServerRedundancy Object. /// public static readonly NodeId ServerType_ServerRedundancy = new NodeId(Objects.ServerType_ServerRedundancy); /// /// The identifier for the ServerType_Namespaces Object. /// public static readonly NodeId ServerType_Namespaces = new NodeId(Objects.ServerType_Namespaces); /// /// The identifier for the ServerCapabilitiesType_OperationLimits Object. /// public static readonly NodeId ServerCapabilitiesType_OperationLimits = new NodeId(Objects.ServerCapabilitiesType_OperationLimits); /// /// The identifier for the ServerCapabilitiesType_ModellingRules Object. /// public static readonly NodeId ServerCapabilitiesType_ModellingRules = new NodeId(Objects.ServerCapabilitiesType_ModellingRules); /// /// The identifier for the ServerCapabilitiesType_AggregateFunctions Object. /// public static readonly NodeId ServerCapabilitiesType_AggregateFunctions = new NodeId(Objects.ServerCapabilitiesType_AggregateFunctions); /// /// The identifier for the ServerDiagnosticsType_SessionsDiagnosticsSummary Object. /// public static readonly NodeId ServerDiagnosticsType_SessionsDiagnosticsSummary = new NodeId(Objects.ServerDiagnosticsType_SessionsDiagnosticsSummary); /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder Object. /// public static readonly NodeId SessionsDiagnosticsSummaryType_SessionPlaceholder = new NodeId(Objects.SessionsDiagnosticsSummaryType_SessionPlaceholder); /// /// The identifier for the NamespaceMetadataType_NamespaceFile Object. /// public static readonly NodeId NamespaceMetadataType_NamespaceFile = new NodeId(Objects.NamespaceMetadataType_NamespaceFile); /// /// The identifier for the NamespacesType_NamespaceIdentifier Object. /// public static readonly NodeId NamespacesType_NamespaceIdentifier = new NodeId(Objects.NamespacesType_NamespaceIdentifier); /// /// The identifier for the NamespacesType_AddressSpaceFile Object. /// public static readonly NodeId NamespacesType_AddressSpaceFile = new NodeId(Objects.NamespacesType_AddressSpaceFile); /// /// The identifier for the EventTypesFolder Object. /// public static readonly NodeId EventTypesFolder = new NodeId(Objects.EventTypesFolder); /// /// The identifier for the Server Object. /// public static readonly NodeId Server = new NodeId(Objects.Server); /// /// The identifier for the Server_ServerCapabilities Object. /// public static readonly NodeId Server_ServerCapabilities = new NodeId(Objects.Server_ServerCapabilities); /// /// The identifier for the Server_ServerCapabilities_ModellingRules Object. /// public static readonly NodeId Server_ServerCapabilities_ModellingRules = new NodeId(Objects.Server_ServerCapabilities_ModellingRules); /// /// The identifier for the Server_ServerCapabilities_AggregateFunctions Object. /// public static readonly NodeId Server_ServerCapabilities_AggregateFunctions = new NodeId(Objects.Server_ServerCapabilities_AggregateFunctions); /// /// The identifier for the Server_ServerDiagnostics Object. /// public static readonly NodeId Server_ServerDiagnostics = new NodeId(Objects.Server_ServerDiagnostics); /// /// The identifier for the Server_ServerDiagnostics_SessionsDiagnosticsSummary Object. /// public static readonly NodeId Server_ServerDiagnostics_SessionsDiagnosticsSummary = new NodeId(Objects.Server_ServerDiagnostics_SessionsDiagnosticsSummary); /// /// The identifier for the Server_VendorServerInfo Object. /// public static readonly NodeId Server_VendorServerInfo = new NodeId(Objects.Server_VendorServerInfo); /// /// The identifier for the Server_ServerRedundancy Object. /// public static readonly NodeId Server_ServerRedundancy = new NodeId(Objects.Server_ServerRedundancy); /// /// The identifier for the Server_Namespaces Object. /// public static readonly NodeId Server_Namespaces = new NodeId(Objects.Server_Namespaces); /// /// The identifier for the HistoryServerCapabilities Object. /// public static readonly NodeId HistoryServerCapabilities = new NodeId(Objects.HistoryServerCapabilities); /// /// The identifier for the HistoryServerCapabilities_AggregateFunctions Object. /// public static readonly NodeId HistoryServerCapabilities_AggregateFunctions = new NodeId(Objects.HistoryServerCapabilities_AggregateFunctions); /// /// The identifier for the AlarmConditionType_ShelvingState Object. /// public static readonly NodeId AlarmConditionType_ShelvingState = new NodeId(Objects.AlarmConditionType_ShelvingState); /// /// The identifier for the ShelvedStateMachineType_Unshelved Object. /// public static readonly NodeId ShelvedStateMachineType_Unshelved = new NodeId(Objects.ShelvedStateMachineType_Unshelved); /// /// The identifier for the ShelvedStateMachineType_TimedShelved Object. /// public static readonly NodeId ShelvedStateMachineType_TimedShelved = new NodeId(Objects.ShelvedStateMachineType_TimedShelved); /// /// The identifier for the ShelvedStateMachineType_OneShotShelved Object. /// public static readonly NodeId ShelvedStateMachineType_OneShotShelved = new NodeId(Objects.ShelvedStateMachineType_OneShotShelved); /// /// The identifier for the ShelvedStateMachineType_UnshelvedToTimedShelved Object. /// public static readonly NodeId ShelvedStateMachineType_UnshelvedToTimedShelved = new NodeId(Objects.ShelvedStateMachineType_UnshelvedToTimedShelved); /// /// The identifier for the ShelvedStateMachineType_UnshelvedToOneShotShelved Object. /// public static readonly NodeId ShelvedStateMachineType_UnshelvedToOneShotShelved = new NodeId(Objects.ShelvedStateMachineType_UnshelvedToOneShotShelved); /// /// The identifier for the ShelvedStateMachineType_TimedShelvedToUnshelved Object. /// public static readonly NodeId ShelvedStateMachineType_TimedShelvedToUnshelved = new NodeId(Objects.ShelvedStateMachineType_TimedShelvedToUnshelved); /// /// The identifier for the ShelvedStateMachineType_TimedShelvedToOneShotShelved Object. /// public static readonly NodeId ShelvedStateMachineType_TimedShelvedToOneShotShelved = new NodeId(Objects.ShelvedStateMachineType_TimedShelvedToOneShotShelved); /// /// The identifier for the ShelvedStateMachineType_OneShotShelvedToUnshelved Object. /// public static readonly NodeId ShelvedStateMachineType_OneShotShelvedToUnshelved = new NodeId(Objects.ShelvedStateMachineType_OneShotShelvedToUnshelved); /// /// The identifier for the ShelvedStateMachineType_OneShotShelvedToTimedShelved Object. /// public static readonly NodeId ShelvedStateMachineType_OneShotShelvedToTimedShelved = new NodeId(Objects.ShelvedStateMachineType_OneShotShelvedToTimedShelved); /// /// The identifier for the ExclusiveLimitStateMachineType_HighHigh Object. /// public static readonly NodeId ExclusiveLimitStateMachineType_HighHigh = new NodeId(Objects.ExclusiveLimitStateMachineType_HighHigh); /// /// The identifier for the ExclusiveLimitStateMachineType_High Object. /// public static readonly NodeId ExclusiveLimitStateMachineType_High = new NodeId(Objects.ExclusiveLimitStateMachineType_High); /// /// The identifier for the ExclusiveLimitStateMachineType_Low Object. /// public static readonly NodeId ExclusiveLimitStateMachineType_Low = new NodeId(Objects.ExclusiveLimitStateMachineType_Low); /// /// The identifier for the ExclusiveLimitStateMachineType_LowLow Object. /// public static readonly NodeId ExclusiveLimitStateMachineType_LowLow = new NodeId(Objects.ExclusiveLimitStateMachineType_LowLow); /// /// The identifier for the ExclusiveLimitStateMachineType_LowLowToLow Object. /// public static readonly NodeId ExclusiveLimitStateMachineType_LowLowToLow = new NodeId(Objects.ExclusiveLimitStateMachineType_LowLowToLow); /// /// The identifier for the ExclusiveLimitStateMachineType_LowToLowLow Object. /// public static readonly NodeId ExclusiveLimitStateMachineType_LowToLowLow = new NodeId(Objects.ExclusiveLimitStateMachineType_LowToLowLow); /// /// The identifier for the ExclusiveLimitStateMachineType_HighHighToHigh Object. /// public static readonly NodeId ExclusiveLimitStateMachineType_HighHighToHigh = new NodeId(Objects.ExclusiveLimitStateMachineType_HighHighToHigh); /// /// The identifier for the ExclusiveLimitStateMachineType_HighToHighHigh Object. /// public static readonly NodeId ExclusiveLimitStateMachineType_HighToHighHigh = new NodeId(Objects.ExclusiveLimitStateMachineType_HighToHighHigh); /// /// The identifier for the ExclusiveLimitAlarmType_LimitState Object. /// public static readonly NodeId ExclusiveLimitAlarmType_LimitState = new NodeId(Objects.ExclusiveLimitAlarmType_LimitState); /// /// The identifier for the ProgramStateMachineType_FinalResultData Object. /// public static readonly NodeId ProgramStateMachineType_FinalResultData = new NodeId(Objects.ProgramStateMachineType_FinalResultData); /// /// The identifier for the ProgramStateMachineType_Ready Object. /// public static readonly NodeId ProgramStateMachineType_Ready = new NodeId(Objects.ProgramStateMachineType_Ready); /// /// The identifier for the ProgramStateMachineType_Running Object. /// public static readonly NodeId ProgramStateMachineType_Running = new NodeId(Objects.ProgramStateMachineType_Running); /// /// The identifier for the ProgramStateMachineType_Suspended Object. /// public static readonly NodeId ProgramStateMachineType_Suspended = new NodeId(Objects.ProgramStateMachineType_Suspended); /// /// The identifier for the ProgramStateMachineType_Halted Object. /// public static readonly NodeId ProgramStateMachineType_Halted = new NodeId(Objects.ProgramStateMachineType_Halted); /// /// The identifier for the ProgramStateMachineType_HaltedToReady Object. /// public static readonly NodeId ProgramStateMachineType_HaltedToReady = new NodeId(Objects.ProgramStateMachineType_HaltedToReady); /// /// The identifier for the ProgramStateMachineType_ReadyToRunning Object. /// public static readonly NodeId ProgramStateMachineType_ReadyToRunning = new NodeId(Objects.ProgramStateMachineType_ReadyToRunning); /// /// The identifier for the ProgramStateMachineType_RunningToHalted Object. /// public static readonly NodeId ProgramStateMachineType_RunningToHalted = new NodeId(Objects.ProgramStateMachineType_RunningToHalted); /// /// The identifier for the ProgramStateMachineType_RunningToReady Object. /// public static readonly NodeId ProgramStateMachineType_RunningToReady = new NodeId(Objects.ProgramStateMachineType_RunningToReady); /// /// The identifier for the ProgramStateMachineType_RunningToSuspended Object. /// public static readonly NodeId ProgramStateMachineType_RunningToSuspended = new NodeId(Objects.ProgramStateMachineType_RunningToSuspended); /// /// The identifier for the ProgramStateMachineType_SuspendedToRunning Object. /// public static readonly NodeId ProgramStateMachineType_SuspendedToRunning = new NodeId(Objects.ProgramStateMachineType_SuspendedToRunning); /// /// The identifier for the ProgramStateMachineType_SuspendedToHalted Object. /// public static readonly NodeId ProgramStateMachineType_SuspendedToHalted = new NodeId(Objects.ProgramStateMachineType_SuspendedToHalted); /// /// The identifier for the ProgramStateMachineType_SuspendedToReady Object. /// public static readonly NodeId ProgramStateMachineType_SuspendedToReady = new NodeId(Objects.ProgramStateMachineType_SuspendedToReady); /// /// The identifier for the ProgramStateMachineType_ReadyToHalted Object. /// public static readonly NodeId ProgramStateMachineType_ReadyToHalted = new NodeId(Objects.ProgramStateMachineType_ReadyToHalted); /// /// The identifier for the HistoricalDataConfigurationType_AggregateConfiguration Object. /// public static readonly NodeId HistoricalDataConfigurationType_AggregateConfiguration = new NodeId(Objects.HistoricalDataConfigurationType_AggregateConfiguration); /// /// The identifier for the HistoricalDataConfigurationType_AggregateFunctions Object. /// public static readonly NodeId HistoricalDataConfigurationType_AggregateFunctions = new NodeId(Objects.HistoricalDataConfigurationType_AggregateFunctions); /// /// The identifier for the HAConfiguration Object. /// public static readonly NodeId HAConfiguration = new NodeId(Objects.HAConfiguration); /// /// The identifier for the HAConfiguration_AggregateConfiguration Object. /// public static readonly NodeId HAConfiguration_AggregateConfiguration = new NodeId(Objects.HAConfiguration_AggregateConfiguration); /// /// The identifier for the HistoryServerCapabilitiesType_AggregateFunctions Object. /// public static readonly NodeId HistoryServerCapabilitiesType_AggregateFunctions = new NodeId(Objects.HistoryServerCapabilitiesType_AggregateFunctions); /// /// The identifier for the AggregateFunction_Interpolative Object. /// public static readonly NodeId AggregateFunction_Interpolative = new NodeId(Objects.AggregateFunction_Interpolative); /// /// The identifier for the AggregateFunction_Average Object. /// public static readonly NodeId AggregateFunction_Average = new NodeId(Objects.AggregateFunction_Average); /// /// The identifier for the AggregateFunction_TimeAverage Object. /// public static readonly NodeId AggregateFunction_TimeAverage = new NodeId(Objects.AggregateFunction_TimeAverage); /// /// The identifier for the AggregateFunction_TimeAverage2 Object. /// public static readonly NodeId AggregateFunction_TimeAverage2 = new NodeId(Objects.AggregateFunction_TimeAverage2); /// /// The identifier for the AggregateFunction_Total Object. /// public static readonly NodeId AggregateFunction_Total = new NodeId(Objects.AggregateFunction_Total); /// /// The identifier for the AggregateFunction_Total2 Object. /// public static readonly NodeId AggregateFunction_Total2 = new NodeId(Objects.AggregateFunction_Total2); /// /// The identifier for the AggregateFunction_Minimum Object. /// public static readonly NodeId AggregateFunction_Minimum = new NodeId(Objects.AggregateFunction_Minimum); /// /// The identifier for the AggregateFunction_Maximum Object. /// public static readonly NodeId AggregateFunction_Maximum = new NodeId(Objects.AggregateFunction_Maximum); /// /// The identifier for the AggregateFunction_MinimumActualTime Object. /// public static readonly NodeId AggregateFunction_MinimumActualTime = new NodeId(Objects.AggregateFunction_MinimumActualTime); /// /// The identifier for the AggregateFunction_MaximumActualTime Object. /// public static readonly NodeId AggregateFunction_MaximumActualTime = new NodeId(Objects.AggregateFunction_MaximumActualTime); /// /// The identifier for the AggregateFunction_Range Object. /// public static readonly NodeId AggregateFunction_Range = new NodeId(Objects.AggregateFunction_Range); /// /// The identifier for the AggregateFunction_Minimum2 Object. /// public static readonly NodeId AggregateFunction_Minimum2 = new NodeId(Objects.AggregateFunction_Minimum2); /// /// The identifier for the AggregateFunction_Maximum2 Object. /// public static readonly NodeId AggregateFunction_Maximum2 = new NodeId(Objects.AggregateFunction_Maximum2); /// /// The identifier for the AggregateFunction_MinimumActualTime2 Object. /// public static readonly NodeId AggregateFunction_MinimumActualTime2 = new NodeId(Objects.AggregateFunction_MinimumActualTime2); /// /// The identifier for the AggregateFunction_MaximumActualTime2 Object. /// public static readonly NodeId AggregateFunction_MaximumActualTime2 = new NodeId(Objects.AggregateFunction_MaximumActualTime2); /// /// The identifier for the AggregateFunction_Range2 Object. /// public static readonly NodeId AggregateFunction_Range2 = new NodeId(Objects.AggregateFunction_Range2); /// /// The identifier for the AggregateFunction_AnnotationCount Object. /// public static readonly NodeId AggregateFunction_AnnotationCount = new NodeId(Objects.AggregateFunction_AnnotationCount); /// /// The identifier for the AggregateFunction_Count Object. /// public static readonly NodeId AggregateFunction_Count = new NodeId(Objects.AggregateFunction_Count); /// /// The identifier for the AggregateFunction_DurationInStateZero Object. /// public static readonly NodeId AggregateFunction_DurationInStateZero = new NodeId(Objects.AggregateFunction_DurationInStateZero); /// /// The identifier for the AggregateFunction_DurationInStateNonZero Object. /// public static readonly NodeId AggregateFunction_DurationInStateNonZero = new NodeId(Objects.AggregateFunction_DurationInStateNonZero); /// /// The identifier for the AggregateFunction_NumberOfTransitions Object. /// public static readonly NodeId AggregateFunction_NumberOfTransitions = new NodeId(Objects.AggregateFunction_NumberOfTransitions); /// /// The identifier for the AggregateFunction_Start Object. /// public static readonly NodeId AggregateFunction_Start = new NodeId(Objects.AggregateFunction_Start); /// /// The identifier for the AggregateFunction_End Object. /// public static readonly NodeId AggregateFunction_End = new NodeId(Objects.AggregateFunction_End); /// /// The identifier for the AggregateFunction_Delta Object. /// public static readonly NodeId AggregateFunction_Delta = new NodeId(Objects.AggregateFunction_Delta); /// /// The identifier for the AggregateFunction_StartBound Object. /// public static readonly NodeId AggregateFunction_StartBound = new NodeId(Objects.AggregateFunction_StartBound); /// /// The identifier for the AggregateFunction_EndBound Object. /// public static readonly NodeId AggregateFunction_EndBound = new NodeId(Objects.AggregateFunction_EndBound); /// /// The identifier for the AggregateFunction_DeltaBounds Object. /// public static readonly NodeId AggregateFunction_DeltaBounds = new NodeId(Objects.AggregateFunction_DeltaBounds); /// /// The identifier for the AggregateFunction_DurationGood Object. /// public static readonly NodeId AggregateFunction_DurationGood = new NodeId(Objects.AggregateFunction_DurationGood); /// /// The identifier for the AggregateFunction_DurationBad Object. /// public static readonly NodeId AggregateFunction_DurationBad = new NodeId(Objects.AggregateFunction_DurationBad); /// /// The identifier for the AggregateFunction_PercentGood Object. /// public static readonly NodeId AggregateFunction_PercentGood = new NodeId(Objects.AggregateFunction_PercentGood); /// /// The identifier for the AggregateFunction_PercentBad Object. /// public static readonly NodeId AggregateFunction_PercentBad = new NodeId(Objects.AggregateFunction_PercentBad); /// /// The identifier for the AggregateFunction_WorstQuality Object. /// public static readonly NodeId AggregateFunction_WorstQuality = new NodeId(Objects.AggregateFunction_WorstQuality); /// /// The identifier for the AggregateFunction_WorstQuality2 Object. /// public static readonly NodeId AggregateFunction_WorstQuality2 = new NodeId(Objects.AggregateFunction_WorstQuality2); /// /// The identifier for the AggregateFunction_StandardDeviationSample Object. /// public static readonly NodeId AggregateFunction_StandardDeviationSample = new NodeId(Objects.AggregateFunction_StandardDeviationSample); /// /// The identifier for the AggregateFunction_StandardDeviationPopulation Object. /// public static readonly NodeId AggregateFunction_StandardDeviationPopulation = new NodeId(Objects.AggregateFunction_StandardDeviationPopulation); /// /// The identifier for the AggregateFunction_VarianceSample Object. /// public static readonly NodeId AggregateFunction_VarianceSample = new NodeId(Objects.AggregateFunction_VarianceSample); /// /// The identifier for the AggregateFunction_VariancePopulation Object. /// public static readonly NodeId AggregateFunction_VariancePopulation = new NodeId(Objects.AggregateFunction_VariancePopulation); /// /// The identifier for the ServerLock Object. /// public static readonly NodeId ServerLock = new NodeId(Objects.ServerLock); /// /// The identifier for the Node_Encoding_DefaultXml Object. /// public static readonly NodeId Node_Encoding_DefaultXml = new NodeId(Objects.Node_Encoding_DefaultXml); /// /// The identifier for the InstanceNode_Encoding_DefaultXml Object. /// public static readonly NodeId InstanceNode_Encoding_DefaultXml = new NodeId(Objects.InstanceNode_Encoding_DefaultXml); /// /// The identifier for the TypeNode_Encoding_DefaultXml Object. /// public static readonly NodeId TypeNode_Encoding_DefaultXml = new NodeId(Objects.TypeNode_Encoding_DefaultXml); /// /// The identifier for the ObjectNode_Encoding_DefaultXml Object. /// public static readonly NodeId ObjectNode_Encoding_DefaultXml = new NodeId(Objects.ObjectNode_Encoding_DefaultXml); /// /// The identifier for the ObjectTypeNode_Encoding_DefaultXml Object. /// public static readonly NodeId ObjectTypeNode_Encoding_DefaultXml = new NodeId(Objects.ObjectTypeNode_Encoding_DefaultXml); /// /// The identifier for the VariableNode_Encoding_DefaultXml Object. /// public static readonly NodeId VariableNode_Encoding_DefaultXml = new NodeId(Objects.VariableNode_Encoding_DefaultXml); /// /// The identifier for the VariableTypeNode_Encoding_DefaultXml Object. /// public static readonly NodeId VariableTypeNode_Encoding_DefaultXml = new NodeId(Objects.VariableTypeNode_Encoding_DefaultXml); /// /// The identifier for the ReferenceTypeNode_Encoding_DefaultXml Object. /// public static readonly NodeId ReferenceTypeNode_Encoding_DefaultXml = new NodeId(Objects.ReferenceTypeNode_Encoding_DefaultXml); /// /// The identifier for the MethodNode_Encoding_DefaultXml Object. /// public static readonly NodeId MethodNode_Encoding_DefaultXml = new NodeId(Objects.MethodNode_Encoding_DefaultXml); /// /// The identifier for the ViewNode_Encoding_DefaultXml Object. /// public static readonly NodeId ViewNode_Encoding_DefaultXml = new NodeId(Objects.ViewNode_Encoding_DefaultXml); /// /// The identifier for the DataTypeNode_Encoding_DefaultXml Object. /// public static readonly NodeId DataTypeNode_Encoding_DefaultXml = new NodeId(Objects.DataTypeNode_Encoding_DefaultXml); /// /// The identifier for the ReferenceNode_Encoding_DefaultXml Object. /// public static readonly NodeId ReferenceNode_Encoding_DefaultXml = new NodeId(Objects.ReferenceNode_Encoding_DefaultXml); /// /// The identifier for the Argument_Encoding_DefaultXml Object. /// public static readonly NodeId Argument_Encoding_DefaultXml = new NodeId(Objects.Argument_Encoding_DefaultXml); /// /// The identifier for the EnumValueType_Encoding_DefaultXml Object. /// public static readonly NodeId EnumValueType_Encoding_DefaultXml = new NodeId(Objects.EnumValueType_Encoding_DefaultXml); /// /// The identifier for the TimeZoneDataType_Encoding_DefaultXml Object. /// public static readonly NodeId TimeZoneDataType_Encoding_DefaultXml = new NodeId(Objects.TimeZoneDataType_Encoding_DefaultXml); /// /// The identifier for the ApplicationDescription_Encoding_DefaultXml Object. /// public static readonly NodeId ApplicationDescription_Encoding_DefaultXml = new NodeId(Objects.ApplicationDescription_Encoding_DefaultXml); /// /// The identifier for the RequestHeader_Encoding_DefaultXml Object. /// public static readonly NodeId RequestHeader_Encoding_DefaultXml = new NodeId(Objects.RequestHeader_Encoding_DefaultXml); /// /// The identifier for the ResponseHeader_Encoding_DefaultXml Object. /// public static readonly NodeId ResponseHeader_Encoding_DefaultXml = new NodeId(Objects.ResponseHeader_Encoding_DefaultXml); /// /// The identifier for the ServiceFault_Encoding_DefaultXml Object. /// public static readonly NodeId ServiceFault_Encoding_DefaultXml = new NodeId(Objects.ServiceFault_Encoding_DefaultXml); /// /// The identifier for the DnsServiceRecord_Encoding_DefaultXml Object. /// public static readonly NodeId DnsServiceRecord_Encoding_DefaultXml = new NodeId(Objects.DnsServiceRecord_Encoding_DefaultXml); /// /// The identifier for the FindDnsServicesRequest_Encoding_DefaultXml Object. /// public static readonly NodeId FindDnsServicesRequest_Encoding_DefaultXml = new NodeId(Objects.FindDnsServicesRequest_Encoding_DefaultXml); /// /// The identifier for the FindDnsServicesResponse_Encoding_DefaultXml Object. /// public static readonly NodeId FindDnsServicesResponse_Encoding_DefaultXml = new NodeId(Objects.FindDnsServicesResponse_Encoding_DefaultXml); /// /// The identifier for the FindServersRequest_Encoding_DefaultXml Object. /// public static readonly NodeId FindServersRequest_Encoding_DefaultXml = new NodeId(Objects.FindServersRequest_Encoding_DefaultXml); /// /// The identifier for the FindServersResponse_Encoding_DefaultXml Object. /// public static readonly NodeId FindServersResponse_Encoding_DefaultXml = new NodeId(Objects.FindServersResponse_Encoding_DefaultXml); /// /// The identifier for the UserTokenPolicy_Encoding_DefaultXml Object. /// public static readonly NodeId UserTokenPolicy_Encoding_DefaultXml = new NodeId(Objects.UserTokenPolicy_Encoding_DefaultXml); /// /// The identifier for the EndpointDescription_Encoding_DefaultXml Object. /// public static readonly NodeId EndpointDescription_Encoding_DefaultXml = new NodeId(Objects.EndpointDescription_Encoding_DefaultXml); /// /// The identifier for the GetEndpointsRequest_Encoding_DefaultXml Object. /// public static readonly NodeId GetEndpointsRequest_Encoding_DefaultXml = new NodeId(Objects.GetEndpointsRequest_Encoding_DefaultXml); /// /// The identifier for the GetEndpointsResponse_Encoding_DefaultXml Object. /// public static readonly NodeId GetEndpointsResponse_Encoding_DefaultXml = new NodeId(Objects.GetEndpointsResponse_Encoding_DefaultXml); /// /// The identifier for the RegisteredServer_Encoding_DefaultXml Object. /// public static readonly NodeId RegisteredServer_Encoding_DefaultXml = new NodeId(Objects.RegisteredServer_Encoding_DefaultXml); /// /// The identifier for the RegisterServerRequest_Encoding_DefaultXml Object. /// public static readonly NodeId RegisterServerRequest_Encoding_DefaultXml = new NodeId(Objects.RegisterServerRequest_Encoding_DefaultXml); /// /// The identifier for the RegisterServerResponse_Encoding_DefaultXml Object. /// public static readonly NodeId RegisterServerResponse_Encoding_DefaultXml = new NodeId(Objects.RegisterServerResponse_Encoding_DefaultXml); /// /// The identifier for the ChannelSecurityToken_Encoding_DefaultXml Object. /// public static readonly NodeId ChannelSecurityToken_Encoding_DefaultXml = new NodeId(Objects.ChannelSecurityToken_Encoding_DefaultXml); /// /// The identifier for the OpenSecureChannelRequest_Encoding_DefaultXml Object. /// public static readonly NodeId OpenSecureChannelRequest_Encoding_DefaultXml = new NodeId(Objects.OpenSecureChannelRequest_Encoding_DefaultXml); /// /// The identifier for the OpenSecureChannelResponse_Encoding_DefaultXml Object. /// public static readonly NodeId OpenSecureChannelResponse_Encoding_DefaultXml = new NodeId(Objects.OpenSecureChannelResponse_Encoding_DefaultXml); /// /// The identifier for the CloseSecureChannelRequest_Encoding_DefaultXml Object. /// public static readonly NodeId CloseSecureChannelRequest_Encoding_DefaultXml = new NodeId(Objects.CloseSecureChannelRequest_Encoding_DefaultXml); /// /// The identifier for the CloseSecureChannelResponse_Encoding_DefaultXml Object. /// public static readonly NodeId CloseSecureChannelResponse_Encoding_DefaultXml = new NodeId(Objects.CloseSecureChannelResponse_Encoding_DefaultXml); /// /// The identifier for the SignedSoftwareCertificate_Encoding_DefaultXml Object. /// public static readonly NodeId SignedSoftwareCertificate_Encoding_DefaultXml = new NodeId(Objects.SignedSoftwareCertificate_Encoding_DefaultXml); /// /// The identifier for the SignatureData_Encoding_DefaultXml Object. /// public static readonly NodeId SignatureData_Encoding_DefaultXml = new NodeId(Objects.SignatureData_Encoding_DefaultXml); /// /// The identifier for the CreateSessionRequest_Encoding_DefaultXml Object. /// public static readonly NodeId CreateSessionRequest_Encoding_DefaultXml = new NodeId(Objects.CreateSessionRequest_Encoding_DefaultXml); /// /// The identifier for the CreateSessionResponse_Encoding_DefaultXml Object. /// public static readonly NodeId CreateSessionResponse_Encoding_DefaultXml = new NodeId(Objects.CreateSessionResponse_Encoding_DefaultXml); /// /// The identifier for the UserIdentityToken_Encoding_DefaultXml Object. /// public static readonly NodeId UserIdentityToken_Encoding_DefaultXml = new NodeId(Objects.UserIdentityToken_Encoding_DefaultXml); /// /// The identifier for the AnonymousIdentityToken_Encoding_DefaultXml Object. /// public static readonly NodeId AnonymousIdentityToken_Encoding_DefaultXml = new NodeId(Objects.AnonymousIdentityToken_Encoding_DefaultXml); /// /// The identifier for the UserNameIdentityToken_Encoding_DefaultXml Object. /// public static readonly NodeId UserNameIdentityToken_Encoding_DefaultXml = new NodeId(Objects.UserNameIdentityToken_Encoding_DefaultXml); /// /// The identifier for the X509IdentityToken_Encoding_DefaultXml Object. /// public static readonly NodeId X509IdentityToken_Encoding_DefaultXml = new NodeId(Objects.X509IdentityToken_Encoding_DefaultXml); /// /// The identifier for the IssuedIdentityToken_Encoding_DefaultXml Object. /// public static readonly NodeId IssuedIdentityToken_Encoding_DefaultXml = new NodeId(Objects.IssuedIdentityToken_Encoding_DefaultXml); /// /// The identifier for the ActivateSessionRequest_Encoding_DefaultXml Object. /// public static readonly NodeId ActivateSessionRequest_Encoding_DefaultXml = new NodeId(Objects.ActivateSessionRequest_Encoding_DefaultXml); /// /// The identifier for the ActivateSessionResponse_Encoding_DefaultXml Object. /// public static readonly NodeId ActivateSessionResponse_Encoding_DefaultXml = new NodeId(Objects.ActivateSessionResponse_Encoding_DefaultXml); /// /// The identifier for the CloseSessionRequest_Encoding_DefaultXml Object. /// public static readonly NodeId CloseSessionRequest_Encoding_DefaultXml = new NodeId(Objects.CloseSessionRequest_Encoding_DefaultXml); /// /// The identifier for the CloseSessionResponse_Encoding_DefaultXml Object. /// public static readonly NodeId CloseSessionResponse_Encoding_DefaultXml = new NodeId(Objects.CloseSessionResponse_Encoding_DefaultXml); /// /// The identifier for the CancelRequest_Encoding_DefaultXml Object. /// public static readonly NodeId CancelRequest_Encoding_DefaultXml = new NodeId(Objects.CancelRequest_Encoding_DefaultXml); /// /// The identifier for the CancelResponse_Encoding_DefaultXml Object. /// public static readonly NodeId CancelResponse_Encoding_DefaultXml = new NodeId(Objects.CancelResponse_Encoding_DefaultXml); /// /// The identifier for the NodeAttributes_Encoding_DefaultXml Object. /// public static readonly NodeId NodeAttributes_Encoding_DefaultXml = new NodeId(Objects.NodeAttributes_Encoding_DefaultXml); /// /// The identifier for the ObjectAttributes_Encoding_DefaultXml Object. /// public static readonly NodeId ObjectAttributes_Encoding_DefaultXml = new NodeId(Objects.ObjectAttributes_Encoding_DefaultXml); /// /// The identifier for the VariableAttributes_Encoding_DefaultXml Object. /// public static readonly NodeId VariableAttributes_Encoding_DefaultXml = new NodeId(Objects.VariableAttributes_Encoding_DefaultXml); /// /// The identifier for the MethodAttributes_Encoding_DefaultXml Object. /// public static readonly NodeId MethodAttributes_Encoding_DefaultXml = new NodeId(Objects.MethodAttributes_Encoding_DefaultXml); /// /// The identifier for the ObjectTypeAttributes_Encoding_DefaultXml Object. /// public static readonly NodeId ObjectTypeAttributes_Encoding_DefaultXml = new NodeId(Objects.ObjectTypeAttributes_Encoding_DefaultXml); /// /// The identifier for the VariableTypeAttributes_Encoding_DefaultXml Object. /// public static readonly NodeId VariableTypeAttributes_Encoding_DefaultXml = new NodeId(Objects.VariableTypeAttributes_Encoding_DefaultXml); /// /// The identifier for the ReferenceTypeAttributes_Encoding_DefaultXml Object. /// public static readonly NodeId ReferenceTypeAttributes_Encoding_DefaultXml = new NodeId(Objects.ReferenceTypeAttributes_Encoding_DefaultXml); /// /// The identifier for the DataTypeAttributes_Encoding_DefaultXml Object. /// public static readonly NodeId DataTypeAttributes_Encoding_DefaultXml = new NodeId(Objects.DataTypeAttributes_Encoding_DefaultXml); /// /// The identifier for the ViewAttributes_Encoding_DefaultXml Object. /// public static readonly NodeId ViewAttributes_Encoding_DefaultXml = new NodeId(Objects.ViewAttributes_Encoding_DefaultXml); /// /// The identifier for the AddNodesItem_Encoding_DefaultXml Object. /// public static readonly NodeId AddNodesItem_Encoding_DefaultXml = new NodeId(Objects.AddNodesItem_Encoding_DefaultXml); /// /// The identifier for the AddNodesResult_Encoding_DefaultXml Object. /// public static readonly NodeId AddNodesResult_Encoding_DefaultXml = new NodeId(Objects.AddNodesResult_Encoding_DefaultXml); /// /// The identifier for the AddNodesRequest_Encoding_DefaultXml Object. /// public static readonly NodeId AddNodesRequest_Encoding_DefaultXml = new NodeId(Objects.AddNodesRequest_Encoding_DefaultXml); /// /// The identifier for the AddNodesResponse_Encoding_DefaultXml Object. /// public static readonly NodeId AddNodesResponse_Encoding_DefaultXml = new NodeId(Objects.AddNodesResponse_Encoding_DefaultXml); /// /// The identifier for the AddReferencesItem_Encoding_DefaultXml Object. /// public static readonly NodeId AddReferencesItem_Encoding_DefaultXml = new NodeId(Objects.AddReferencesItem_Encoding_DefaultXml); /// /// The identifier for the AddReferencesRequest_Encoding_DefaultXml Object. /// public static readonly NodeId AddReferencesRequest_Encoding_DefaultXml = new NodeId(Objects.AddReferencesRequest_Encoding_DefaultXml); /// /// The identifier for the AddReferencesResponse_Encoding_DefaultXml Object. /// public static readonly NodeId AddReferencesResponse_Encoding_DefaultXml = new NodeId(Objects.AddReferencesResponse_Encoding_DefaultXml); /// /// The identifier for the DeleteNodesItem_Encoding_DefaultXml Object. /// public static readonly NodeId DeleteNodesItem_Encoding_DefaultXml = new NodeId(Objects.DeleteNodesItem_Encoding_DefaultXml); /// /// The identifier for the DeleteNodesRequest_Encoding_DefaultXml Object. /// public static readonly NodeId DeleteNodesRequest_Encoding_DefaultXml = new NodeId(Objects.DeleteNodesRequest_Encoding_DefaultXml); /// /// The identifier for the DeleteNodesResponse_Encoding_DefaultXml Object. /// public static readonly NodeId DeleteNodesResponse_Encoding_DefaultXml = new NodeId(Objects.DeleteNodesResponse_Encoding_DefaultXml); /// /// The identifier for the DeleteReferencesItem_Encoding_DefaultXml Object. /// public static readonly NodeId DeleteReferencesItem_Encoding_DefaultXml = new NodeId(Objects.DeleteReferencesItem_Encoding_DefaultXml); /// /// The identifier for the DeleteReferencesRequest_Encoding_DefaultXml Object. /// public static readonly NodeId DeleteReferencesRequest_Encoding_DefaultXml = new NodeId(Objects.DeleteReferencesRequest_Encoding_DefaultXml); /// /// The identifier for the DeleteReferencesResponse_Encoding_DefaultXml Object. /// public static readonly NodeId DeleteReferencesResponse_Encoding_DefaultXml = new NodeId(Objects.DeleteReferencesResponse_Encoding_DefaultXml); /// /// The identifier for the ViewDescription_Encoding_DefaultXml Object. /// public static readonly NodeId ViewDescription_Encoding_DefaultXml = new NodeId(Objects.ViewDescription_Encoding_DefaultXml); /// /// The identifier for the BrowseDescription_Encoding_DefaultXml Object. /// public static readonly NodeId BrowseDescription_Encoding_DefaultXml = new NodeId(Objects.BrowseDescription_Encoding_DefaultXml); /// /// The identifier for the ReferenceDescription_Encoding_DefaultXml Object. /// public static readonly NodeId ReferenceDescription_Encoding_DefaultXml = new NodeId(Objects.ReferenceDescription_Encoding_DefaultXml); /// /// The identifier for the BrowseResult_Encoding_DefaultXml Object. /// public static readonly NodeId BrowseResult_Encoding_DefaultXml = new NodeId(Objects.BrowseResult_Encoding_DefaultXml); /// /// The identifier for the BrowseRequest_Encoding_DefaultXml Object. /// public static readonly NodeId BrowseRequest_Encoding_DefaultXml = new NodeId(Objects.BrowseRequest_Encoding_DefaultXml); /// /// The identifier for the BrowseResponse_Encoding_DefaultXml Object. /// public static readonly NodeId BrowseResponse_Encoding_DefaultXml = new NodeId(Objects.BrowseResponse_Encoding_DefaultXml); /// /// The identifier for the BrowseNextRequest_Encoding_DefaultXml Object. /// public static readonly NodeId BrowseNextRequest_Encoding_DefaultXml = new NodeId(Objects.BrowseNextRequest_Encoding_DefaultXml); /// /// The identifier for the BrowseNextResponse_Encoding_DefaultXml Object. /// public static readonly NodeId BrowseNextResponse_Encoding_DefaultXml = new NodeId(Objects.BrowseNextResponse_Encoding_DefaultXml); /// /// The identifier for the RelativePathElement_Encoding_DefaultXml Object. /// public static readonly NodeId RelativePathElement_Encoding_DefaultXml = new NodeId(Objects.RelativePathElement_Encoding_DefaultXml); /// /// The identifier for the RelativePath_Encoding_DefaultXml Object. /// public static readonly NodeId RelativePath_Encoding_DefaultXml = new NodeId(Objects.RelativePath_Encoding_DefaultXml); /// /// The identifier for the BrowsePath_Encoding_DefaultXml Object. /// public static readonly NodeId BrowsePath_Encoding_DefaultXml = new NodeId(Objects.BrowsePath_Encoding_DefaultXml); /// /// The identifier for the BrowsePathTarget_Encoding_DefaultXml Object. /// public static readonly NodeId BrowsePathTarget_Encoding_DefaultXml = new NodeId(Objects.BrowsePathTarget_Encoding_DefaultXml); /// /// The identifier for the BrowsePathResult_Encoding_DefaultXml Object. /// public static readonly NodeId BrowsePathResult_Encoding_DefaultXml = new NodeId(Objects.BrowsePathResult_Encoding_DefaultXml); /// /// The identifier for the TranslateBrowsePathsToNodeIdsRequest_Encoding_DefaultXml Object. /// public static readonly NodeId TranslateBrowsePathsToNodeIdsRequest_Encoding_DefaultXml = new NodeId(Objects.TranslateBrowsePathsToNodeIdsRequest_Encoding_DefaultXml); /// /// The identifier for the TranslateBrowsePathsToNodeIdsResponse_Encoding_DefaultXml Object. /// public static readonly NodeId TranslateBrowsePathsToNodeIdsResponse_Encoding_DefaultXml = new NodeId(Objects.TranslateBrowsePathsToNodeIdsResponse_Encoding_DefaultXml); /// /// The identifier for the RegisterNodesRequest_Encoding_DefaultXml Object. /// public static readonly NodeId RegisterNodesRequest_Encoding_DefaultXml = new NodeId(Objects.RegisterNodesRequest_Encoding_DefaultXml); /// /// The identifier for the RegisterNodesResponse_Encoding_DefaultXml Object. /// public static readonly NodeId RegisterNodesResponse_Encoding_DefaultXml = new NodeId(Objects.RegisterNodesResponse_Encoding_DefaultXml); /// /// The identifier for the UnregisterNodesRequest_Encoding_DefaultXml Object. /// public static readonly NodeId UnregisterNodesRequest_Encoding_DefaultXml = new NodeId(Objects.UnregisterNodesRequest_Encoding_DefaultXml); /// /// The identifier for the UnregisterNodesResponse_Encoding_DefaultXml Object. /// public static readonly NodeId UnregisterNodesResponse_Encoding_DefaultXml = new NodeId(Objects.UnregisterNodesResponse_Encoding_DefaultXml); /// /// The identifier for the EndpointConfiguration_Encoding_DefaultXml Object. /// public static readonly NodeId EndpointConfiguration_Encoding_DefaultXml = new NodeId(Objects.EndpointConfiguration_Encoding_DefaultXml); /// /// The identifier for the SupportedProfile_Encoding_DefaultXml Object. /// public static readonly NodeId SupportedProfile_Encoding_DefaultXml = new NodeId(Objects.SupportedProfile_Encoding_DefaultXml); /// /// The identifier for the SoftwareCertificate_Encoding_DefaultXml Object. /// public static readonly NodeId SoftwareCertificate_Encoding_DefaultXml = new NodeId(Objects.SoftwareCertificate_Encoding_DefaultXml); /// /// The identifier for the QueryDataDescription_Encoding_DefaultXml Object. /// public static readonly NodeId QueryDataDescription_Encoding_DefaultXml = new NodeId(Objects.QueryDataDescription_Encoding_DefaultXml); /// /// The identifier for the NodeTypeDescription_Encoding_DefaultXml Object. /// public static readonly NodeId NodeTypeDescription_Encoding_DefaultXml = new NodeId(Objects.NodeTypeDescription_Encoding_DefaultXml); /// /// The identifier for the QueryDataSet_Encoding_DefaultXml Object. /// public static readonly NodeId QueryDataSet_Encoding_DefaultXml = new NodeId(Objects.QueryDataSet_Encoding_DefaultXml); /// /// The identifier for the NodeReference_Encoding_DefaultXml Object. /// public static readonly NodeId NodeReference_Encoding_DefaultXml = new NodeId(Objects.NodeReference_Encoding_DefaultXml); /// /// The identifier for the ContentFilterElement_Encoding_DefaultXml Object. /// public static readonly NodeId ContentFilterElement_Encoding_DefaultXml = new NodeId(Objects.ContentFilterElement_Encoding_DefaultXml); /// /// The identifier for the ContentFilter_Encoding_DefaultXml Object. /// public static readonly NodeId ContentFilter_Encoding_DefaultXml = new NodeId(Objects.ContentFilter_Encoding_DefaultXml); /// /// The identifier for the FilterOperand_Encoding_DefaultXml Object. /// public static readonly NodeId FilterOperand_Encoding_DefaultXml = new NodeId(Objects.FilterOperand_Encoding_DefaultXml); /// /// The identifier for the ElementOperand_Encoding_DefaultXml Object. /// public static readonly NodeId ElementOperand_Encoding_DefaultXml = new NodeId(Objects.ElementOperand_Encoding_DefaultXml); /// /// The identifier for the LiteralOperand_Encoding_DefaultXml Object. /// public static readonly NodeId LiteralOperand_Encoding_DefaultXml = new NodeId(Objects.LiteralOperand_Encoding_DefaultXml); /// /// The identifier for the AttributeOperand_Encoding_DefaultXml Object. /// public static readonly NodeId AttributeOperand_Encoding_DefaultXml = new NodeId(Objects.AttributeOperand_Encoding_DefaultXml); /// /// The identifier for the SimpleAttributeOperand_Encoding_DefaultXml Object. /// public static readonly NodeId SimpleAttributeOperand_Encoding_DefaultXml = new NodeId(Objects.SimpleAttributeOperand_Encoding_DefaultXml); /// /// The identifier for the ContentFilterElementResult_Encoding_DefaultXml Object. /// public static readonly NodeId ContentFilterElementResult_Encoding_DefaultXml = new NodeId(Objects.ContentFilterElementResult_Encoding_DefaultXml); /// /// The identifier for the ContentFilterResult_Encoding_DefaultXml Object. /// public static readonly NodeId ContentFilterResult_Encoding_DefaultXml = new NodeId(Objects.ContentFilterResult_Encoding_DefaultXml); /// /// The identifier for the ParsingResult_Encoding_DefaultXml Object. /// public static readonly NodeId ParsingResult_Encoding_DefaultXml = new NodeId(Objects.ParsingResult_Encoding_DefaultXml); /// /// The identifier for the QueryFirstRequest_Encoding_DefaultXml Object. /// public static readonly NodeId QueryFirstRequest_Encoding_DefaultXml = new NodeId(Objects.QueryFirstRequest_Encoding_DefaultXml); /// /// The identifier for the QueryFirstResponse_Encoding_DefaultXml Object. /// public static readonly NodeId QueryFirstResponse_Encoding_DefaultXml = new NodeId(Objects.QueryFirstResponse_Encoding_DefaultXml); /// /// The identifier for the QueryNextRequest_Encoding_DefaultXml Object. /// public static readonly NodeId QueryNextRequest_Encoding_DefaultXml = new NodeId(Objects.QueryNextRequest_Encoding_DefaultXml); /// /// The identifier for the QueryNextResponse_Encoding_DefaultXml Object. /// public static readonly NodeId QueryNextResponse_Encoding_DefaultXml = new NodeId(Objects.QueryNextResponse_Encoding_DefaultXml); /// /// The identifier for the ReadValueId_Encoding_DefaultXml Object. /// public static readonly NodeId ReadValueId_Encoding_DefaultXml = new NodeId(Objects.ReadValueId_Encoding_DefaultXml); /// /// The identifier for the ReadRequest_Encoding_DefaultXml Object. /// public static readonly NodeId ReadRequest_Encoding_DefaultXml = new NodeId(Objects.ReadRequest_Encoding_DefaultXml); /// /// The identifier for the ReadResponse_Encoding_DefaultXml Object. /// public static readonly NodeId ReadResponse_Encoding_DefaultXml = new NodeId(Objects.ReadResponse_Encoding_DefaultXml); /// /// The identifier for the HistoryReadValueId_Encoding_DefaultXml Object. /// public static readonly NodeId HistoryReadValueId_Encoding_DefaultXml = new NodeId(Objects.HistoryReadValueId_Encoding_DefaultXml); /// /// The identifier for the HistoryReadResult_Encoding_DefaultXml Object. /// public static readonly NodeId HistoryReadResult_Encoding_DefaultXml = new NodeId(Objects.HistoryReadResult_Encoding_DefaultXml); /// /// The identifier for the HistoryReadDetails_Encoding_DefaultXml Object. /// public static readonly NodeId HistoryReadDetails_Encoding_DefaultXml = new NodeId(Objects.HistoryReadDetails_Encoding_DefaultXml); /// /// The identifier for the ReadEventDetails_Encoding_DefaultXml Object. /// public static readonly NodeId ReadEventDetails_Encoding_DefaultXml = new NodeId(Objects.ReadEventDetails_Encoding_DefaultXml); /// /// The identifier for the ReadRawModifiedDetails_Encoding_DefaultXml Object. /// public static readonly NodeId ReadRawModifiedDetails_Encoding_DefaultXml = new NodeId(Objects.ReadRawModifiedDetails_Encoding_DefaultXml); /// /// The identifier for the ReadProcessedDetails_Encoding_DefaultXml Object. /// public static readonly NodeId ReadProcessedDetails_Encoding_DefaultXml = new NodeId(Objects.ReadProcessedDetails_Encoding_DefaultXml); /// /// The identifier for the ReadAtTimeDetails_Encoding_DefaultXml Object. /// public static readonly NodeId ReadAtTimeDetails_Encoding_DefaultXml = new NodeId(Objects.ReadAtTimeDetails_Encoding_DefaultXml); /// /// The identifier for the HistoryData_Encoding_DefaultXml Object. /// public static readonly NodeId HistoryData_Encoding_DefaultXml = new NodeId(Objects.HistoryData_Encoding_DefaultXml); /// /// The identifier for the ModificationInfo_Encoding_DefaultXml Object. /// public static readonly NodeId ModificationInfo_Encoding_DefaultXml = new NodeId(Objects.ModificationInfo_Encoding_DefaultXml); /// /// The identifier for the HistoryModifiedData_Encoding_DefaultXml Object. /// public static readonly NodeId HistoryModifiedData_Encoding_DefaultXml = new NodeId(Objects.HistoryModifiedData_Encoding_DefaultXml); /// /// The identifier for the HistoryEvent_Encoding_DefaultXml Object. /// public static readonly NodeId HistoryEvent_Encoding_DefaultXml = new NodeId(Objects.HistoryEvent_Encoding_DefaultXml); /// /// The identifier for the HistoryReadRequest_Encoding_DefaultXml Object. /// public static readonly NodeId HistoryReadRequest_Encoding_DefaultXml = new NodeId(Objects.HistoryReadRequest_Encoding_DefaultXml); /// /// The identifier for the HistoryReadResponse_Encoding_DefaultXml Object. /// public static readonly NodeId HistoryReadResponse_Encoding_DefaultXml = new NodeId(Objects.HistoryReadResponse_Encoding_DefaultXml); /// /// The identifier for the WriteValue_Encoding_DefaultXml Object. /// public static readonly NodeId WriteValue_Encoding_DefaultXml = new NodeId(Objects.WriteValue_Encoding_DefaultXml); /// /// The identifier for the WriteRequest_Encoding_DefaultXml Object. /// public static readonly NodeId WriteRequest_Encoding_DefaultXml = new NodeId(Objects.WriteRequest_Encoding_DefaultXml); /// /// The identifier for the WriteResponse_Encoding_DefaultXml Object. /// public static readonly NodeId WriteResponse_Encoding_DefaultXml = new NodeId(Objects.WriteResponse_Encoding_DefaultXml); /// /// The identifier for the HistoryUpdateDetails_Encoding_DefaultXml Object. /// public static readonly NodeId HistoryUpdateDetails_Encoding_DefaultXml = new NodeId(Objects.HistoryUpdateDetails_Encoding_DefaultXml); /// /// The identifier for the UpdateDataDetails_Encoding_DefaultXml Object. /// public static readonly NodeId UpdateDataDetails_Encoding_DefaultXml = new NodeId(Objects.UpdateDataDetails_Encoding_DefaultXml); /// /// The identifier for the UpdateStructureDataDetails_Encoding_DefaultXml Object. /// public static readonly NodeId UpdateStructureDataDetails_Encoding_DefaultXml = new NodeId(Objects.UpdateStructureDataDetails_Encoding_DefaultXml); /// /// The identifier for the UpdateEventDetails_Encoding_DefaultXml Object. /// public static readonly NodeId UpdateEventDetails_Encoding_DefaultXml = new NodeId(Objects.UpdateEventDetails_Encoding_DefaultXml); /// /// The identifier for the DeleteRawModifiedDetails_Encoding_DefaultXml Object. /// public static readonly NodeId DeleteRawModifiedDetails_Encoding_DefaultXml = new NodeId(Objects.DeleteRawModifiedDetails_Encoding_DefaultXml); /// /// The identifier for the DeleteAtTimeDetails_Encoding_DefaultXml Object. /// public static readonly NodeId DeleteAtTimeDetails_Encoding_DefaultXml = new NodeId(Objects.DeleteAtTimeDetails_Encoding_DefaultXml); /// /// The identifier for the DeleteEventDetails_Encoding_DefaultXml Object. /// public static readonly NodeId DeleteEventDetails_Encoding_DefaultXml = new NodeId(Objects.DeleteEventDetails_Encoding_DefaultXml); /// /// The identifier for the HistoryUpdateResult_Encoding_DefaultXml Object. /// public static readonly NodeId HistoryUpdateResult_Encoding_DefaultXml = new NodeId(Objects.HistoryUpdateResult_Encoding_DefaultXml); /// /// The identifier for the HistoryUpdateEventResult_Encoding_DefaultXml Object. /// public static readonly NodeId HistoryUpdateEventResult_Encoding_DefaultXml = new NodeId(Objects.HistoryUpdateEventResult_Encoding_DefaultXml); /// /// The identifier for the HistoryUpdateRequest_Encoding_DefaultXml Object. /// public static readonly NodeId HistoryUpdateRequest_Encoding_DefaultXml = new NodeId(Objects.HistoryUpdateRequest_Encoding_DefaultXml); /// /// The identifier for the HistoryUpdateResponse_Encoding_DefaultXml Object. /// public static readonly NodeId HistoryUpdateResponse_Encoding_DefaultXml = new NodeId(Objects.HistoryUpdateResponse_Encoding_DefaultXml); /// /// The identifier for the CallMethodRequest_Encoding_DefaultXml Object. /// public static readonly NodeId CallMethodRequest_Encoding_DefaultXml = new NodeId(Objects.CallMethodRequest_Encoding_DefaultXml); /// /// The identifier for the CallMethodResult_Encoding_DefaultXml Object. /// public static readonly NodeId CallMethodResult_Encoding_DefaultXml = new NodeId(Objects.CallMethodResult_Encoding_DefaultXml); /// /// The identifier for the CallRequest_Encoding_DefaultXml Object. /// public static readonly NodeId CallRequest_Encoding_DefaultXml = new NodeId(Objects.CallRequest_Encoding_DefaultXml); /// /// The identifier for the CallResponse_Encoding_DefaultXml Object. /// public static readonly NodeId CallResponse_Encoding_DefaultXml = new NodeId(Objects.CallResponse_Encoding_DefaultXml); /// /// The identifier for the MonitoringFilter_Encoding_DefaultXml Object. /// public static readonly NodeId MonitoringFilter_Encoding_DefaultXml = new NodeId(Objects.MonitoringFilter_Encoding_DefaultXml); /// /// The identifier for the DataChangeFilter_Encoding_DefaultXml Object. /// public static readonly NodeId DataChangeFilter_Encoding_DefaultXml = new NodeId(Objects.DataChangeFilter_Encoding_DefaultXml); /// /// The identifier for the EventFilter_Encoding_DefaultXml Object. /// public static readonly NodeId EventFilter_Encoding_DefaultXml = new NodeId(Objects.EventFilter_Encoding_DefaultXml); /// /// The identifier for the AggregateConfiguration_Encoding_DefaultXml Object. /// public static readonly NodeId AggregateConfiguration_Encoding_DefaultXml = new NodeId(Objects.AggregateConfiguration_Encoding_DefaultXml); /// /// The identifier for the AggregateFilter_Encoding_DefaultXml Object. /// public static readonly NodeId AggregateFilter_Encoding_DefaultXml = new NodeId(Objects.AggregateFilter_Encoding_DefaultXml); /// /// The identifier for the MonitoringFilterResult_Encoding_DefaultXml Object. /// public static readonly NodeId MonitoringFilterResult_Encoding_DefaultXml = new NodeId(Objects.MonitoringFilterResult_Encoding_DefaultXml); /// /// The identifier for the EventFilterResult_Encoding_DefaultXml Object. /// public static readonly NodeId EventFilterResult_Encoding_DefaultXml = new NodeId(Objects.EventFilterResult_Encoding_DefaultXml); /// /// The identifier for the AggregateFilterResult_Encoding_DefaultXml Object. /// public static readonly NodeId AggregateFilterResult_Encoding_DefaultXml = new NodeId(Objects.AggregateFilterResult_Encoding_DefaultXml); /// /// The identifier for the MonitoringParameters_Encoding_DefaultXml Object. /// public static readonly NodeId MonitoringParameters_Encoding_DefaultXml = new NodeId(Objects.MonitoringParameters_Encoding_DefaultXml); /// /// The identifier for the MonitoredItemCreateRequest_Encoding_DefaultXml Object. /// public static readonly NodeId MonitoredItemCreateRequest_Encoding_DefaultXml = new NodeId(Objects.MonitoredItemCreateRequest_Encoding_DefaultXml); /// /// The identifier for the MonitoredItemCreateResult_Encoding_DefaultXml Object. /// public static readonly NodeId MonitoredItemCreateResult_Encoding_DefaultXml = new NodeId(Objects.MonitoredItemCreateResult_Encoding_DefaultXml); /// /// The identifier for the CreateMonitoredItemsRequest_Encoding_DefaultXml Object. /// public static readonly NodeId CreateMonitoredItemsRequest_Encoding_DefaultXml = new NodeId(Objects.CreateMonitoredItemsRequest_Encoding_DefaultXml); /// /// The identifier for the CreateMonitoredItemsResponse_Encoding_DefaultXml Object. /// public static readonly NodeId CreateMonitoredItemsResponse_Encoding_DefaultXml = new NodeId(Objects.CreateMonitoredItemsResponse_Encoding_DefaultXml); /// /// The identifier for the MonitoredItemModifyRequest_Encoding_DefaultXml Object. /// public static readonly NodeId MonitoredItemModifyRequest_Encoding_DefaultXml = new NodeId(Objects.MonitoredItemModifyRequest_Encoding_DefaultXml); /// /// The identifier for the MonitoredItemModifyResult_Encoding_DefaultXml Object. /// public static readonly NodeId MonitoredItemModifyResult_Encoding_DefaultXml = new NodeId(Objects.MonitoredItemModifyResult_Encoding_DefaultXml); /// /// The identifier for the ModifyMonitoredItemsRequest_Encoding_DefaultXml Object. /// public static readonly NodeId ModifyMonitoredItemsRequest_Encoding_DefaultXml = new NodeId(Objects.ModifyMonitoredItemsRequest_Encoding_DefaultXml); /// /// The identifier for the ModifyMonitoredItemsResponse_Encoding_DefaultXml Object. /// public static readonly NodeId ModifyMonitoredItemsResponse_Encoding_DefaultXml = new NodeId(Objects.ModifyMonitoredItemsResponse_Encoding_DefaultXml); /// /// The identifier for the SetMonitoringModeRequest_Encoding_DefaultXml Object. /// public static readonly NodeId SetMonitoringModeRequest_Encoding_DefaultXml = new NodeId(Objects.SetMonitoringModeRequest_Encoding_DefaultXml); /// /// The identifier for the SetMonitoringModeResponse_Encoding_DefaultXml Object. /// public static readonly NodeId SetMonitoringModeResponse_Encoding_DefaultXml = new NodeId(Objects.SetMonitoringModeResponse_Encoding_DefaultXml); /// /// The identifier for the SetTriggeringRequest_Encoding_DefaultXml Object. /// public static readonly NodeId SetTriggeringRequest_Encoding_DefaultXml = new NodeId(Objects.SetTriggeringRequest_Encoding_DefaultXml); /// /// The identifier for the SetTriggeringResponse_Encoding_DefaultXml Object. /// public static readonly NodeId SetTriggeringResponse_Encoding_DefaultXml = new NodeId(Objects.SetTriggeringResponse_Encoding_DefaultXml); /// /// The identifier for the DeleteMonitoredItemsRequest_Encoding_DefaultXml Object. /// public static readonly NodeId DeleteMonitoredItemsRequest_Encoding_DefaultXml = new NodeId(Objects.DeleteMonitoredItemsRequest_Encoding_DefaultXml); /// /// The identifier for the DeleteMonitoredItemsResponse_Encoding_DefaultXml Object. /// public static readonly NodeId DeleteMonitoredItemsResponse_Encoding_DefaultXml = new NodeId(Objects.DeleteMonitoredItemsResponse_Encoding_DefaultXml); /// /// The identifier for the CreateSubscriptionRequest_Encoding_DefaultXml Object. /// public static readonly NodeId CreateSubscriptionRequest_Encoding_DefaultXml = new NodeId(Objects.CreateSubscriptionRequest_Encoding_DefaultXml); /// /// The identifier for the CreateSubscriptionResponse_Encoding_DefaultXml Object. /// public static readonly NodeId CreateSubscriptionResponse_Encoding_DefaultXml = new NodeId(Objects.CreateSubscriptionResponse_Encoding_DefaultXml); /// /// The identifier for the ModifySubscriptionRequest_Encoding_DefaultXml Object. /// public static readonly NodeId ModifySubscriptionRequest_Encoding_DefaultXml = new NodeId(Objects.ModifySubscriptionRequest_Encoding_DefaultXml); /// /// The identifier for the ModifySubscriptionResponse_Encoding_DefaultXml Object. /// public static readonly NodeId ModifySubscriptionResponse_Encoding_DefaultXml = new NodeId(Objects.ModifySubscriptionResponse_Encoding_DefaultXml); /// /// The identifier for the SetPublishingModeRequest_Encoding_DefaultXml Object. /// public static readonly NodeId SetPublishingModeRequest_Encoding_DefaultXml = new NodeId(Objects.SetPublishingModeRequest_Encoding_DefaultXml); /// /// The identifier for the SetPublishingModeResponse_Encoding_DefaultXml Object. /// public static readonly NodeId SetPublishingModeResponse_Encoding_DefaultXml = new NodeId(Objects.SetPublishingModeResponse_Encoding_DefaultXml); /// /// The identifier for the NotificationMessage_Encoding_DefaultXml Object. /// public static readonly NodeId NotificationMessage_Encoding_DefaultXml = new NodeId(Objects.NotificationMessage_Encoding_DefaultXml); /// /// The identifier for the NotificationData_Encoding_DefaultXml Object. /// public static readonly NodeId NotificationData_Encoding_DefaultXml = new NodeId(Objects.NotificationData_Encoding_DefaultXml); /// /// The identifier for the DataChangeNotification_Encoding_DefaultXml Object. /// public static readonly NodeId DataChangeNotification_Encoding_DefaultXml = new NodeId(Objects.DataChangeNotification_Encoding_DefaultXml); /// /// The identifier for the MonitoredItemNotification_Encoding_DefaultXml Object. /// public static readonly NodeId MonitoredItemNotification_Encoding_DefaultXml = new NodeId(Objects.MonitoredItemNotification_Encoding_DefaultXml); /// /// The identifier for the EventNotificationList_Encoding_DefaultXml Object. /// public static readonly NodeId EventNotificationList_Encoding_DefaultXml = new NodeId(Objects.EventNotificationList_Encoding_DefaultXml); /// /// The identifier for the EventFieldList_Encoding_DefaultXml Object. /// public static readonly NodeId EventFieldList_Encoding_DefaultXml = new NodeId(Objects.EventFieldList_Encoding_DefaultXml); /// /// The identifier for the HistoryEventFieldList_Encoding_DefaultXml Object. /// public static readonly NodeId HistoryEventFieldList_Encoding_DefaultXml = new NodeId(Objects.HistoryEventFieldList_Encoding_DefaultXml); /// /// The identifier for the StatusChangeNotification_Encoding_DefaultXml Object. /// public static readonly NodeId StatusChangeNotification_Encoding_DefaultXml = new NodeId(Objects.StatusChangeNotification_Encoding_DefaultXml); /// /// The identifier for the SubscriptionAcknowledgement_Encoding_DefaultXml Object. /// public static readonly NodeId SubscriptionAcknowledgement_Encoding_DefaultXml = new NodeId(Objects.SubscriptionAcknowledgement_Encoding_DefaultXml); /// /// The identifier for the PublishRequest_Encoding_DefaultXml Object. /// public static readonly NodeId PublishRequest_Encoding_DefaultXml = new NodeId(Objects.PublishRequest_Encoding_DefaultXml); /// /// The identifier for the PublishResponse_Encoding_DefaultXml Object. /// public static readonly NodeId PublishResponse_Encoding_DefaultXml = new NodeId(Objects.PublishResponse_Encoding_DefaultXml); /// /// The identifier for the RepublishRequest_Encoding_DefaultXml Object. /// public static readonly NodeId RepublishRequest_Encoding_DefaultXml = new NodeId(Objects.RepublishRequest_Encoding_DefaultXml); /// /// The identifier for the RepublishResponse_Encoding_DefaultXml Object. /// public static readonly NodeId RepublishResponse_Encoding_DefaultXml = new NodeId(Objects.RepublishResponse_Encoding_DefaultXml); /// /// The identifier for the TransferResult_Encoding_DefaultXml Object. /// public static readonly NodeId TransferResult_Encoding_DefaultXml = new NodeId(Objects.TransferResult_Encoding_DefaultXml); /// /// The identifier for the TransferSubscriptionsRequest_Encoding_DefaultXml Object. /// public static readonly NodeId TransferSubscriptionsRequest_Encoding_DefaultXml = new NodeId(Objects.TransferSubscriptionsRequest_Encoding_DefaultXml); /// /// The identifier for the TransferSubscriptionsResponse_Encoding_DefaultXml Object. /// public static readonly NodeId TransferSubscriptionsResponse_Encoding_DefaultXml = new NodeId(Objects.TransferSubscriptionsResponse_Encoding_DefaultXml); /// /// The identifier for the DeleteSubscriptionsRequest_Encoding_DefaultXml Object. /// public static readonly NodeId DeleteSubscriptionsRequest_Encoding_DefaultXml = new NodeId(Objects.DeleteSubscriptionsRequest_Encoding_DefaultXml); /// /// The identifier for the DeleteSubscriptionsResponse_Encoding_DefaultXml Object. /// public static readonly NodeId DeleteSubscriptionsResponse_Encoding_DefaultXml = new NodeId(Objects.DeleteSubscriptionsResponse_Encoding_DefaultXml); /// /// The identifier for the ScalarTestType_Encoding_DefaultXml Object. /// public static readonly NodeId ScalarTestType_Encoding_DefaultXml = new NodeId(Objects.ScalarTestType_Encoding_DefaultXml); /// /// The identifier for the ArrayTestType_Encoding_DefaultXml Object. /// public static readonly NodeId ArrayTestType_Encoding_DefaultXml = new NodeId(Objects.ArrayTestType_Encoding_DefaultXml); /// /// The identifier for the CompositeTestType_Encoding_DefaultXml Object. /// public static readonly NodeId CompositeTestType_Encoding_DefaultXml = new NodeId(Objects.CompositeTestType_Encoding_DefaultXml); /// /// The identifier for the TestStackRequest_Encoding_DefaultXml Object. /// public static readonly NodeId TestStackRequest_Encoding_DefaultXml = new NodeId(Objects.TestStackRequest_Encoding_DefaultXml); /// /// The identifier for the TestStackResponse_Encoding_DefaultXml Object. /// public static readonly NodeId TestStackResponse_Encoding_DefaultXml = new NodeId(Objects.TestStackResponse_Encoding_DefaultXml); /// /// The identifier for the TestStackExRequest_Encoding_DefaultXml Object. /// public static readonly NodeId TestStackExRequest_Encoding_DefaultXml = new NodeId(Objects.TestStackExRequest_Encoding_DefaultXml); /// /// The identifier for the TestStackExResponse_Encoding_DefaultXml Object. /// public static readonly NodeId TestStackExResponse_Encoding_DefaultXml = new NodeId(Objects.TestStackExResponse_Encoding_DefaultXml); /// /// The identifier for the BuildInfo_Encoding_DefaultXml Object. /// public static readonly NodeId BuildInfo_Encoding_DefaultXml = new NodeId(Objects.BuildInfo_Encoding_DefaultXml); /// /// The identifier for the RedundantServerDataType_Encoding_DefaultXml Object. /// public static readonly NodeId RedundantServerDataType_Encoding_DefaultXml = new NodeId(Objects.RedundantServerDataType_Encoding_DefaultXml); /// /// The identifier for the EndpointUrlListDataType_Encoding_DefaultXml Object. /// public static readonly NodeId EndpointUrlListDataType_Encoding_DefaultXml = new NodeId(Objects.EndpointUrlListDataType_Encoding_DefaultXml); /// /// The identifier for the NetworkGroupDataType_Encoding_DefaultXml Object. /// public static readonly NodeId NetworkGroupDataType_Encoding_DefaultXml = new NodeId(Objects.NetworkGroupDataType_Encoding_DefaultXml); /// /// The identifier for the SamplingIntervalDiagnosticsDataType_Encoding_DefaultXml Object. /// public static readonly NodeId SamplingIntervalDiagnosticsDataType_Encoding_DefaultXml = new NodeId(Objects.SamplingIntervalDiagnosticsDataType_Encoding_DefaultXml); /// /// The identifier for the ServerDiagnosticsSummaryDataType_Encoding_DefaultXml Object. /// public static readonly NodeId ServerDiagnosticsSummaryDataType_Encoding_DefaultXml = new NodeId(Objects.ServerDiagnosticsSummaryDataType_Encoding_DefaultXml); /// /// The identifier for the ServerStatusDataType_Encoding_DefaultXml Object. /// public static readonly NodeId ServerStatusDataType_Encoding_DefaultXml = new NodeId(Objects.ServerStatusDataType_Encoding_DefaultXml); /// /// The identifier for the SessionDiagnosticsDataType_Encoding_DefaultXml Object. /// public static readonly NodeId SessionDiagnosticsDataType_Encoding_DefaultXml = new NodeId(Objects.SessionDiagnosticsDataType_Encoding_DefaultXml); /// /// The identifier for the SessionSecurityDiagnosticsDataType_Encoding_DefaultXml Object. /// public static readonly NodeId SessionSecurityDiagnosticsDataType_Encoding_DefaultXml = new NodeId(Objects.SessionSecurityDiagnosticsDataType_Encoding_DefaultXml); /// /// The identifier for the ServiceCounterDataType_Encoding_DefaultXml Object. /// public static readonly NodeId ServiceCounterDataType_Encoding_DefaultXml = new NodeId(Objects.ServiceCounterDataType_Encoding_DefaultXml); /// /// The identifier for the StatusResult_Encoding_DefaultXml Object. /// public static readonly NodeId StatusResult_Encoding_DefaultXml = new NodeId(Objects.StatusResult_Encoding_DefaultXml); /// /// The identifier for the SubscriptionDiagnosticsDataType_Encoding_DefaultXml Object. /// public static readonly NodeId SubscriptionDiagnosticsDataType_Encoding_DefaultXml = new NodeId(Objects.SubscriptionDiagnosticsDataType_Encoding_DefaultXml); /// /// The identifier for the ModelChangeStructureDataType_Encoding_DefaultXml Object. /// public static readonly NodeId ModelChangeStructureDataType_Encoding_DefaultXml = new NodeId(Objects.ModelChangeStructureDataType_Encoding_DefaultXml); /// /// The identifier for the SemanticChangeStructureDataType_Encoding_DefaultXml Object. /// public static readonly NodeId SemanticChangeStructureDataType_Encoding_DefaultXml = new NodeId(Objects.SemanticChangeStructureDataType_Encoding_DefaultXml); /// /// The identifier for the Range_Encoding_DefaultXml Object. /// public static readonly NodeId Range_Encoding_DefaultXml = new NodeId(Objects.Range_Encoding_DefaultXml); /// /// The identifier for the EUInformation_Encoding_DefaultXml Object. /// public static readonly NodeId EUInformation_Encoding_DefaultXml = new NodeId(Objects.EUInformation_Encoding_DefaultXml); /// /// The identifier for the ComplexNumberType_Encoding_DefaultXml Object. /// public static readonly NodeId ComplexNumberType_Encoding_DefaultXml = new NodeId(Objects.ComplexNumberType_Encoding_DefaultXml); /// /// The identifier for the DoubleComplexNumberType_Encoding_DefaultXml Object. /// public static readonly NodeId DoubleComplexNumberType_Encoding_DefaultXml = new NodeId(Objects.DoubleComplexNumberType_Encoding_DefaultXml); /// /// The identifier for the AxisInformation_Encoding_DefaultXml Object. /// public static readonly NodeId AxisInformation_Encoding_DefaultXml = new NodeId(Objects.AxisInformation_Encoding_DefaultXml); /// /// The identifier for the XVType_Encoding_DefaultXml Object. /// public static readonly NodeId XVType_Encoding_DefaultXml = new NodeId(Objects.XVType_Encoding_DefaultXml); /// /// The identifier for the ProgramDiagnosticDataType_Encoding_DefaultXml Object. /// public static readonly NodeId ProgramDiagnosticDataType_Encoding_DefaultXml = new NodeId(Objects.ProgramDiagnosticDataType_Encoding_DefaultXml); /// /// The identifier for the Annotation_Encoding_DefaultXml Object. /// public static readonly NodeId Annotation_Encoding_DefaultXml = new NodeId(Objects.Annotation_Encoding_DefaultXml); /// /// The identifier for the Node_Encoding_DefaultBinary Object. /// public static readonly NodeId Node_Encoding_DefaultBinary = new NodeId(Objects.Node_Encoding_DefaultBinary); /// /// The identifier for the InstanceNode_Encoding_DefaultBinary Object. /// public static readonly NodeId InstanceNode_Encoding_DefaultBinary = new NodeId(Objects.InstanceNode_Encoding_DefaultBinary); /// /// The identifier for the TypeNode_Encoding_DefaultBinary Object. /// public static readonly NodeId TypeNode_Encoding_DefaultBinary = new NodeId(Objects.TypeNode_Encoding_DefaultBinary); /// /// The identifier for the ObjectNode_Encoding_DefaultBinary Object. /// public static readonly NodeId ObjectNode_Encoding_DefaultBinary = new NodeId(Objects.ObjectNode_Encoding_DefaultBinary); /// /// The identifier for the ObjectTypeNode_Encoding_DefaultBinary Object. /// public static readonly NodeId ObjectTypeNode_Encoding_DefaultBinary = new NodeId(Objects.ObjectTypeNode_Encoding_DefaultBinary); /// /// The identifier for the VariableNode_Encoding_DefaultBinary Object. /// public static readonly NodeId VariableNode_Encoding_DefaultBinary = new NodeId(Objects.VariableNode_Encoding_DefaultBinary); /// /// The identifier for the VariableTypeNode_Encoding_DefaultBinary Object. /// public static readonly NodeId VariableTypeNode_Encoding_DefaultBinary = new NodeId(Objects.VariableTypeNode_Encoding_DefaultBinary); /// /// The identifier for the ReferenceTypeNode_Encoding_DefaultBinary Object. /// public static readonly NodeId ReferenceTypeNode_Encoding_DefaultBinary = new NodeId(Objects.ReferenceTypeNode_Encoding_DefaultBinary); /// /// The identifier for the MethodNode_Encoding_DefaultBinary Object. /// public static readonly NodeId MethodNode_Encoding_DefaultBinary = new NodeId(Objects.MethodNode_Encoding_DefaultBinary); /// /// The identifier for the ViewNode_Encoding_DefaultBinary Object. /// public static readonly NodeId ViewNode_Encoding_DefaultBinary = new NodeId(Objects.ViewNode_Encoding_DefaultBinary); /// /// The identifier for the DataTypeNode_Encoding_DefaultBinary Object. /// public static readonly NodeId DataTypeNode_Encoding_DefaultBinary = new NodeId(Objects.DataTypeNode_Encoding_DefaultBinary); /// /// The identifier for the ReferenceNode_Encoding_DefaultBinary Object. /// public static readonly NodeId ReferenceNode_Encoding_DefaultBinary = new NodeId(Objects.ReferenceNode_Encoding_DefaultBinary); /// /// The identifier for the Argument_Encoding_DefaultBinary Object. /// public static readonly NodeId Argument_Encoding_DefaultBinary = new NodeId(Objects.Argument_Encoding_DefaultBinary); /// /// The identifier for the EnumValueType_Encoding_DefaultBinary Object. /// public static readonly NodeId EnumValueType_Encoding_DefaultBinary = new NodeId(Objects.EnumValueType_Encoding_DefaultBinary); /// /// The identifier for the TimeZoneDataType_Encoding_DefaultBinary Object. /// public static readonly NodeId TimeZoneDataType_Encoding_DefaultBinary = new NodeId(Objects.TimeZoneDataType_Encoding_DefaultBinary); /// /// The identifier for the ApplicationDescription_Encoding_DefaultBinary Object. /// public static readonly NodeId ApplicationDescription_Encoding_DefaultBinary = new NodeId(Objects.ApplicationDescription_Encoding_DefaultBinary); /// /// The identifier for the RequestHeader_Encoding_DefaultBinary Object. /// public static readonly NodeId RequestHeader_Encoding_DefaultBinary = new NodeId(Objects.RequestHeader_Encoding_DefaultBinary); /// /// The identifier for the ResponseHeader_Encoding_DefaultBinary Object. /// public static readonly NodeId ResponseHeader_Encoding_DefaultBinary = new NodeId(Objects.ResponseHeader_Encoding_DefaultBinary); /// /// The identifier for the ServiceFault_Encoding_DefaultBinary Object. /// public static readonly NodeId ServiceFault_Encoding_DefaultBinary = new NodeId(Objects.ServiceFault_Encoding_DefaultBinary); /// /// The identifier for the DnsServiceRecord_Encoding_DefaultBinary Object. /// public static readonly NodeId DnsServiceRecord_Encoding_DefaultBinary = new NodeId(Objects.DnsServiceRecord_Encoding_DefaultBinary); /// /// The identifier for the FindDnsServicesRequest_Encoding_DefaultBinary Object. /// public static readonly NodeId FindDnsServicesRequest_Encoding_DefaultBinary = new NodeId(Objects.FindDnsServicesRequest_Encoding_DefaultBinary); /// /// The identifier for the FindDnsServicesResponse_Encoding_DefaultBinary Object. /// public static readonly NodeId FindDnsServicesResponse_Encoding_DefaultBinary = new NodeId(Objects.FindDnsServicesResponse_Encoding_DefaultBinary); /// /// The identifier for the FindServersRequest_Encoding_DefaultBinary Object. /// public static readonly NodeId FindServersRequest_Encoding_DefaultBinary = new NodeId(Objects.FindServersRequest_Encoding_DefaultBinary); /// /// The identifier for the FindServersResponse_Encoding_DefaultBinary Object. /// public static readonly NodeId FindServersResponse_Encoding_DefaultBinary = new NodeId(Objects.FindServersResponse_Encoding_DefaultBinary); /// /// The identifier for the UserTokenPolicy_Encoding_DefaultBinary Object. /// public static readonly NodeId UserTokenPolicy_Encoding_DefaultBinary = new NodeId(Objects.UserTokenPolicy_Encoding_DefaultBinary); /// /// The identifier for the EndpointDescription_Encoding_DefaultBinary Object. /// public static readonly NodeId EndpointDescription_Encoding_DefaultBinary = new NodeId(Objects.EndpointDescription_Encoding_DefaultBinary); /// /// The identifier for the GetEndpointsRequest_Encoding_DefaultBinary Object. /// public static readonly NodeId GetEndpointsRequest_Encoding_DefaultBinary = new NodeId(Objects.GetEndpointsRequest_Encoding_DefaultBinary); /// /// The identifier for the GetEndpointsResponse_Encoding_DefaultBinary Object. /// public static readonly NodeId GetEndpointsResponse_Encoding_DefaultBinary = new NodeId(Objects.GetEndpointsResponse_Encoding_DefaultBinary); /// /// The identifier for the RegisteredServer_Encoding_DefaultBinary Object. /// public static readonly NodeId RegisteredServer_Encoding_DefaultBinary = new NodeId(Objects.RegisteredServer_Encoding_DefaultBinary); /// /// The identifier for the RegisterServerRequest_Encoding_DefaultBinary Object. /// public static readonly NodeId RegisterServerRequest_Encoding_DefaultBinary = new NodeId(Objects.RegisterServerRequest_Encoding_DefaultBinary); /// /// The identifier for the RegisterServerResponse_Encoding_DefaultBinary Object. /// public static readonly NodeId RegisterServerResponse_Encoding_DefaultBinary = new NodeId(Objects.RegisterServerResponse_Encoding_DefaultBinary); /// /// The identifier for the ChannelSecurityToken_Encoding_DefaultBinary Object. /// public static readonly NodeId ChannelSecurityToken_Encoding_DefaultBinary = new NodeId(Objects.ChannelSecurityToken_Encoding_DefaultBinary); /// /// The identifier for the OpenSecureChannelRequest_Encoding_DefaultBinary Object. /// public static readonly NodeId OpenSecureChannelRequest_Encoding_DefaultBinary = new NodeId(Objects.OpenSecureChannelRequest_Encoding_DefaultBinary); /// /// The identifier for the OpenSecureChannelResponse_Encoding_DefaultBinary Object. /// public static readonly NodeId OpenSecureChannelResponse_Encoding_DefaultBinary = new NodeId(Objects.OpenSecureChannelResponse_Encoding_DefaultBinary); /// /// The identifier for the CloseSecureChannelRequest_Encoding_DefaultBinary Object. /// public static readonly NodeId CloseSecureChannelRequest_Encoding_DefaultBinary = new NodeId(Objects.CloseSecureChannelRequest_Encoding_DefaultBinary); /// /// The identifier for the CloseSecureChannelResponse_Encoding_DefaultBinary Object. /// public static readonly NodeId CloseSecureChannelResponse_Encoding_DefaultBinary = new NodeId(Objects.CloseSecureChannelResponse_Encoding_DefaultBinary); /// /// The identifier for the SignedSoftwareCertificate_Encoding_DefaultBinary Object. /// public static readonly NodeId SignedSoftwareCertificate_Encoding_DefaultBinary = new NodeId(Objects.SignedSoftwareCertificate_Encoding_DefaultBinary); /// /// The identifier for the SignatureData_Encoding_DefaultBinary Object. /// public static readonly NodeId SignatureData_Encoding_DefaultBinary = new NodeId(Objects.SignatureData_Encoding_DefaultBinary); /// /// The identifier for the CreateSessionRequest_Encoding_DefaultBinary Object. /// public static readonly NodeId CreateSessionRequest_Encoding_DefaultBinary = new NodeId(Objects.CreateSessionRequest_Encoding_DefaultBinary); /// /// The identifier for the CreateSessionResponse_Encoding_DefaultBinary Object. /// public static readonly NodeId CreateSessionResponse_Encoding_DefaultBinary = new NodeId(Objects.CreateSessionResponse_Encoding_DefaultBinary); /// /// The identifier for the UserIdentityToken_Encoding_DefaultBinary Object. /// public static readonly NodeId UserIdentityToken_Encoding_DefaultBinary = new NodeId(Objects.UserIdentityToken_Encoding_DefaultBinary); /// /// The identifier for the AnonymousIdentityToken_Encoding_DefaultBinary Object. /// public static readonly NodeId AnonymousIdentityToken_Encoding_DefaultBinary = new NodeId(Objects.AnonymousIdentityToken_Encoding_DefaultBinary); /// /// The identifier for the UserNameIdentityToken_Encoding_DefaultBinary Object. /// public static readonly NodeId UserNameIdentityToken_Encoding_DefaultBinary = new NodeId(Objects.UserNameIdentityToken_Encoding_DefaultBinary); /// /// The identifier for the X509IdentityToken_Encoding_DefaultBinary Object. /// public static readonly NodeId X509IdentityToken_Encoding_DefaultBinary = new NodeId(Objects.X509IdentityToken_Encoding_DefaultBinary); /// /// The identifier for the IssuedIdentityToken_Encoding_DefaultBinary Object. /// public static readonly NodeId IssuedIdentityToken_Encoding_DefaultBinary = new NodeId(Objects.IssuedIdentityToken_Encoding_DefaultBinary); /// /// The identifier for the ActivateSessionRequest_Encoding_DefaultBinary Object. /// public static readonly NodeId ActivateSessionRequest_Encoding_DefaultBinary = new NodeId(Objects.ActivateSessionRequest_Encoding_DefaultBinary); /// /// The identifier for the ActivateSessionResponse_Encoding_DefaultBinary Object. /// public static readonly NodeId ActivateSessionResponse_Encoding_DefaultBinary = new NodeId(Objects.ActivateSessionResponse_Encoding_DefaultBinary); /// /// The identifier for the CloseSessionRequest_Encoding_DefaultBinary Object. /// public static readonly NodeId CloseSessionRequest_Encoding_DefaultBinary = new NodeId(Objects.CloseSessionRequest_Encoding_DefaultBinary); /// /// The identifier for the CloseSessionResponse_Encoding_DefaultBinary Object. /// public static readonly NodeId CloseSessionResponse_Encoding_DefaultBinary = new NodeId(Objects.CloseSessionResponse_Encoding_DefaultBinary); /// /// The identifier for the CancelRequest_Encoding_DefaultBinary Object. /// public static readonly NodeId CancelRequest_Encoding_DefaultBinary = new NodeId(Objects.CancelRequest_Encoding_DefaultBinary); /// /// The identifier for the CancelResponse_Encoding_DefaultBinary Object. /// public static readonly NodeId CancelResponse_Encoding_DefaultBinary = new NodeId(Objects.CancelResponse_Encoding_DefaultBinary); /// /// The identifier for the NodeAttributes_Encoding_DefaultBinary Object. /// public static readonly NodeId NodeAttributes_Encoding_DefaultBinary = new NodeId(Objects.NodeAttributes_Encoding_DefaultBinary); /// /// The identifier for the ObjectAttributes_Encoding_DefaultBinary Object. /// public static readonly NodeId ObjectAttributes_Encoding_DefaultBinary = new NodeId(Objects.ObjectAttributes_Encoding_DefaultBinary); /// /// The identifier for the VariableAttributes_Encoding_DefaultBinary Object. /// public static readonly NodeId VariableAttributes_Encoding_DefaultBinary = new NodeId(Objects.VariableAttributes_Encoding_DefaultBinary); /// /// The identifier for the MethodAttributes_Encoding_DefaultBinary Object. /// public static readonly NodeId MethodAttributes_Encoding_DefaultBinary = new NodeId(Objects.MethodAttributes_Encoding_DefaultBinary); /// /// The identifier for the ObjectTypeAttributes_Encoding_DefaultBinary Object. /// public static readonly NodeId ObjectTypeAttributes_Encoding_DefaultBinary = new NodeId(Objects.ObjectTypeAttributes_Encoding_DefaultBinary); /// /// The identifier for the VariableTypeAttributes_Encoding_DefaultBinary Object. /// public static readonly NodeId VariableTypeAttributes_Encoding_DefaultBinary = new NodeId(Objects.VariableTypeAttributes_Encoding_DefaultBinary); /// /// The identifier for the ReferenceTypeAttributes_Encoding_DefaultBinary Object. /// public static readonly NodeId ReferenceTypeAttributes_Encoding_DefaultBinary = new NodeId(Objects.ReferenceTypeAttributes_Encoding_DefaultBinary); /// /// The identifier for the DataTypeAttributes_Encoding_DefaultBinary Object. /// public static readonly NodeId DataTypeAttributes_Encoding_DefaultBinary = new NodeId(Objects.DataTypeAttributes_Encoding_DefaultBinary); /// /// The identifier for the ViewAttributes_Encoding_DefaultBinary Object. /// public static readonly NodeId ViewAttributes_Encoding_DefaultBinary = new NodeId(Objects.ViewAttributes_Encoding_DefaultBinary); /// /// The identifier for the AddNodesItem_Encoding_DefaultBinary Object. /// public static readonly NodeId AddNodesItem_Encoding_DefaultBinary = new NodeId(Objects.AddNodesItem_Encoding_DefaultBinary); /// /// The identifier for the AddNodesResult_Encoding_DefaultBinary Object. /// public static readonly NodeId AddNodesResult_Encoding_DefaultBinary = new NodeId(Objects.AddNodesResult_Encoding_DefaultBinary); /// /// The identifier for the AddNodesRequest_Encoding_DefaultBinary Object. /// public static readonly NodeId AddNodesRequest_Encoding_DefaultBinary = new NodeId(Objects.AddNodesRequest_Encoding_DefaultBinary); /// /// The identifier for the AddNodesResponse_Encoding_DefaultBinary Object. /// public static readonly NodeId AddNodesResponse_Encoding_DefaultBinary = new NodeId(Objects.AddNodesResponse_Encoding_DefaultBinary); /// /// The identifier for the AddReferencesItem_Encoding_DefaultBinary Object. /// public static readonly NodeId AddReferencesItem_Encoding_DefaultBinary = new NodeId(Objects.AddReferencesItem_Encoding_DefaultBinary); /// /// The identifier for the AddReferencesRequest_Encoding_DefaultBinary Object. /// public static readonly NodeId AddReferencesRequest_Encoding_DefaultBinary = new NodeId(Objects.AddReferencesRequest_Encoding_DefaultBinary); /// /// The identifier for the AddReferencesResponse_Encoding_DefaultBinary Object. /// public static readonly NodeId AddReferencesResponse_Encoding_DefaultBinary = new NodeId(Objects.AddReferencesResponse_Encoding_DefaultBinary); /// /// The identifier for the DeleteNodesItem_Encoding_DefaultBinary Object. /// public static readonly NodeId DeleteNodesItem_Encoding_DefaultBinary = new NodeId(Objects.DeleteNodesItem_Encoding_DefaultBinary); /// /// The identifier for the DeleteNodesRequest_Encoding_DefaultBinary Object. /// public static readonly NodeId DeleteNodesRequest_Encoding_DefaultBinary = new NodeId(Objects.DeleteNodesRequest_Encoding_DefaultBinary); /// /// The identifier for the DeleteNodesResponse_Encoding_DefaultBinary Object. /// public static readonly NodeId DeleteNodesResponse_Encoding_DefaultBinary = new NodeId(Objects.DeleteNodesResponse_Encoding_DefaultBinary); /// /// The identifier for the DeleteReferencesItem_Encoding_DefaultBinary Object. /// public static readonly NodeId DeleteReferencesItem_Encoding_DefaultBinary = new NodeId(Objects.DeleteReferencesItem_Encoding_DefaultBinary); /// /// The identifier for the DeleteReferencesRequest_Encoding_DefaultBinary Object. /// public static readonly NodeId DeleteReferencesRequest_Encoding_DefaultBinary = new NodeId(Objects.DeleteReferencesRequest_Encoding_DefaultBinary); /// /// The identifier for the DeleteReferencesResponse_Encoding_DefaultBinary Object. /// public static readonly NodeId DeleteReferencesResponse_Encoding_DefaultBinary = new NodeId(Objects.DeleteReferencesResponse_Encoding_DefaultBinary); /// /// The identifier for the ViewDescription_Encoding_DefaultBinary Object. /// public static readonly NodeId ViewDescription_Encoding_DefaultBinary = new NodeId(Objects.ViewDescription_Encoding_DefaultBinary); /// /// The identifier for the BrowseDescription_Encoding_DefaultBinary Object. /// public static readonly NodeId BrowseDescription_Encoding_DefaultBinary = new NodeId(Objects.BrowseDescription_Encoding_DefaultBinary); /// /// The identifier for the ReferenceDescription_Encoding_DefaultBinary Object. /// public static readonly NodeId ReferenceDescription_Encoding_DefaultBinary = new NodeId(Objects.ReferenceDescription_Encoding_DefaultBinary); /// /// The identifier for the BrowseResult_Encoding_DefaultBinary Object. /// public static readonly NodeId BrowseResult_Encoding_DefaultBinary = new NodeId(Objects.BrowseResult_Encoding_DefaultBinary); /// /// The identifier for the BrowseRequest_Encoding_DefaultBinary Object. /// public static readonly NodeId BrowseRequest_Encoding_DefaultBinary = new NodeId(Objects.BrowseRequest_Encoding_DefaultBinary); /// /// The identifier for the BrowseResponse_Encoding_DefaultBinary Object. /// public static readonly NodeId BrowseResponse_Encoding_DefaultBinary = new NodeId(Objects.BrowseResponse_Encoding_DefaultBinary); /// /// The identifier for the BrowseNextRequest_Encoding_DefaultBinary Object. /// public static readonly NodeId BrowseNextRequest_Encoding_DefaultBinary = new NodeId(Objects.BrowseNextRequest_Encoding_DefaultBinary); /// /// The identifier for the BrowseNextResponse_Encoding_DefaultBinary Object. /// public static readonly NodeId BrowseNextResponse_Encoding_DefaultBinary = new NodeId(Objects.BrowseNextResponse_Encoding_DefaultBinary); /// /// The identifier for the RelativePathElement_Encoding_DefaultBinary Object. /// public static readonly NodeId RelativePathElement_Encoding_DefaultBinary = new NodeId(Objects.RelativePathElement_Encoding_DefaultBinary); /// /// The identifier for the RelativePath_Encoding_DefaultBinary Object. /// public static readonly NodeId RelativePath_Encoding_DefaultBinary = new NodeId(Objects.RelativePath_Encoding_DefaultBinary); /// /// The identifier for the BrowsePath_Encoding_DefaultBinary Object. /// public static readonly NodeId BrowsePath_Encoding_DefaultBinary = new NodeId(Objects.BrowsePath_Encoding_DefaultBinary); /// /// The identifier for the BrowsePathTarget_Encoding_DefaultBinary Object. /// public static readonly NodeId BrowsePathTarget_Encoding_DefaultBinary = new NodeId(Objects.BrowsePathTarget_Encoding_DefaultBinary); /// /// The identifier for the BrowsePathResult_Encoding_DefaultBinary Object. /// public static readonly NodeId BrowsePathResult_Encoding_DefaultBinary = new NodeId(Objects.BrowsePathResult_Encoding_DefaultBinary); /// /// The identifier for the TranslateBrowsePathsToNodeIdsRequest_Encoding_DefaultBinary Object. /// public static readonly NodeId TranslateBrowsePathsToNodeIdsRequest_Encoding_DefaultBinary = new NodeId(Objects.TranslateBrowsePathsToNodeIdsRequest_Encoding_DefaultBinary); /// /// The identifier for the TranslateBrowsePathsToNodeIdsResponse_Encoding_DefaultBinary Object. /// public static readonly NodeId TranslateBrowsePathsToNodeIdsResponse_Encoding_DefaultBinary = new NodeId(Objects.TranslateBrowsePathsToNodeIdsResponse_Encoding_DefaultBinary); /// /// The identifier for the RegisterNodesRequest_Encoding_DefaultBinary Object. /// public static readonly NodeId RegisterNodesRequest_Encoding_DefaultBinary = new NodeId(Objects.RegisterNodesRequest_Encoding_DefaultBinary); /// /// The identifier for the RegisterNodesResponse_Encoding_DefaultBinary Object. /// public static readonly NodeId RegisterNodesResponse_Encoding_DefaultBinary = new NodeId(Objects.RegisterNodesResponse_Encoding_DefaultBinary); /// /// The identifier for the UnregisterNodesRequest_Encoding_DefaultBinary Object. /// public static readonly NodeId UnregisterNodesRequest_Encoding_DefaultBinary = new NodeId(Objects.UnregisterNodesRequest_Encoding_DefaultBinary); /// /// The identifier for the UnregisterNodesResponse_Encoding_DefaultBinary Object. /// public static readonly NodeId UnregisterNodesResponse_Encoding_DefaultBinary = new NodeId(Objects.UnregisterNodesResponse_Encoding_DefaultBinary); /// /// The identifier for the EndpointConfiguration_Encoding_DefaultBinary Object. /// public static readonly NodeId EndpointConfiguration_Encoding_DefaultBinary = new NodeId(Objects.EndpointConfiguration_Encoding_DefaultBinary); /// /// The identifier for the SupportedProfile_Encoding_DefaultBinary Object. /// public static readonly NodeId SupportedProfile_Encoding_DefaultBinary = new NodeId(Objects.SupportedProfile_Encoding_DefaultBinary); /// /// The identifier for the SoftwareCertificate_Encoding_DefaultBinary Object. /// public static readonly NodeId SoftwareCertificate_Encoding_DefaultBinary = new NodeId(Objects.SoftwareCertificate_Encoding_DefaultBinary); /// /// The identifier for the QueryDataDescription_Encoding_DefaultBinary Object. /// public static readonly NodeId QueryDataDescription_Encoding_DefaultBinary = new NodeId(Objects.QueryDataDescription_Encoding_DefaultBinary); /// /// The identifier for the NodeTypeDescription_Encoding_DefaultBinary Object. /// public static readonly NodeId NodeTypeDescription_Encoding_DefaultBinary = new NodeId(Objects.NodeTypeDescription_Encoding_DefaultBinary); /// /// The identifier for the QueryDataSet_Encoding_DefaultBinary Object. /// public static readonly NodeId QueryDataSet_Encoding_DefaultBinary = new NodeId(Objects.QueryDataSet_Encoding_DefaultBinary); /// /// The identifier for the NodeReference_Encoding_DefaultBinary Object. /// public static readonly NodeId NodeReference_Encoding_DefaultBinary = new NodeId(Objects.NodeReference_Encoding_DefaultBinary); /// /// The identifier for the ContentFilterElement_Encoding_DefaultBinary Object. /// public static readonly NodeId ContentFilterElement_Encoding_DefaultBinary = new NodeId(Objects.ContentFilterElement_Encoding_DefaultBinary); /// /// The identifier for the ContentFilter_Encoding_DefaultBinary Object. /// public static readonly NodeId ContentFilter_Encoding_DefaultBinary = new NodeId(Objects.ContentFilter_Encoding_DefaultBinary); /// /// The identifier for the FilterOperand_Encoding_DefaultBinary Object. /// public static readonly NodeId FilterOperand_Encoding_DefaultBinary = new NodeId(Objects.FilterOperand_Encoding_DefaultBinary); /// /// The identifier for the ElementOperand_Encoding_DefaultBinary Object. /// public static readonly NodeId ElementOperand_Encoding_DefaultBinary = new NodeId(Objects.ElementOperand_Encoding_DefaultBinary); /// /// The identifier for the LiteralOperand_Encoding_DefaultBinary Object. /// public static readonly NodeId LiteralOperand_Encoding_DefaultBinary = new NodeId(Objects.LiteralOperand_Encoding_DefaultBinary); /// /// The identifier for the AttributeOperand_Encoding_DefaultBinary Object. /// public static readonly NodeId AttributeOperand_Encoding_DefaultBinary = new NodeId(Objects.AttributeOperand_Encoding_DefaultBinary); /// /// The identifier for the SimpleAttributeOperand_Encoding_DefaultBinary Object. /// public static readonly NodeId SimpleAttributeOperand_Encoding_DefaultBinary = new NodeId(Objects.SimpleAttributeOperand_Encoding_DefaultBinary); /// /// The identifier for the ContentFilterElementResult_Encoding_DefaultBinary Object. /// public static readonly NodeId ContentFilterElementResult_Encoding_DefaultBinary = new NodeId(Objects.ContentFilterElementResult_Encoding_DefaultBinary); /// /// The identifier for the ContentFilterResult_Encoding_DefaultBinary Object. /// public static readonly NodeId ContentFilterResult_Encoding_DefaultBinary = new NodeId(Objects.ContentFilterResult_Encoding_DefaultBinary); /// /// The identifier for the ParsingResult_Encoding_DefaultBinary Object. /// public static readonly NodeId ParsingResult_Encoding_DefaultBinary = new NodeId(Objects.ParsingResult_Encoding_DefaultBinary); /// /// The identifier for the QueryFirstRequest_Encoding_DefaultBinary Object. /// public static readonly NodeId QueryFirstRequest_Encoding_DefaultBinary = new NodeId(Objects.QueryFirstRequest_Encoding_DefaultBinary); /// /// The identifier for the QueryFirstResponse_Encoding_DefaultBinary Object. /// public static readonly NodeId QueryFirstResponse_Encoding_DefaultBinary = new NodeId(Objects.QueryFirstResponse_Encoding_DefaultBinary); /// /// The identifier for the QueryNextRequest_Encoding_DefaultBinary Object. /// public static readonly NodeId QueryNextRequest_Encoding_DefaultBinary = new NodeId(Objects.QueryNextRequest_Encoding_DefaultBinary); /// /// The identifier for the QueryNextResponse_Encoding_DefaultBinary Object. /// public static readonly NodeId QueryNextResponse_Encoding_DefaultBinary = new NodeId(Objects.QueryNextResponse_Encoding_DefaultBinary); /// /// The identifier for the ReadValueId_Encoding_DefaultBinary Object. /// public static readonly NodeId ReadValueId_Encoding_DefaultBinary = new NodeId(Objects.ReadValueId_Encoding_DefaultBinary); /// /// The identifier for the ReadRequest_Encoding_DefaultBinary Object. /// public static readonly NodeId ReadRequest_Encoding_DefaultBinary = new NodeId(Objects.ReadRequest_Encoding_DefaultBinary); /// /// The identifier for the ReadResponse_Encoding_DefaultBinary Object. /// public static readonly NodeId ReadResponse_Encoding_DefaultBinary = new NodeId(Objects.ReadResponse_Encoding_DefaultBinary); /// /// The identifier for the HistoryReadValueId_Encoding_DefaultBinary Object. /// public static readonly NodeId HistoryReadValueId_Encoding_DefaultBinary = new NodeId(Objects.HistoryReadValueId_Encoding_DefaultBinary); /// /// The identifier for the HistoryReadResult_Encoding_DefaultBinary Object. /// public static readonly NodeId HistoryReadResult_Encoding_DefaultBinary = new NodeId(Objects.HistoryReadResult_Encoding_DefaultBinary); /// /// The identifier for the HistoryReadDetails_Encoding_DefaultBinary Object. /// public static readonly NodeId HistoryReadDetails_Encoding_DefaultBinary = new NodeId(Objects.HistoryReadDetails_Encoding_DefaultBinary); /// /// The identifier for the ReadEventDetails_Encoding_DefaultBinary Object. /// public static readonly NodeId ReadEventDetails_Encoding_DefaultBinary = new NodeId(Objects.ReadEventDetails_Encoding_DefaultBinary); /// /// The identifier for the ReadRawModifiedDetails_Encoding_DefaultBinary Object. /// public static readonly NodeId ReadRawModifiedDetails_Encoding_DefaultBinary = new NodeId(Objects.ReadRawModifiedDetails_Encoding_DefaultBinary); /// /// The identifier for the ReadProcessedDetails_Encoding_DefaultBinary Object. /// public static readonly NodeId ReadProcessedDetails_Encoding_DefaultBinary = new NodeId(Objects.ReadProcessedDetails_Encoding_DefaultBinary); /// /// The identifier for the ReadAtTimeDetails_Encoding_DefaultBinary Object. /// public static readonly NodeId ReadAtTimeDetails_Encoding_DefaultBinary = new NodeId(Objects.ReadAtTimeDetails_Encoding_DefaultBinary); /// /// The identifier for the HistoryData_Encoding_DefaultBinary Object. /// public static readonly NodeId HistoryData_Encoding_DefaultBinary = new NodeId(Objects.HistoryData_Encoding_DefaultBinary); /// /// The identifier for the ModificationInfo_Encoding_DefaultBinary Object. /// public static readonly NodeId ModificationInfo_Encoding_DefaultBinary = new NodeId(Objects.ModificationInfo_Encoding_DefaultBinary); /// /// The identifier for the HistoryModifiedData_Encoding_DefaultBinary Object. /// public static readonly NodeId HistoryModifiedData_Encoding_DefaultBinary = new NodeId(Objects.HistoryModifiedData_Encoding_DefaultBinary); /// /// The identifier for the HistoryEvent_Encoding_DefaultBinary Object. /// public static readonly NodeId HistoryEvent_Encoding_DefaultBinary = new NodeId(Objects.HistoryEvent_Encoding_DefaultBinary); /// /// The identifier for the HistoryReadRequest_Encoding_DefaultBinary Object. /// public static readonly NodeId HistoryReadRequest_Encoding_DefaultBinary = new NodeId(Objects.HistoryReadRequest_Encoding_DefaultBinary); /// /// The identifier for the HistoryReadResponse_Encoding_DefaultBinary Object. /// public static readonly NodeId HistoryReadResponse_Encoding_DefaultBinary = new NodeId(Objects.HistoryReadResponse_Encoding_DefaultBinary); /// /// The identifier for the WriteValue_Encoding_DefaultBinary Object. /// public static readonly NodeId WriteValue_Encoding_DefaultBinary = new NodeId(Objects.WriteValue_Encoding_DefaultBinary); /// /// The identifier for the WriteRequest_Encoding_DefaultBinary Object. /// public static readonly NodeId WriteRequest_Encoding_DefaultBinary = new NodeId(Objects.WriteRequest_Encoding_DefaultBinary); /// /// The identifier for the WriteResponse_Encoding_DefaultBinary Object. /// public static readonly NodeId WriteResponse_Encoding_DefaultBinary = new NodeId(Objects.WriteResponse_Encoding_DefaultBinary); /// /// The identifier for the HistoryUpdateDetails_Encoding_DefaultBinary Object. /// public static readonly NodeId HistoryUpdateDetails_Encoding_DefaultBinary = new NodeId(Objects.HistoryUpdateDetails_Encoding_DefaultBinary); /// /// The identifier for the UpdateDataDetails_Encoding_DefaultBinary Object. /// public static readonly NodeId UpdateDataDetails_Encoding_DefaultBinary = new NodeId(Objects.UpdateDataDetails_Encoding_DefaultBinary); /// /// The identifier for the UpdateStructureDataDetails_Encoding_DefaultBinary Object. /// public static readonly NodeId UpdateStructureDataDetails_Encoding_DefaultBinary = new NodeId(Objects.UpdateStructureDataDetails_Encoding_DefaultBinary); /// /// The identifier for the UpdateEventDetails_Encoding_DefaultBinary Object. /// public static readonly NodeId UpdateEventDetails_Encoding_DefaultBinary = new NodeId(Objects.UpdateEventDetails_Encoding_DefaultBinary); /// /// The identifier for the DeleteRawModifiedDetails_Encoding_DefaultBinary Object. /// public static readonly NodeId DeleteRawModifiedDetails_Encoding_DefaultBinary = new NodeId(Objects.DeleteRawModifiedDetails_Encoding_DefaultBinary); /// /// The identifier for the DeleteAtTimeDetails_Encoding_DefaultBinary Object. /// public static readonly NodeId DeleteAtTimeDetails_Encoding_DefaultBinary = new NodeId(Objects.DeleteAtTimeDetails_Encoding_DefaultBinary); /// /// The identifier for the DeleteEventDetails_Encoding_DefaultBinary Object. /// public static readonly NodeId DeleteEventDetails_Encoding_DefaultBinary = new NodeId(Objects.DeleteEventDetails_Encoding_DefaultBinary); /// /// The identifier for the HistoryUpdateResult_Encoding_DefaultBinary Object. /// public static readonly NodeId HistoryUpdateResult_Encoding_DefaultBinary = new NodeId(Objects.HistoryUpdateResult_Encoding_DefaultBinary); /// /// The identifier for the HistoryUpdateEventResult_Encoding_DefaultBinary Object. /// public static readonly NodeId HistoryUpdateEventResult_Encoding_DefaultBinary = new NodeId(Objects.HistoryUpdateEventResult_Encoding_DefaultBinary); /// /// The identifier for the HistoryUpdateRequest_Encoding_DefaultBinary Object. /// public static readonly NodeId HistoryUpdateRequest_Encoding_DefaultBinary = new NodeId(Objects.HistoryUpdateRequest_Encoding_DefaultBinary); /// /// The identifier for the HistoryUpdateResponse_Encoding_DefaultBinary Object. /// public static readonly NodeId HistoryUpdateResponse_Encoding_DefaultBinary = new NodeId(Objects.HistoryUpdateResponse_Encoding_DefaultBinary); /// /// The identifier for the CallMethodRequest_Encoding_DefaultBinary Object. /// public static readonly NodeId CallMethodRequest_Encoding_DefaultBinary = new NodeId(Objects.CallMethodRequest_Encoding_DefaultBinary); /// /// The identifier for the CallMethodResult_Encoding_DefaultBinary Object. /// public static readonly NodeId CallMethodResult_Encoding_DefaultBinary = new NodeId(Objects.CallMethodResult_Encoding_DefaultBinary); /// /// The identifier for the CallRequest_Encoding_DefaultBinary Object. /// public static readonly NodeId CallRequest_Encoding_DefaultBinary = new NodeId(Objects.CallRequest_Encoding_DefaultBinary); /// /// The identifier for the CallResponse_Encoding_DefaultBinary Object. /// public static readonly NodeId CallResponse_Encoding_DefaultBinary = new NodeId(Objects.CallResponse_Encoding_DefaultBinary); /// /// The identifier for the MonitoringFilter_Encoding_DefaultBinary Object. /// public static readonly NodeId MonitoringFilter_Encoding_DefaultBinary = new NodeId(Objects.MonitoringFilter_Encoding_DefaultBinary); /// /// The identifier for the DataChangeFilter_Encoding_DefaultBinary Object. /// public static readonly NodeId DataChangeFilter_Encoding_DefaultBinary = new NodeId(Objects.DataChangeFilter_Encoding_DefaultBinary); /// /// The identifier for the EventFilter_Encoding_DefaultBinary Object. /// public static readonly NodeId EventFilter_Encoding_DefaultBinary = new NodeId(Objects.EventFilter_Encoding_DefaultBinary); /// /// The identifier for the AggregateConfiguration_Encoding_DefaultBinary Object. /// public static readonly NodeId AggregateConfiguration_Encoding_DefaultBinary = new NodeId(Objects.AggregateConfiguration_Encoding_DefaultBinary); /// /// The identifier for the AggregateFilter_Encoding_DefaultBinary Object. /// public static readonly NodeId AggregateFilter_Encoding_DefaultBinary = new NodeId(Objects.AggregateFilter_Encoding_DefaultBinary); /// /// The identifier for the MonitoringFilterResult_Encoding_DefaultBinary Object. /// public static readonly NodeId MonitoringFilterResult_Encoding_DefaultBinary = new NodeId(Objects.MonitoringFilterResult_Encoding_DefaultBinary); /// /// The identifier for the EventFilterResult_Encoding_DefaultBinary Object. /// public static readonly NodeId EventFilterResult_Encoding_DefaultBinary = new NodeId(Objects.EventFilterResult_Encoding_DefaultBinary); /// /// The identifier for the AggregateFilterResult_Encoding_DefaultBinary Object. /// public static readonly NodeId AggregateFilterResult_Encoding_DefaultBinary = new NodeId(Objects.AggregateFilterResult_Encoding_DefaultBinary); /// /// The identifier for the MonitoringParameters_Encoding_DefaultBinary Object. /// public static readonly NodeId MonitoringParameters_Encoding_DefaultBinary = new NodeId(Objects.MonitoringParameters_Encoding_DefaultBinary); /// /// The identifier for the MonitoredItemCreateRequest_Encoding_DefaultBinary Object. /// public static readonly NodeId MonitoredItemCreateRequest_Encoding_DefaultBinary = new NodeId(Objects.MonitoredItemCreateRequest_Encoding_DefaultBinary); /// /// The identifier for the MonitoredItemCreateResult_Encoding_DefaultBinary Object. /// public static readonly NodeId MonitoredItemCreateResult_Encoding_DefaultBinary = new NodeId(Objects.MonitoredItemCreateResult_Encoding_DefaultBinary); /// /// The identifier for the CreateMonitoredItemsRequest_Encoding_DefaultBinary Object. /// public static readonly NodeId CreateMonitoredItemsRequest_Encoding_DefaultBinary = new NodeId(Objects.CreateMonitoredItemsRequest_Encoding_DefaultBinary); /// /// The identifier for the CreateMonitoredItemsResponse_Encoding_DefaultBinary Object. /// public static readonly NodeId CreateMonitoredItemsResponse_Encoding_DefaultBinary = new NodeId(Objects.CreateMonitoredItemsResponse_Encoding_DefaultBinary); /// /// The identifier for the MonitoredItemModifyRequest_Encoding_DefaultBinary Object. /// public static readonly NodeId MonitoredItemModifyRequest_Encoding_DefaultBinary = new NodeId(Objects.MonitoredItemModifyRequest_Encoding_DefaultBinary); /// /// The identifier for the MonitoredItemModifyResult_Encoding_DefaultBinary Object. /// public static readonly NodeId MonitoredItemModifyResult_Encoding_DefaultBinary = new NodeId(Objects.MonitoredItemModifyResult_Encoding_DefaultBinary); /// /// The identifier for the ModifyMonitoredItemsRequest_Encoding_DefaultBinary Object. /// public static readonly NodeId ModifyMonitoredItemsRequest_Encoding_DefaultBinary = new NodeId(Objects.ModifyMonitoredItemsRequest_Encoding_DefaultBinary); /// /// The identifier for the ModifyMonitoredItemsResponse_Encoding_DefaultBinary Object. /// public static readonly NodeId ModifyMonitoredItemsResponse_Encoding_DefaultBinary = new NodeId(Objects.ModifyMonitoredItemsResponse_Encoding_DefaultBinary); /// /// The identifier for the SetMonitoringModeRequest_Encoding_DefaultBinary Object. /// public static readonly NodeId SetMonitoringModeRequest_Encoding_DefaultBinary = new NodeId(Objects.SetMonitoringModeRequest_Encoding_DefaultBinary); /// /// The identifier for the SetMonitoringModeResponse_Encoding_DefaultBinary Object. /// public static readonly NodeId SetMonitoringModeResponse_Encoding_DefaultBinary = new NodeId(Objects.SetMonitoringModeResponse_Encoding_DefaultBinary); /// /// The identifier for the SetTriggeringRequest_Encoding_DefaultBinary Object. /// public static readonly NodeId SetTriggeringRequest_Encoding_DefaultBinary = new NodeId(Objects.SetTriggeringRequest_Encoding_DefaultBinary); /// /// The identifier for the SetTriggeringResponse_Encoding_DefaultBinary Object. /// public static readonly NodeId SetTriggeringResponse_Encoding_DefaultBinary = new NodeId(Objects.SetTriggeringResponse_Encoding_DefaultBinary); /// /// The identifier for the DeleteMonitoredItemsRequest_Encoding_DefaultBinary Object. /// public static readonly NodeId DeleteMonitoredItemsRequest_Encoding_DefaultBinary = new NodeId(Objects.DeleteMonitoredItemsRequest_Encoding_DefaultBinary); /// /// The identifier for the DeleteMonitoredItemsResponse_Encoding_DefaultBinary Object. /// public static readonly NodeId DeleteMonitoredItemsResponse_Encoding_DefaultBinary = new NodeId(Objects.DeleteMonitoredItemsResponse_Encoding_DefaultBinary); /// /// The identifier for the CreateSubscriptionRequest_Encoding_DefaultBinary Object. /// public static readonly NodeId CreateSubscriptionRequest_Encoding_DefaultBinary = new NodeId(Objects.CreateSubscriptionRequest_Encoding_DefaultBinary); /// /// The identifier for the CreateSubscriptionResponse_Encoding_DefaultBinary Object. /// public static readonly NodeId CreateSubscriptionResponse_Encoding_DefaultBinary = new NodeId(Objects.CreateSubscriptionResponse_Encoding_DefaultBinary); /// /// The identifier for the ModifySubscriptionRequest_Encoding_DefaultBinary Object. /// public static readonly NodeId ModifySubscriptionRequest_Encoding_DefaultBinary = new NodeId(Objects.ModifySubscriptionRequest_Encoding_DefaultBinary); /// /// The identifier for the ModifySubscriptionResponse_Encoding_DefaultBinary Object. /// public static readonly NodeId ModifySubscriptionResponse_Encoding_DefaultBinary = new NodeId(Objects.ModifySubscriptionResponse_Encoding_DefaultBinary); /// /// The identifier for the SetPublishingModeRequest_Encoding_DefaultBinary Object. /// public static readonly NodeId SetPublishingModeRequest_Encoding_DefaultBinary = new NodeId(Objects.SetPublishingModeRequest_Encoding_DefaultBinary); /// /// The identifier for the SetPublishingModeResponse_Encoding_DefaultBinary Object. /// public static readonly NodeId SetPublishingModeResponse_Encoding_DefaultBinary = new NodeId(Objects.SetPublishingModeResponse_Encoding_DefaultBinary); /// /// The identifier for the NotificationMessage_Encoding_DefaultBinary Object. /// public static readonly NodeId NotificationMessage_Encoding_DefaultBinary = new NodeId(Objects.NotificationMessage_Encoding_DefaultBinary); /// /// The identifier for the NotificationData_Encoding_DefaultBinary Object. /// public static readonly NodeId NotificationData_Encoding_DefaultBinary = new NodeId(Objects.NotificationData_Encoding_DefaultBinary); /// /// The identifier for the DataChangeNotification_Encoding_DefaultBinary Object. /// public static readonly NodeId DataChangeNotification_Encoding_DefaultBinary = new NodeId(Objects.DataChangeNotification_Encoding_DefaultBinary); /// /// The identifier for the MonitoredItemNotification_Encoding_DefaultBinary Object. /// public static readonly NodeId MonitoredItemNotification_Encoding_DefaultBinary = new NodeId(Objects.MonitoredItemNotification_Encoding_DefaultBinary); /// /// The identifier for the EventNotificationList_Encoding_DefaultBinary Object. /// public static readonly NodeId EventNotificationList_Encoding_DefaultBinary = new NodeId(Objects.EventNotificationList_Encoding_DefaultBinary); /// /// The identifier for the EventFieldList_Encoding_DefaultBinary Object. /// public static readonly NodeId EventFieldList_Encoding_DefaultBinary = new NodeId(Objects.EventFieldList_Encoding_DefaultBinary); /// /// The identifier for the HistoryEventFieldList_Encoding_DefaultBinary Object. /// public static readonly NodeId HistoryEventFieldList_Encoding_DefaultBinary = new NodeId(Objects.HistoryEventFieldList_Encoding_DefaultBinary); /// /// The identifier for the StatusChangeNotification_Encoding_DefaultBinary Object. /// public static readonly NodeId StatusChangeNotification_Encoding_DefaultBinary = new NodeId(Objects.StatusChangeNotification_Encoding_DefaultBinary); /// /// The identifier for the SubscriptionAcknowledgement_Encoding_DefaultBinary Object. /// public static readonly NodeId SubscriptionAcknowledgement_Encoding_DefaultBinary = new NodeId(Objects.SubscriptionAcknowledgement_Encoding_DefaultBinary); /// /// The identifier for the PublishRequest_Encoding_DefaultBinary Object. /// public static readonly NodeId PublishRequest_Encoding_DefaultBinary = new NodeId(Objects.PublishRequest_Encoding_DefaultBinary); /// /// The identifier for the PublishResponse_Encoding_DefaultBinary Object. /// public static readonly NodeId PublishResponse_Encoding_DefaultBinary = new NodeId(Objects.PublishResponse_Encoding_DefaultBinary); /// /// The identifier for the RepublishRequest_Encoding_DefaultBinary Object. /// public static readonly NodeId RepublishRequest_Encoding_DefaultBinary = new NodeId(Objects.RepublishRequest_Encoding_DefaultBinary); /// /// The identifier for the RepublishResponse_Encoding_DefaultBinary Object. /// public static readonly NodeId RepublishResponse_Encoding_DefaultBinary = new NodeId(Objects.RepublishResponse_Encoding_DefaultBinary); /// /// The identifier for the TransferResult_Encoding_DefaultBinary Object. /// public static readonly NodeId TransferResult_Encoding_DefaultBinary = new NodeId(Objects.TransferResult_Encoding_DefaultBinary); /// /// The identifier for the TransferSubscriptionsRequest_Encoding_DefaultBinary Object. /// public static readonly NodeId TransferSubscriptionsRequest_Encoding_DefaultBinary = new NodeId(Objects.TransferSubscriptionsRequest_Encoding_DefaultBinary); /// /// The identifier for the TransferSubscriptionsResponse_Encoding_DefaultBinary Object. /// public static readonly NodeId TransferSubscriptionsResponse_Encoding_DefaultBinary = new NodeId(Objects.TransferSubscriptionsResponse_Encoding_DefaultBinary); /// /// The identifier for the DeleteSubscriptionsRequest_Encoding_DefaultBinary Object. /// public static readonly NodeId DeleteSubscriptionsRequest_Encoding_DefaultBinary = new NodeId(Objects.DeleteSubscriptionsRequest_Encoding_DefaultBinary); /// /// The identifier for the DeleteSubscriptionsResponse_Encoding_DefaultBinary Object. /// public static readonly NodeId DeleteSubscriptionsResponse_Encoding_DefaultBinary = new NodeId(Objects.DeleteSubscriptionsResponse_Encoding_DefaultBinary); /// /// The identifier for the ScalarTestType_Encoding_DefaultBinary Object. /// public static readonly NodeId ScalarTestType_Encoding_DefaultBinary = new NodeId(Objects.ScalarTestType_Encoding_DefaultBinary); /// /// The identifier for the ArrayTestType_Encoding_DefaultBinary Object. /// public static readonly NodeId ArrayTestType_Encoding_DefaultBinary = new NodeId(Objects.ArrayTestType_Encoding_DefaultBinary); /// /// The identifier for the CompositeTestType_Encoding_DefaultBinary Object. /// public static readonly NodeId CompositeTestType_Encoding_DefaultBinary = new NodeId(Objects.CompositeTestType_Encoding_DefaultBinary); /// /// The identifier for the TestStackRequest_Encoding_DefaultBinary Object. /// public static readonly NodeId TestStackRequest_Encoding_DefaultBinary = new NodeId(Objects.TestStackRequest_Encoding_DefaultBinary); /// /// The identifier for the TestStackResponse_Encoding_DefaultBinary Object. /// public static readonly NodeId TestStackResponse_Encoding_DefaultBinary = new NodeId(Objects.TestStackResponse_Encoding_DefaultBinary); /// /// The identifier for the TestStackExRequest_Encoding_DefaultBinary Object. /// public static readonly NodeId TestStackExRequest_Encoding_DefaultBinary = new NodeId(Objects.TestStackExRequest_Encoding_DefaultBinary); /// /// The identifier for the TestStackExResponse_Encoding_DefaultBinary Object. /// public static readonly NodeId TestStackExResponse_Encoding_DefaultBinary = new NodeId(Objects.TestStackExResponse_Encoding_DefaultBinary); /// /// The identifier for the BuildInfo_Encoding_DefaultBinary Object. /// public static readonly NodeId BuildInfo_Encoding_DefaultBinary = new NodeId(Objects.BuildInfo_Encoding_DefaultBinary); /// /// The identifier for the RedundantServerDataType_Encoding_DefaultBinary Object. /// public static readonly NodeId RedundantServerDataType_Encoding_DefaultBinary = new NodeId(Objects.RedundantServerDataType_Encoding_DefaultBinary); /// /// The identifier for the EndpointUrlListDataType_Encoding_DefaultBinary Object. /// public static readonly NodeId EndpointUrlListDataType_Encoding_DefaultBinary = new NodeId(Objects.EndpointUrlListDataType_Encoding_DefaultBinary); /// /// The identifier for the NetworkGroupDataType_Encoding_DefaultBinary Object. /// public static readonly NodeId NetworkGroupDataType_Encoding_DefaultBinary = new NodeId(Objects.NetworkGroupDataType_Encoding_DefaultBinary); /// /// The identifier for the SamplingIntervalDiagnosticsDataType_Encoding_DefaultBinary Object. /// public static readonly NodeId SamplingIntervalDiagnosticsDataType_Encoding_DefaultBinary = new NodeId(Objects.SamplingIntervalDiagnosticsDataType_Encoding_DefaultBinary); /// /// The identifier for the ServerDiagnosticsSummaryDataType_Encoding_DefaultBinary Object. /// public static readonly NodeId ServerDiagnosticsSummaryDataType_Encoding_DefaultBinary = new NodeId(Objects.ServerDiagnosticsSummaryDataType_Encoding_DefaultBinary); /// /// The identifier for the ServerStatusDataType_Encoding_DefaultBinary Object. /// public static readonly NodeId ServerStatusDataType_Encoding_DefaultBinary = new NodeId(Objects.ServerStatusDataType_Encoding_DefaultBinary); /// /// The identifier for the SessionDiagnosticsDataType_Encoding_DefaultBinary Object. /// public static readonly NodeId SessionDiagnosticsDataType_Encoding_DefaultBinary = new NodeId(Objects.SessionDiagnosticsDataType_Encoding_DefaultBinary); /// /// The identifier for the SessionSecurityDiagnosticsDataType_Encoding_DefaultBinary Object. /// public static readonly NodeId SessionSecurityDiagnosticsDataType_Encoding_DefaultBinary = new NodeId(Objects.SessionSecurityDiagnosticsDataType_Encoding_DefaultBinary); /// /// The identifier for the ServiceCounterDataType_Encoding_DefaultBinary Object. /// public static readonly NodeId ServiceCounterDataType_Encoding_DefaultBinary = new NodeId(Objects.ServiceCounterDataType_Encoding_DefaultBinary); /// /// The identifier for the StatusResult_Encoding_DefaultBinary Object. /// public static readonly NodeId StatusResult_Encoding_DefaultBinary = new NodeId(Objects.StatusResult_Encoding_DefaultBinary); /// /// The identifier for the SubscriptionDiagnosticsDataType_Encoding_DefaultBinary Object. /// public static readonly NodeId SubscriptionDiagnosticsDataType_Encoding_DefaultBinary = new NodeId(Objects.SubscriptionDiagnosticsDataType_Encoding_DefaultBinary); /// /// The identifier for the ModelChangeStructureDataType_Encoding_DefaultBinary Object. /// public static readonly NodeId ModelChangeStructureDataType_Encoding_DefaultBinary = new NodeId(Objects.ModelChangeStructureDataType_Encoding_DefaultBinary); /// /// The identifier for the SemanticChangeStructureDataType_Encoding_DefaultBinary Object. /// public static readonly NodeId SemanticChangeStructureDataType_Encoding_DefaultBinary = new NodeId(Objects.SemanticChangeStructureDataType_Encoding_DefaultBinary); /// /// The identifier for the Range_Encoding_DefaultBinary Object. /// public static readonly NodeId Range_Encoding_DefaultBinary = new NodeId(Objects.Range_Encoding_DefaultBinary); /// /// The identifier for the EUInformation_Encoding_DefaultBinary Object. /// public static readonly NodeId EUInformation_Encoding_DefaultBinary = new NodeId(Objects.EUInformation_Encoding_DefaultBinary); /// /// The identifier for the ComplexNumberType_Encoding_DefaultBinary Object. /// public static readonly NodeId ComplexNumberType_Encoding_DefaultBinary = new NodeId(Objects.ComplexNumberType_Encoding_DefaultBinary); /// /// The identifier for the DoubleComplexNumberType_Encoding_DefaultBinary Object. /// public static readonly NodeId DoubleComplexNumberType_Encoding_DefaultBinary = new NodeId(Objects.DoubleComplexNumberType_Encoding_DefaultBinary); /// /// The identifier for the AxisInformation_Encoding_DefaultBinary Object. /// public static readonly NodeId AxisInformation_Encoding_DefaultBinary = new NodeId(Objects.AxisInformation_Encoding_DefaultBinary); /// /// The identifier for the XVType_Encoding_DefaultBinary Object. /// public static readonly NodeId XVType_Encoding_DefaultBinary = new NodeId(Objects.XVType_Encoding_DefaultBinary); /// /// The identifier for the ProgramDiagnosticDataType_Encoding_DefaultBinary Object. /// public static readonly NodeId ProgramDiagnosticDataType_Encoding_DefaultBinary = new NodeId(Objects.ProgramDiagnosticDataType_Encoding_DefaultBinary); /// /// The identifier for the Annotation_Encoding_DefaultBinary Object. /// public static readonly NodeId Annotation_Encoding_DefaultBinary = new NodeId(Objects.Annotation_Encoding_DefaultBinary); } #endregion #region ObjectType Node Identifiers /// /// A class that declares constants for all ObjectTypes in the Model Design. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class ObjectTypeIds { /// /// The identifier for the BaseObjectType ObjectType. /// public static readonly NodeId BaseObjectType = new NodeId(ObjectTypes.BaseObjectType); /// /// The identifier for the FolderType ObjectType. /// public static readonly NodeId FolderType = new NodeId(ObjectTypes.FolderType); /// /// The identifier for the DataTypeSystemType ObjectType. /// public static readonly NodeId DataTypeSystemType = new NodeId(ObjectTypes.DataTypeSystemType); /// /// The identifier for the DataTypeEncodingType ObjectType. /// public static readonly NodeId DataTypeEncodingType = new NodeId(ObjectTypes.DataTypeEncodingType); /// /// The identifier for the ModellingRuleType ObjectType. /// public static readonly NodeId ModellingRuleType = new NodeId(ObjectTypes.ModellingRuleType); /// /// The identifier for the ServerType ObjectType. /// public static readonly NodeId ServerType = new NodeId(ObjectTypes.ServerType); /// /// The identifier for the ServerCapabilitiesType ObjectType. /// public static readonly NodeId ServerCapabilitiesType = new NodeId(ObjectTypes.ServerCapabilitiesType); /// /// The identifier for the ServerDiagnosticsType ObjectType. /// public static readonly NodeId ServerDiagnosticsType = new NodeId(ObjectTypes.ServerDiagnosticsType); /// /// The identifier for the SessionsDiagnosticsSummaryType ObjectType. /// public static readonly NodeId SessionsDiagnosticsSummaryType = new NodeId(ObjectTypes.SessionsDiagnosticsSummaryType); /// /// The identifier for the SessionDiagnosticsObjectType ObjectType. /// public static readonly NodeId SessionDiagnosticsObjectType = new NodeId(ObjectTypes.SessionDiagnosticsObjectType); /// /// The identifier for the VendorServerInfoType ObjectType. /// public static readonly NodeId VendorServerInfoType = new NodeId(ObjectTypes.VendorServerInfoType); /// /// The identifier for the ServerRedundancyType ObjectType. /// public static readonly NodeId ServerRedundancyType = new NodeId(ObjectTypes.ServerRedundancyType); /// /// The identifier for the TransparentRedundancyType ObjectType. /// public static readonly NodeId TransparentRedundancyType = new NodeId(ObjectTypes.TransparentRedundancyType); /// /// The identifier for the NonTransparentRedundancyType ObjectType. /// public static readonly NodeId NonTransparentRedundancyType = new NodeId(ObjectTypes.NonTransparentRedundancyType); /// /// The identifier for the NonTransparentNetworkRedundancyType ObjectType. /// public static readonly NodeId NonTransparentNetworkRedundancyType = new NodeId(ObjectTypes.NonTransparentNetworkRedundancyType); /// /// The identifier for the OperationLimitsType ObjectType. /// public static readonly NodeId OperationLimitsType = new NodeId(ObjectTypes.OperationLimitsType); /// /// The identifier for the FileType ObjectType. /// public static readonly NodeId FileType = new NodeId(ObjectTypes.FileType); /// /// The identifier for the AddressSpaceFileType ObjectType. /// public static readonly NodeId AddressSpaceFileType = new NodeId(ObjectTypes.AddressSpaceFileType); /// /// The identifier for the NamespaceMetadataType ObjectType. /// public static readonly NodeId NamespaceMetadataType = new NodeId(ObjectTypes.NamespaceMetadataType); /// /// The identifier for the NamespacesType ObjectType. /// public static readonly NodeId NamespacesType = new NodeId(ObjectTypes.NamespacesType); /// /// The identifier for the BaseEventType ObjectType. /// public static readonly NodeId BaseEventType = new NodeId(ObjectTypes.BaseEventType); /// /// The identifier for the AuditEventType ObjectType. /// public static readonly NodeId AuditEventType = new NodeId(ObjectTypes.AuditEventType); /// /// The identifier for the AuditSecurityEventType ObjectType. /// public static readonly NodeId AuditSecurityEventType = new NodeId(ObjectTypes.AuditSecurityEventType); /// /// The identifier for the AuditChannelEventType ObjectType. /// public static readonly NodeId AuditChannelEventType = new NodeId(ObjectTypes.AuditChannelEventType); /// /// The identifier for the AuditOpenSecureChannelEventType ObjectType. /// public static readonly NodeId AuditOpenSecureChannelEventType = new NodeId(ObjectTypes.AuditOpenSecureChannelEventType); /// /// The identifier for the AuditSessionEventType ObjectType. /// public static readonly NodeId AuditSessionEventType = new NodeId(ObjectTypes.AuditSessionEventType); /// /// The identifier for the AuditCreateSessionEventType ObjectType. /// public static readonly NodeId AuditCreateSessionEventType = new NodeId(ObjectTypes.AuditCreateSessionEventType); /// /// The identifier for the AuditUrlMismatchEventType ObjectType. /// public static readonly NodeId AuditUrlMismatchEventType = new NodeId(ObjectTypes.AuditUrlMismatchEventType); /// /// The identifier for the AuditActivateSessionEventType ObjectType. /// public static readonly NodeId AuditActivateSessionEventType = new NodeId(ObjectTypes.AuditActivateSessionEventType); /// /// The identifier for the AuditCancelEventType ObjectType. /// public static readonly NodeId AuditCancelEventType = new NodeId(ObjectTypes.AuditCancelEventType); /// /// The identifier for the AuditCertificateEventType ObjectType. /// public static readonly NodeId AuditCertificateEventType = new NodeId(ObjectTypes.AuditCertificateEventType); /// /// The identifier for the AuditCertificateDataMismatchEventType ObjectType. /// public static readonly NodeId AuditCertificateDataMismatchEventType = new NodeId(ObjectTypes.AuditCertificateDataMismatchEventType); /// /// The identifier for the AuditCertificateExpiredEventType ObjectType. /// public static readonly NodeId AuditCertificateExpiredEventType = new NodeId(ObjectTypes.AuditCertificateExpiredEventType); /// /// The identifier for the AuditCertificateInvalidEventType ObjectType. /// public static readonly NodeId AuditCertificateInvalidEventType = new NodeId(ObjectTypes.AuditCertificateInvalidEventType); /// /// The identifier for the AuditCertificateUntrustedEventType ObjectType. /// public static readonly NodeId AuditCertificateUntrustedEventType = new NodeId(ObjectTypes.AuditCertificateUntrustedEventType); /// /// The identifier for the AuditCertificateRevokedEventType ObjectType. /// public static readonly NodeId AuditCertificateRevokedEventType = new NodeId(ObjectTypes.AuditCertificateRevokedEventType); /// /// The identifier for the AuditCertificateMismatchEventType ObjectType. /// public static readonly NodeId AuditCertificateMismatchEventType = new NodeId(ObjectTypes.AuditCertificateMismatchEventType); /// /// The identifier for the AuditNodeManagementEventType ObjectType. /// public static readonly NodeId AuditNodeManagementEventType = new NodeId(ObjectTypes.AuditNodeManagementEventType); /// /// The identifier for the AuditAddNodesEventType ObjectType. /// public static readonly NodeId AuditAddNodesEventType = new NodeId(ObjectTypes.AuditAddNodesEventType); /// /// The identifier for the AuditDeleteNodesEventType ObjectType. /// public static readonly NodeId AuditDeleteNodesEventType = new NodeId(ObjectTypes.AuditDeleteNodesEventType); /// /// The identifier for the AuditAddReferencesEventType ObjectType. /// public static readonly NodeId AuditAddReferencesEventType = new NodeId(ObjectTypes.AuditAddReferencesEventType); /// /// The identifier for the AuditDeleteReferencesEventType ObjectType. /// public static readonly NodeId AuditDeleteReferencesEventType = new NodeId(ObjectTypes.AuditDeleteReferencesEventType); /// /// The identifier for the AuditUpdateEventType ObjectType. /// public static readonly NodeId AuditUpdateEventType = new NodeId(ObjectTypes.AuditUpdateEventType); /// /// The identifier for the AuditWriteUpdateEventType ObjectType. /// public static readonly NodeId AuditWriteUpdateEventType = new NodeId(ObjectTypes.AuditWriteUpdateEventType); /// /// The identifier for the AuditHistoryUpdateEventType ObjectType. /// public static readonly NodeId AuditHistoryUpdateEventType = new NodeId(ObjectTypes.AuditHistoryUpdateEventType); /// /// The identifier for the AuditUpdateMethodEventType ObjectType. /// public static readonly NodeId AuditUpdateMethodEventType = new NodeId(ObjectTypes.AuditUpdateMethodEventType); /// /// The identifier for the SystemEventType ObjectType. /// public static readonly NodeId SystemEventType = new NodeId(ObjectTypes.SystemEventType); /// /// The identifier for the DeviceFailureEventType ObjectType. /// public static readonly NodeId DeviceFailureEventType = new NodeId(ObjectTypes.DeviceFailureEventType); /// /// The identifier for the SystemStatusChangeEventType ObjectType. /// public static readonly NodeId SystemStatusChangeEventType = new NodeId(ObjectTypes.SystemStatusChangeEventType); /// /// The identifier for the BaseModelChangeEventType ObjectType. /// public static readonly NodeId BaseModelChangeEventType = new NodeId(ObjectTypes.BaseModelChangeEventType); /// /// The identifier for the GeneralModelChangeEventType ObjectType. /// public static readonly NodeId GeneralModelChangeEventType = new NodeId(ObjectTypes.GeneralModelChangeEventType); /// /// The identifier for the SemanticChangeEventType ObjectType. /// public static readonly NodeId SemanticChangeEventType = new NodeId(ObjectTypes.SemanticChangeEventType); /// /// The identifier for the EventQueueOverflowEventType ObjectType. /// public static readonly NodeId EventQueueOverflowEventType = new NodeId(ObjectTypes.EventQueueOverflowEventType); /// /// The identifier for the ProgressEventType ObjectType. /// public static readonly NodeId ProgressEventType = new NodeId(ObjectTypes.ProgressEventType); /// /// The identifier for the AggregateFunctionType ObjectType. /// public static readonly NodeId AggregateFunctionType = new NodeId(ObjectTypes.AggregateFunctionType); /// /// The identifier for the StateMachineType ObjectType. /// public static readonly NodeId StateMachineType = new NodeId(ObjectTypes.StateMachineType); /// /// The identifier for the FiniteStateMachineType ObjectType. /// public static readonly NodeId FiniteStateMachineType = new NodeId(ObjectTypes.FiniteStateMachineType); /// /// The identifier for the StateType ObjectType. /// public static readonly NodeId StateType = new NodeId(ObjectTypes.StateType); /// /// The identifier for the InitialStateType ObjectType. /// public static readonly NodeId InitialStateType = new NodeId(ObjectTypes.InitialStateType); /// /// The identifier for the TransitionType ObjectType. /// public static readonly NodeId TransitionType = new NodeId(ObjectTypes.TransitionType); /// /// The identifier for the TransitionEventType ObjectType. /// public static readonly NodeId TransitionEventType = new NodeId(ObjectTypes.TransitionEventType); /// /// The identifier for the AuditUpdateStateEventType ObjectType. /// public static readonly NodeId AuditUpdateStateEventType = new NodeId(ObjectTypes.AuditUpdateStateEventType); /// /// The identifier for the ConditionType ObjectType. /// public static readonly NodeId ConditionType = new NodeId(ObjectTypes.ConditionType); /// /// The identifier for the DialogConditionType ObjectType. /// public static readonly NodeId DialogConditionType = new NodeId(ObjectTypes.DialogConditionType); /// /// The identifier for the AcknowledgeableConditionType ObjectType. /// public static readonly NodeId AcknowledgeableConditionType = new NodeId(ObjectTypes.AcknowledgeableConditionType); /// /// The identifier for the AlarmConditionType ObjectType. /// public static readonly NodeId AlarmConditionType = new NodeId(ObjectTypes.AlarmConditionType); /// /// The identifier for the ShelvedStateMachineType ObjectType. /// public static readonly NodeId ShelvedStateMachineType = new NodeId(ObjectTypes.ShelvedStateMachineType); /// /// The identifier for the LimitAlarmType ObjectType. /// public static readonly NodeId LimitAlarmType = new NodeId(ObjectTypes.LimitAlarmType); /// /// The identifier for the ExclusiveLimitStateMachineType ObjectType. /// public static readonly NodeId ExclusiveLimitStateMachineType = new NodeId(ObjectTypes.ExclusiveLimitStateMachineType); /// /// The identifier for the ExclusiveLimitAlarmType ObjectType. /// public static readonly NodeId ExclusiveLimitAlarmType = new NodeId(ObjectTypes.ExclusiveLimitAlarmType); /// /// The identifier for the NonExclusiveLimitAlarmType ObjectType. /// public static readonly NodeId NonExclusiveLimitAlarmType = new NodeId(ObjectTypes.NonExclusiveLimitAlarmType); /// /// The identifier for the NonExclusiveLevelAlarmType ObjectType. /// public static readonly NodeId NonExclusiveLevelAlarmType = new NodeId(ObjectTypes.NonExclusiveLevelAlarmType); /// /// The identifier for the ExclusiveLevelAlarmType ObjectType. /// public static readonly NodeId ExclusiveLevelAlarmType = new NodeId(ObjectTypes.ExclusiveLevelAlarmType); /// /// The identifier for the NonExclusiveDeviationAlarmType ObjectType. /// public static readonly NodeId NonExclusiveDeviationAlarmType = new NodeId(ObjectTypes.NonExclusiveDeviationAlarmType); /// /// The identifier for the ExclusiveDeviationAlarmType ObjectType. /// public static readonly NodeId ExclusiveDeviationAlarmType = new NodeId(ObjectTypes.ExclusiveDeviationAlarmType); /// /// The identifier for the NonExclusiveRateOfChangeAlarmType ObjectType. /// public static readonly NodeId NonExclusiveRateOfChangeAlarmType = new NodeId(ObjectTypes.NonExclusiveRateOfChangeAlarmType); /// /// The identifier for the ExclusiveRateOfChangeAlarmType ObjectType. /// public static readonly NodeId ExclusiveRateOfChangeAlarmType = new NodeId(ObjectTypes.ExclusiveRateOfChangeAlarmType); /// /// The identifier for the DiscreteAlarmType ObjectType. /// public static readonly NodeId DiscreteAlarmType = new NodeId(ObjectTypes.DiscreteAlarmType); /// /// The identifier for the OffNormalAlarmType ObjectType. /// public static readonly NodeId OffNormalAlarmType = new NodeId(ObjectTypes.OffNormalAlarmType); /// /// The identifier for the SystemOffNormalAlarmType ObjectType. /// public static readonly NodeId SystemOffNormalAlarmType = new NodeId(ObjectTypes.SystemOffNormalAlarmType); /// /// The identifier for the TripAlarmType ObjectType. /// public static readonly NodeId TripAlarmType = new NodeId(ObjectTypes.TripAlarmType); /// /// The identifier for the BaseConditionClassType ObjectType. /// public static readonly NodeId BaseConditionClassType = new NodeId(ObjectTypes.BaseConditionClassType); /// /// The identifier for the ProcessConditionClassType ObjectType. /// public static readonly NodeId ProcessConditionClassType = new NodeId(ObjectTypes.ProcessConditionClassType); /// /// The identifier for the MaintenanceConditionClassType ObjectType. /// public static readonly NodeId MaintenanceConditionClassType = new NodeId(ObjectTypes.MaintenanceConditionClassType); /// /// The identifier for the SystemConditionClassType ObjectType. /// public static readonly NodeId SystemConditionClassType = new NodeId(ObjectTypes.SystemConditionClassType); /// /// The identifier for the AuditConditionEventType ObjectType. /// public static readonly NodeId AuditConditionEventType = new NodeId(ObjectTypes.AuditConditionEventType); /// /// The identifier for the AuditConditionEnableEventType ObjectType. /// public static readonly NodeId AuditConditionEnableEventType = new NodeId(ObjectTypes.AuditConditionEnableEventType); /// /// The identifier for the AuditConditionCommentEventType ObjectType. /// public static readonly NodeId AuditConditionCommentEventType = new NodeId(ObjectTypes.AuditConditionCommentEventType); /// /// The identifier for the AuditConditionRespondEventType ObjectType. /// public static readonly NodeId AuditConditionRespondEventType = new NodeId(ObjectTypes.AuditConditionRespondEventType); /// /// The identifier for the AuditConditionAcknowledgeEventType ObjectType. /// public static readonly NodeId AuditConditionAcknowledgeEventType = new NodeId(ObjectTypes.AuditConditionAcknowledgeEventType); /// /// The identifier for the AuditConditionConfirmEventType ObjectType. /// public static readonly NodeId AuditConditionConfirmEventType = new NodeId(ObjectTypes.AuditConditionConfirmEventType); /// /// The identifier for the AuditConditionShelvingEventType ObjectType. /// public static readonly NodeId AuditConditionShelvingEventType = new NodeId(ObjectTypes.AuditConditionShelvingEventType); /// /// The identifier for the RefreshStartEventType ObjectType. /// public static readonly NodeId RefreshStartEventType = new NodeId(ObjectTypes.RefreshStartEventType); /// /// The identifier for the RefreshEndEventType ObjectType. /// public static readonly NodeId RefreshEndEventType = new NodeId(ObjectTypes.RefreshEndEventType); /// /// The identifier for the RefreshRequiredEventType ObjectType. /// public static readonly NodeId RefreshRequiredEventType = new NodeId(ObjectTypes.RefreshRequiredEventType); /// /// The identifier for the ProgramStateMachineType ObjectType. /// public static readonly NodeId ProgramStateMachineType = new NodeId(ObjectTypes.ProgramStateMachineType); /// /// The identifier for the ProgramTransitionEventType ObjectType. /// public static readonly NodeId ProgramTransitionEventType = new NodeId(ObjectTypes.ProgramTransitionEventType); /// /// The identifier for the AuditProgramTransitionEventType ObjectType. /// public static readonly NodeId AuditProgramTransitionEventType = new NodeId(ObjectTypes.AuditProgramTransitionEventType); /// /// The identifier for the ProgramTransitionAuditEventType ObjectType. /// public static readonly NodeId ProgramTransitionAuditEventType = new NodeId(ObjectTypes.ProgramTransitionAuditEventType); /// /// The identifier for the HistoricalDataConfigurationType ObjectType. /// public static readonly NodeId HistoricalDataConfigurationType = new NodeId(ObjectTypes.HistoricalDataConfigurationType); /// /// The identifier for the HistoryServerCapabilitiesType ObjectType. /// public static readonly NodeId HistoryServerCapabilitiesType = new NodeId(ObjectTypes.HistoryServerCapabilitiesType); /// /// The identifier for the AuditHistoryEventUpdateEventType ObjectType. /// public static readonly NodeId AuditHistoryEventUpdateEventType = new NodeId(ObjectTypes.AuditHistoryEventUpdateEventType); /// /// The identifier for the AuditHistoryValueUpdateEventType ObjectType. /// public static readonly NodeId AuditHistoryValueUpdateEventType = new NodeId(ObjectTypes.AuditHistoryValueUpdateEventType); /// /// The identifier for the AuditHistoryDeleteEventType ObjectType. /// public static readonly NodeId AuditHistoryDeleteEventType = new NodeId(ObjectTypes.AuditHistoryDeleteEventType); /// /// The identifier for the AuditHistoryRawModifyDeleteEventType ObjectType. /// public static readonly NodeId AuditHistoryRawModifyDeleteEventType = new NodeId(ObjectTypes.AuditHistoryRawModifyDeleteEventType); /// /// The identifier for the AuditHistoryAtTimeDeleteEventType ObjectType. /// public static readonly NodeId AuditHistoryAtTimeDeleteEventType = new NodeId(ObjectTypes.AuditHistoryAtTimeDeleteEventType); /// /// The identifier for the AuditHistoryEventDeleteEventType ObjectType. /// public static readonly NodeId AuditHistoryEventDeleteEventType = new NodeId(ObjectTypes.AuditHistoryEventDeleteEventType); /// /// The identifier for the AggregateConfigurationType ObjectType. /// public static readonly NodeId AggregateConfigurationType = new NodeId(ObjectTypes.AggregateConfigurationType); /// /// The identifier for the LockType ObjectType. /// public static readonly NodeId LockType = new NodeId(ObjectTypes.LockType); } #endregion #region ReferenceType Node Identifiers /// /// A class that declares constants for all ReferenceTypes in the Model Design. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class ReferenceTypeIds { /// /// The identifier for the References ReferenceType. /// public static readonly NodeId References = new NodeId(ReferenceTypes.References); /// /// The identifier for the NonHierarchicalReferences ReferenceType. /// public static readonly NodeId NonHierarchicalReferences = new NodeId(ReferenceTypes.NonHierarchicalReferences); /// /// The identifier for the HierarchicalReferences ReferenceType. /// public static readonly NodeId HierarchicalReferences = new NodeId(ReferenceTypes.HierarchicalReferences); /// /// The identifier for the HasChild ReferenceType. /// public static readonly NodeId HasChild = new NodeId(ReferenceTypes.HasChild); /// /// The identifier for the Organizes ReferenceType. /// public static readonly NodeId Organizes = new NodeId(ReferenceTypes.Organizes); /// /// The identifier for the HasEventSource ReferenceType. /// public static readonly NodeId HasEventSource = new NodeId(ReferenceTypes.HasEventSource); /// /// The identifier for the HasModellingRule ReferenceType. /// public static readonly NodeId HasModellingRule = new NodeId(ReferenceTypes.HasModellingRule); /// /// The identifier for the HasEncoding ReferenceType. /// public static readonly NodeId HasEncoding = new NodeId(ReferenceTypes.HasEncoding); /// /// The identifier for the HasDescription ReferenceType. /// public static readonly NodeId HasDescription = new NodeId(ReferenceTypes.HasDescription); /// /// The identifier for the HasTypeDefinition ReferenceType. /// public static readonly NodeId HasTypeDefinition = new NodeId(ReferenceTypes.HasTypeDefinition); /// /// The identifier for the GeneratesEvent ReferenceType. /// public static readonly NodeId GeneratesEvent = new NodeId(ReferenceTypes.GeneratesEvent); /// /// The identifier for the AlwaysGeneratesEvent ReferenceType. /// public static readonly NodeId AlwaysGeneratesEvent = new NodeId(ReferenceTypes.AlwaysGeneratesEvent); /// /// The identifier for the Aggregates ReferenceType. /// public static readonly NodeId Aggregates = new NodeId(ReferenceTypes.Aggregates); /// /// The identifier for the HasSubtype ReferenceType. /// public static readonly NodeId HasSubtype = new NodeId(ReferenceTypes.HasSubtype); /// /// The identifier for the HasProperty ReferenceType. /// public static readonly NodeId HasProperty = new NodeId(ReferenceTypes.HasProperty); /// /// The identifier for the HasComponent ReferenceType. /// public static readonly NodeId HasComponent = new NodeId(ReferenceTypes.HasComponent); /// /// The identifier for the HasNotifier ReferenceType. /// public static readonly NodeId HasNotifier = new NodeId(ReferenceTypes.HasNotifier); /// /// The identifier for the HasOrderedComponent ReferenceType. /// public static readonly NodeId HasOrderedComponent = new NodeId(ReferenceTypes.HasOrderedComponent); /// /// The identifier for the FromState ReferenceType. /// public static readonly NodeId FromState = new NodeId(ReferenceTypes.FromState); /// /// The identifier for the ToState ReferenceType. /// public static readonly NodeId ToState = new NodeId(ReferenceTypes.ToState); /// /// The identifier for the HasCause ReferenceType. /// public static readonly NodeId HasCause = new NodeId(ReferenceTypes.HasCause); /// /// The identifier for the HasEffect ReferenceType. /// public static readonly NodeId HasEffect = new NodeId(ReferenceTypes.HasEffect); /// /// The identifier for the HasSubStateMachine ReferenceType. /// public static readonly NodeId HasSubStateMachine = new NodeId(ReferenceTypes.HasSubStateMachine); /// /// The identifier for the HasHistoricalConfiguration ReferenceType. /// public static readonly NodeId HasHistoricalConfiguration = new NodeId(ReferenceTypes.HasHistoricalConfiguration); /// /// The identifier for the HasTrueSubState ReferenceType. /// public static readonly NodeId HasTrueSubState = new NodeId(ReferenceTypes.HasTrueSubState); /// /// The identifier for the HasFalseSubState ReferenceType. /// public static readonly NodeId HasFalseSubState = new NodeId(ReferenceTypes.HasFalseSubState); /// /// The identifier for the HasCondition ReferenceType. /// public static readonly NodeId HasCondition = new NodeId(ReferenceTypes.HasCondition); } #endregion #region Variable Node Identifiers /// /// A class that declares constants for all Variables in the Model Design. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class VariableIds { /// /// The identifier for the DataTypeDescriptionType_DataTypeVersion Variable. /// public static readonly NodeId DataTypeDescriptionType_DataTypeVersion = new NodeId(Variables.DataTypeDescriptionType_DataTypeVersion); /// /// The identifier for the DataTypeDescriptionType_DictionaryFragment Variable. /// public static readonly NodeId DataTypeDescriptionType_DictionaryFragment = new NodeId(Variables.DataTypeDescriptionType_DictionaryFragment); /// /// The identifier for the DataTypeDictionaryType_DataTypeVersion Variable. /// public static readonly NodeId DataTypeDictionaryType_DataTypeVersion = new NodeId(Variables.DataTypeDictionaryType_DataTypeVersion); /// /// The identifier for the DataTypeDictionaryType_NamespaceUri Variable. /// public static readonly NodeId DataTypeDictionaryType_NamespaceUri = new NodeId(Variables.DataTypeDictionaryType_NamespaceUri); /// /// The identifier for the NamingRuleType_EnumValues Variable. /// public static readonly NodeId NamingRuleType_EnumValues = new NodeId(Variables.NamingRuleType_EnumValues); /// /// The identifier for the ModellingRuleType_NamingRule Variable. /// public static readonly NodeId ModellingRuleType_NamingRule = new NodeId(Variables.ModellingRuleType_NamingRule); /// /// The identifier for the ModellingRule_Mandatory_NamingRule Variable. /// public static readonly NodeId ModellingRule_Mandatory_NamingRule = new NodeId(Variables.ModellingRule_Mandatory_NamingRule); /// /// The identifier for the ModellingRule_Optional_NamingRule Variable. /// public static readonly NodeId ModellingRule_Optional_NamingRule = new NodeId(Variables.ModellingRule_Optional_NamingRule); /// /// The identifier for the ModellingRule_ExposesItsArray_NamingRule Variable. /// public static readonly NodeId ModellingRule_ExposesItsArray_NamingRule = new NodeId(Variables.ModellingRule_ExposesItsArray_NamingRule); /// /// The identifier for the ModellingRule_MandatoryShared_NamingRule Variable. /// public static readonly NodeId ModellingRule_MandatoryShared_NamingRule = new NodeId(Variables.ModellingRule_MandatoryShared_NamingRule); /// /// The identifier for the ModellingRule_OptionalPlaceholder_NamingRule Variable. /// public static readonly NodeId ModellingRule_OptionalPlaceholder_NamingRule = new NodeId(Variables.ModellingRule_OptionalPlaceholder_NamingRule); /// /// The identifier for the ModellingRule_MandatoryPlaceholder_NamingRule Variable. /// public static readonly NodeId ModellingRule_MandatoryPlaceholder_NamingRule = new NodeId(Variables.ModellingRule_MandatoryPlaceholder_NamingRule); /// /// The identifier for the NodeVersion Variable. /// public static readonly NodeId NodeVersion = new NodeId(Variables.NodeVersion); /// /// The identifier for the ViewVersion Variable. /// public static readonly NodeId ViewVersion = new NodeId(Variables.ViewVersion); /// /// The identifier for the Icon Variable. /// public static readonly NodeId Icon = new NodeId(Variables.Icon); /// /// The identifier for the LocalTime Variable. /// public static readonly NodeId LocalTime = new NodeId(Variables.LocalTime); /// /// The identifier for the AllowNulls Variable. /// public static readonly NodeId AllowNulls = new NodeId(Variables.AllowNulls); /// /// The identifier for the ValueAsText Variable. /// public static readonly NodeId ValueAsText = new NodeId(Variables.ValueAsText); /// /// The identifier for the MaxStringLength Variable. /// public static readonly NodeId MaxStringLength = new NodeId(Variables.MaxStringLength); /// /// The identifier for the MaxArrayLength Variable. /// public static readonly NodeId MaxArrayLength = new NodeId(Variables.MaxArrayLength); /// /// The identifier for the EngineeringUnits Variable. /// public static readonly NodeId EngineeringUnits = new NodeId(Variables.EngineeringUnits); /// /// The identifier for the EnumStrings Variable. /// public static readonly NodeId EnumStrings = new NodeId(Variables.EnumStrings); /// /// The identifier for the EnumValues Variable. /// public static readonly NodeId EnumValues = new NodeId(Variables.EnumValues); /// /// The identifier for the InputArguments Variable. /// public static readonly NodeId InputArguments = new NodeId(Variables.InputArguments); /// /// The identifier for the OutputArguments Variable. /// public static readonly NodeId OutputArguments = new NodeId(Variables.OutputArguments); /// /// The identifier for the ServerType_ServerArray Variable. /// public static readonly NodeId ServerType_ServerArray = new NodeId(Variables.ServerType_ServerArray); /// /// The identifier for the ServerType_NamespaceArray Variable. /// public static readonly NodeId ServerType_NamespaceArray = new NodeId(Variables.ServerType_NamespaceArray); /// /// The identifier for the ServerType_ServerStatus Variable. /// public static readonly NodeId ServerType_ServerStatus = new NodeId(Variables.ServerType_ServerStatus); /// /// The identifier for the ServerType_ServerStatus_StartTime Variable. /// public static readonly NodeId ServerType_ServerStatus_StartTime = new NodeId(Variables.ServerType_ServerStatus_StartTime); /// /// The identifier for the ServerType_ServerStatus_CurrentTime Variable. /// public static readonly NodeId ServerType_ServerStatus_CurrentTime = new NodeId(Variables.ServerType_ServerStatus_CurrentTime); /// /// The identifier for the ServerType_ServerStatus_State Variable. /// public static readonly NodeId ServerType_ServerStatus_State = new NodeId(Variables.ServerType_ServerStatus_State); /// /// The identifier for the ServerType_ServerStatus_BuildInfo Variable. /// public static readonly NodeId ServerType_ServerStatus_BuildInfo = new NodeId(Variables.ServerType_ServerStatus_BuildInfo); /// /// The identifier for the ServerType_ServerStatus_BuildInfo_ProductUri Variable. /// public static readonly NodeId ServerType_ServerStatus_BuildInfo_ProductUri = new NodeId(Variables.ServerType_ServerStatus_BuildInfo_ProductUri); /// /// The identifier for the ServerType_ServerStatus_BuildInfo_ManufacturerName Variable. /// public static readonly NodeId ServerType_ServerStatus_BuildInfo_ManufacturerName = new NodeId(Variables.ServerType_ServerStatus_BuildInfo_ManufacturerName); /// /// The identifier for the ServerType_ServerStatus_BuildInfo_ProductName Variable. /// public static readonly NodeId ServerType_ServerStatus_BuildInfo_ProductName = new NodeId(Variables.ServerType_ServerStatus_BuildInfo_ProductName); /// /// The identifier for the ServerType_ServerStatus_BuildInfo_SoftwareVersion Variable. /// public static readonly NodeId ServerType_ServerStatus_BuildInfo_SoftwareVersion = new NodeId(Variables.ServerType_ServerStatus_BuildInfo_SoftwareVersion); /// /// The identifier for the ServerType_ServerStatus_BuildInfo_BuildNumber Variable. /// public static readonly NodeId ServerType_ServerStatus_BuildInfo_BuildNumber = new NodeId(Variables.ServerType_ServerStatus_BuildInfo_BuildNumber); /// /// The identifier for the ServerType_ServerStatus_BuildInfo_BuildDate Variable. /// public static readonly NodeId ServerType_ServerStatus_BuildInfo_BuildDate = new NodeId(Variables.ServerType_ServerStatus_BuildInfo_BuildDate); /// /// The identifier for the ServerType_ServerStatus_SecondsTillShutdown Variable. /// public static readonly NodeId ServerType_ServerStatus_SecondsTillShutdown = new NodeId(Variables.ServerType_ServerStatus_SecondsTillShutdown); /// /// The identifier for the ServerType_ServerStatus_ShutdownReason Variable. /// public static readonly NodeId ServerType_ServerStatus_ShutdownReason = new NodeId(Variables.ServerType_ServerStatus_ShutdownReason); /// /// The identifier for the ServerType_ServiceLevel Variable. /// public static readonly NodeId ServerType_ServiceLevel = new NodeId(Variables.ServerType_ServiceLevel); /// /// The identifier for the ServerType_Auditing Variable. /// public static readonly NodeId ServerType_Auditing = new NodeId(Variables.ServerType_Auditing); /// /// The identifier for the ServerType_ServerCapabilities_ServerProfileArray Variable. /// public static readonly NodeId ServerType_ServerCapabilities_ServerProfileArray = new NodeId(Variables.ServerType_ServerCapabilities_ServerProfileArray); /// /// The identifier for the ServerType_ServerCapabilities_LocaleIdArray Variable. /// public static readonly NodeId ServerType_ServerCapabilities_LocaleIdArray = new NodeId(Variables.ServerType_ServerCapabilities_LocaleIdArray); /// /// The identifier for the ServerType_ServerCapabilities_MinSupportedSampleRate Variable. /// public static readonly NodeId ServerType_ServerCapabilities_MinSupportedSampleRate = new NodeId(Variables.ServerType_ServerCapabilities_MinSupportedSampleRate); /// /// The identifier for the ServerType_ServerCapabilities_MaxBrowseContinuationPoints Variable. /// public static readonly NodeId ServerType_ServerCapabilities_MaxBrowseContinuationPoints = new NodeId(Variables.ServerType_ServerCapabilities_MaxBrowseContinuationPoints); /// /// The identifier for the ServerType_ServerCapabilities_MaxQueryContinuationPoints Variable. /// public static readonly NodeId ServerType_ServerCapabilities_MaxQueryContinuationPoints = new NodeId(Variables.ServerType_ServerCapabilities_MaxQueryContinuationPoints); /// /// The identifier for the ServerType_ServerCapabilities_MaxHistoryContinuationPoints Variable. /// public static readonly NodeId ServerType_ServerCapabilities_MaxHistoryContinuationPoints = new NodeId(Variables.ServerType_ServerCapabilities_MaxHistoryContinuationPoints); /// /// The identifier for the ServerType_ServerCapabilities_SoftwareCertificates Variable. /// public static readonly NodeId ServerType_ServerCapabilities_SoftwareCertificates = new NodeId(Variables.ServerType_ServerCapabilities_SoftwareCertificates); /// /// The identifier for the ServerType_ServerDiagnostics_ServerDiagnosticsSummary Variable. /// public static readonly NodeId ServerType_ServerDiagnostics_ServerDiagnosticsSummary = new NodeId(Variables.ServerType_ServerDiagnostics_ServerDiagnosticsSummary); /// /// The identifier for the ServerType_ServerDiagnostics_ServerDiagnosticsSummary_ServerViewCount Variable. /// public static readonly NodeId ServerType_ServerDiagnostics_ServerDiagnosticsSummary_ServerViewCount = new NodeId(Variables.ServerType_ServerDiagnostics_ServerDiagnosticsSummary_ServerViewCount); /// /// The identifier for the ServerType_ServerDiagnostics_ServerDiagnosticsSummary_CurrentSessionCount Variable. /// public static readonly NodeId ServerType_ServerDiagnostics_ServerDiagnosticsSummary_CurrentSessionCount = new NodeId(Variables.ServerType_ServerDiagnostics_ServerDiagnosticsSummary_CurrentSessionCount); /// /// The identifier for the ServerType_ServerDiagnostics_ServerDiagnosticsSummary_CumulatedSessionCount Variable. /// public static readonly NodeId ServerType_ServerDiagnostics_ServerDiagnosticsSummary_CumulatedSessionCount = new NodeId(Variables.ServerType_ServerDiagnostics_ServerDiagnosticsSummary_CumulatedSessionCount); /// /// The identifier for the ServerType_ServerDiagnostics_ServerDiagnosticsSummary_SecurityRejectedSessionCount Variable. /// public static readonly NodeId ServerType_ServerDiagnostics_ServerDiagnosticsSummary_SecurityRejectedSessionCount = new NodeId(Variables.ServerType_ServerDiagnostics_ServerDiagnosticsSummary_SecurityRejectedSessionCount); /// /// The identifier for the ServerType_ServerDiagnostics_ServerDiagnosticsSummary_RejectedSessionCount Variable. /// public static readonly NodeId ServerType_ServerDiagnostics_ServerDiagnosticsSummary_RejectedSessionCount = new NodeId(Variables.ServerType_ServerDiagnostics_ServerDiagnosticsSummary_RejectedSessionCount); /// /// The identifier for the ServerType_ServerDiagnostics_ServerDiagnosticsSummary_SessionTimeoutCount Variable. /// public static readonly NodeId ServerType_ServerDiagnostics_ServerDiagnosticsSummary_SessionTimeoutCount = new NodeId(Variables.ServerType_ServerDiagnostics_ServerDiagnosticsSummary_SessionTimeoutCount); /// /// The identifier for the ServerType_ServerDiagnostics_ServerDiagnosticsSummary_SessionAbortCount Variable. /// public static readonly NodeId ServerType_ServerDiagnostics_ServerDiagnosticsSummary_SessionAbortCount = new NodeId(Variables.ServerType_ServerDiagnostics_ServerDiagnosticsSummary_SessionAbortCount); /// /// The identifier for the ServerType_ServerDiagnostics_ServerDiagnosticsSummary_PublishingIntervalCount Variable. /// public static readonly NodeId ServerType_ServerDiagnostics_ServerDiagnosticsSummary_PublishingIntervalCount = new NodeId(Variables.ServerType_ServerDiagnostics_ServerDiagnosticsSummary_PublishingIntervalCount); /// /// The identifier for the ServerType_ServerDiagnostics_ServerDiagnosticsSummary_CurrentSubscriptionCount Variable. /// public static readonly NodeId ServerType_ServerDiagnostics_ServerDiagnosticsSummary_CurrentSubscriptionCount = new NodeId(Variables.ServerType_ServerDiagnostics_ServerDiagnosticsSummary_CurrentSubscriptionCount); /// /// The identifier for the ServerType_ServerDiagnostics_ServerDiagnosticsSummary_CumulatedSubscriptionCount Variable. /// public static readonly NodeId ServerType_ServerDiagnostics_ServerDiagnosticsSummary_CumulatedSubscriptionCount = new NodeId(Variables.ServerType_ServerDiagnostics_ServerDiagnosticsSummary_CumulatedSubscriptionCount); /// /// The identifier for the ServerType_ServerDiagnostics_ServerDiagnosticsSummary_SecurityRejectedRequestsCount Variable. /// public static readonly NodeId ServerType_ServerDiagnostics_ServerDiagnosticsSummary_SecurityRejectedRequestsCount = new NodeId(Variables.ServerType_ServerDiagnostics_ServerDiagnosticsSummary_SecurityRejectedRequestsCount); /// /// The identifier for the ServerType_ServerDiagnostics_ServerDiagnosticsSummary_RejectedRequestsCount Variable. /// public static readonly NodeId ServerType_ServerDiagnostics_ServerDiagnosticsSummary_RejectedRequestsCount = new NodeId(Variables.ServerType_ServerDiagnostics_ServerDiagnosticsSummary_RejectedRequestsCount); /// /// The identifier for the ServerType_ServerDiagnostics_SubscriptionDiagnosticsArray Variable. /// public static readonly NodeId ServerType_ServerDiagnostics_SubscriptionDiagnosticsArray = new NodeId(Variables.ServerType_ServerDiagnostics_SubscriptionDiagnosticsArray); /// /// The identifier for the ServerType_ServerDiagnostics_SessionsDiagnosticsSummary_SessionDiagnosticsArray Variable. /// public static readonly NodeId ServerType_ServerDiagnostics_SessionsDiagnosticsSummary_SessionDiagnosticsArray = new NodeId(Variables.ServerType_ServerDiagnostics_SessionsDiagnosticsSummary_SessionDiagnosticsArray); /// /// The identifier for the ServerType_ServerDiagnostics_SessionsDiagnosticsSummary_SessionSecurityDiagnosticsArray Variable. /// public static readonly NodeId ServerType_ServerDiagnostics_SessionsDiagnosticsSummary_SessionSecurityDiagnosticsArray = new NodeId(Variables.ServerType_ServerDiagnostics_SessionsDiagnosticsSummary_SessionSecurityDiagnosticsArray); /// /// The identifier for the ServerType_ServerDiagnostics_EnabledFlag Variable. /// public static readonly NodeId ServerType_ServerDiagnostics_EnabledFlag = new NodeId(Variables.ServerType_ServerDiagnostics_EnabledFlag); /// /// The identifier for the ServerType_ServerRedundancy_RedundancySupport Variable. /// public static readonly NodeId ServerType_ServerRedundancy_RedundancySupport = new NodeId(Variables.ServerType_ServerRedundancy_RedundancySupport); /// /// The identifier for the ServerType_GetMonitoredItems_InputArguments Variable. /// public static readonly NodeId ServerType_GetMonitoredItems_InputArguments = new NodeId(Variables.ServerType_GetMonitoredItems_InputArguments); /// /// The identifier for the ServerType_GetMonitoredItems_OutputArguments Variable. /// public static readonly NodeId ServerType_GetMonitoredItems_OutputArguments = new NodeId(Variables.ServerType_GetMonitoredItems_OutputArguments); /// /// The identifier for the ServerCapabilitiesType_ServerProfileArray Variable. /// public static readonly NodeId ServerCapabilitiesType_ServerProfileArray = new NodeId(Variables.ServerCapabilitiesType_ServerProfileArray); /// /// The identifier for the ServerCapabilitiesType_LocaleIdArray Variable. /// public static readonly NodeId ServerCapabilitiesType_LocaleIdArray = new NodeId(Variables.ServerCapabilitiesType_LocaleIdArray); /// /// The identifier for the ServerCapabilitiesType_MinSupportedSampleRate Variable. /// public static readonly NodeId ServerCapabilitiesType_MinSupportedSampleRate = new NodeId(Variables.ServerCapabilitiesType_MinSupportedSampleRate); /// /// The identifier for the ServerCapabilitiesType_MaxBrowseContinuationPoints Variable. /// public static readonly NodeId ServerCapabilitiesType_MaxBrowseContinuationPoints = new NodeId(Variables.ServerCapabilitiesType_MaxBrowseContinuationPoints); /// /// The identifier for the ServerCapabilitiesType_MaxQueryContinuationPoints Variable. /// public static readonly NodeId ServerCapabilitiesType_MaxQueryContinuationPoints = new NodeId(Variables.ServerCapabilitiesType_MaxQueryContinuationPoints); /// /// The identifier for the ServerCapabilitiesType_MaxHistoryContinuationPoints Variable. /// public static readonly NodeId ServerCapabilitiesType_MaxHistoryContinuationPoints = new NodeId(Variables.ServerCapabilitiesType_MaxHistoryContinuationPoints); /// /// The identifier for the ServerCapabilitiesType_SoftwareCertificates Variable. /// public static readonly NodeId ServerCapabilitiesType_SoftwareCertificates = new NodeId(Variables.ServerCapabilitiesType_SoftwareCertificates); /// /// The identifier for the ServerCapabilitiesType_MaxArrayLength Variable. /// public static readonly NodeId ServerCapabilitiesType_MaxArrayLength = new NodeId(Variables.ServerCapabilitiesType_MaxArrayLength); /// /// The identifier for the ServerCapabilitiesType_MaxStringLength Variable. /// public static readonly NodeId ServerCapabilitiesType_MaxStringLength = new NodeId(Variables.ServerCapabilitiesType_MaxStringLength); /// /// The identifier for the ServerCapabilitiesType_VendorCapability Variable. /// public static readonly NodeId ServerCapabilitiesType_VendorCapability = new NodeId(Variables.ServerCapabilitiesType_VendorCapability); /// /// The identifier for the ServerDiagnosticsType_ServerDiagnosticsSummary Variable. /// public static readonly NodeId ServerDiagnosticsType_ServerDiagnosticsSummary = new NodeId(Variables.ServerDiagnosticsType_ServerDiagnosticsSummary); /// /// The identifier for the ServerDiagnosticsType_ServerDiagnosticsSummary_ServerViewCount Variable. /// public static readonly NodeId ServerDiagnosticsType_ServerDiagnosticsSummary_ServerViewCount = new NodeId(Variables.ServerDiagnosticsType_ServerDiagnosticsSummary_ServerViewCount); /// /// The identifier for the ServerDiagnosticsType_ServerDiagnosticsSummary_CurrentSessionCount Variable. /// public static readonly NodeId ServerDiagnosticsType_ServerDiagnosticsSummary_CurrentSessionCount = new NodeId(Variables.ServerDiagnosticsType_ServerDiagnosticsSummary_CurrentSessionCount); /// /// The identifier for the ServerDiagnosticsType_ServerDiagnosticsSummary_CumulatedSessionCount Variable. /// public static readonly NodeId ServerDiagnosticsType_ServerDiagnosticsSummary_CumulatedSessionCount = new NodeId(Variables.ServerDiagnosticsType_ServerDiagnosticsSummary_CumulatedSessionCount); /// /// The identifier for the ServerDiagnosticsType_ServerDiagnosticsSummary_SecurityRejectedSessionCount Variable. /// public static readonly NodeId ServerDiagnosticsType_ServerDiagnosticsSummary_SecurityRejectedSessionCount = new NodeId(Variables.ServerDiagnosticsType_ServerDiagnosticsSummary_SecurityRejectedSessionCount); /// /// The identifier for the ServerDiagnosticsType_ServerDiagnosticsSummary_RejectedSessionCount Variable. /// public static readonly NodeId ServerDiagnosticsType_ServerDiagnosticsSummary_RejectedSessionCount = new NodeId(Variables.ServerDiagnosticsType_ServerDiagnosticsSummary_RejectedSessionCount); /// /// The identifier for the ServerDiagnosticsType_ServerDiagnosticsSummary_SessionTimeoutCount Variable. /// public static readonly NodeId ServerDiagnosticsType_ServerDiagnosticsSummary_SessionTimeoutCount = new NodeId(Variables.ServerDiagnosticsType_ServerDiagnosticsSummary_SessionTimeoutCount); /// /// The identifier for the ServerDiagnosticsType_ServerDiagnosticsSummary_SessionAbortCount Variable. /// public static readonly NodeId ServerDiagnosticsType_ServerDiagnosticsSummary_SessionAbortCount = new NodeId(Variables.ServerDiagnosticsType_ServerDiagnosticsSummary_SessionAbortCount); /// /// The identifier for the ServerDiagnosticsType_ServerDiagnosticsSummary_PublishingIntervalCount Variable. /// public static readonly NodeId ServerDiagnosticsType_ServerDiagnosticsSummary_PublishingIntervalCount = new NodeId(Variables.ServerDiagnosticsType_ServerDiagnosticsSummary_PublishingIntervalCount); /// /// The identifier for the ServerDiagnosticsType_ServerDiagnosticsSummary_CurrentSubscriptionCount Variable. /// public static readonly NodeId ServerDiagnosticsType_ServerDiagnosticsSummary_CurrentSubscriptionCount = new NodeId(Variables.ServerDiagnosticsType_ServerDiagnosticsSummary_CurrentSubscriptionCount); /// /// The identifier for the ServerDiagnosticsType_ServerDiagnosticsSummary_CumulatedSubscriptionCount Variable. /// public static readonly NodeId ServerDiagnosticsType_ServerDiagnosticsSummary_CumulatedSubscriptionCount = new NodeId(Variables.ServerDiagnosticsType_ServerDiagnosticsSummary_CumulatedSubscriptionCount); /// /// The identifier for the ServerDiagnosticsType_ServerDiagnosticsSummary_SecurityRejectedRequestsCount Variable. /// public static readonly NodeId ServerDiagnosticsType_ServerDiagnosticsSummary_SecurityRejectedRequestsCount = new NodeId(Variables.ServerDiagnosticsType_ServerDiagnosticsSummary_SecurityRejectedRequestsCount); /// /// The identifier for the ServerDiagnosticsType_ServerDiagnosticsSummary_RejectedRequestsCount Variable. /// public static readonly NodeId ServerDiagnosticsType_ServerDiagnosticsSummary_RejectedRequestsCount = new NodeId(Variables.ServerDiagnosticsType_ServerDiagnosticsSummary_RejectedRequestsCount); /// /// The identifier for the ServerDiagnosticsType_SamplingIntervalDiagnosticsArray Variable. /// public static readonly NodeId ServerDiagnosticsType_SamplingIntervalDiagnosticsArray = new NodeId(Variables.ServerDiagnosticsType_SamplingIntervalDiagnosticsArray); /// /// The identifier for the ServerDiagnosticsType_SubscriptionDiagnosticsArray Variable. /// public static readonly NodeId ServerDiagnosticsType_SubscriptionDiagnosticsArray = new NodeId(Variables.ServerDiagnosticsType_SubscriptionDiagnosticsArray); /// /// The identifier for the ServerDiagnosticsType_SessionsDiagnosticsSummary_SessionDiagnosticsArray Variable. /// public static readonly NodeId ServerDiagnosticsType_SessionsDiagnosticsSummary_SessionDiagnosticsArray = new NodeId(Variables.ServerDiagnosticsType_SessionsDiagnosticsSummary_SessionDiagnosticsArray); /// /// The identifier for the ServerDiagnosticsType_SessionsDiagnosticsSummary_SessionSecurityDiagnosticsArray Variable. /// public static readonly NodeId ServerDiagnosticsType_SessionsDiagnosticsSummary_SessionSecurityDiagnosticsArray = new NodeId(Variables.ServerDiagnosticsType_SessionsDiagnosticsSummary_SessionSecurityDiagnosticsArray); /// /// The identifier for the ServerDiagnosticsType_EnabledFlag Variable. /// public static readonly NodeId ServerDiagnosticsType_EnabledFlag = new NodeId(Variables.ServerDiagnosticsType_EnabledFlag); /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionDiagnosticsArray Variable. /// public static readonly NodeId SessionsDiagnosticsSummaryType_SessionDiagnosticsArray = new NodeId(Variables.SessionsDiagnosticsSummaryType_SessionDiagnosticsArray); /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionSecurityDiagnosticsArray Variable. /// public static readonly NodeId SessionsDiagnosticsSummaryType_SessionSecurityDiagnosticsArray = new NodeId(Variables.SessionsDiagnosticsSummaryType_SessionSecurityDiagnosticsArray); /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics Variable. /// public static readonly NodeId SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics = new NodeId(Variables.SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics); /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_SessionId Variable. /// public static readonly NodeId SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_SessionId = new NodeId(Variables.SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_SessionId); /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_SessionName Variable. /// public static readonly NodeId SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_SessionName = new NodeId(Variables.SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_SessionName); /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_ClientDescription Variable. /// public static readonly NodeId SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_ClientDescription = new NodeId(Variables.SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_ClientDescription); /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_ServerUri Variable. /// public static readonly NodeId SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_ServerUri = new NodeId(Variables.SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_ServerUri); /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_EndpointUrl Variable. /// public static readonly NodeId SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_EndpointUrl = new NodeId(Variables.SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_EndpointUrl); /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_LocaleIds Variable. /// public static readonly NodeId SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_LocaleIds = new NodeId(Variables.SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_LocaleIds); /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_ActualSessionTimeout Variable. /// public static readonly NodeId SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_ActualSessionTimeout = new NodeId(Variables.SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_ActualSessionTimeout); /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_MaxResponseMessageSize Variable. /// public static readonly NodeId SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_MaxResponseMessageSize = new NodeId(Variables.SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_MaxResponseMessageSize); /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_ClientConnectionTime Variable. /// public static readonly NodeId SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_ClientConnectionTime = new NodeId(Variables.SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_ClientConnectionTime); /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_ClientLastContactTime Variable. /// public static readonly NodeId SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_ClientLastContactTime = new NodeId(Variables.SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_ClientLastContactTime); /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_CurrentSubscriptionsCount Variable. /// public static readonly NodeId SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_CurrentSubscriptionsCount = new NodeId(Variables.SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_CurrentSubscriptionsCount); /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_CurrentMonitoredItemsCount Variable. /// public static readonly NodeId SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_CurrentMonitoredItemsCount = new NodeId(Variables.SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_CurrentMonitoredItemsCount); /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_CurrentPublishRequestsInQueue Variable. /// public static readonly NodeId SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_CurrentPublishRequestsInQueue = new NodeId(Variables.SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_CurrentPublishRequestsInQueue); /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_TotalRequestCount Variable. /// public static readonly NodeId SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_TotalRequestCount = new NodeId(Variables.SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_TotalRequestCount); /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_UnauthorizedRequestCount Variable. /// public static readonly NodeId SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_UnauthorizedRequestCount = new NodeId(Variables.SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_UnauthorizedRequestCount); /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_ReadCount Variable. /// public static readonly NodeId SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_ReadCount = new NodeId(Variables.SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_ReadCount); /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_HistoryReadCount Variable. /// public static readonly NodeId SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_HistoryReadCount = new NodeId(Variables.SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_HistoryReadCount); /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_WriteCount Variable. /// public static readonly NodeId SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_WriteCount = new NodeId(Variables.SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_WriteCount); /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_HistoryUpdateCount Variable. /// public static readonly NodeId SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_HistoryUpdateCount = new NodeId(Variables.SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_HistoryUpdateCount); /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_CallCount Variable. /// public static readonly NodeId SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_CallCount = new NodeId(Variables.SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_CallCount); /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_CreateMonitoredItemsCount Variable. /// public static readonly NodeId SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_CreateMonitoredItemsCount = new NodeId(Variables.SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_CreateMonitoredItemsCount); /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_ModifyMonitoredItemsCount Variable. /// public static readonly NodeId SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_ModifyMonitoredItemsCount = new NodeId(Variables.SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_ModifyMonitoredItemsCount); /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_SetMonitoringModeCount Variable. /// public static readonly NodeId SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_SetMonitoringModeCount = new NodeId(Variables.SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_SetMonitoringModeCount); /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_SetTriggeringCount Variable. /// public static readonly NodeId SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_SetTriggeringCount = new NodeId(Variables.SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_SetTriggeringCount); /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_DeleteMonitoredItemsCount Variable. /// public static readonly NodeId SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_DeleteMonitoredItemsCount = new NodeId(Variables.SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_DeleteMonitoredItemsCount); /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_CreateSubscriptionCount Variable. /// public static readonly NodeId SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_CreateSubscriptionCount = new NodeId(Variables.SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_CreateSubscriptionCount); /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_ModifySubscriptionCount Variable. /// public static readonly NodeId SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_ModifySubscriptionCount = new NodeId(Variables.SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_ModifySubscriptionCount); /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_SetPublishingModeCount Variable. /// public static readonly NodeId SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_SetPublishingModeCount = new NodeId(Variables.SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_SetPublishingModeCount); /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_PublishCount Variable. /// public static readonly NodeId SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_PublishCount = new NodeId(Variables.SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_PublishCount); /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_RepublishCount Variable. /// public static readonly NodeId SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_RepublishCount = new NodeId(Variables.SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_RepublishCount); /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_TransferSubscriptionsCount Variable. /// public static readonly NodeId SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_TransferSubscriptionsCount = new NodeId(Variables.SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_TransferSubscriptionsCount); /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_DeleteSubscriptionsCount Variable. /// public static readonly NodeId SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_DeleteSubscriptionsCount = new NodeId(Variables.SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_DeleteSubscriptionsCount); /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_AddNodesCount Variable. /// public static readonly NodeId SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_AddNodesCount = new NodeId(Variables.SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_AddNodesCount); /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_AddReferencesCount Variable. /// public static readonly NodeId SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_AddReferencesCount = new NodeId(Variables.SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_AddReferencesCount); /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_DeleteNodesCount Variable. /// public static readonly NodeId SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_DeleteNodesCount = new NodeId(Variables.SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_DeleteNodesCount); /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_DeleteReferencesCount Variable. /// public static readonly NodeId SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_DeleteReferencesCount = new NodeId(Variables.SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_DeleteReferencesCount); /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_BrowseCount Variable. /// public static readonly NodeId SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_BrowseCount = new NodeId(Variables.SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_BrowseCount); /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_BrowseNextCount Variable. /// public static readonly NodeId SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_BrowseNextCount = new NodeId(Variables.SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_BrowseNextCount); /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_TranslateBrowsePathsToNodeIdsCount Variable. /// public static readonly NodeId SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_TranslateBrowsePathsToNodeIdsCount = new NodeId(Variables.SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_TranslateBrowsePathsToNodeIdsCount); /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_QueryFirstCount Variable. /// public static readonly NodeId SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_QueryFirstCount = new NodeId(Variables.SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_QueryFirstCount); /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_QueryNextCount Variable. /// public static readonly NodeId SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_QueryNextCount = new NodeId(Variables.SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_QueryNextCount); /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_RegisterNodesCount Variable. /// public static readonly NodeId SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_RegisterNodesCount = new NodeId(Variables.SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_RegisterNodesCount); /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_UnregisterNodesCount Variable. /// public static readonly NodeId SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_UnregisterNodesCount = new NodeId(Variables.SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionDiagnostics_UnregisterNodesCount); /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionSecurityDiagnostics Variable. /// public static readonly NodeId SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionSecurityDiagnostics = new NodeId(Variables.SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionSecurityDiagnostics); /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionSecurityDiagnostics_SessionId Variable. /// public static readonly NodeId SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionSecurityDiagnostics_SessionId = new NodeId(Variables.SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionSecurityDiagnostics_SessionId); /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionSecurityDiagnostics_ClientUserIdOfSession Variable. /// public static readonly NodeId SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionSecurityDiagnostics_ClientUserIdOfSession = new NodeId(Variables.SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionSecurityDiagnostics_ClientUserIdOfSession); /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionSecurityDiagnostics_ClientUserIdHistory Variable. /// public static readonly NodeId SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionSecurityDiagnostics_ClientUserIdHistory = new NodeId(Variables.SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionSecurityDiagnostics_ClientUserIdHistory); /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionSecurityDiagnostics_AuthenticationMechanism Variable. /// public static readonly NodeId SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionSecurityDiagnostics_AuthenticationMechanism = new NodeId(Variables.SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionSecurityDiagnostics_AuthenticationMechanism); /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionSecurityDiagnostics_Encoding Variable. /// public static readonly NodeId SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionSecurityDiagnostics_Encoding = new NodeId(Variables.SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionSecurityDiagnostics_Encoding); /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionSecurityDiagnostics_TransportProtocol Variable. /// public static readonly NodeId SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionSecurityDiagnostics_TransportProtocol = new NodeId(Variables.SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionSecurityDiagnostics_TransportProtocol); /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionSecurityDiagnostics_SecurityMode Variable. /// public static readonly NodeId SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionSecurityDiagnostics_SecurityMode = new NodeId(Variables.SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionSecurityDiagnostics_SecurityMode); /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionSecurityDiagnostics_SecurityPolicyUri Variable. /// public static readonly NodeId SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionSecurityDiagnostics_SecurityPolicyUri = new NodeId(Variables.SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionSecurityDiagnostics_SecurityPolicyUri); /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionSecurityDiagnostics_ClientCertificate Variable. /// public static readonly NodeId SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionSecurityDiagnostics_ClientCertificate = new NodeId(Variables.SessionsDiagnosticsSummaryType_SessionPlaceholder_SessionSecurityDiagnostics_ClientCertificate); /// /// The identifier for the SessionsDiagnosticsSummaryType_SessionPlaceholder_SubscriptionDiagnosticsArray Variable. /// public static readonly NodeId SessionsDiagnosticsSummaryType_SessionPlaceholder_SubscriptionDiagnosticsArray = new NodeId(Variables.SessionsDiagnosticsSummaryType_SessionPlaceholder_SubscriptionDiagnosticsArray); /// /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics Variable. /// public static readonly NodeId SessionDiagnosticsObjectType_SessionDiagnostics = new NodeId(Variables.SessionDiagnosticsObjectType_SessionDiagnostics); /// /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_SessionId Variable. /// public static readonly NodeId SessionDiagnosticsObjectType_SessionDiagnostics_SessionId = new NodeId(Variables.SessionDiagnosticsObjectType_SessionDiagnostics_SessionId); /// /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_SessionName Variable. /// public static readonly NodeId SessionDiagnosticsObjectType_SessionDiagnostics_SessionName = new NodeId(Variables.SessionDiagnosticsObjectType_SessionDiagnostics_SessionName); /// /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_ClientDescription Variable. /// public static readonly NodeId SessionDiagnosticsObjectType_SessionDiagnostics_ClientDescription = new NodeId(Variables.SessionDiagnosticsObjectType_SessionDiagnostics_ClientDescription); /// /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_ServerUri Variable. /// public static readonly NodeId SessionDiagnosticsObjectType_SessionDiagnostics_ServerUri = new NodeId(Variables.SessionDiagnosticsObjectType_SessionDiagnostics_ServerUri); /// /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_EndpointUrl Variable. /// public static readonly NodeId SessionDiagnosticsObjectType_SessionDiagnostics_EndpointUrl = new NodeId(Variables.SessionDiagnosticsObjectType_SessionDiagnostics_EndpointUrl); /// /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_LocaleIds Variable. /// public static readonly NodeId SessionDiagnosticsObjectType_SessionDiagnostics_LocaleIds = new NodeId(Variables.SessionDiagnosticsObjectType_SessionDiagnostics_LocaleIds); /// /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_ActualSessionTimeout Variable. /// public static readonly NodeId SessionDiagnosticsObjectType_SessionDiagnostics_ActualSessionTimeout = new NodeId(Variables.SessionDiagnosticsObjectType_SessionDiagnostics_ActualSessionTimeout); /// /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_MaxResponseMessageSize Variable. /// public static readonly NodeId SessionDiagnosticsObjectType_SessionDiagnostics_MaxResponseMessageSize = new NodeId(Variables.SessionDiagnosticsObjectType_SessionDiagnostics_MaxResponseMessageSize); /// /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_ClientConnectionTime Variable. /// public static readonly NodeId SessionDiagnosticsObjectType_SessionDiagnostics_ClientConnectionTime = new NodeId(Variables.SessionDiagnosticsObjectType_SessionDiagnostics_ClientConnectionTime); /// /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_ClientLastContactTime Variable. /// public static readonly NodeId SessionDiagnosticsObjectType_SessionDiagnostics_ClientLastContactTime = new NodeId(Variables.SessionDiagnosticsObjectType_SessionDiagnostics_ClientLastContactTime); /// /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_CurrentSubscriptionsCount Variable. /// public static readonly NodeId SessionDiagnosticsObjectType_SessionDiagnostics_CurrentSubscriptionsCount = new NodeId(Variables.SessionDiagnosticsObjectType_SessionDiagnostics_CurrentSubscriptionsCount); /// /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_CurrentMonitoredItemsCount Variable. /// public static readonly NodeId SessionDiagnosticsObjectType_SessionDiagnostics_CurrentMonitoredItemsCount = new NodeId(Variables.SessionDiagnosticsObjectType_SessionDiagnostics_CurrentMonitoredItemsCount); /// /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_CurrentPublishRequestsInQueue Variable. /// public static readonly NodeId SessionDiagnosticsObjectType_SessionDiagnostics_CurrentPublishRequestsInQueue = new NodeId(Variables.SessionDiagnosticsObjectType_SessionDiagnostics_CurrentPublishRequestsInQueue); /// /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_TotalRequestCount Variable. /// public static readonly NodeId SessionDiagnosticsObjectType_SessionDiagnostics_TotalRequestCount = new NodeId(Variables.SessionDiagnosticsObjectType_SessionDiagnostics_TotalRequestCount); /// /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_UnauthorizedRequestCount Variable. /// public static readonly NodeId SessionDiagnosticsObjectType_SessionDiagnostics_UnauthorizedRequestCount = new NodeId(Variables.SessionDiagnosticsObjectType_SessionDiagnostics_UnauthorizedRequestCount); /// /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_ReadCount Variable. /// public static readonly NodeId SessionDiagnosticsObjectType_SessionDiagnostics_ReadCount = new NodeId(Variables.SessionDiagnosticsObjectType_SessionDiagnostics_ReadCount); /// /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_HistoryReadCount Variable. /// public static readonly NodeId SessionDiagnosticsObjectType_SessionDiagnostics_HistoryReadCount = new NodeId(Variables.SessionDiagnosticsObjectType_SessionDiagnostics_HistoryReadCount); /// /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_WriteCount Variable. /// public static readonly NodeId SessionDiagnosticsObjectType_SessionDiagnostics_WriteCount = new NodeId(Variables.SessionDiagnosticsObjectType_SessionDiagnostics_WriteCount); /// /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_HistoryUpdateCount Variable. /// public static readonly NodeId SessionDiagnosticsObjectType_SessionDiagnostics_HistoryUpdateCount = new NodeId(Variables.SessionDiagnosticsObjectType_SessionDiagnostics_HistoryUpdateCount); /// /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_CallCount Variable. /// public static readonly NodeId SessionDiagnosticsObjectType_SessionDiagnostics_CallCount = new NodeId(Variables.SessionDiagnosticsObjectType_SessionDiagnostics_CallCount); /// /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_CreateMonitoredItemsCount Variable. /// public static readonly NodeId SessionDiagnosticsObjectType_SessionDiagnostics_CreateMonitoredItemsCount = new NodeId(Variables.SessionDiagnosticsObjectType_SessionDiagnostics_CreateMonitoredItemsCount); /// /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_ModifyMonitoredItemsCount Variable. /// public static readonly NodeId SessionDiagnosticsObjectType_SessionDiagnostics_ModifyMonitoredItemsCount = new NodeId(Variables.SessionDiagnosticsObjectType_SessionDiagnostics_ModifyMonitoredItemsCount); /// /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_SetMonitoringModeCount Variable. /// public static readonly NodeId SessionDiagnosticsObjectType_SessionDiagnostics_SetMonitoringModeCount = new NodeId(Variables.SessionDiagnosticsObjectType_SessionDiagnostics_SetMonitoringModeCount); /// /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_SetTriggeringCount Variable. /// public static readonly NodeId SessionDiagnosticsObjectType_SessionDiagnostics_SetTriggeringCount = new NodeId(Variables.SessionDiagnosticsObjectType_SessionDiagnostics_SetTriggeringCount); /// /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_DeleteMonitoredItemsCount Variable. /// public static readonly NodeId SessionDiagnosticsObjectType_SessionDiagnostics_DeleteMonitoredItemsCount = new NodeId(Variables.SessionDiagnosticsObjectType_SessionDiagnostics_DeleteMonitoredItemsCount); /// /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_CreateSubscriptionCount Variable. /// public static readonly NodeId SessionDiagnosticsObjectType_SessionDiagnostics_CreateSubscriptionCount = new NodeId(Variables.SessionDiagnosticsObjectType_SessionDiagnostics_CreateSubscriptionCount); /// /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_ModifySubscriptionCount Variable. /// public static readonly NodeId SessionDiagnosticsObjectType_SessionDiagnostics_ModifySubscriptionCount = new NodeId(Variables.SessionDiagnosticsObjectType_SessionDiagnostics_ModifySubscriptionCount); /// /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_SetPublishingModeCount Variable. /// public static readonly NodeId SessionDiagnosticsObjectType_SessionDiagnostics_SetPublishingModeCount = new NodeId(Variables.SessionDiagnosticsObjectType_SessionDiagnostics_SetPublishingModeCount); /// /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_PublishCount Variable. /// public static readonly NodeId SessionDiagnosticsObjectType_SessionDiagnostics_PublishCount = new NodeId(Variables.SessionDiagnosticsObjectType_SessionDiagnostics_PublishCount); /// /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_RepublishCount Variable. /// public static readonly NodeId SessionDiagnosticsObjectType_SessionDiagnostics_RepublishCount = new NodeId(Variables.SessionDiagnosticsObjectType_SessionDiagnostics_RepublishCount); /// /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_TransferSubscriptionsCount Variable. /// public static readonly NodeId SessionDiagnosticsObjectType_SessionDiagnostics_TransferSubscriptionsCount = new NodeId(Variables.SessionDiagnosticsObjectType_SessionDiagnostics_TransferSubscriptionsCount); /// /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_DeleteSubscriptionsCount Variable. /// public static readonly NodeId SessionDiagnosticsObjectType_SessionDiagnostics_DeleteSubscriptionsCount = new NodeId(Variables.SessionDiagnosticsObjectType_SessionDiagnostics_DeleteSubscriptionsCount); /// /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_AddNodesCount Variable. /// public static readonly NodeId SessionDiagnosticsObjectType_SessionDiagnostics_AddNodesCount = new NodeId(Variables.SessionDiagnosticsObjectType_SessionDiagnostics_AddNodesCount); /// /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_AddReferencesCount Variable. /// public static readonly NodeId SessionDiagnosticsObjectType_SessionDiagnostics_AddReferencesCount = new NodeId(Variables.SessionDiagnosticsObjectType_SessionDiagnostics_AddReferencesCount); /// /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_DeleteNodesCount Variable. /// public static readonly NodeId SessionDiagnosticsObjectType_SessionDiagnostics_DeleteNodesCount = new NodeId(Variables.SessionDiagnosticsObjectType_SessionDiagnostics_DeleteNodesCount); /// /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_DeleteReferencesCount Variable. /// public static readonly NodeId SessionDiagnosticsObjectType_SessionDiagnostics_DeleteReferencesCount = new NodeId(Variables.SessionDiagnosticsObjectType_SessionDiagnostics_DeleteReferencesCount); /// /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_BrowseCount Variable. /// public static readonly NodeId SessionDiagnosticsObjectType_SessionDiagnostics_BrowseCount = new NodeId(Variables.SessionDiagnosticsObjectType_SessionDiagnostics_BrowseCount); /// /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_BrowseNextCount Variable. /// public static readonly NodeId SessionDiagnosticsObjectType_SessionDiagnostics_BrowseNextCount = new NodeId(Variables.SessionDiagnosticsObjectType_SessionDiagnostics_BrowseNextCount); /// /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_TranslateBrowsePathsToNodeIdsCount Variable. /// public static readonly NodeId SessionDiagnosticsObjectType_SessionDiagnostics_TranslateBrowsePathsToNodeIdsCount = new NodeId(Variables.SessionDiagnosticsObjectType_SessionDiagnostics_TranslateBrowsePathsToNodeIdsCount); /// /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_QueryFirstCount Variable. /// public static readonly NodeId SessionDiagnosticsObjectType_SessionDiagnostics_QueryFirstCount = new NodeId(Variables.SessionDiagnosticsObjectType_SessionDiagnostics_QueryFirstCount); /// /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_QueryNextCount Variable. /// public static readonly NodeId SessionDiagnosticsObjectType_SessionDiagnostics_QueryNextCount = new NodeId(Variables.SessionDiagnosticsObjectType_SessionDiagnostics_QueryNextCount); /// /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_RegisterNodesCount Variable. /// public static readonly NodeId SessionDiagnosticsObjectType_SessionDiagnostics_RegisterNodesCount = new NodeId(Variables.SessionDiagnosticsObjectType_SessionDiagnostics_RegisterNodesCount); /// /// The identifier for the SessionDiagnosticsObjectType_SessionDiagnostics_UnregisterNodesCount Variable. /// public static readonly NodeId SessionDiagnosticsObjectType_SessionDiagnostics_UnregisterNodesCount = new NodeId(Variables.SessionDiagnosticsObjectType_SessionDiagnostics_UnregisterNodesCount); /// /// The identifier for the SessionDiagnosticsObjectType_SessionSecurityDiagnostics Variable. /// public static readonly NodeId SessionDiagnosticsObjectType_SessionSecurityDiagnostics = new NodeId(Variables.SessionDiagnosticsObjectType_SessionSecurityDiagnostics); /// /// The identifier for the SessionDiagnosticsObjectType_SessionSecurityDiagnostics_SessionId Variable. /// public static readonly NodeId SessionDiagnosticsObjectType_SessionSecurityDiagnostics_SessionId = new NodeId(Variables.SessionDiagnosticsObjectType_SessionSecurityDiagnostics_SessionId); /// /// The identifier for the SessionDiagnosticsObjectType_SessionSecurityDiagnostics_ClientUserIdOfSession Variable. /// public static readonly NodeId SessionDiagnosticsObjectType_SessionSecurityDiagnostics_ClientUserIdOfSession = new NodeId(Variables.SessionDiagnosticsObjectType_SessionSecurityDiagnostics_ClientUserIdOfSession); /// /// The identifier for the SessionDiagnosticsObjectType_SessionSecurityDiagnostics_ClientUserIdHistory Variable. /// public static readonly NodeId SessionDiagnosticsObjectType_SessionSecurityDiagnostics_ClientUserIdHistory = new NodeId(Variables.SessionDiagnosticsObjectType_SessionSecurityDiagnostics_ClientUserIdHistory); /// /// The identifier for the SessionDiagnosticsObjectType_SessionSecurityDiagnostics_AuthenticationMechanism Variable. /// public static readonly NodeId SessionDiagnosticsObjectType_SessionSecurityDiagnostics_AuthenticationMechanism = new NodeId(Variables.SessionDiagnosticsObjectType_SessionSecurityDiagnostics_AuthenticationMechanism); /// /// The identifier for the SessionDiagnosticsObjectType_SessionSecurityDiagnostics_Encoding Variable. /// public static readonly NodeId SessionDiagnosticsObjectType_SessionSecurityDiagnostics_Encoding = new NodeId(Variables.SessionDiagnosticsObjectType_SessionSecurityDiagnostics_Encoding); /// /// The identifier for the SessionDiagnosticsObjectType_SessionSecurityDiagnostics_TransportProtocol Variable. /// public static readonly NodeId SessionDiagnosticsObjectType_SessionSecurityDiagnostics_TransportProtocol = new NodeId(Variables.SessionDiagnosticsObjectType_SessionSecurityDiagnostics_TransportProtocol); /// /// The identifier for the SessionDiagnosticsObjectType_SessionSecurityDiagnostics_SecurityMode Variable. /// public static readonly NodeId SessionDiagnosticsObjectType_SessionSecurityDiagnostics_SecurityMode = new NodeId(Variables.SessionDiagnosticsObjectType_SessionSecurityDiagnostics_SecurityMode); /// /// The identifier for the SessionDiagnosticsObjectType_SessionSecurityDiagnostics_SecurityPolicyUri Variable. /// public static readonly NodeId SessionDiagnosticsObjectType_SessionSecurityDiagnostics_SecurityPolicyUri = new NodeId(Variables.SessionDiagnosticsObjectType_SessionSecurityDiagnostics_SecurityPolicyUri); /// /// The identifier for the SessionDiagnosticsObjectType_SessionSecurityDiagnostics_ClientCertificate Variable. /// public static readonly NodeId SessionDiagnosticsObjectType_SessionSecurityDiagnostics_ClientCertificate = new NodeId(Variables.SessionDiagnosticsObjectType_SessionSecurityDiagnostics_ClientCertificate); /// /// The identifier for the SessionDiagnosticsObjectType_SubscriptionDiagnosticsArray Variable. /// public static readonly NodeId SessionDiagnosticsObjectType_SubscriptionDiagnosticsArray = new NodeId(Variables.SessionDiagnosticsObjectType_SubscriptionDiagnosticsArray); /// /// The identifier for the ServerRedundancyType_RedundancySupport Variable. /// public static readonly NodeId ServerRedundancyType_RedundancySupport = new NodeId(Variables.ServerRedundancyType_RedundancySupport); /// /// The identifier for the TransparentRedundancyType_CurrentServerId Variable. /// public static readonly NodeId TransparentRedundancyType_CurrentServerId = new NodeId(Variables.TransparentRedundancyType_CurrentServerId); /// /// The identifier for the TransparentRedundancyType_RedundantServerArray Variable. /// public static readonly NodeId TransparentRedundancyType_RedundantServerArray = new NodeId(Variables.TransparentRedundancyType_RedundantServerArray); /// /// The identifier for the NonTransparentRedundancyType_ServerUriArray Variable. /// public static readonly NodeId NonTransparentRedundancyType_ServerUriArray = new NodeId(Variables.NonTransparentRedundancyType_ServerUriArray); /// /// The identifier for the NonTransparentNetworkRedundancyType_ServerNetworkGroups Variable. /// public static readonly NodeId NonTransparentNetworkRedundancyType_ServerNetworkGroups = new NodeId(Variables.NonTransparentNetworkRedundancyType_ServerNetworkGroups); /// /// The identifier for the OperationLimitsType_MaxNodesPerRead Variable. /// public static readonly NodeId OperationLimitsType_MaxNodesPerRead = new NodeId(Variables.OperationLimitsType_MaxNodesPerRead); /// /// The identifier for the OperationLimitsType_MaxNodesPerHistoryReadData Variable. /// public static readonly NodeId OperationLimitsType_MaxNodesPerHistoryReadData = new NodeId(Variables.OperationLimitsType_MaxNodesPerHistoryReadData); /// /// The identifier for the OperationLimitsType_MaxNodesPerHistoryReadEvents Variable. /// public static readonly NodeId OperationLimitsType_MaxNodesPerHistoryReadEvents = new NodeId(Variables.OperationLimitsType_MaxNodesPerHistoryReadEvents); /// /// The identifier for the OperationLimitsType_MaxNodesPerWrite Variable. /// public static readonly NodeId OperationLimitsType_MaxNodesPerWrite = new NodeId(Variables.OperationLimitsType_MaxNodesPerWrite); /// /// The identifier for the OperationLimitsType_MaxNodesPerHistoryUpdateData Variable. /// public static readonly NodeId OperationLimitsType_MaxNodesPerHistoryUpdateData = new NodeId(Variables.OperationLimitsType_MaxNodesPerHistoryUpdateData); /// /// The identifier for the OperationLimitsType_MaxNodesPerHistoryUpdateEvents Variable. /// public static readonly NodeId OperationLimitsType_MaxNodesPerHistoryUpdateEvents = new NodeId(Variables.OperationLimitsType_MaxNodesPerHistoryUpdateEvents); /// /// The identifier for the OperationLimitsType_MaxNodesPerMethodCall Variable. /// public static readonly NodeId OperationLimitsType_MaxNodesPerMethodCall = new NodeId(Variables.OperationLimitsType_MaxNodesPerMethodCall); /// /// The identifier for the OperationLimitsType_MaxNodesPerBrowse Variable. /// public static readonly NodeId OperationLimitsType_MaxNodesPerBrowse = new NodeId(Variables.OperationLimitsType_MaxNodesPerBrowse); /// /// The identifier for the OperationLimitsType_MaxNodesPerRegisterNodes Variable. /// public static readonly NodeId OperationLimitsType_MaxNodesPerRegisterNodes = new NodeId(Variables.OperationLimitsType_MaxNodesPerRegisterNodes); /// /// The identifier for the OperationLimitsType_MaxNodesPerTranslateBrowsePathsToNodeIds Variable. /// public static readonly NodeId OperationLimitsType_MaxNodesPerTranslateBrowsePathsToNodeIds = new NodeId(Variables.OperationLimitsType_MaxNodesPerTranslateBrowsePathsToNodeIds); /// /// The identifier for the OperationLimitsType_MaxNodesPerNodeManagement Variable. /// public static readonly NodeId OperationLimitsType_MaxNodesPerNodeManagement = new NodeId(Variables.OperationLimitsType_MaxNodesPerNodeManagement); /// /// The identifier for the OperationLimitsType_MaxMonitoredItemsPerCall Variable. /// public static readonly NodeId OperationLimitsType_MaxMonitoredItemsPerCall = new NodeId(Variables.OperationLimitsType_MaxMonitoredItemsPerCall); /// /// The identifier for the FileType_Size Variable. /// public static readonly NodeId FileType_Size = new NodeId(Variables.FileType_Size); /// /// The identifier for the FileType_Writeable Variable. /// public static readonly NodeId FileType_Writeable = new NodeId(Variables.FileType_Writeable); /// /// The identifier for the FileType_UserWriteable Variable. /// public static readonly NodeId FileType_UserWriteable = new NodeId(Variables.FileType_UserWriteable); /// /// The identifier for the FileType_OpenCount Variable. /// public static readonly NodeId FileType_OpenCount = new NodeId(Variables.FileType_OpenCount); /// /// The identifier for the FileType_Open_InputArguments Variable. /// public static readonly NodeId FileType_Open_InputArguments = new NodeId(Variables.FileType_Open_InputArguments); /// /// The identifier for the FileType_Open_OutputArguments Variable. /// public static readonly NodeId FileType_Open_OutputArguments = new NodeId(Variables.FileType_Open_OutputArguments); /// /// The identifier for the FileType_Close_InputArguments Variable. /// public static readonly NodeId FileType_Close_InputArguments = new NodeId(Variables.FileType_Close_InputArguments); /// /// The identifier for the FileType_Read_InputArguments Variable. /// public static readonly NodeId FileType_Read_InputArguments = new NodeId(Variables.FileType_Read_InputArguments); /// /// The identifier for the FileType_Read_OutputArguments Variable. /// public static readonly NodeId FileType_Read_OutputArguments = new NodeId(Variables.FileType_Read_OutputArguments); /// /// The identifier for the FileType_Write_InputArguments Variable. /// public static readonly NodeId FileType_Write_InputArguments = new NodeId(Variables.FileType_Write_InputArguments); /// /// The identifier for the FileType_GetPosition_InputArguments Variable. /// public static readonly NodeId FileType_GetPosition_InputArguments = new NodeId(Variables.FileType_GetPosition_InputArguments); /// /// The identifier for the FileType_GetPosition_OutputArguments Variable. /// public static readonly NodeId FileType_GetPosition_OutputArguments = new NodeId(Variables.FileType_GetPosition_OutputArguments); /// /// The identifier for the FileType_SetPosition_InputArguments Variable. /// public static readonly NodeId FileType_SetPosition_InputArguments = new NodeId(Variables.FileType_SetPosition_InputArguments); /// /// The identifier for the NamespaceMetadataType_NamespaceUri Variable. /// public static readonly NodeId NamespaceMetadataType_NamespaceUri = new NodeId(Variables.NamespaceMetadataType_NamespaceUri); /// /// The identifier for the NamespaceMetadataType_NamespaceVersion Variable. /// public static readonly NodeId NamespaceMetadataType_NamespaceVersion = new NodeId(Variables.NamespaceMetadataType_NamespaceVersion); /// /// The identifier for the NamespaceMetadataType_NamespacePublicationDate Variable. /// public static readonly NodeId NamespaceMetadataType_NamespacePublicationDate = new NodeId(Variables.NamespaceMetadataType_NamespacePublicationDate); /// /// The identifier for the NamespaceMetadataType_IsNamespaceSubset Variable. /// public static readonly NodeId NamespaceMetadataType_IsNamespaceSubset = new NodeId(Variables.NamespaceMetadataType_IsNamespaceSubset); /// /// The identifier for the NamespaceMetadataType_StaticNodeIdIndentifierTypes Variable. /// public static readonly NodeId NamespaceMetadataType_StaticNodeIdIndentifierTypes = new NodeId(Variables.NamespaceMetadataType_StaticNodeIdIndentifierTypes); /// /// The identifier for the NamespaceMetadataType_StaticNumericNodeIdRange Variable. /// public static readonly NodeId NamespaceMetadataType_StaticNumericNodeIdRange = new NodeId(Variables.NamespaceMetadataType_StaticNumericNodeIdRange); /// /// The identifier for the NamespaceMetadataType_StaticStringNodeIdPattern Variable. /// public static readonly NodeId NamespaceMetadataType_StaticStringNodeIdPattern = new NodeId(Variables.NamespaceMetadataType_StaticStringNodeIdPattern); /// /// The identifier for the NamespacesType_NamespaceIdentifier_NamespaceUri Variable. /// public static readonly NodeId NamespacesType_NamespaceIdentifier_NamespaceUri = new NodeId(Variables.NamespacesType_NamespaceIdentifier_NamespaceUri); /// /// The identifier for the NamespacesType_NamespaceIdentifier_NamespaceVersion Variable. /// public static readonly NodeId NamespacesType_NamespaceIdentifier_NamespaceVersion = new NodeId(Variables.NamespacesType_NamespaceIdentifier_NamespaceVersion); /// /// The identifier for the NamespacesType_NamespaceIdentifier_NamespacePublicationDate Variable. /// public static readonly NodeId NamespacesType_NamespaceIdentifier_NamespacePublicationDate = new NodeId(Variables.NamespacesType_NamespaceIdentifier_NamespacePublicationDate); /// /// The identifier for the NamespacesType_NamespaceIdentifier_IsNamespaceSubset Variable. /// public static readonly NodeId NamespacesType_NamespaceIdentifier_IsNamespaceSubset = new NodeId(Variables.NamespacesType_NamespaceIdentifier_IsNamespaceSubset); /// /// The identifier for the NamespacesType_NamespaceIdentifier_StaticNodeIdIndentifierTypes Variable. /// public static readonly NodeId NamespacesType_NamespaceIdentifier_StaticNodeIdIndentifierTypes = new NodeId(Variables.NamespacesType_NamespaceIdentifier_StaticNodeIdIndentifierTypes); /// /// The identifier for the NamespacesType_NamespaceIdentifier_StaticNumericNodeIdRange Variable. /// public static readonly NodeId NamespacesType_NamespaceIdentifier_StaticNumericNodeIdRange = new NodeId(Variables.NamespacesType_NamespaceIdentifier_StaticNumericNodeIdRange); /// /// The identifier for the NamespacesType_NamespaceIdentifier_StaticStringNodeIdPattern Variable. /// public static readonly NodeId NamespacesType_NamespaceIdentifier_StaticStringNodeIdPattern = new NodeId(Variables.NamespacesType_NamespaceIdentifier_StaticStringNodeIdPattern); /// /// The identifier for the BaseEventType_EventId Variable. /// public static readonly NodeId BaseEventType_EventId = new NodeId(Variables.BaseEventType_EventId); /// /// The identifier for the BaseEventType_EventType Variable. /// public static readonly NodeId BaseEventType_EventType = new NodeId(Variables.BaseEventType_EventType); /// /// The identifier for the BaseEventType_SourceNode Variable. /// public static readonly NodeId BaseEventType_SourceNode = new NodeId(Variables.BaseEventType_SourceNode); /// /// The identifier for the BaseEventType_SourceName Variable. /// public static readonly NodeId BaseEventType_SourceName = new NodeId(Variables.BaseEventType_SourceName); /// /// The identifier for the BaseEventType_Time Variable. /// public static readonly NodeId BaseEventType_Time = new NodeId(Variables.BaseEventType_Time); /// /// The identifier for the BaseEventType_ReceiveTime Variable. /// public static readonly NodeId BaseEventType_ReceiveTime = new NodeId(Variables.BaseEventType_ReceiveTime); /// /// The identifier for the BaseEventType_LocalTime Variable. /// public static readonly NodeId BaseEventType_LocalTime = new NodeId(Variables.BaseEventType_LocalTime); /// /// The identifier for the BaseEventType_Message Variable. /// public static readonly NodeId BaseEventType_Message = new NodeId(Variables.BaseEventType_Message); /// /// The identifier for the BaseEventType_Severity Variable. /// public static readonly NodeId BaseEventType_Severity = new NodeId(Variables.BaseEventType_Severity); /// /// The identifier for the AuditEventType_ActionTimeStamp Variable. /// public static readonly NodeId AuditEventType_ActionTimeStamp = new NodeId(Variables.AuditEventType_ActionTimeStamp); /// /// The identifier for the AuditEventType_Status Variable. /// public static readonly NodeId AuditEventType_Status = new NodeId(Variables.AuditEventType_Status); /// /// The identifier for the AuditEventType_ServerId Variable. /// public static readonly NodeId AuditEventType_ServerId = new NodeId(Variables.AuditEventType_ServerId); /// /// The identifier for the AuditEventType_ClientAuditEntryId Variable. /// public static readonly NodeId AuditEventType_ClientAuditEntryId = new NodeId(Variables.AuditEventType_ClientAuditEntryId); /// /// The identifier for the AuditEventType_ClientUserId Variable. /// public static readonly NodeId AuditEventType_ClientUserId = new NodeId(Variables.AuditEventType_ClientUserId); /// /// The identifier for the AuditChannelEventType_SecureChannelId Variable. /// public static readonly NodeId AuditChannelEventType_SecureChannelId = new NodeId(Variables.AuditChannelEventType_SecureChannelId); /// /// The identifier for the AuditOpenSecureChannelEventType_ClientCertificate Variable. /// public static readonly NodeId AuditOpenSecureChannelEventType_ClientCertificate = new NodeId(Variables.AuditOpenSecureChannelEventType_ClientCertificate); /// /// The identifier for the AuditOpenSecureChannelEventType_ClientCertificateThumbprint Variable. /// public static readonly NodeId AuditOpenSecureChannelEventType_ClientCertificateThumbprint = new NodeId(Variables.AuditOpenSecureChannelEventType_ClientCertificateThumbprint); /// /// The identifier for the AuditOpenSecureChannelEventType_RequestType Variable. /// public static readonly NodeId AuditOpenSecureChannelEventType_RequestType = new NodeId(Variables.AuditOpenSecureChannelEventType_RequestType); /// /// The identifier for the AuditOpenSecureChannelEventType_SecurityPolicyUri Variable. /// public static readonly NodeId AuditOpenSecureChannelEventType_SecurityPolicyUri = new NodeId(Variables.AuditOpenSecureChannelEventType_SecurityPolicyUri); /// /// The identifier for the AuditOpenSecureChannelEventType_SecurityMode Variable. /// public static readonly NodeId AuditOpenSecureChannelEventType_SecurityMode = new NodeId(Variables.AuditOpenSecureChannelEventType_SecurityMode); /// /// The identifier for the AuditOpenSecureChannelEventType_RequestedLifetime Variable. /// public static readonly NodeId AuditOpenSecureChannelEventType_RequestedLifetime = new NodeId(Variables.AuditOpenSecureChannelEventType_RequestedLifetime); /// /// The identifier for the AuditSessionEventType_SessionId Variable. /// public static readonly NodeId AuditSessionEventType_SessionId = new NodeId(Variables.AuditSessionEventType_SessionId); /// /// The identifier for the AuditCreateSessionEventType_SecureChannelId Variable. /// public static readonly NodeId AuditCreateSessionEventType_SecureChannelId = new NodeId(Variables.AuditCreateSessionEventType_SecureChannelId); /// /// The identifier for the AuditCreateSessionEventType_ClientCertificate Variable. /// public static readonly NodeId AuditCreateSessionEventType_ClientCertificate = new NodeId(Variables.AuditCreateSessionEventType_ClientCertificate); /// /// The identifier for the AuditCreateSessionEventType_ClientCertificateThumbprint Variable. /// public static readonly NodeId AuditCreateSessionEventType_ClientCertificateThumbprint = new NodeId(Variables.AuditCreateSessionEventType_ClientCertificateThumbprint); /// /// The identifier for the AuditCreateSessionEventType_RevisedSessionTimeout Variable. /// public static readonly NodeId AuditCreateSessionEventType_RevisedSessionTimeout = new NodeId(Variables.AuditCreateSessionEventType_RevisedSessionTimeout); /// /// The identifier for the AuditUrlMismatchEventType_EndpointUrl Variable. /// public static readonly NodeId AuditUrlMismatchEventType_EndpointUrl = new NodeId(Variables.AuditUrlMismatchEventType_EndpointUrl); /// /// The identifier for the AuditActivateSessionEventType_ClientSoftwareCertificates Variable. /// public static readonly NodeId AuditActivateSessionEventType_ClientSoftwareCertificates = new NodeId(Variables.AuditActivateSessionEventType_ClientSoftwareCertificates); /// /// The identifier for the AuditActivateSessionEventType_UserIdentityToken Variable. /// public static readonly NodeId AuditActivateSessionEventType_UserIdentityToken = new NodeId(Variables.AuditActivateSessionEventType_UserIdentityToken); /// /// The identifier for the AuditActivateSessionEventType_SecureChannelId Variable. /// public static readonly NodeId AuditActivateSessionEventType_SecureChannelId = new NodeId(Variables.AuditActivateSessionEventType_SecureChannelId); /// /// The identifier for the AuditCancelEventType_RequestHandle Variable. /// public static readonly NodeId AuditCancelEventType_RequestHandle = new NodeId(Variables.AuditCancelEventType_RequestHandle); /// /// The identifier for the AuditCertificateEventType_Certificate Variable. /// public static readonly NodeId AuditCertificateEventType_Certificate = new NodeId(Variables.AuditCertificateEventType_Certificate); /// /// The identifier for the AuditCertificateDataMismatchEventType_InvalidHostname Variable. /// public static readonly NodeId AuditCertificateDataMismatchEventType_InvalidHostname = new NodeId(Variables.AuditCertificateDataMismatchEventType_InvalidHostname); /// /// The identifier for the AuditCertificateDataMismatchEventType_InvalidUri Variable. /// public static readonly NodeId AuditCertificateDataMismatchEventType_InvalidUri = new NodeId(Variables.AuditCertificateDataMismatchEventType_InvalidUri); /// /// The identifier for the AuditAddNodesEventType_NodesToAdd Variable. /// public static readonly NodeId AuditAddNodesEventType_NodesToAdd = new NodeId(Variables.AuditAddNodesEventType_NodesToAdd); /// /// The identifier for the AuditDeleteNodesEventType_NodesToDelete Variable. /// public static readonly NodeId AuditDeleteNodesEventType_NodesToDelete = new NodeId(Variables.AuditDeleteNodesEventType_NodesToDelete); /// /// The identifier for the AuditAddReferencesEventType_ReferencesToAdd Variable. /// public static readonly NodeId AuditAddReferencesEventType_ReferencesToAdd = new NodeId(Variables.AuditAddReferencesEventType_ReferencesToAdd); /// /// The identifier for the AuditDeleteReferencesEventType_ReferencesToDelete Variable. /// public static readonly NodeId AuditDeleteReferencesEventType_ReferencesToDelete = new NodeId(Variables.AuditDeleteReferencesEventType_ReferencesToDelete); /// /// The identifier for the AuditWriteUpdateEventType_AttributeId Variable. /// public static readonly NodeId AuditWriteUpdateEventType_AttributeId = new NodeId(Variables.AuditWriteUpdateEventType_AttributeId); /// /// The identifier for the AuditWriteUpdateEventType_IndexRange Variable. /// public static readonly NodeId AuditWriteUpdateEventType_IndexRange = new NodeId(Variables.AuditWriteUpdateEventType_IndexRange); /// /// The identifier for the AuditWriteUpdateEventType_OldValue Variable. /// public static readonly NodeId AuditWriteUpdateEventType_OldValue = new NodeId(Variables.AuditWriteUpdateEventType_OldValue); /// /// The identifier for the AuditWriteUpdateEventType_NewValue Variable. /// public static readonly NodeId AuditWriteUpdateEventType_NewValue = new NodeId(Variables.AuditWriteUpdateEventType_NewValue); /// /// The identifier for the AuditHistoryUpdateEventType_ParameterDataTypeId Variable. /// public static readonly NodeId AuditHistoryUpdateEventType_ParameterDataTypeId = new NodeId(Variables.AuditHistoryUpdateEventType_ParameterDataTypeId); /// /// The identifier for the AuditUpdateMethodEventType_MethodId Variable. /// public static readonly NodeId AuditUpdateMethodEventType_MethodId = new NodeId(Variables.AuditUpdateMethodEventType_MethodId); /// /// The identifier for the AuditUpdateMethodEventType_InputArguments Variable. /// public static readonly NodeId AuditUpdateMethodEventType_InputArguments = new NodeId(Variables.AuditUpdateMethodEventType_InputArguments); /// /// The identifier for the SystemStatusChangeEventType_SystemState Variable. /// public static readonly NodeId SystemStatusChangeEventType_SystemState = new NodeId(Variables.SystemStatusChangeEventType_SystemState); /// /// The identifier for the GeneralModelChangeEventType_Changes Variable. /// public static readonly NodeId GeneralModelChangeEventType_Changes = new NodeId(Variables.GeneralModelChangeEventType_Changes); /// /// The identifier for the SemanticChangeEventType_Changes Variable. /// public static readonly NodeId SemanticChangeEventType_Changes = new NodeId(Variables.SemanticChangeEventType_Changes); /// /// The identifier for the ServerStatusType_StartTime Variable. /// public static readonly NodeId ServerStatusType_StartTime = new NodeId(Variables.ServerStatusType_StartTime); /// /// The identifier for the ServerStatusType_CurrentTime Variable. /// public static readonly NodeId ServerStatusType_CurrentTime = new NodeId(Variables.ServerStatusType_CurrentTime); /// /// The identifier for the ServerStatusType_State Variable. /// public static readonly NodeId ServerStatusType_State = new NodeId(Variables.ServerStatusType_State); /// /// The identifier for the ServerStatusType_BuildInfo Variable. /// public static readonly NodeId ServerStatusType_BuildInfo = new NodeId(Variables.ServerStatusType_BuildInfo); /// /// The identifier for the ServerStatusType_BuildInfo_ProductUri Variable. /// public static readonly NodeId ServerStatusType_BuildInfo_ProductUri = new NodeId(Variables.ServerStatusType_BuildInfo_ProductUri); /// /// The identifier for the ServerStatusType_BuildInfo_ManufacturerName Variable. /// public static readonly NodeId ServerStatusType_BuildInfo_ManufacturerName = new NodeId(Variables.ServerStatusType_BuildInfo_ManufacturerName); /// /// The identifier for the ServerStatusType_BuildInfo_ProductName Variable. /// public static readonly NodeId ServerStatusType_BuildInfo_ProductName = new NodeId(Variables.ServerStatusType_BuildInfo_ProductName); /// /// The identifier for the ServerStatusType_BuildInfo_SoftwareVersion Variable. /// public static readonly NodeId ServerStatusType_BuildInfo_SoftwareVersion = new NodeId(Variables.ServerStatusType_BuildInfo_SoftwareVersion); /// /// The identifier for the ServerStatusType_BuildInfo_BuildNumber Variable. /// public static readonly NodeId ServerStatusType_BuildInfo_BuildNumber = new NodeId(Variables.ServerStatusType_BuildInfo_BuildNumber); /// /// The identifier for the ServerStatusType_BuildInfo_BuildDate Variable. /// public static readonly NodeId ServerStatusType_BuildInfo_BuildDate = new NodeId(Variables.ServerStatusType_BuildInfo_BuildDate); /// /// The identifier for the ServerStatusType_SecondsTillShutdown Variable. /// public static readonly NodeId ServerStatusType_SecondsTillShutdown = new NodeId(Variables.ServerStatusType_SecondsTillShutdown); /// /// The identifier for the ServerStatusType_ShutdownReason Variable. /// public static readonly NodeId ServerStatusType_ShutdownReason = new NodeId(Variables.ServerStatusType_ShutdownReason); /// /// The identifier for the BuildInfoType_ProductUri Variable. /// public static readonly NodeId BuildInfoType_ProductUri = new NodeId(Variables.BuildInfoType_ProductUri); /// /// The identifier for the BuildInfoType_ManufacturerName Variable. /// public static readonly NodeId BuildInfoType_ManufacturerName = new NodeId(Variables.BuildInfoType_ManufacturerName); /// /// The identifier for the BuildInfoType_ProductName Variable. /// public static readonly NodeId BuildInfoType_ProductName = new NodeId(Variables.BuildInfoType_ProductName); /// /// The identifier for the BuildInfoType_SoftwareVersion Variable. /// public static readonly NodeId BuildInfoType_SoftwareVersion = new NodeId(Variables.BuildInfoType_SoftwareVersion); /// /// The identifier for the BuildInfoType_BuildNumber Variable. /// public static readonly NodeId BuildInfoType_BuildNumber = new NodeId(Variables.BuildInfoType_BuildNumber); /// /// The identifier for the BuildInfoType_BuildDate Variable. /// public static readonly NodeId BuildInfoType_BuildDate = new NodeId(Variables.BuildInfoType_BuildDate); /// /// The identifier for the ServerDiagnosticsSummaryType_ServerViewCount Variable. /// public static readonly NodeId ServerDiagnosticsSummaryType_ServerViewCount = new NodeId(Variables.ServerDiagnosticsSummaryType_ServerViewCount); /// /// The identifier for the ServerDiagnosticsSummaryType_CurrentSessionCount Variable. /// public static readonly NodeId ServerDiagnosticsSummaryType_CurrentSessionCount = new NodeId(Variables.ServerDiagnosticsSummaryType_CurrentSessionCount); /// /// The identifier for the ServerDiagnosticsSummaryType_CumulatedSessionCount Variable. /// public static readonly NodeId ServerDiagnosticsSummaryType_CumulatedSessionCount = new NodeId(Variables.ServerDiagnosticsSummaryType_CumulatedSessionCount); /// /// The identifier for the ServerDiagnosticsSummaryType_SecurityRejectedSessionCount Variable. /// public static readonly NodeId ServerDiagnosticsSummaryType_SecurityRejectedSessionCount = new NodeId(Variables.ServerDiagnosticsSummaryType_SecurityRejectedSessionCount); /// /// The identifier for the ServerDiagnosticsSummaryType_RejectedSessionCount Variable. /// public static readonly NodeId ServerDiagnosticsSummaryType_RejectedSessionCount = new NodeId(Variables.ServerDiagnosticsSummaryType_RejectedSessionCount); /// /// The identifier for the ServerDiagnosticsSummaryType_SessionTimeoutCount Variable. /// public static readonly NodeId ServerDiagnosticsSummaryType_SessionTimeoutCount = new NodeId(Variables.ServerDiagnosticsSummaryType_SessionTimeoutCount); /// /// The identifier for the ServerDiagnosticsSummaryType_SessionAbortCount Variable. /// public static readonly NodeId ServerDiagnosticsSummaryType_SessionAbortCount = new NodeId(Variables.ServerDiagnosticsSummaryType_SessionAbortCount); /// /// The identifier for the ServerDiagnosticsSummaryType_PublishingIntervalCount Variable. /// public static readonly NodeId ServerDiagnosticsSummaryType_PublishingIntervalCount = new NodeId(Variables.ServerDiagnosticsSummaryType_PublishingIntervalCount); /// /// The identifier for the ServerDiagnosticsSummaryType_CurrentSubscriptionCount Variable. /// public static readonly NodeId ServerDiagnosticsSummaryType_CurrentSubscriptionCount = new NodeId(Variables.ServerDiagnosticsSummaryType_CurrentSubscriptionCount); /// /// The identifier for the ServerDiagnosticsSummaryType_CumulatedSubscriptionCount Variable. /// public static readonly NodeId ServerDiagnosticsSummaryType_CumulatedSubscriptionCount = new NodeId(Variables.ServerDiagnosticsSummaryType_CumulatedSubscriptionCount); /// /// The identifier for the ServerDiagnosticsSummaryType_SecurityRejectedRequestsCount Variable. /// public static readonly NodeId ServerDiagnosticsSummaryType_SecurityRejectedRequestsCount = new NodeId(Variables.ServerDiagnosticsSummaryType_SecurityRejectedRequestsCount); /// /// The identifier for the ServerDiagnosticsSummaryType_RejectedRequestsCount Variable. /// public static readonly NodeId ServerDiagnosticsSummaryType_RejectedRequestsCount = new NodeId(Variables.ServerDiagnosticsSummaryType_RejectedRequestsCount); /// /// The identifier for the SamplingIntervalDiagnosticsType_SamplingInterval Variable. /// public static readonly NodeId SamplingIntervalDiagnosticsType_SamplingInterval = new NodeId(Variables.SamplingIntervalDiagnosticsType_SamplingInterval); /// /// The identifier for the SamplingIntervalDiagnosticsType_SampledMonitoredItemsCount Variable. /// public static readonly NodeId SamplingIntervalDiagnosticsType_SampledMonitoredItemsCount = new NodeId(Variables.SamplingIntervalDiagnosticsType_SampledMonitoredItemsCount); /// /// The identifier for the SamplingIntervalDiagnosticsType_MaxSampledMonitoredItemsCount Variable. /// public static readonly NodeId SamplingIntervalDiagnosticsType_MaxSampledMonitoredItemsCount = new NodeId(Variables.SamplingIntervalDiagnosticsType_MaxSampledMonitoredItemsCount); /// /// The identifier for the SamplingIntervalDiagnosticsType_DisabledMonitoredItemsSamplingCount Variable. /// public static readonly NodeId SamplingIntervalDiagnosticsType_DisabledMonitoredItemsSamplingCount = new NodeId(Variables.SamplingIntervalDiagnosticsType_DisabledMonitoredItemsSamplingCount); /// /// The identifier for the SubscriptionDiagnosticsType_SessionId Variable. /// public static readonly NodeId SubscriptionDiagnosticsType_SessionId = new NodeId(Variables.SubscriptionDiagnosticsType_SessionId); /// /// The identifier for the SubscriptionDiagnosticsType_SubscriptionId Variable. /// public static readonly NodeId SubscriptionDiagnosticsType_SubscriptionId = new NodeId(Variables.SubscriptionDiagnosticsType_SubscriptionId); /// /// The identifier for the SubscriptionDiagnosticsType_Priority Variable. /// public static readonly NodeId SubscriptionDiagnosticsType_Priority = new NodeId(Variables.SubscriptionDiagnosticsType_Priority); /// /// The identifier for the SubscriptionDiagnosticsType_PublishingInterval Variable. /// public static readonly NodeId SubscriptionDiagnosticsType_PublishingInterval = new NodeId(Variables.SubscriptionDiagnosticsType_PublishingInterval); /// /// The identifier for the SubscriptionDiagnosticsType_MaxKeepAliveCount Variable. /// public static readonly NodeId SubscriptionDiagnosticsType_MaxKeepAliveCount = new NodeId(Variables.SubscriptionDiagnosticsType_MaxKeepAliveCount); /// /// The identifier for the SubscriptionDiagnosticsType_MaxLifetimeCount Variable. /// public static readonly NodeId SubscriptionDiagnosticsType_MaxLifetimeCount = new NodeId(Variables.SubscriptionDiagnosticsType_MaxLifetimeCount); /// /// The identifier for the SubscriptionDiagnosticsType_MaxNotificationsPerPublish Variable. /// public static readonly NodeId SubscriptionDiagnosticsType_MaxNotificationsPerPublish = new NodeId(Variables.SubscriptionDiagnosticsType_MaxNotificationsPerPublish); /// /// The identifier for the SubscriptionDiagnosticsType_PublishingEnabled Variable. /// public static readonly NodeId SubscriptionDiagnosticsType_PublishingEnabled = new NodeId(Variables.SubscriptionDiagnosticsType_PublishingEnabled); /// /// The identifier for the SubscriptionDiagnosticsType_ModifyCount Variable. /// public static readonly NodeId SubscriptionDiagnosticsType_ModifyCount = new NodeId(Variables.SubscriptionDiagnosticsType_ModifyCount); /// /// The identifier for the SubscriptionDiagnosticsType_EnableCount Variable. /// public static readonly NodeId SubscriptionDiagnosticsType_EnableCount = new NodeId(Variables.SubscriptionDiagnosticsType_EnableCount); /// /// The identifier for the SubscriptionDiagnosticsType_DisableCount Variable. /// public static readonly NodeId SubscriptionDiagnosticsType_DisableCount = new NodeId(Variables.SubscriptionDiagnosticsType_DisableCount); /// /// The identifier for the SubscriptionDiagnosticsType_RepublishRequestCount Variable. /// public static readonly NodeId SubscriptionDiagnosticsType_RepublishRequestCount = new NodeId(Variables.SubscriptionDiagnosticsType_RepublishRequestCount); /// /// The identifier for the SubscriptionDiagnosticsType_RepublishMessageRequestCount Variable. /// public static readonly NodeId SubscriptionDiagnosticsType_RepublishMessageRequestCount = new NodeId(Variables.SubscriptionDiagnosticsType_RepublishMessageRequestCount); /// /// The identifier for the SubscriptionDiagnosticsType_RepublishMessageCount Variable. /// public static readonly NodeId SubscriptionDiagnosticsType_RepublishMessageCount = new NodeId(Variables.SubscriptionDiagnosticsType_RepublishMessageCount); /// /// The identifier for the SubscriptionDiagnosticsType_TransferRequestCount Variable. /// public static readonly NodeId SubscriptionDiagnosticsType_TransferRequestCount = new NodeId(Variables.SubscriptionDiagnosticsType_TransferRequestCount); /// /// The identifier for the SubscriptionDiagnosticsType_TransferredToAltClientCount Variable. /// public static readonly NodeId SubscriptionDiagnosticsType_TransferredToAltClientCount = new NodeId(Variables.SubscriptionDiagnosticsType_TransferredToAltClientCount); /// /// The identifier for the SubscriptionDiagnosticsType_TransferredToSameClientCount Variable. /// public static readonly NodeId SubscriptionDiagnosticsType_TransferredToSameClientCount = new NodeId(Variables.SubscriptionDiagnosticsType_TransferredToSameClientCount); /// /// The identifier for the SubscriptionDiagnosticsType_PublishRequestCount Variable. /// public static readonly NodeId SubscriptionDiagnosticsType_PublishRequestCount = new NodeId(Variables.SubscriptionDiagnosticsType_PublishRequestCount); /// /// The identifier for the SubscriptionDiagnosticsType_DataChangeNotificationsCount Variable. /// public static readonly NodeId SubscriptionDiagnosticsType_DataChangeNotificationsCount = new NodeId(Variables.SubscriptionDiagnosticsType_DataChangeNotificationsCount); /// /// The identifier for the SubscriptionDiagnosticsType_EventNotificationsCount Variable. /// public static readonly NodeId SubscriptionDiagnosticsType_EventNotificationsCount = new NodeId(Variables.SubscriptionDiagnosticsType_EventNotificationsCount); /// /// The identifier for the SubscriptionDiagnosticsType_NotificationsCount Variable. /// public static readonly NodeId SubscriptionDiagnosticsType_NotificationsCount = new NodeId(Variables.SubscriptionDiagnosticsType_NotificationsCount); /// /// The identifier for the SubscriptionDiagnosticsType_LatePublishRequestCount Variable. /// public static readonly NodeId SubscriptionDiagnosticsType_LatePublishRequestCount = new NodeId(Variables.SubscriptionDiagnosticsType_LatePublishRequestCount); /// /// The identifier for the SubscriptionDiagnosticsType_CurrentKeepAliveCount Variable. /// public static readonly NodeId SubscriptionDiagnosticsType_CurrentKeepAliveCount = new NodeId(Variables.SubscriptionDiagnosticsType_CurrentKeepAliveCount); /// /// The identifier for the SubscriptionDiagnosticsType_CurrentLifetimeCount Variable. /// public static readonly NodeId SubscriptionDiagnosticsType_CurrentLifetimeCount = new NodeId(Variables.SubscriptionDiagnosticsType_CurrentLifetimeCount); /// /// The identifier for the SubscriptionDiagnosticsType_UnacknowledgedMessageCount Variable. /// public static readonly NodeId SubscriptionDiagnosticsType_UnacknowledgedMessageCount = new NodeId(Variables.SubscriptionDiagnosticsType_UnacknowledgedMessageCount); /// /// The identifier for the SubscriptionDiagnosticsType_DiscardedMessageCount Variable. /// public static readonly NodeId SubscriptionDiagnosticsType_DiscardedMessageCount = new NodeId(Variables.SubscriptionDiagnosticsType_DiscardedMessageCount); /// /// The identifier for the SubscriptionDiagnosticsType_MonitoredItemCount Variable. /// public static readonly NodeId SubscriptionDiagnosticsType_MonitoredItemCount = new NodeId(Variables.SubscriptionDiagnosticsType_MonitoredItemCount); /// /// The identifier for the SubscriptionDiagnosticsType_DisabledMonitoredItemCount Variable. /// public static readonly NodeId SubscriptionDiagnosticsType_DisabledMonitoredItemCount = new NodeId(Variables.SubscriptionDiagnosticsType_DisabledMonitoredItemCount); /// /// The identifier for the SubscriptionDiagnosticsType_MonitoringQueueOverflowCount Variable. /// public static readonly NodeId SubscriptionDiagnosticsType_MonitoringQueueOverflowCount = new NodeId(Variables.SubscriptionDiagnosticsType_MonitoringQueueOverflowCount); /// /// The identifier for the SubscriptionDiagnosticsType_NextSequenceNumber Variable. /// public static readonly NodeId SubscriptionDiagnosticsType_NextSequenceNumber = new NodeId(Variables.SubscriptionDiagnosticsType_NextSequenceNumber); /// /// The identifier for the SubscriptionDiagnosticsType_EventQueueOverFlowCount Variable. /// public static readonly NodeId SubscriptionDiagnosticsType_EventQueueOverFlowCount = new NodeId(Variables.SubscriptionDiagnosticsType_EventQueueOverFlowCount); /// /// The identifier for the SessionDiagnosticsVariableType_SessionId Variable. /// public static readonly NodeId SessionDiagnosticsVariableType_SessionId = new NodeId(Variables.SessionDiagnosticsVariableType_SessionId); /// /// The identifier for the SessionDiagnosticsVariableType_SessionName Variable. /// public static readonly NodeId SessionDiagnosticsVariableType_SessionName = new NodeId(Variables.SessionDiagnosticsVariableType_SessionName); /// /// The identifier for the SessionDiagnosticsVariableType_ClientDescription Variable. /// public static readonly NodeId SessionDiagnosticsVariableType_ClientDescription = new NodeId(Variables.SessionDiagnosticsVariableType_ClientDescription); /// /// The identifier for the SessionDiagnosticsVariableType_ServerUri Variable. /// public static readonly NodeId SessionDiagnosticsVariableType_ServerUri = new NodeId(Variables.SessionDiagnosticsVariableType_ServerUri); /// /// The identifier for the SessionDiagnosticsVariableType_EndpointUrl Variable. /// public static readonly NodeId SessionDiagnosticsVariableType_EndpointUrl = new NodeId(Variables.SessionDiagnosticsVariableType_EndpointUrl); /// /// The identifier for the SessionDiagnosticsVariableType_LocaleIds Variable. /// public static readonly NodeId SessionDiagnosticsVariableType_LocaleIds = new NodeId(Variables.SessionDiagnosticsVariableType_LocaleIds); /// /// The identifier for the SessionDiagnosticsVariableType_ActualSessionTimeout Variable. /// public static readonly NodeId SessionDiagnosticsVariableType_ActualSessionTimeout = new NodeId(Variables.SessionDiagnosticsVariableType_ActualSessionTimeout); /// /// The identifier for the SessionDiagnosticsVariableType_MaxResponseMessageSize Variable. /// public static readonly NodeId SessionDiagnosticsVariableType_MaxResponseMessageSize = new NodeId(Variables.SessionDiagnosticsVariableType_MaxResponseMessageSize); /// /// The identifier for the SessionDiagnosticsVariableType_ClientConnectionTime Variable. /// public static readonly NodeId SessionDiagnosticsVariableType_ClientConnectionTime = new NodeId(Variables.SessionDiagnosticsVariableType_ClientConnectionTime); /// /// The identifier for the SessionDiagnosticsVariableType_ClientLastContactTime Variable. /// public static readonly NodeId SessionDiagnosticsVariableType_ClientLastContactTime = new NodeId(Variables.SessionDiagnosticsVariableType_ClientLastContactTime); /// /// The identifier for the SessionDiagnosticsVariableType_CurrentSubscriptionsCount Variable. /// public static readonly NodeId SessionDiagnosticsVariableType_CurrentSubscriptionsCount = new NodeId(Variables.SessionDiagnosticsVariableType_CurrentSubscriptionsCount); /// /// The identifier for the SessionDiagnosticsVariableType_CurrentMonitoredItemsCount Variable. /// public static readonly NodeId SessionDiagnosticsVariableType_CurrentMonitoredItemsCount = new NodeId(Variables.SessionDiagnosticsVariableType_CurrentMonitoredItemsCount); /// /// The identifier for the SessionDiagnosticsVariableType_CurrentPublishRequestsInQueue Variable. /// public static readonly NodeId SessionDiagnosticsVariableType_CurrentPublishRequestsInQueue = new NodeId(Variables.SessionDiagnosticsVariableType_CurrentPublishRequestsInQueue); /// /// The identifier for the SessionDiagnosticsVariableType_TotalRequestCount Variable. /// public static readonly NodeId SessionDiagnosticsVariableType_TotalRequestCount = new NodeId(Variables.SessionDiagnosticsVariableType_TotalRequestCount); /// /// The identifier for the SessionDiagnosticsVariableType_UnauthorizedRequestCount Variable. /// public static readonly NodeId SessionDiagnosticsVariableType_UnauthorizedRequestCount = new NodeId(Variables.SessionDiagnosticsVariableType_UnauthorizedRequestCount); /// /// The identifier for the SessionDiagnosticsVariableType_ReadCount Variable. /// public static readonly NodeId SessionDiagnosticsVariableType_ReadCount = new NodeId(Variables.SessionDiagnosticsVariableType_ReadCount); /// /// The identifier for the SessionDiagnosticsVariableType_HistoryReadCount Variable. /// public static readonly NodeId SessionDiagnosticsVariableType_HistoryReadCount = new NodeId(Variables.SessionDiagnosticsVariableType_HistoryReadCount); /// /// The identifier for the SessionDiagnosticsVariableType_WriteCount Variable. /// public static readonly NodeId SessionDiagnosticsVariableType_WriteCount = new NodeId(Variables.SessionDiagnosticsVariableType_WriteCount); /// /// The identifier for the SessionDiagnosticsVariableType_HistoryUpdateCount Variable. /// public static readonly NodeId SessionDiagnosticsVariableType_HistoryUpdateCount = new NodeId(Variables.SessionDiagnosticsVariableType_HistoryUpdateCount); /// /// The identifier for the SessionDiagnosticsVariableType_CallCount Variable. /// public static readonly NodeId SessionDiagnosticsVariableType_CallCount = new NodeId(Variables.SessionDiagnosticsVariableType_CallCount); /// /// The identifier for the SessionDiagnosticsVariableType_CreateMonitoredItemsCount Variable. /// public static readonly NodeId SessionDiagnosticsVariableType_CreateMonitoredItemsCount = new NodeId(Variables.SessionDiagnosticsVariableType_CreateMonitoredItemsCount); /// /// The identifier for the SessionDiagnosticsVariableType_ModifyMonitoredItemsCount Variable. /// public static readonly NodeId SessionDiagnosticsVariableType_ModifyMonitoredItemsCount = new NodeId(Variables.SessionDiagnosticsVariableType_ModifyMonitoredItemsCount); /// /// The identifier for the SessionDiagnosticsVariableType_SetMonitoringModeCount Variable. /// public static readonly NodeId SessionDiagnosticsVariableType_SetMonitoringModeCount = new NodeId(Variables.SessionDiagnosticsVariableType_SetMonitoringModeCount); /// /// The identifier for the SessionDiagnosticsVariableType_SetTriggeringCount Variable. /// public static readonly NodeId SessionDiagnosticsVariableType_SetTriggeringCount = new NodeId(Variables.SessionDiagnosticsVariableType_SetTriggeringCount); /// /// The identifier for the SessionDiagnosticsVariableType_DeleteMonitoredItemsCount Variable. /// public static readonly NodeId SessionDiagnosticsVariableType_DeleteMonitoredItemsCount = new NodeId(Variables.SessionDiagnosticsVariableType_DeleteMonitoredItemsCount); /// /// The identifier for the SessionDiagnosticsVariableType_CreateSubscriptionCount Variable. /// public static readonly NodeId SessionDiagnosticsVariableType_CreateSubscriptionCount = new NodeId(Variables.SessionDiagnosticsVariableType_CreateSubscriptionCount); /// /// The identifier for the SessionDiagnosticsVariableType_ModifySubscriptionCount Variable. /// public static readonly NodeId SessionDiagnosticsVariableType_ModifySubscriptionCount = new NodeId(Variables.SessionDiagnosticsVariableType_ModifySubscriptionCount); /// /// The identifier for the SessionDiagnosticsVariableType_SetPublishingModeCount Variable. /// public static readonly NodeId SessionDiagnosticsVariableType_SetPublishingModeCount = new NodeId(Variables.SessionDiagnosticsVariableType_SetPublishingModeCount); /// /// The identifier for the SessionDiagnosticsVariableType_PublishCount Variable. /// public static readonly NodeId SessionDiagnosticsVariableType_PublishCount = new NodeId(Variables.SessionDiagnosticsVariableType_PublishCount); /// /// The identifier for the SessionDiagnosticsVariableType_RepublishCount Variable. /// public static readonly NodeId SessionDiagnosticsVariableType_RepublishCount = new NodeId(Variables.SessionDiagnosticsVariableType_RepublishCount); /// /// The identifier for the SessionDiagnosticsVariableType_TransferSubscriptionsCount Variable. /// public static readonly NodeId SessionDiagnosticsVariableType_TransferSubscriptionsCount = new NodeId(Variables.SessionDiagnosticsVariableType_TransferSubscriptionsCount); /// /// The identifier for the SessionDiagnosticsVariableType_DeleteSubscriptionsCount Variable. /// public static readonly NodeId SessionDiagnosticsVariableType_DeleteSubscriptionsCount = new NodeId(Variables.SessionDiagnosticsVariableType_DeleteSubscriptionsCount); /// /// The identifier for the SessionDiagnosticsVariableType_AddNodesCount Variable. /// public static readonly NodeId SessionDiagnosticsVariableType_AddNodesCount = new NodeId(Variables.SessionDiagnosticsVariableType_AddNodesCount); /// /// The identifier for the SessionDiagnosticsVariableType_AddReferencesCount Variable. /// public static readonly NodeId SessionDiagnosticsVariableType_AddReferencesCount = new NodeId(Variables.SessionDiagnosticsVariableType_AddReferencesCount); /// /// The identifier for the SessionDiagnosticsVariableType_DeleteNodesCount Variable. /// public static readonly NodeId SessionDiagnosticsVariableType_DeleteNodesCount = new NodeId(Variables.SessionDiagnosticsVariableType_DeleteNodesCount); /// /// The identifier for the SessionDiagnosticsVariableType_DeleteReferencesCount Variable. /// public static readonly NodeId SessionDiagnosticsVariableType_DeleteReferencesCount = new NodeId(Variables.SessionDiagnosticsVariableType_DeleteReferencesCount); /// /// The identifier for the SessionDiagnosticsVariableType_BrowseCount Variable. /// public static readonly NodeId SessionDiagnosticsVariableType_BrowseCount = new NodeId(Variables.SessionDiagnosticsVariableType_BrowseCount); /// /// The identifier for the SessionDiagnosticsVariableType_BrowseNextCount Variable. /// public static readonly NodeId SessionDiagnosticsVariableType_BrowseNextCount = new NodeId(Variables.SessionDiagnosticsVariableType_BrowseNextCount); /// /// The identifier for the SessionDiagnosticsVariableType_TranslateBrowsePathsToNodeIdsCount Variable. /// public static readonly NodeId SessionDiagnosticsVariableType_TranslateBrowsePathsToNodeIdsCount = new NodeId(Variables.SessionDiagnosticsVariableType_TranslateBrowsePathsToNodeIdsCount); /// /// The identifier for the SessionDiagnosticsVariableType_QueryFirstCount Variable. /// public static readonly NodeId SessionDiagnosticsVariableType_QueryFirstCount = new NodeId(Variables.SessionDiagnosticsVariableType_QueryFirstCount); /// /// The identifier for the SessionDiagnosticsVariableType_QueryNextCount Variable. /// public static readonly NodeId SessionDiagnosticsVariableType_QueryNextCount = new NodeId(Variables.SessionDiagnosticsVariableType_QueryNextCount); /// /// The identifier for the SessionDiagnosticsVariableType_RegisterNodesCount Variable. /// public static readonly NodeId SessionDiagnosticsVariableType_RegisterNodesCount = new NodeId(Variables.SessionDiagnosticsVariableType_RegisterNodesCount); /// /// The identifier for the SessionDiagnosticsVariableType_UnregisterNodesCount Variable. /// public static readonly NodeId SessionDiagnosticsVariableType_UnregisterNodesCount = new NodeId(Variables.SessionDiagnosticsVariableType_UnregisterNodesCount); /// /// The identifier for the SessionSecurityDiagnosticsType_SessionId Variable. /// public static readonly NodeId SessionSecurityDiagnosticsType_SessionId = new NodeId(Variables.SessionSecurityDiagnosticsType_SessionId); /// /// The identifier for the SessionSecurityDiagnosticsType_ClientUserIdOfSession Variable. /// public static readonly NodeId SessionSecurityDiagnosticsType_ClientUserIdOfSession = new NodeId(Variables.SessionSecurityDiagnosticsType_ClientUserIdOfSession); /// /// The identifier for the SessionSecurityDiagnosticsType_ClientUserIdHistory Variable. /// public static readonly NodeId SessionSecurityDiagnosticsType_ClientUserIdHistory = new NodeId(Variables.SessionSecurityDiagnosticsType_ClientUserIdHistory); /// /// The identifier for the SessionSecurityDiagnosticsType_AuthenticationMechanism Variable. /// public static readonly NodeId SessionSecurityDiagnosticsType_AuthenticationMechanism = new NodeId(Variables.SessionSecurityDiagnosticsType_AuthenticationMechanism); /// /// The identifier for the SessionSecurityDiagnosticsType_Encoding Variable. /// public static readonly NodeId SessionSecurityDiagnosticsType_Encoding = new NodeId(Variables.SessionSecurityDiagnosticsType_Encoding); /// /// The identifier for the SessionSecurityDiagnosticsType_TransportProtocol Variable. /// public static readonly NodeId SessionSecurityDiagnosticsType_TransportProtocol = new NodeId(Variables.SessionSecurityDiagnosticsType_TransportProtocol); /// /// The identifier for the SessionSecurityDiagnosticsType_SecurityMode Variable. /// public static readonly NodeId SessionSecurityDiagnosticsType_SecurityMode = new NodeId(Variables.SessionSecurityDiagnosticsType_SecurityMode); /// /// The identifier for the SessionSecurityDiagnosticsType_SecurityPolicyUri Variable. /// public static readonly NodeId SessionSecurityDiagnosticsType_SecurityPolicyUri = new NodeId(Variables.SessionSecurityDiagnosticsType_SecurityPolicyUri); /// /// The identifier for the SessionSecurityDiagnosticsType_ClientCertificate Variable. /// public static readonly NodeId SessionSecurityDiagnosticsType_ClientCertificate = new NodeId(Variables.SessionSecurityDiagnosticsType_ClientCertificate); /// /// The identifier for the OptionSetType_OptionSetValues Variable. /// public static readonly NodeId OptionSetType_OptionSetValues = new NodeId(Variables.OptionSetType_OptionSetValues); /// /// The identifier for the OptionSetType_BitMask Variable. /// public static readonly NodeId OptionSetType_BitMask = new NodeId(Variables.OptionSetType_BitMask); /// /// The identifier for the Server_ServerArray Variable. /// public static readonly NodeId Server_ServerArray = new NodeId(Variables.Server_ServerArray); /// /// The identifier for the Server_NamespaceArray Variable. /// public static readonly NodeId Server_NamespaceArray = new NodeId(Variables.Server_NamespaceArray); /// /// The identifier for the Server_ServerStatus Variable. /// public static readonly NodeId Server_ServerStatus = new NodeId(Variables.Server_ServerStatus); /// /// The identifier for the Server_ServerStatus_StartTime Variable. /// public static readonly NodeId Server_ServerStatus_StartTime = new NodeId(Variables.Server_ServerStatus_StartTime); /// /// The identifier for the Server_ServerStatus_CurrentTime Variable. /// public static readonly NodeId Server_ServerStatus_CurrentTime = new NodeId(Variables.Server_ServerStatus_CurrentTime); /// /// The identifier for the Server_ServerStatus_State Variable. /// public static readonly NodeId Server_ServerStatus_State = new NodeId(Variables.Server_ServerStatus_State); /// /// The identifier for the Server_ServerStatus_BuildInfo Variable. /// public static readonly NodeId Server_ServerStatus_BuildInfo = new NodeId(Variables.Server_ServerStatus_BuildInfo); /// /// The identifier for the Server_ServerStatus_BuildInfo_ProductUri Variable. /// public static readonly NodeId Server_ServerStatus_BuildInfo_ProductUri = new NodeId(Variables.Server_ServerStatus_BuildInfo_ProductUri); /// /// The identifier for the Server_ServerStatus_BuildInfo_ManufacturerName Variable. /// public static readonly NodeId Server_ServerStatus_BuildInfo_ManufacturerName = new NodeId(Variables.Server_ServerStatus_BuildInfo_ManufacturerName); /// /// The identifier for the Server_ServerStatus_BuildInfo_ProductName Variable. /// public static readonly NodeId Server_ServerStatus_BuildInfo_ProductName = new NodeId(Variables.Server_ServerStatus_BuildInfo_ProductName); /// /// The identifier for the Server_ServerStatus_BuildInfo_SoftwareVersion Variable. /// public static readonly NodeId Server_ServerStatus_BuildInfo_SoftwareVersion = new NodeId(Variables.Server_ServerStatus_BuildInfo_SoftwareVersion); /// /// The identifier for the Server_ServerStatus_BuildInfo_BuildNumber Variable. /// public static readonly NodeId Server_ServerStatus_BuildInfo_BuildNumber = new NodeId(Variables.Server_ServerStatus_BuildInfo_BuildNumber); /// /// The identifier for the Server_ServerStatus_BuildInfo_BuildDate Variable. /// public static readonly NodeId Server_ServerStatus_BuildInfo_BuildDate = new NodeId(Variables.Server_ServerStatus_BuildInfo_BuildDate); /// /// The identifier for the Server_ServerStatus_SecondsTillShutdown Variable. /// public static readonly NodeId Server_ServerStatus_SecondsTillShutdown = new NodeId(Variables.Server_ServerStatus_SecondsTillShutdown); /// /// The identifier for the Server_ServerStatus_ShutdownReason Variable. /// public static readonly NodeId Server_ServerStatus_ShutdownReason = new NodeId(Variables.Server_ServerStatus_ShutdownReason); /// /// The identifier for the Server_ServiceLevel Variable. /// public static readonly NodeId Server_ServiceLevel = new NodeId(Variables.Server_ServiceLevel); /// /// The identifier for the Server_Auditing Variable. /// public static readonly NodeId Server_Auditing = new NodeId(Variables.Server_Auditing); /// /// The identifier for the Server_ServerCapabilities_ServerProfileArray Variable. /// public static readonly NodeId Server_ServerCapabilities_ServerProfileArray = new NodeId(Variables.Server_ServerCapabilities_ServerProfileArray); /// /// The identifier for the Server_ServerCapabilities_LocaleIdArray Variable. /// public static readonly NodeId Server_ServerCapabilities_LocaleIdArray = new NodeId(Variables.Server_ServerCapabilities_LocaleIdArray); /// /// The identifier for the Server_ServerCapabilities_MinSupportedSampleRate Variable. /// public static readonly NodeId Server_ServerCapabilities_MinSupportedSampleRate = new NodeId(Variables.Server_ServerCapabilities_MinSupportedSampleRate); /// /// The identifier for the Server_ServerCapabilities_MaxBrowseContinuationPoints Variable. /// public static readonly NodeId Server_ServerCapabilities_MaxBrowseContinuationPoints = new NodeId(Variables.Server_ServerCapabilities_MaxBrowseContinuationPoints); /// /// The identifier for the Server_ServerCapabilities_MaxQueryContinuationPoints Variable. /// public static readonly NodeId Server_ServerCapabilities_MaxQueryContinuationPoints = new NodeId(Variables.Server_ServerCapabilities_MaxQueryContinuationPoints); /// /// The identifier for the Server_ServerCapabilities_MaxHistoryContinuationPoints Variable. /// public static readonly NodeId Server_ServerCapabilities_MaxHistoryContinuationPoints = new NodeId(Variables.Server_ServerCapabilities_MaxHistoryContinuationPoints); /// /// The identifier for the Server_ServerCapabilities_SoftwareCertificates Variable. /// public static readonly NodeId Server_ServerCapabilities_SoftwareCertificates = new NodeId(Variables.Server_ServerCapabilities_SoftwareCertificates); /// /// The identifier for the Server_ServerCapabilities_MaxArrayLength Variable. /// public static readonly NodeId Server_ServerCapabilities_MaxArrayLength = new NodeId(Variables.Server_ServerCapabilities_MaxArrayLength); /// /// The identifier for the Server_ServerCapabilities_MaxStringLength Variable. /// public static readonly NodeId Server_ServerCapabilities_MaxStringLength = new NodeId(Variables.Server_ServerCapabilities_MaxStringLength); /// /// The identifier for the Server_ServerCapabilities_OperationLimits_MaxNodesPerRead Variable. /// public static readonly NodeId Server_ServerCapabilities_OperationLimits_MaxNodesPerRead = new NodeId(Variables.Server_ServerCapabilities_OperationLimits_MaxNodesPerRead); /// /// The identifier for the Server_ServerCapabilities_OperationLimits_MaxNodesPerHistoryReadData Variable. /// public static readonly NodeId Server_ServerCapabilities_OperationLimits_MaxNodesPerHistoryReadData = new NodeId(Variables.Server_ServerCapabilities_OperationLimits_MaxNodesPerHistoryReadData); /// /// The identifier for the Server_ServerCapabilities_OperationLimits_MaxNodesPerHistoryReadEvents Variable. /// public static readonly NodeId Server_ServerCapabilities_OperationLimits_MaxNodesPerHistoryReadEvents = new NodeId(Variables.Server_ServerCapabilities_OperationLimits_MaxNodesPerHistoryReadEvents); /// /// The identifier for the Server_ServerCapabilities_OperationLimits_MaxNodesPerWrite Variable. /// public static readonly NodeId Server_ServerCapabilities_OperationLimits_MaxNodesPerWrite = new NodeId(Variables.Server_ServerCapabilities_OperationLimits_MaxNodesPerWrite); /// /// The identifier for the Server_ServerCapabilities_OperationLimits_MaxNodesPerHistoryUpdateData Variable. /// public static readonly NodeId Server_ServerCapabilities_OperationLimits_MaxNodesPerHistoryUpdateData = new NodeId(Variables.Server_ServerCapabilities_OperationLimits_MaxNodesPerHistoryUpdateData); /// /// The identifier for the Server_ServerCapabilities_OperationLimits_MaxNodesPerHistoryUpdateEvents Variable. /// public static readonly NodeId Server_ServerCapabilities_OperationLimits_MaxNodesPerHistoryUpdateEvents = new NodeId(Variables.Server_ServerCapabilities_OperationLimits_MaxNodesPerHistoryUpdateEvents); /// /// The identifier for the Server_ServerCapabilities_OperationLimits_MaxNodesPerMethodCall Variable. /// public static readonly NodeId Server_ServerCapabilities_OperationLimits_MaxNodesPerMethodCall = new NodeId(Variables.Server_ServerCapabilities_OperationLimits_MaxNodesPerMethodCall); /// /// The identifier for the Server_ServerCapabilities_OperationLimits_MaxNodesPerBrowse Variable. /// public static readonly NodeId Server_ServerCapabilities_OperationLimits_MaxNodesPerBrowse = new NodeId(Variables.Server_ServerCapabilities_OperationLimits_MaxNodesPerBrowse); /// /// The identifier for the Server_ServerCapabilities_OperationLimits_MaxNodesPerRegisterNodes Variable. /// public static readonly NodeId Server_ServerCapabilities_OperationLimits_MaxNodesPerRegisterNodes = new NodeId(Variables.Server_ServerCapabilities_OperationLimits_MaxNodesPerRegisterNodes); /// /// The identifier for the Server_ServerCapabilities_OperationLimits_MaxNodesPerTranslateBrowsePathsToNodeIds Variable. /// public static readonly NodeId Server_ServerCapabilities_OperationLimits_MaxNodesPerTranslateBrowsePathsToNodeIds = new NodeId(Variables.Server_ServerCapabilities_OperationLimits_MaxNodesPerTranslateBrowsePathsToNodeIds); /// /// The identifier for the Server_ServerCapabilities_OperationLimits_MaxNodesPerNodeManagement Variable. /// public static readonly NodeId Server_ServerCapabilities_OperationLimits_MaxNodesPerNodeManagement = new NodeId(Variables.Server_ServerCapabilities_OperationLimits_MaxNodesPerNodeManagement); /// /// The identifier for the Server_ServerCapabilities_OperationLimits_MaxMonitoredItemsPerCall Variable. /// public static readonly NodeId Server_ServerCapabilities_OperationLimits_MaxMonitoredItemsPerCall = new NodeId(Variables.Server_ServerCapabilities_OperationLimits_MaxMonitoredItemsPerCall); /// /// The identifier for the Server_ServerDiagnostics_ServerDiagnosticsSummary Variable. /// public static readonly NodeId Server_ServerDiagnostics_ServerDiagnosticsSummary = new NodeId(Variables.Server_ServerDiagnostics_ServerDiagnosticsSummary); /// /// The identifier for the Server_ServerDiagnostics_ServerDiagnosticsSummary_ServerViewCount Variable. /// public static readonly NodeId Server_ServerDiagnostics_ServerDiagnosticsSummary_ServerViewCount = new NodeId(Variables.Server_ServerDiagnostics_ServerDiagnosticsSummary_ServerViewCount); /// /// The identifier for the Server_ServerDiagnostics_ServerDiagnosticsSummary_CurrentSessionCount Variable. /// public static readonly NodeId Server_ServerDiagnostics_ServerDiagnosticsSummary_CurrentSessionCount = new NodeId(Variables.Server_ServerDiagnostics_ServerDiagnosticsSummary_CurrentSessionCount); /// /// The identifier for the Server_ServerDiagnostics_ServerDiagnosticsSummary_CumulatedSessionCount Variable. /// public static readonly NodeId Server_ServerDiagnostics_ServerDiagnosticsSummary_CumulatedSessionCount = new NodeId(Variables.Server_ServerDiagnostics_ServerDiagnosticsSummary_CumulatedSessionCount); /// /// The identifier for the Server_ServerDiagnostics_ServerDiagnosticsSummary_SecurityRejectedSessionCount Variable. /// public static readonly NodeId Server_ServerDiagnostics_ServerDiagnosticsSummary_SecurityRejectedSessionCount = new NodeId(Variables.Server_ServerDiagnostics_ServerDiagnosticsSummary_SecurityRejectedSessionCount); /// /// The identifier for the Server_ServerDiagnostics_ServerDiagnosticsSummary_RejectedSessionCount Variable. /// public static readonly NodeId Server_ServerDiagnostics_ServerDiagnosticsSummary_RejectedSessionCount = new NodeId(Variables.Server_ServerDiagnostics_ServerDiagnosticsSummary_RejectedSessionCount); /// /// The identifier for the Server_ServerDiagnostics_ServerDiagnosticsSummary_SessionTimeoutCount Variable. /// public static readonly NodeId Server_ServerDiagnostics_ServerDiagnosticsSummary_SessionTimeoutCount = new NodeId(Variables.Server_ServerDiagnostics_ServerDiagnosticsSummary_SessionTimeoutCount); /// /// The identifier for the Server_ServerDiagnostics_ServerDiagnosticsSummary_SessionAbortCount Variable. /// public static readonly NodeId Server_ServerDiagnostics_ServerDiagnosticsSummary_SessionAbortCount = new NodeId(Variables.Server_ServerDiagnostics_ServerDiagnosticsSummary_SessionAbortCount); /// /// The identifier for the Server_ServerDiagnostics_ServerDiagnosticsSummary_PublishingIntervalCount Variable. /// public static readonly NodeId Server_ServerDiagnostics_ServerDiagnosticsSummary_PublishingIntervalCount = new NodeId(Variables.Server_ServerDiagnostics_ServerDiagnosticsSummary_PublishingIntervalCount); /// /// The identifier for the Server_ServerDiagnostics_ServerDiagnosticsSummary_CurrentSubscriptionCount Variable. /// public static readonly NodeId Server_ServerDiagnostics_ServerDiagnosticsSummary_CurrentSubscriptionCount = new NodeId(Variables.Server_ServerDiagnostics_ServerDiagnosticsSummary_CurrentSubscriptionCount); /// /// The identifier for the Server_ServerDiagnostics_ServerDiagnosticsSummary_CumulatedSubscriptionCount Variable. /// public static readonly NodeId Server_ServerDiagnostics_ServerDiagnosticsSummary_CumulatedSubscriptionCount = new NodeId(Variables.Server_ServerDiagnostics_ServerDiagnosticsSummary_CumulatedSubscriptionCount); /// /// The identifier for the Server_ServerDiagnostics_ServerDiagnosticsSummary_SecurityRejectedRequestsCount Variable. /// public static readonly NodeId Server_ServerDiagnostics_ServerDiagnosticsSummary_SecurityRejectedRequestsCount = new NodeId(Variables.Server_ServerDiagnostics_ServerDiagnosticsSummary_SecurityRejectedRequestsCount); /// /// The identifier for the Server_ServerDiagnostics_ServerDiagnosticsSummary_RejectedRequestsCount Variable. /// public static readonly NodeId Server_ServerDiagnostics_ServerDiagnosticsSummary_RejectedRequestsCount = new NodeId(Variables.Server_ServerDiagnostics_ServerDiagnosticsSummary_RejectedRequestsCount); /// /// The identifier for the Server_ServerDiagnostics_SamplingIntervalDiagnosticsArray Variable. /// public static readonly NodeId Server_ServerDiagnostics_SamplingIntervalDiagnosticsArray = new NodeId(Variables.Server_ServerDiagnostics_SamplingIntervalDiagnosticsArray); /// /// The identifier for the Server_ServerDiagnostics_SubscriptionDiagnosticsArray Variable. /// public static readonly NodeId Server_ServerDiagnostics_SubscriptionDiagnosticsArray = new NodeId(Variables.Server_ServerDiagnostics_SubscriptionDiagnosticsArray); /// /// The identifier for the Server_ServerDiagnostics_SessionsDiagnosticsSummary_SessionDiagnosticsArray Variable. /// public static readonly NodeId Server_ServerDiagnostics_SessionsDiagnosticsSummary_SessionDiagnosticsArray = new NodeId(Variables.Server_ServerDiagnostics_SessionsDiagnosticsSummary_SessionDiagnosticsArray); /// /// The identifier for the Server_ServerDiagnostics_SessionsDiagnosticsSummary_SessionSecurityDiagnosticsArray Variable. /// public static readonly NodeId Server_ServerDiagnostics_SessionsDiagnosticsSummary_SessionSecurityDiagnosticsArray = new NodeId(Variables.Server_ServerDiagnostics_SessionsDiagnosticsSummary_SessionSecurityDiagnosticsArray); /// /// The identifier for the Server_ServerDiagnostics_EnabledFlag Variable. /// public static readonly NodeId Server_ServerDiagnostics_EnabledFlag = new NodeId(Variables.Server_ServerDiagnostics_EnabledFlag); /// /// The identifier for the Server_ServerRedundancy_RedundancySupport Variable. /// public static readonly NodeId Server_ServerRedundancy_RedundancySupport = new NodeId(Variables.Server_ServerRedundancy_RedundancySupport); /// /// The identifier for the Server_Namespaces_AddressSpaceFile_Size Variable. /// public static readonly NodeId Server_Namespaces_AddressSpaceFile_Size = new NodeId(Variables.Server_Namespaces_AddressSpaceFile_Size); /// /// The identifier for the Server_Namespaces_AddressSpaceFile_Writeable Variable. /// public static readonly NodeId Server_Namespaces_AddressSpaceFile_Writeable = new NodeId(Variables.Server_Namespaces_AddressSpaceFile_Writeable); /// /// The identifier for the Server_Namespaces_AddressSpaceFile_UserWriteable Variable. /// public static readonly NodeId Server_Namespaces_AddressSpaceFile_UserWriteable = new NodeId(Variables.Server_Namespaces_AddressSpaceFile_UserWriteable); /// /// The identifier for the Server_Namespaces_AddressSpaceFile_OpenCount Variable. /// public static readonly NodeId Server_Namespaces_AddressSpaceFile_OpenCount = new NodeId(Variables.Server_Namespaces_AddressSpaceFile_OpenCount); /// /// The identifier for the Server_Namespaces_AddressSpaceFile_Open_InputArguments Variable. /// public static readonly NodeId Server_Namespaces_AddressSpaceFile_Open_InputArguments = new NodeId(Variables.Server_Namespaces_AddressSpaceFile_Open_InputArguments); /// /// The identifier for the Server_Namespaces_AddressSpaceFile_Open_OutputArguments Variable. /// public static readonly NodeId Server_Namespaces_AddressSpaceFile_Open_OutputArguments = new NodeId(Variables.Server_Namespaces_AddressSpaceFile_Open_OutputArguments); /// /// The identifier for the Server_Namespaces_AddressSpaceFile_Close_InputArguments Variable. /// public static readonly NodeId Server_Namespaces_AddressSpaceFile_Close_InputArguments = new NodeId(Variables.Server_Namespaces_AddressSpaceFile_Close_InputArguments); /// /// The identifier for the Server_Namespaces_AddressSpaceFile_Read_InputArguments Variable. /// public static readonly NodeId Server_Namespaces_AddressSpaceFile_Read_InputArguments = new NodeId(Variables.Server_Namespaces_AddressSpaceFile_Read_InputArguments); /// /// The identifier for the Server_Namespaces_AddressSpaceFile_Read_OutputArguments Variable. /// public static readonly NodeId Server_Namespaces_AddressSpaceFile_Read_OutputArguments = new NodeId(Variables.Server_Namespaces_AddressSpaceFile_Read_OutputArguments); /// /// The identifier for the Server_Namespaces_AddressSpaceFile_Write_InputArguments Variable. /// public static readonly NodeId Server_Namespaces_AddressSpaceFile_Write_InputArguments = new NodeId(Variables.Server_Namespaces_AddressSpaceFile_Write_InputArguments); /// /// The identifier for the Server_Namespaces_AddressSpaceFile_GetPosition_InputArguments Variable. /// public static readonly NodeId Server_Namespaces_AddressSpaceFile_GetPosition_InputArguments = new NodeId(Variables.Server_Namespaces_AddressSpaceFile_GetPosition_InputArguments); /// /// The identifier for the Server_Namespaces_AddressSpaceFile_GetPosition_OutputArguments Variable. /// public static readonly NodeId Server_Namespaces_AddressSpaceFile_GetPosition_OutputArguments = new NodeId(Variables.Server_Namespaces_AddressSpaceFile_GetPosition_OutputArguments); /// /// The identifier for the Server_Namespaces_AddressSpaceFile_SetPosition_InputArguments Variable. /// public static readonly NodeId Server_Namespaces_AddressSpaceFile_SetPosition_InputArguments = new NodeId(Variables.Server_Namespaces_AddressSpaceFile_SetPosition_InputArguments); /// /// The identifier for the Server_GetMonitoredItems_InputArguments Variable. /// public static readonly NodeId Server_GetMonitoredItems_InputArguments = new NodeId(Variables.Server_GetMonitoredItems_InputArguments); /// /// The identifier for the Server_GetMonitoredItems_OutputArguments Variable. /// public static readonly NodeId Server_GetMonitoredItems_OutputArguments = new NodeId(Variables.Server_GetMonitoredItems_OutputArguments); /// /// The identifier for the Server_ServerRedundancy_CurrentServerId Variable. /// public static readonly NodeId Server_ServerRedundancy_CurrentServerId = new NodeId(Variables.Server_ServerRedundancy_CurrentServerId); /// /// The identifier for the Server_ServerRedundancy_RedundantServerArray Variable. /// public static readonly NodeId Server_ServerRedundancy_RedundantServerArray = new NodeId(Variables.Server_ServerRedundancy_RedundantServerArray); /// /// The identifier for the Server_ServerRedundancy_ServerUriArray Variable. /// public static readonly NodeId Server_ServerRedundancy_ServerUriArray = new NodeId(Variables.Server_ServerRedundancy_ServerUriArray); /// /// The identifier for the HistoryServerCapabilities_AccessHistoryDataCapability Variable. /// public static readonly NodeId HistoryServerCapabilities_AccessHistoryDataCapability = new NodeId(Variables.HistoryServerCapabilities_AccessHistoryDataCapability); /// /// The identifier for the HistoryServerCapabilities_AccessHistoryEventsCapability Variable. /// public static readonly NodeId HistoryServerCapabilities_AccessHistoryEventsCapability = new NodeId(Variables.HistoryServerCapabilities_AccessHistoryEventsCapability); /// /// The identifier for the HistoryServerCapabilities_MaxReturnDataValues Variable. /// public static readonly NodeId HistoryServerCapabilities_MaxReturnDataValues = new NodeId(Variables.HistoryServerCapabilities_MaxReturnDataValues); /// /// The identifier for the HistoryServerCapabilities_MaxReturnEventValues Variable. /// public static readonly NodeId HistoryServerCapabilities_MaxReturnEventValues = new NodeId(Variables.HistoryServerCapabilities_MaxReturnEventValues); /// /// The identifier for the HistoryServerCapabilities_InsertDataCapability Variable. /// public static readonly NodeId HistoryServerCapabilities_InsertDataCapability = new NodeId(Variables.HistoryServerCapabilities_InsertDataCapability); /// /// The identifier for the HistoryServerCapabilities_ReplaceDataCapability Variable. /// public static readonly NodeId HistoryServerCapabilities_ReplaceDataCapability = new NodeId(Variables.HistoryServerCapabilities_ReplaceDataCapability); /// /// The identifier for the HistoryServerCapabilities_UpdateDataCapability Variable. /// public static readonly NodeId HistoryServerCapabilities_UpdateDataCapability = new NodeId(Variables.HistoryServerCapabilities_UpdateDataCapability); /// /// The identifier for the HistoryServerCapabilities_DeleteRawCapability Variable. /// public static readonly NodeId HistoryServerCapabilities_DeleteRawCapability = new NodeId(Variables.HistoryServerCapabilities_DeleteRawCapability); /// /// The identifier for the HistoryServerCapabilities_DeleteAtTimeCapability Variable. /// public static readonly NodeId HistoryServerCapabilities_DeleteAtTimeCapability = new NodeId(Variables.HistoryServerCapabilities_DeleteAtTimeCapability); /// /// The identifier for the HistoryServerCapabilities_InsertEventCapability Variable. /// public static readonly NodeId HistoryServerCapabilities_InsertEventCapability = new NodeId(Variables.HistoryServerCapabilities_InsertEventCapability); /// /// The identifier for the HistoryServerCapabilities_ReplaceEventCapability Variable. /// public static readonly NodeId HistoryServerCapabilities_ReplaceEventCapability = new NodeId(Variables.HistoryServerCapabilities_ReplaceEventCapability); /// /// The identifier for the HistoryServerCapabilities_UpdateEventCapability Variable. /// public static readonly NodeId HistoryServerCapabilities_UpdateEventCapability = new NodeId(Variables.HistoryServerCapabilities_UpdateEventCapability); /// /// The identifier for the HistoryServerCapabilities_DeleteEventCapability Variable. /// public static readonly NodeId HistoryServerCapabilities_DeleteEventCapability = new NodeId(Variables.HistoryServerCapabilities_DeleteEventCapability); /// /// The identifier for the HistoryServerCapabilities_InsertAnnotationCapability Variable. /// public static readonly NodeId HistoryServerCapabilities_InsertAnnotationCapability = new NodeId(Variables.HistoryServerCapabilities_InsertAnnotationCapability); /// /// The identifier for the GetMonitoredItemsMethodType_InputArguments Variable. /// public static readonly NodeId GetMonitoredItemsMethodType_InputArguments = new NodeId(Variables.GetMonitoredItemsMethodType_InputArguments); /// /// The identifier for the GetMonitoredItemsMethodType_OutputArguments Variable. /// public static readonly NodeId GetMonitoredItemsMethodType_OutputArguments = new NodeId(Variables.GetMonitoredItemsMethodType_OutputArguments); /// /// The identifier for the StateMachineType_CurrentState Variable. /// public static readonly NodeId StateMachineType_CurrentState = new NodeId(Variables.StateMachineType_CurrentState); /// /// The identifier for the StateMachineType_CurrentState_Id Variable. /// public static readonly NodeId StateMachineType_CurrentState_Id = new NodeId(Variables.StateMachineType_CurrentState_Id); /// /// The identifier for the StateMachineType_LastTransition Variable. /// public static readonly NodeId StateMachineType_LastTransition = new NodeId(Variables.StateMachineType_LastTransition); /// /// The identifier for the StateMachineType_LastTransition_Id Variable. /// public static readonly NodeId StateMachineType_LastTransition_Id = new NodeId(Variables.StateMachineType_LastTransition_Id); /// /// The identifier for the StateVariableType_Id Variable. /// public static readonly NodeId StateVariableType_Id = new NodeId(Variables.StateVariableType_Id); /// /// The identifier for the StateVariableType_Name Variable. /// public static readonly NodeId StateVariableType_Name = new NodeId(Variables.StateVariableType_Name); /// /// The identifier for the StateVariableType_Number Variable. /// public static readonly NodeId StateVariableType_Number = new NodeId(Variables.StateVariableType_Number); /// /// The identifier for the StateVariableType_EffectiveDisplayName Variable. /// public static readonly NodeId StateVariableType_EffectiveDisplayName = new NodeId(Variables.StateVariableType_EffectiveDisplayName); /// /// The identifier for the TransitionVariableType_Id Variable. /// public static readonly NodeId TransitionVariableType_Id = new NodeId(Variables.TransitionVariableType_Id); /// /// The identifier for the TransitionVariableType_Name Variable. /// public static readonly NodeId TransitionVariableType_Name = new NodeId(Variables.TransitionVariableType_Name); /// /// The identifier for the TransitionVariableType_Number Variable. /// public static readonly NodeId TransitionVariableType_Number = new NodeId(Variables.TransitionVariableType_Number); /// /// The identifier for the TransitionVariableType_TransitionTime Variable. /// public static readonly NodeId TransitionVariableType_TransitionTime = new NodeId(Variables.TransitionVariableType_TransitionTime); /// /// The identifier for the TransitionVariableType_EffectiveTransitionTime Variable. /// public static readonly NodeId TransitionVariableType_EffectiveTransitionTime = new NodeId(Variables.TransitionVariableType_EffectiveTransitionTime); /// /// The identifier for the FiniteStateMachineType_CurrentState Variable. /// public static readonly NodeId FiniteStateMachineType_CurrentState = new NodeId(Variables.FiniteStateMachineType_CurrentState); /// /// The identifier for the FiniteStateMachineType_LastTransition Variable. /// public static readonly NodeId FiniteStateMachineType_LastTransition = new NodeId(Variables.FiniteStateMachineType_LastTransition); /// /// The identifier for the FiniteStateVariableType_Id Variable. /// public static readonly NodeId FiniteStateVariableType_Id = new NodeId(Variables.FiniteStateVariableType_Id); /// /// The identifier for the FiniteTransitionVariableType_Id Variable. /// public static readonly NodeId FiniteTransitionVariableType_Id = new NodeId(Variables.FiniteTransitionVariableType_Id); /// /// The identifier for the StateType_StateNumber Variable. /// public static readonly NodeId StateType_StateNumber = new NodeId(Variables.StateType_StateNumber); /// /// The identifier for the TransitionType_TransitionNumber Variable. /// public static readonly NodeId TransitionType_TransitionNumber = new NodeId(Variables.TransitionType_TransitionNumber); /// /// The identifier for the TransitionEventType_Transition Variable. /// public static readonly NodeId TransitionEventType_Transition = new NodeId(Variables.TransitionEventType_Transition); /// /// The identifier for the TransitionEventType_Transition_Id Variable. /// public static readonly NodeId TransitionEventType_Transition_Id = new NodeId(Variables.TransitionEventType_Transition_Id); /// /// The identifier for the TransitionEventType_FromState Variable. /// public static readonly NodeId TransitionEventType_FromState = new NodeId(Variables.TransitionEventType_FromState); /// /// The identifier for the TransitionEventType_FromState_Id Variable. /// public static readonly NodeId TransitionEventType_FromState_Id = new NodeId(Variables.TransitionEventType_FromState_Id); /// /// The identifier for the TransitionEventType_ToState Variable. /// public static readonly NodeId TransitionEventType_ToState = new NodeId(Variables.TransitionEventType_ToState); /// /// The identifier for the TransitionEventType_ToState_Id Variable. /// public static readonly NodeId TransitionEventType_ToState_Id = new NodeId(Variables.TransitionEventType_ToState_Id); /// /// The identifier for the AuditUpdateStateEventType_OldStateId Variable. /// public static readonly NodeId AuditUpdateStateEventType_OldStateId = new NodeId(Variables.AuditUpdateStateEventType_OldStateId); /// /// The identifier for the AuditUpdateStateEventType_NewStateId Variable. /// public static readonly NodeId AuditUpdateStateEventType_NewStateId = new NodeId(Variables.AuditUpdateStateEventType_NewStateId); /// /// The identifier for the OpenFileMode_EnumValues Variable. /// public static readonly NodeId OpenFileMode_EnumValues = new NodeId(Variables.OpenFileMode_EnumValues); /// /// The identifier for the OpenMethodType_InputArguments Variable. /// public static readonly NodeId OpenMethodType_InputArguments = new NodeId(Variables.OpenMethodType_InputArguments); /// /// The identifier for the OpenMethodType_OutputArguments Variable. /// public static readonly NodeId OpenMethodType_OutputArguments = new NodeId(Variables.OpenMethodType_OutputArguments); /// /// The identifier for the CloseMethodType_InputArguments Variable. /// public static readonly NodeId CloseMethodType_InputArguments = new NodeId(Variables.CloseMethodType_InputArguments); /// /// The identifier for the ReadMethodType_InputArguments Variable. /// public static readonly NodeId ReadMethodType_InputArguments = new NodeId(Variables.ReadMethodType_InputArguments); /// /// The identifier for the ReadMethodType_OutputArguments Variable. /// public static readonly NodeId ReadMethodType_OutputArguments = new NodeId(Variables.ReadMethodType_OutputArguments); /// /// The identifier for the WriteMethodType_InputArguments Variable. /// public static readonly NodeId WriteMethodType_InputArguments = new NodeId(Variables.WriteMethodType_InputArguments); /// /// The identifier for the GetPositionMethodType_InputArguments Variable. /// public static readonly NodeId GetPositionMethodType_InputArguments = new NodeId(Variables.GetPositionMethodType_InputArguments); /// /// The identifier for the GetPositionMethodType_OutputArguments Variable. /// public static readonly NodeId GetPositionMethodType_OutputArguments = new NodeId(Variables.GetPositionMethodType_OutputArguments); /// /// The identifier for the SetPositionMethodType_InputArguments Variable. /// public static readonly NodeId SetPositionMethodType_InputArguments = new NodeId(Variables.SetPositionMethodType_InputArguments); /// /// The identifier for the DataItemType_Definition Variable. /// public static readonly NodeId DataItemType_Definition = new NodeId(Variables.DataItemType_Definition); /// /// The identifier for the DataItemType_ValuePrecision Variable. /// public static readonly NodeId DataItemType_ValuePrecision = new NodeId(Variables.DataItemType_ValuePrecision); /// /// The identifier for the AnalogItemType_InstrumentRange Variable. /// public static readonly NodeId AnalogItemType_InstrumentRange = new NodeId(Variables.AnalogItemType_InstrumentRange); /// /// The identifier for the AnalogItemType_EURange Variable. /// public static readonly NodeId AnalogItemType_EURange = new NodeId(Variables.AnalogItemType_EURange); /// /// The identifier for the AnalogItemType_EngineeringUnits Variable. /// public static readonly NodeId AnalogItemType_EngineeringUnits = new NodeId(Variables.AnalogItemType_EngineeringUnits); /// /// The identifier for the TwoStateDiscreteType_FalseState Variable. /// public static readonly NodeId TwoStateDiscreteType_FalseState = new NodeId(Variables.TwoStateDiscreteType_FalseState); /// /// The identifier for the TwoStateDiscreteType_TrueState Variable. /// public static readonly NodeId TwoStateDiscreteType_TrueState = new NodeId(Variables.TwoStateDiscreteType_TrueState); /// /// The identifier for the MultiStateDiscreteType_EnumStrings Variable. /// public static readonly NodeId MultiStateDiscreteType_EnumStrings = new NodeId(Variables.MultiStateDiscreteType_EnumStrings); /// /// The identifier for the MultiStateValueDiscreteType_EnumValues Variable. /// public static readonly NodeId MultiStateValueDiscreteType_EnumValues = new NodeId(Variables.MultiStateValueDiscreteType_EnumValues); /// /// The identifier for the MultiStateValueDiscreteType_ValueAsText Variable. /// public static readonly NodeId MultiStateValueDiscreteType_ValueAsText = new NodeId(Variables.MultiStateValueDiscreteType_ValueAsText); /// /// The identifier for the ArrayItemType_InstrumentRange Variable. /// public static readonly NodeId ArrayItemType_InstrumentRange = new NodeId(Variables.ArrayItemType_InstrumentRange); /// /// The identifier for the ArrayItemType_EURange Variable. /// public static readonly NodeId ArrayItemType_EURange = new NodeId(Variables.ArrayItemType_EURange); /// /// The identifier for the ArrayItemType_EngineeringUnits Variable. /// public static readonly NodeId ArrayItemType_EngineeringUnits = new NodeId(Variables.ArrayItemType_EngineeringUnits); /// /// The identifier for the ArrayItemType_Title Variable. /// public static readonly NodeId ArrayItemType_Title = new NodeId(Variables.ArrayItemType_Title); /// /// The identifier for the ArrayItemType_AxisScaleType Variable. /// public static readonly NodeId ArrayItemType_AxisScaleType = new NodeId(Variables.ArrayItemType_AxisScaleType); /// /// The identifier for the YArrayItemType_XAxisDefinition Variable. /// public static readonly NodeId YArrayItemType_XAxisDefinition = new NodeId(Variables.YArrayItemType_XAxisDefinition); /// /// The identifier for the XYArrayItemType_XAxisDefinition Variable. /// public static readonly NodeId XYArrayItemType_XAxisDefinition = new NodeId(Variables.XYArrayItemType_XAxisDefinition); /// /// The identifier for the ImageItemType_XAxisDefinition Variable. /// public static readonly NodeId ImageItemType_XAxisDefinition = new NodeId(Variables.ImageItemType_XAxisDefinition); /// /// The identifier for the ImageItemType_YAxisDefinition Variable. /// public static readonly NodeId ImageItemType_YAxisDefinition = new NodeId(Variables.ImageItemType_YAxisDefinition); /// /// The identifier for the CubeItemType_XAxisDefinition Variable. /// public static readonly NodeId CubeItemType_XAxisDefinition = new NodeId(Variables.CubeItemType_XAxisDefinition); /// /// The identifier for the CubeItemType_YAxisDefinition Variable. /// public static readonly NodeId CubeItemType_YAxisDefinition = new NodeId(Variables.CubeItemType_YAxisDefinition); /// /// The identifier for the CubeItemType_ZAxisDefinition Variable. /// public static readonly NodeId CubeItemType_ZAxisDefinition = new NodeId(Variables.CubeItemType_ZAxisDefinition); /// /// The identifier for the NDimensionArrayItemType_AxisDefinition Variable. /// public static readonly NodeId NDimensionArrayItemType_AxisDefinition = new NodeId(Variables.NDimensionArrayItemType_AxisDefinition); /// /// The identifier for the TwoStateVariableType_Id Variable. /// public static readonly NodeId TwoStateVariableType_Id = new NodeId(Variables.TwoStateVariableType_Id); /// /// The identifier for the TwoStateVariableType_TransitionTime Variable. /// public static readonly NodeId TwoStateVariableType_TransitionTime = new NodeId(Variables.TwoStateVariableType_TransitionTime); /// /// The identifier for the TwoStateVariableType_EffectiveTransitionTime Variable. /// public static readonly NodeId TwoStateVariableType_EffectiveTransitionTime = new NodeId(Variables.TwoStateVariableType_EffectiveTransitionTime); /// /// The identifier for the TwoStateVariableType_TrueState Variable. /// public static readonly NodeId TwoStateVariableType_TrueState = new NodeId(Variables.TwoStateVariableType_TrueState); /// /// The identifier for the TwoStateVariableType_FalseState Variable. /// public static readonly NodeId TwoStateVariableType_FalseState = new NodeId(Variables.TwoStateVariableType_FalseState); /// /// The identifier for the ConditionVariableType_SourceTimestamp Variable. /// public static readonly NodeId ConditionVariableType_SourceTimestamp = new NodeId(Variables.ConditionVariableType_SourceTimestamp); /// /// The identifier for the ConditionType_ConditionClassId Variable. /// public static readonly NodeId ConditionType_ConditionClassId = new NodeId(Variables.ConditionType_ConditionClassId); /// /// The identifier for the ConditionType_ConditionClassName Variable. /// public static readonly NodeId ConditionType_ConditionClassName = new NodeId(Variables.ConditionType_ConditionClassName); /// /// The identifier for the ConditionType_ConditionName Variable. /// public static readonly NodeId ConditionType_ConditionName = new NodeId(Variables.ConditionType_ConditionName); /// /// The identifier for the ConditionType_BranchId Variable. /// public static readonly NodeId ConditionType_BranchId = new NodeId(Variables.ConditionType_BranchId); /// /// The identifier for the ConditionType_Retain Variable. /// public static readonly NodeId ConditionType_Retain = new NodeId(Variables.ConditionType_Retain); /// /// The identifier for the ConditionType_EnabledState Variable. /// public static readonly NodeId ConditionType_EnabledState = new NodeId(Variables.ConditionType_EnabledState); /// /// The identifier for the ConditionType_EnabledState_Id Variable. /// public static readonly NodeId ConditionType_EnabledState_Id = new NodeId(Variables.ConditionType_EnabledState_Id); /// /// The identifier for the ConditionType_EnabledState_EffectiveDisplayName Variable. /// public static readonly NodeId ConditionType_EnabledState_EffectiveDisplayName = new NodeId(Variables.ConditionType_EnabledState_EffectiveDisplayName); /// /// The identifier for the ConditionType_EnabledState_TransitionTime Variable. /// public static readonly NodeId ConditionType_EnabledState_TransitionTime = new NodeId(Variables.ConditionType_EnabledState_TransitionTime); /// /// The identifier for the ConditionType_EnabledState_EffectiveTransitionTime Variable. /// public static readonly NodeId ConditionType_EnabledState_EffectiveTransitionTime = new NodeId(Variables.ConditionType_EnabledState_EffectiveTransitionTime); /// /// The identifier for the ConditionType_EnabledState_TrueState Variable. /// public static readonly NodeId ConditionType_EnabledState_TrueState = new NodeId(Variables.ConditionType_EnabledState_TrueState); /// /// The identifier for the ConditionType_EnabledState_FalseState Variable. /// public static readonly NodeId ConditionType_EnabledState_FalseState = new NodeId(Variables.ConditionType_EnabledState_FalseState); /// /// The identifier for the ConditionType_Quality Variable. /// public static readonly NodeId ConditionType_Quality = new NodeId(Variables.ConditionType_Quality); /// /// The identifier for the ConditionType_Quality_SourceTimestamp Variable. /// public static readonly NodeId ConditionType_Quality_SourceTimestamp = new NodeId(Variables.ConditionType_Quality_SourceTimestamp); /// /// The identifier for the ConditionType_LastSeverity Variable. /// public static readonly NodeId ConditionType_LastSeverity = new NodeId(Variables.ConditionType_LastSeverity); /// /// The identifier for the ConditionType_LastSeverity_SourceTimestamp Variable. /// public static readonly NodeId ConditionType_LastSeverity_SourceTimestamp = new NodeId(Variables.ConditionType_LastSeverity_SourceTimestamp); /// /// The identifier for the ConditionType_Comment Variable. /// public static readonly NodeId ConditionType_Comment = new NodeId(Variables.ConditionType_Comment); /// /// The identifier for the ConditionType_Comment_SourceTimestamp Variable. /// public static readonly NodeId ConditionType_Comment_SourceTimestamp = new NodeId(Variables.ConditionType_Comment_SourceTimestamp); /// /// The identifier for the ConditionType_ClientUserId Variable. /// public static readonly NodeId ConditionType_ClientUserId = new NodeId(Variables.ConditionType_ClientUserId); /// /// The identifier for the ConditionType_AddComment_InputArguments Variable. /// public static readonly NodeId ConditionType_AddComment_InputArguments = new NodeId(Variables.ConditionType_AddComment_InputArguments); /// /// The identifier for the ConditionType_ConditionRefresh_InputArguments Variable. /// public static readonly NodeId ConditionType_ConditionRefresh_InputArguments = new NodeId(Variables.ConditionType_ConditionRefresh_InputArguments); /// /// The identifier for the ConditionRefreshMethodType_InputArguments Variable. /// public static readonly NodeId ConditionRefreshMethodType_InputArguments = new NodeId(Variables.ConditionRefreshMethodType_InputArguments); /// /// The identifier for the AddCommentMethodType_InputArguments Variable. /// public static readonly NodeId AddCommentMethodType_InputArguments = new NodeId(Variables.AddCommentMethodType_InputArguments); /// /// The identifier for the DialogConditionType_EnabledState Variable. /// public static readonly NodeId DialogConditionType_EnabledState = new NodeId(Variables.DialogConditionType_EnabledState); /// /// The identifier for the DialogConditionType_DialogState Variable. /// public static readonly NodeId DialogConditionType_DialogState = new NodeId(Variables.DialogConditionType_DialogState); /// /// The identifier for the DialogConditionType_DialogState_Id Variable. /// public static readonly NodeId DialogConditionType_DialogState_Id = new NodeId(Variables.DialogConditionType_DialogState_Id); /// /// The identifier for the DialogConditionType_DialogState_TransitionTime Variable. /// public static readonly NodeId DialogConditionType_DialogState_TransitionTime = new NodeId(Variables.DialogConditionType_DialogState_TransitionTime); /// /// The identifier for the DialogConditionType_DialogState_TrueState Variable. /// public static readonly NodeId DialogConditionType_DialogState_TrueState = new NodeId(Variables.DialogConditionType_DialogState_TrueState); /// /// The identifier for the DialogConditionType_DialogState_FalseState Variable. /// public static readonly NodeId DialogConditionType_DialogState_FalseState = new NodeId(Variables.DialogConditionType_DialogState_FalseState); /// /// The identifier for the DialogConditionType_Prompt Variable. /// public static readonly NodeId DialogConditionType_Prompt = new NodeId(Variables.DialogConditionType_Prompt); /// /// The identifier for the DialogConditionType_ResponseOptionSet Variable. /// public static readonly NodeId DialogConditionType_ResponseOptionSet = new NodeId(Variables.DialogConditionType_ResponseOptionSet); /// /// The identifier for the DialogConditionType_DefaultResponse Variable. /// public static readonly NodeId DialogConditionType_DefaultResponse = new NodeId(Variables.DialogConditionType_DefaultResponse); /// /// The identifier for the DialogConditionType_OkResponse Variable. /// public static readonly NodeId DialogConditionType_OkResponse = new NodeId(Variables.DialogConditionType_OkResponse); /// /// The identifier for the DialogConditionType_CancelResponse Variable. /// public static readonly NodeId DialogConditionType_CancelResponse = new NodeId(Variables.DialogConditionType_CancelResponse); /// /// The identifier for the DialogConditionType_LastResponse Variable. /// public static readonly NodeId DialogConditionType_LastResponse = new NodeId(Variables.DialogConditionType_LastResponse); /// /// The identifier for the DialogConditionType_Respond_InputArguments Variable. /// public static readonly NodeId DialogConditionType_Respond_InputArguments = new NodeId(Variables.DialogConditionType_Respond_InputArguments); /// /// The identifier for the DialogResponseMethodType_InputArguments Variable. /// public static readonly NodeId DialogResponseMethodType_InputArguments = new NodeId(Variables.DialogResponseMethodType_InputArguments); /// /// The identifier for the AcknowledgeableConditionType_EnabledState Variable. /// public static readonly NodeId AcknowledgeableConditionType_EnabledState = new NodeId(Variables.AcknowledgeableConditionType_EnabledState); /// /// The identifier for the AcknowledgeableConditionType_AckedState Variable. /// public static readonly NodeId AcknowledgeableConditionType_AckedState = new NodeId(Variables.AcknowledgeableConditionType_AckedState); /// /// The identifier for the AcknowledgeableConditionType_AckedState_Id Variable. /// public static readonly NodeId AcknowledgeableConditionType_AckedState_Id = new NodeId(Variables.AcknowledgeableConditionType_AckedState_Id); /// /// The identifier for the AcknowledgeableConditionType_AckedState_TransitionTime Variable. /// public static readonly NodeId AcknowledgeableConditionType_AckedState_TransitionTime = new NodeId(Variables.AcknowledgeableConditionType_AckedState_TransitionTime); /// /// The identifier for the AcknowledgeableConditionType_AckedState_TrueState Variable. /// public static readonly NodeId AcknowledgeableConditionType_AckedState_TrueState = new NodeId(Variables.AcknowledgeableConditionType_AckedState_TrueState); /// /// The identifier for the AcknowledgeableConditionType_AckedState_FalseState Variable. /// public static readonly NodeId AcknowledgeableConditionType_AckedState_FalseState = new NodeId(Variables.AcknowledgeableConditionType_AckedState_FalseState); /// /// The identifier for the AcknowledgeableConditionType_ConfirmedState Variable. /// public static readonly NodeId AcknowledgeableConditionType_ConfirmedState = new NodeId(Variables.AcknowledgeableConditionType_ConfirmedState); /// /// The identifier for the AcknowledgeableConditionType_ConfirmedState_Id Variable. /// public static readonly NodeId AcknowledgeableConditionType_ConfirmedState_Id = new NodeId(Variables.AcknowledgeableConditionType_ConfirmedState_Id); /// /// The identifier for the AcknowledgeableConditionType_ConfirmedState_TransitionTime Variable. /// public static readonly NodeId AcknowledgeableConditionType_ConfirmedState_TransitionTime = new NodeId(Variables.AcknowledgeableConditionType_ConfirmedState_TransitionTime); /// /// The identifier for the AcknowledgeableConditionType_ConfirmedState_TrueState Variable. /// public static readonly NodeId AcknowledgeableConditionType_ConfirmedState_TrueState = new NodeId(Variables.AcknowledgeableConditionType_ConfirmedState_TrueState); /// /// The identifier for the AcknowledgeableConditionType_ConfirmedState_FalseState Variable. /// public static readonly NodeId AcknowledgeableConditionType_ConfirmedState_FalseState = new NodeId(Variables.AcknowledgeableConditionType_ConfirmedState_FalseState); /// /// The identifier for the AcknowledgeableConditionType_Acknowledge_InputArguments Variable. /// public static readonly NodeId AcknowledgeableConditionType_Acknowledge_InputArguments = new NodeId(Variables.AcknowledgeableConditionType_Acknowledge_InputArguments); /// /// The identifier for the AcknowledgeableConditionType_Confirm_InputArguments Variable. /// public static readonly NodeId AcknowledgeableConditionType_Confirm_InputArguments = new NodeId(Variables.AcknowledgeableConditionType_Confirm_InputArguments); /// /// The identifier for the AlarmConditionType_EnabledState Variable. /// public static readonly NodeId AlarmConditionType_EnabledState = new NodeId(Variables.AlarmConditionType_EnabledState); /// /// The identifier for the AlarmConditionType_ActiveState Variable. /// public static readonly NodeId AlarmConditionType_ActiveState = new NodeId(Variables.AlarmConditionType_ActiveState); /// /// The identifier for the AlarmConditionType_ActiveState_Id Variable. /// public static readonly NodeId AlarmConditionType_ActiveState_Id = new NodeId(Variables.AlarmConditionType_ActiveState_Id); /// /// The identifier for the AlarmConditionType_ActiveState_EffectiveDisplayName Variable. /// public static readonly NodeId AlarmConditionType_ActiveState_EffectiveDisplayName = new NodeId(Variables.AlarmConditionType_ActiveState_EffectiveDisplayName); /// /// The identifier for the AlarmConditionType_ActiveState_TransitionTime Variable. /// public static readonly NodeId AlarmConditionType_ActiveState_TransitionTime = new NodeId(Variables.AlarmConditionType_ActiveState_TransitionTime); /// /// The identifier for the AlarmConditionType_ActiveState_EffectiveTransitionTime Variable. /// public static readonly NodeId AlarmConditionType_ActiveState_EffectiveTransitionTime = new NodeId(Variables.AlarmConditionType_ActiveState_EffectiveTransitionTime); /// /// The identifier for the AlarmConditionType_ActiveState_TrueState Variable. /// public static readonly NodeId AlarmConditionType_ActiveState_TrueState = new NodeId(Variables.AlarmConditionType_ActiveState_TrueState); /// /// The identifier for the AlarmConditionType_ActiveState_FalseState Variable. /// public static readonly NodeId AlarmConditionType_ActiveState_FalseState = new NodeId(Variables.AlarmConditionType_ActiveState_FalseState); /// /// The identifier for the AlarmConditionType_InputNode Variable. /// public static readonly NodeId AlarmConditionType_InputNode = new NodeId(Variables.AlarmConditionType_InputNode); /// /// The identifier for the AlarmConditionType_SuppressedState Variable. /// public static readonly NodeId AlarmConditionType_SuppressedState = new NodeId(Variables.AlarmConditionType_SuppressedState); /// /// The identifier for the AlarmConditionType_SuppressedState_TransitionTime Variable. /// public static readonly NodeId AlarmConditionType_SuppressedState_TransitionTime = new NodeId(Variables.AlarmConditionType_SuppressedState_TransitionTime); /// /// The identifier for the AlarmConditionType_SuppressedState_TrueState Variable. /// public static readonly NodeId AlarmConditionType_SuppressedState_TrueState = new NodeId(Variables.AlarmConditionType_SuppressedState_TrueState); /// /// The identifier for the AlarmConditionType_SuppressedState_FalseState Variable. /// public static readonly NodeId AlarmConditionType_SuppressedState_FalseState = new NodeId(Variables.AlarmConditionType_SuppressedState_FalseState); /// /// The identifier for the AlarmConditionType_ShelvingState_LastTransition Variable. /// public static readonly NodeId AlarmConditionType_ShelvingState_LastTransition = new NodeId(Variables.AlarmConditionType_ShelvingState_LastTransition); /// /// The identifier for the AlarmConditionType_ShelvingState_LastTransition_TransitionTime Variable. /// public static readonly NodeId AlarmConditionType_ShelvingState_LastTransition_TransitionTime = new NodeId(Variables.AlarmConditionType_ShelvingState_LastTransition_TransitionTime); /// /// The identifier for the AlarmConditionType_ShelvingState_UnshelveTime Variable. /// public static readonly NodeId AlarmConditionType_ShelvingState_UnshelveTime = new NodeId(Variables.AlarmConditionType_ShelvingState_UnshelveTime); /// /// The identifier for the AlarmConditionType_ShelvingState_TimedShelve_InputArguments Variable. /// public static readonly NodeId AlarmConditionType_ShelvingState_TimedShelve_InputArguments = new NodeId(Variables.AlarmConditionType_ShelvingState_TimedShelve_InputArguments); /// /// The identifier for the AlarmConditionType_SuppressedOrShelved Variable. /// public static readonly NodeId AlarmConditionType_SuppressedOrShelved = new NodeId(Variables.AlarmConditionType_SuppressedOrShelved); /// /// The identifier for the AlarmConditionType_MaxTimeShelved Variable. /// public static readonly NodeId AlarmConditionType_MaxTimeShelved = new NodeId(Variables.AlarmConditionType_MaxTimeShelved); /// /// The identifier for the ShelvedStateMachineType_UnshelveTime Variable. /// public static readonly NodeId ShelvedStateMachineType_UnshelveTime = new NodeId(Variables.ShelvedStateMachineType_UnshelveTime); /// /// The identifier for the ShelvedStateMachineType_Unshelved_StateNumber Variable. /// public static readonly NodeId ShelvedStateMachineType_Unshelved_StateNumber = new NodeId(Variables.ShelvedStateMachineType_Unshelved_StateNumber); /// /// The identifier for the ShelvedStateMachineType_TimedShelved_StateNumber Variable. /// public static readonly NodeId ShelvedStateMachineType_TimedShelved_StateNumber = new NodeId(Variables.ShelvedStateMachineType_TimedShelved_StateNumber); /// /// The identifier for the ShelvedStateMachineType_OneShotShelved_StateNumber Variable. /// public static readonly NodeId ShelvedStateMachineType_OneShotShelved_StateNumber = new NodeId(Variables.ShelvedStateMachineType_OneShotShelved_StateNumber); /// /// The identifier for the ShelvedStateMachineType_UnshelvedToTimedShelved_TransitionNumber Variable. /// public static readonly NodeId ShelvedStateMachineType_UnshelvedToTimedShelved_TransitionNumber = new NodeId(Variables.ShelvedStateMachineType_UnshelvedToTimedShelved_TransitionNumber); /// /// The identifier for the ShelvedStateMachineType_UnshelvedToOneShotShelved_TransitionNumber Variable. /// public static readonly NodeId ShelvedStateMachineType_UnshelvedToOneShotShelved_TransitionNumber = new NodeId(Variables.ShelvedStateMachineType_UnshelvedToOneShotShelved_TransitionNumber); /// /// The identifier for the ShelvedStateMachineType_TimedShelvedToUnshelved_TransitionNumber Variable. /// public static readonly NodeId ShelvedStateMachineType_TimedShelvedToUnshelved_TransitionNumber = new NodeId(Variables.ShelvedStateMachineType_TimedShelvedToUnshelved_TransitionNumber); /// /// The identifier for the ShelvedStateMachineType_TimedShelvedToOneShotShelved_TransitionNumber Variable. /// public static readonly NodeId ShelvedStateMachineType_TimedShelvedToOneShotShelved_TransitionNumber = new NodeId(Variables.ShelvedStateMachineType_TimedShelvedToOneShotShelved_TransitionNumber); /// /// The identifier for the ShelvedStateMachineType_OneShotShelvedToUnshelved_TransitionNumber Variable. /// public static readonly NodeId ShelvedStateMachineType_OneShotShelvedToUnshelved_TransitionNumber = new NodeId(Variables.ShelvedStateMachineType_OneShotShelvedToUnshelved_TransitionNumber); /// /// The identifier for the ShelvedStateMachineType_OneShotShelvedToTimedShelved_TransitionNumber Variable. /// public static readonly NodeId ShelvedStateMachineType_OneShotShelvedToTimedShelved_TransitionNumber = new NodeId(Variables.ShelvedStateMachineType_OneShotShelvedToTimedShelved_TransitionNumber); /// /// The identifier for the ShelvedStateMachineType_TimedShelve_InputArguments Variable. /// public static readonly NodeId ShelvedStateMachineType_TimedShelve_InputArguments = new NodeId(Variables.ShelvedStateMachineType_TimedShelve_InputArguments); /// /// The identifier for the TimedShelveMethodType_InputArguments Variable. /// public static readonly NodeId TimedShelveMethodType_InputArguments = new NodeId(Variables.TimedShelveMethodType_InputArguments); /// /// The identifier for the LimitAlarmType_HighHighLimit Variable. /// public static readonly NodeId LimitAlarmType_HighHighLimit = new NodeId(Variables.LimitAlarmType_HighHighLimit); /// /// The identifier for the LimitAlarmType_HighLimit Variable. /// public static readonly NodeId LimitAlarmType_HighLimit = new NodeId(Variables.LimitAlarmType_HighLimit); /// /// The identifier for the LimitAlarmType_LowLimit Variable. /// public static readonly NodeId LimitAlarmType_LowLimit = new NodeId(Variables.LimitAlarmType_LowLimit); /// /// The identifier for the LimitAlarmType_LowLowLimit Variable. /// public static readonly NodeId LimitAlarmType_LowLowLimit = new NodeId(Variables.LimitAlarmType_LowLowLimit); /// /// The identifier for the ExclusiveLimitStateMachineType_HighHigh_StateNumber Variable. /// public static readonly NodeId ExclusiveLimitStateMachineType_HighHigh_StateNumber = new NodeId(Variables.ExclusiveLimitStateMachineType_HighHigh_StateNumber); /// /// The identifier for the ExclusiveLimitStateMachineType_High_StateNumber Variable. /// public static readonly NodeId ExclusiveLimitStateMachineType_High_StateNumber = new NodeId(Variables.ExclusiveLimitStateMachineType_High_StateNumber); /// /// The identifier for the ExclusiveLimitStateMachineType_Low_StateNumber Variable. /// public static readonly NodeId ExclusiveLimitStateMachineType_Low_StateNumber = new NodeId(Variables.ExclusiveLimitStateMachineType_Low_StateNumber); /// /// The identifier for the ExclusiveLimitStateMachineType_LowLow_StateNumber Variable. /// public static readonly NodeId ExclusiveLimitStateMachineType_LowLow_StateNumber = new NodeId(Variables.ExclusiveLimitStateMachineType_LowLow_StateNumber); /// /// The identifier for the ExclusiveLimitStateMachineType_LowLowToLow_TransitionNumber Variable. /// public static readonly NodeId ExclusiveLimitStateMachineType_LowLowToLow_TransitionNumber = new NodeId(Variables.ExclusiveLimitStateMachineType_LowLowToLow_TransitionNumber); /// /// The identifier for the ExclusiveLimitStateMachineType_LowToLowLow_TransitionNumber Variable. /// public static readonly NodeId ExclusiveLimitStateMachineType_LowToLowLow_TransitionNumber = new NodeId(Variables.ExclusiveLimitStateMachineType_LowToLowLow_TransitionNumber); /// /// The identifier for the ExclusiveLimitStateMachineType_HighHighToHigh_TransitionNumber Variable. /// public static readonly NodeId ExclusiveLimitStateMachineType_HighHighToHigh_TransitionNumber = new NodeId(Variables.ExclusiveLimitStateMachineType_HighHighToHigh_TransitionNumber); /// /// The identifier for the ExclusiveLimitStateMachineType_HighToHighHigh_TransitionNumber Variable. /// public static readonly NodeId ExclusiveLimitStateMachineType_HighToHighHigh_TransitionNumber = new NodeId(Variables.ExclusiveLimitStateMachineType_HighToHighHigh_TransitionNumber); /// /// The identifier for the ExclusiveLimitAlarmType_ActiveState Variable. /// public static readonly NodeId ExclusiveLimitAlarmType_ActiveState = new NodeId(Variables.ExclusiveLimitAlarmType_ActiveState); /// /// The identifier for the ExclusiveLimitAlarmType_LimitState_LastTransition Variable. /// public static readonly NodeId ExclusiveLimitAlarmType_LimitState_LastTransition = new NodeId(Variables.ExclusiveLimitAlarmType_LimitState_LastTransition); /// /// The identifier for the ExclusiveLimitAlarmType_LimitState_LastTransition_TransitionTime Variable. /// public static readonly NodeId ExclusiveLimitAlarmType_LimitState_LastTransition_TransitionTime = new NodeId(Variables.ExclusiveLimitAlarmType_LimitState_LastTransition_TransitionTime); /// /// The identifier for the NonExclusiveLimitAlarmType_ActiveState Variable. /// public static readonly NodeId NonExclusiveLimitAlarmType_ActiveState = new NodeId(Variables.NonExclusiveLimitAlarmType_ActiveState); /// /// The identifier for the NonExclusiveLimitAlarmType_HighHighState Variable. /// public static readonly NodeId NonExclusiveLimitAlarmType_HighHighState = new NodeId(Variables.NonExclusiveLimitAlarmType_HighHighState); /// /// The identifier for the NonExclusiveLimitAlarmType_HighHighState_TransitionTime Variable. /// public static readonly NodeId NonExclusiveLimitAlarmType_HighHighState_TransitionTime = new NodeId(Variables.NonExclusiveLimitAlarmType_HighHighState_TransitionTime); /// /// The identifier for the NonExclusiveLimitAlarmType_HighHighState_TrueState Variable. /// public static readonly NodeId NonExclusiveLimitAlarmType_HighHighState_TrueState = new NodeId(Variables.NonExclusiveLimitAlarmType_HighHighState_TrueState); /// /// The identifier for the NonExclusiveLimitAlarmType_HighHighState_FalseState Variable. /// public static readonly NodeId NonExclusiveLimitAlarmType_HighHighState_FalseState = new NodeId(Variables.NonExclusiveLimitAlarmType_HighHighState_FalseState); /// /// The identifier for the NonExclusiveLimitAlarmType_HighState Variable. /// public static readonly NodeId NonExclusiveLimitAlarmType_HighState = new NodeId(Variables.NonExclusiveLimitAlarmType_HighState); /// /// The identifier for the NonExclusiveLimitAlarmType_HighState_TransitionTime Variable. /// public static readonly NodeId NonExclusiveLimitAlarmType_HighState_TransitionTime = new NodeId(Variables.NonExclusiveLimitAlarmType_HighState_TransitionTime); /// /// The identifier for the NonExclusiveLimitAlarmType_HighState_TrueState Variable. /// public static readonly NodeId NonExclusiveLimitAlarmType_HighState_TrueState = new NodeId(Variables.NonExclusiveLimitAlarmType_HighState_TrueState); /// /// The identifier for the NonExclusiveLimitAlarmType_HighState_FalseState Variable. /// public static readonly NodeId NonExclusiveLimitAlarmType_HighState_FalseState = new NodeId(Variables.NonExclusiveLimitAlarmType_HighState_FalseState); /// /// The identifier for the NonExclusiveLimitAlarmType_LowState Variable. /// public static readonly NodeId NonExclusiveLimitAlarmType_LowState = new NodeId(Variables.NonExclusiveLimitAlarmType_LowState); /// /// The identifier for the NonExclusiveLimitAlarmType_LowState_TransitionTime Variable. /// public static readonly NodeId NonExclusiveLimitAlarmType_LowState_TransitionTime = new NodeId(Variables.NonExclusiveLimitAlarmType_LowState_TransitionTime); /// /// The identifier for the NonExclusiveLimitAlarmType_LowState_TrueState Variable. /// public static readonly NodeId NonExclusiveLimitAlarmType_LowState_TrueState = new NodeId(Variables.NonExclusiveLimitAlarmType_LowState_TrueState); /// /// The identifier for the NonExclusiveLimitAlarmType_LowState_FalseState Variable. /// public static readonly NodeId NonExclusiveLimitAlarmType_LowState_FalseState = new NodeId(Variables.NonExclusiveLimitAlarmType_LowState_FalseState); /// /// The identifier for the NonExclusiveLimitAlarmType_LowLowState Variable. /// public static readonly NodeId NonExclusiveLimitAlarmType_LowLowState = new NodeId(Variables.NonExclusiveLimitAlarmType_LowLowState); /// /// The identifier for the NonExclusiveLimitAlarmType_LowLowState_TransitionTime Variable. /// public static readonly NodeId NonExclusiveLimitAlarmType_LowLowState_TransitionTime = new NodeId(Variables.NonExclusiveLimitAlarmType_LowLowState_TransitionTime); /// /// The identifier for the NonExclusiveLimitAlarmType_LowLowState_TrueState Variable. /// public static readonly NodeId NonExclusiveLimitAlarmType_LowLowState_TrueState = new NodeId(Variables.NonExclusiveLimitAlarmType_LowLowState_TrueState); /// /// The identifier for the NonExclusiveLimitAlarmType_LowLowState_FalseState Variable. /// public static readonly NodeId NonExclusiveLimitAlarmType_LowLowState_FalseState = new NodeId(Variables.NonExclusiveLimitAlarmType_LowLowState_FalseState); /// /// The identifier for the NonExclusiveDeviationAlarmType_SetpointNode Variable. /// public static readonly NodeId NonExclusiveDeviationAlarmType_SetpointNode = new NodeId(Variables.NonExclusiveDeviationAlarmType_SetpointNode); /// /// The identifier for the ExclusiveDeviationAlarmType_SetpointNode Variable. /// public static readonly NodeId ExclusiveDeviationAlarmType_SetpointNode = new NodeId(Variables.ExclusiveDeviationAlarmType_SetpointNode); /// /// The identifier for the OffNormalAlarmType_NormalState Variable. /// public static readonly NodeId OffNormalAlarmType_NormalState = new NodeId(Variables.OffNormalAlarmType_NormalState); /// /// The identifier for the AuditConditionCommentEventType_EventId Variable. /// public static readonly NodeId AuditConditionCommentEventType_EventId = new NodeId(Variables.AuditConditionCommentEventType_EventId); /// /// The identifier for the AuditConditionCommentEventType_Comment Variable. /// public static readonly NodeId AuditConditionCommentEventType_Comment = new NodeId(Variables.AuditConditionCommentEventType_Comment); /// /// The identifier for the AuditConditionRespondEventType_SelectedResponse Variable. /// public static readonly NodeId AuditConditionRespondEventType_SelectedResponse = new NodeId(Variables.AuditConditionRespondEventType_SelectedResponse); /// /// The identifier for the AuditConditionAcknowledgeEventType_EventId Variable. /// public static readonly NodeId AuditConditionAcknowledgeEventType_EventId = new NodeId(Variables.AuditConditionAcknowledgeEventType_EventId); /// /// The identifier for the AuditConditionAcknowledgeEventType_Comment Variable. /// public static readonly NodeId AuditConditionAcknowledgeEventType_Comment = new NodeId(Variables.AuditConditionAcknowledgeEventType_Comment); /// /// The identifier for the AuditConditionConfirmEventType_EventId Variable. /// public static readonly NodeId AuditConditionConfirmEventType_EventId = new NodeId(Variables.AuditConditionConfirmEventType_EventId); /// /// The identifier for the AuditConditionConfirmEventType_Comment Variable. /// public static readonly NodeId AuditConditionConfirmEventType_Comment = new NodeId(Variables.AuditConditionConfirmEventType_Comment); /// /// The identifier for the AuditConditionShelvingEventType_ShelvingTime Variable. /// public static readonly NodeId AuditConditionShelvingEventType_ShelvingTime = new NodeId(Variables.AuditConditionShelvingEventType_ShelvingTime); /// /// The identifier for the ProgramStateMachineType_CurrentState Variable. /// public static readonly NodeId ProgramStateMachineType_CurrentState = new NodeId(Variables.ProgramStateMachineType_CurrentState); /// /// The identifier for the ProgramStateMachineType_CurrentState_Number Variable. /// public static readonly NodeId ProgramStateMachineType_CurrentState_Number = new NodeId(Variables.ProgramStateMachineType_CurrentState_Number); /// /// The identifier for the ProgramStateMachineType_LastTransition Variable. /// public static readonly NodeId ProgramStateMachineType_LastTransition = new NodeId(Variables.ProgramStateMachineType_LastTransition); /// /// The identifier for the ProgramStateMachineType_LastTransition_Number Variable. /// public static readonly NodeId ProgramStateMachineType_LastTransition_Number = new NodeId(Variables.ProgramStateMachineType_LastTransition_Number); /// /// The identifier for the ProgramStateMachineType_LastTransition_TransitionTime Variable. /// public static readonly NodeId ProgramStateMachineType_LastTransition_TransitionTime = new NodeId(Variables.ProgramStateMachineType_LastTransition_TransitionTime); /// /// The identifier for the ProgramStateMachineType_Creatable Variable. /// public static readonly NodeId ProgramStateMachineType_Creatable = new NodeId(Variables.ProgramStateMachineType_Creatable); /// /// The identifier for the ProgramStateMachineType_Deletable Variable. /// public static readonly NodeId ProgramStateMachineType_Deletable = new NodeId(Variables.ProgramStateMachineType_Deletable); /// /// The identifier for the ProgramStateMachineType_AutoDelete Variable. /// public static readonly NodeId ProgramStateMachineType_AutoDelete = new NodeId(Variables.ProgramStateMachineType_AutoDelete); /// /// The identifier for the ProgramStateMachineType_RecycleCount Variable. /// public static readonly NodeId ProgramStateMachineType_RecycleCount = new NodeId(Variables.ProgramStateMachineType_RecycleCount); /// /// The identifier for the ProgramStateMachineType_InstanceCount Variable. /// public static readonly NodeId ProgramStateMachineType_InstanceCount = new NodeId(Variables.ProgramStateMachineType_InstanceCount); /// /// The identifier for the ProgramStateMachineType_MaxInstanceCount Variable. /// public static readonly NodeId ProgramStateMachineType_MaxInstanceCount = new NodeId(Variables.ProgramStateMachineType_MaxInstanceCount); /// /// The identifier for the ProgramStateMachineType_MaxRecycleCount Variable. /// public static readonly NodeId ProgramStateMachineType_MaxRecycleCount = new NodeId(Variables.ProgramStateMachineType_MaxRecycleCount); /// /// The identifier for the ProgramStateMachineType_ProgramDiagnostics Variable. /// public static readonly NodeId ProgramStateMachineType_ProgramDiagnostics = new NodeId(Variables.ProgramStateMachineType_ProgramDiagnostics); /// /// The identifier for the ProgramStateMachineType_ProgramDiagnostics_CreateSessionId Variable. /// public static readonly NodeId ProgramStateMachineType_ProgramDiagnostics_CreateSessionId = new NodeId(Variables.ProgramStateMachineType_ProgramDiagnostics_CreateSessionId); /// /// The identifier for the ProgramStateMachineType_ProgramDiagnostics_CreateClientName Variable. /// public static readonly NodeId ProgramStateMachineType_ProgramDiagnostics_CreateClientName = new NodeId(Variables.ProgramStateMachineType_ProgramDiagnostics_CreateClientName); /// /// The identifier for the ProgramStateMachineType_ProgramDiagnostics_InvocationCreationTime Variable. /// public static readonly NodeId ProgramStateMachineType_ProgramDiagnostics_InvocationCreationTime = new NodeId(Variables.ProgramStateMachineType_ProgramDiagnostics_InvocationCreationTime); /// /// The identifier for the ProgramStateMachineType_ProgramDiagnostics_LastTransitionTime Variable. /// public static readonly NodeId ProgramStateMachineType_ProgramDiagnostics_LastTransitionTime = new NodeId(Variables.ProgramStateMachineType_ProgramDiagnostics_LastTransitionTime); /// /// The identifier for the ProgramStateMachineType_ProgramDiagnostics_LastMethodCall Variable. /// public static readonly NodeId ProgramStateMachineType_ProgramDiagnostics_LastMethodCall = new NodeId(Variables.ProgramStateMachineType_ProgramDiagnostics_LastMethodCall); /// /// The identifier for the ProgramStateMachineType_ProgramDiagnostics_LastMethodSessionId Variable. /// public static readonly NodeId ProgramStateMachineType_ProgramDiagnostics_LastMethodSessionId = new NodeId(Variables.ProgramStateMachineType_ProgramDiagnostics_LastMethodSessionId); /// /// The identifier for the ProgramStateMachineType_ProgramDiagnostics_LastMethodInputArguments Variable. /// public static readonly NodeId ProgramStateMachineType_ProgramDiagnostics_LastMethodInputArguments = new NodeId(Variables.ProgramStateMachineType_ProgramDiagnostics_LastMethodInputArguments); /// /// The identifier for the ProgramStateMachineType_ProgramDiagnostics_LastMethodOutputArguments Variable. /// public static readonly NodeId ProgramStateMachineType_ProgramDiagnostics_LastMethodOutputArguments = new NodeId(Variables.ProgramStateMachineType_ProgramDiagnostics_LastMethodOutputArguments); /// /// The identifier for the ProgramStateMachineType_ProgramDiagnostics_LastMethodCallTime Variable. /// public static readonly NodeId ProgramStateMachineType_ProgramDiagnostics_LastMethodCallTime = new NodeId(Variables.ProgramStateMachineType_ProgramDiagnostics_LastMethodCallTime); /// /// The identifier for the ProgramStateMachineType_ProgramDiagnostics_LastMethodReturnStatus Variable. /// public static readonly NodeId ProgramStateMachineType_ProgramDiagnostics_LastMethodReturnStatus = new NodeId(Variables.ProgramStateMachineType_ProgramDiagnostics_LastMethodReturnStatus); /// /// The identifier for the ProgramStateMachineType_Ready_StateNumber Variable. /// public static readonly NodeId ProgramStateMachineType_Ready_StateNumber = new NodeId(Variables.ProgramStateMachineType_Ready_StateNumber); /// /// The identifier for the ProgramStateMachineType_Running_StateNumber Variable. /// public static readonly NodeId ProgramStateMachineType_Running_StateNumber = new NodeId(Variables.ProgramStateMachineType_Running_StateNumber); /// /// The identifier for the ProgramStateMachineType_Suspended_StateNumber Variable. /// public static readonly NodeId ProgramStateMachineType_Suspended_StateNumber = new NodeId(Variables.ProgramStateMachineType_Suspended_StateNumber); /// /// The identifier for the ProgramStateMachineType_Halted_StateNumber Variable. /// public static readonly NodeId ProgramStateMachineType_Halted_StateNumber = new NodeId(Variables.ProgramStateMachineType_Halted_StateNumber); /// /// The identifier for the ProgramStateMachineType_HaltedToReady_TransitionNumber Variable. /// public static readonly NodeId ProgramStateMachineType_HaltedToReady_TransitionNumber = new NodeId(Variables.ProgramStateMachineType_HaltedToReady_TransitionNumber); /// /// The identifier for the ProgramStateMachineType_ReadyToRunning_TransitionNumber Variable. /// public static readonly NodeId ProgramStateMachineType_ReadyToRunning_TransitionNumber = new NodeId(Variables.ProgramStateMachineType_ReadyToRunning_TransitionNumber); /// /// The identifier for the ProgramStateMachineType_RunningToHalted_TransitionNumber Variable. /// public static readonly NodeId ProgramStateMachineType_RunningToHalted_TransitionNumber = new NodeId(Variables.ProgramStateMachineType_RunningToHalted_TransitionNumber); /// /// The identifier for the ProgramStateMachineType_RunningToReady_TransitionNumber Variable. /// public static readonly NodeId ProgramStateMachineType_RunningToReady_TransitionNumber = new NodeId(Variables.ProgramStateMachineType_RunningToReady_TransitionNumber); /// /// The identifier for the ProgramStateMachineType_RunningToSuspended_TransitionNumber Variable. /// public static readonly NodeId ProgramStateMachineType_RunningToSuspended_TransitionNumber = new NodeId(Variables.ProgramStateMachineType_RunningToSuspended_TransitionNumber); /// /// The identifier for the ProgramStateMachineType_SuspendedToRunning_TransitionNumber Variable. /// public static readonly NodeId ProgramStateMachineType_SuspendedToRunning_TransitionNumber = new NodeId(Variables.ProgramStateMachineType_SuspendedToRunning_TransitionNumber); /// /// The identifier for the ProgramStateMachineType_SuspendedToHalted_TransitionNumber Variable. /// public static readonly NodeId ProgramStateMachineType_SuspendedToHalted_TransitionNumber = new NodeId(Variables.ProgramStateMachineType_SuspendedToHalted_TransitionNumber); /// /// The identifier for the ProgramStateMachineType_SuspendedToReady_TransitionNumber Variable. /// public static readonly NodeId ProgramStateMachineType_SuspendedToReady_TransitionNumber = new NodeId(Variables.ProgramStateMachineType_SuspendedToReady_TransitionNumber); /// /// The identifier for the ProgramStateMachineType_ReadyToHalted_TransitionNumber Variable. /// public static readonly NodeId ProgramStateMachineType_ReadyToHalted_TransitionNumber = new NodeId(Variables.ProgramStateMachineType_ReadyToHalted_TransitionNumber); /// /// The identifier for the ProgramTransitionEventType_IntermediateResult Variable. /// public static readonly NodeId ProgramTransitionEventType_IntermediateResult = new NodeId(Variables.ProgramTransitionEventType_IntermediateResult); /// /// The identifier for the AuditProgramTransitionEventType_TransitionNumber Variable. /// public static readonly NodeId AuditProgramTransitionEventType_TransitionNumber = new NodeId(Variables.AuditProgramTransitionEventType_TransitionNumber); /// /// The identifier for the ProgramTransitionAuditEventType_Transition Variable. /// public static readonly NodeId ProgramTransitionAuditEventType_Transition = new NodeId(Variables.ProgramTransitionAuditEventType_Transition); /// /// The identifier for the ProgramDiagnosticType_CreateSessionId Variable. /// public static readonly NodeId ProgramDiagnosticType_CreateSessionId = new NodeId(Variables.ProgramDiagnosticType_CreateSessionId); /// /// The identifier for the ProgramDiagnosticType_CreateClientName Variable. /// public static readonly NodeId ProgramDiagnosticType_CreateClientName = new NodeId(Variables.ProgramDiagnosticType_CreateClientName); /// /// The identifier for the ProgramDiagnosticType_InvocationCreationTime Variable. /// public static readonly NodeId ProgramDiagnosticType_InvocationCreationTime = new NodeId(Variables.ProgramDiagnosticType_InvocationCreationTime); /// /// The identifier for the ProgramDiagnosticType_LastTransitionTime Variable. /// public static readonly NodeId ProgramDiagnosticType_LastTransitionTime = new NodeId(Variables.ProgramDiagnosticType_LastTransitionTime); /// /// The identifier for the ProgramDiagnosticType_LastMethodCall Variable. /// public static readonly NodeId ProgramDiagnosticType_LastMethodCall = new NodeId(Variables.ProgramDiagnosticType_LastMethodCall); /// /// The identifier for the ProgramDiagnosticType_LastMethodSessionId Variable. /// public static readonly NodeId ProgramDiagnosticType_LastMethodSessionId = new NodeId(Variables.ProgramDiagnosticType_LastMethodSessionId); /// /// The identifier for the ProgramDiagnosticType_LastMethodInputArguments Variable. /// public static readonly NodeId ProgramDiagnosticType_LastMethodInputArguments = new NodeId(Variables.ProgramDiagnosticType_LastMethodInputArguments); /// /// The identifier for the ProgramDiagnosticType_LastMethodOutputArguments Variable. /// public static readonly NodeId ProgramDiagnosticType_LastMethodOutputArguments = new NodeId(Variables.ProgramDiagnosticType_LastMethodOutputArguments); /// /// The identifier for the ProgramDiagnosticType_LastMethodCallTime Variable. /// public static readonly NodeId ProgramDiagnosticType_LastMethodCallTime = new NodeId(Variables.ProgramDiagnosticType_LastMethodCallTime); /// /// The identifier for the ProgramDiagnosticType_LastMethodReturnStatus Variable. /// public static readonly NodeId ProgramDiagnosticType_LastMethodReturnStatus = new NodeId(Variables.ProgramDiagnosticType_LastMethodReturnStatus); /// /// The identifier for the Annotations Variable. /// public static readonly NodeId Annotations = new NodeId(Variables.Annotations); /// /// The identifier for the HistoricalDataConfigurationType_AggregateConfiguration_TreatUncertainAsBad Variable. /// public static readonly NodeId HistoricalDataConfigurationType_AggregateConfiguration_TreatUncertainAsBad = new NodeId(Variables.HistoricalDataConfigurationType_AggregateConfiguration_TreatUncertainAsBad); /// /// The identifier for the HistoricalDataConfigurationType_AggregateConfiguration_PercentDataBad Variable. /// public static readonly NodeId HistoricalDataConfigurationType_AggregateConfiguration_PercentDataBad = new NodeId(Variables.HistoricalDataConfigurationType_AggregateConfiguration_PercentDataBad); /// /// The identifier for the HistoricalDataConfigurationType_AggregateConfiguration_PercentDataGood Variable. /// public static readonly NodeId HistoricalDataConfigurationType_AggregateConfiguration_PercentDataGood = new NodeId(Variables.HistoricalDataConfigurationType_AggregateConfiguration_PercentDataGood); /// /// The identifier for the HistoricalDataConfigurationType_AggregateConfiguration_UseSlopedExtrapolation Variable. /// public static readonly NodeId HistoricalDataConfigurationType_AggregateConfiguration_UseSlopedExtrapolation = new NodeId(Variables.HistoricalDataConfigurationType_AggregateConfiguration_UseSlopedExtrapolation); /// /// The identifier for the HistoricalDataConfigurationType_Stepped Variable. /// public static readonly NodeId HistoricalDataConfigurationType_Stepped = new NodeId(Variables.HistoricalDataConfigurationType_Stepped); /// /// The identifier for the HistoricalDataConfigurationType_Definition Variable. /// public static readonly NodeId HistoricalDataConfigurationType_Definition = new NodeId(Variables.HistoricalDataConfigurationType_Definition); /// /// The identifier for the HistoricalDataConfigurationType_MaxTimeInterval Variable. /// public static readonly NodeId HistoricalDataConfigurationType_MaxTimeInterval = new NodeId(Variables.HistoricalDataConfigurationType_MaxTimeInterval); /// /// The identifier for the HistoricalDataConfigurationType_MinTimeInterval Variable. /// public static readonly NodeId HistoricalDataConfigurationType_MinTimeInterval = new NodeId(Variables.HistoricalDataConfigurationType_MinTimeInterval); /// /// The identifier for the HistoricalDataConfigurationType_ExceptionDeviation Variable. /// public static readonly NodeId HistoricalDataConfigurationType_ExceptionDeviation = new NodeId(Variables.HistoricalDataConfigurationType_ExceptionDeviation); /// /// The identifier for the HistoricalDataConfigurationType_ExceptionDeviationFormat Variable. /// public static readonly NodeId HistoricalDataConfigurationType_ExceptionDeviationFormat = new NodeId(Variables.HistoricalDataConfigurationType_ExceptionDeviationFormat); /// /// The identifier for the HistoricalDataConfigurationType_StartOfArchive Variable. /// public static readonly NodeId HistoricalDataConfigurationType_StartOfArchive = new NodeId(Variables.HistoricalDataConfigurationType_StartOfArchive); /// /// The identifier for the HistoricalDataConfigurationType_StartOfOnlineArchive Variable. /// public static readonly NodeId HistoricalDataConfigurationType_StartOfOnlineArchive = new NodeId(Variables.HistoricalDataConfigurationType_StartOfOnlineArchive); /// /// The identifier for the HAConfiguration_AggregateConfiguration_TreatUncertainAsBad Variable. /// public static readonly NodeId HAConfiguration_AggregateConfiguration_TreatUncertainAsBad = new NodeId(Variables.HAConfiguration_AggregateConfiguration_TreatUncertainAsBad); /// /// The identifier for the HAConfiguration_AggregateConfiguration_PercentDataBad Variable. /// public static readonly NodeId HAConfiguration_AggregateConfiguration_PercentDataBad = new NodeId(Variables.HAConfiguration_AggregateConfiguration_PercentDataBad); /// /// The identifier for the HAConfiguration_AggregateConfiguration_PercentDataGood Variable. /// public static readonly NodeId HAConfiguration_AggregateConfiguration_PercentDataGood = new NodeId(Variables.HAConfiguration_AggregateConfiguration_PercentDataGood); /// /// The identifier for the HAConfiguration_AggregateConfiguration_UseSlopedExtrapolation Variable. /// public static readonly NodeId HAConfiguration_AggregateConfiguration_UseSlopedExtrapolation = new NodeId(Variables.HAConfiguration_AggregateConfiguration_UseSlopedExtrapolation); /// /// The identifier for the HAConfiguration_Stepped Variable. /// public static readonly NodeId HAConfiguration_Stepped = new NodeId(Variables.HAConfiguration_Stepped); /// /// The identifier for the HistoricalEventFilter Variable. /// public static readonly NodeId HistoricalEventFilter = new NodeId(Variables.HistoricalEventFilter); /// /// The identifier for the HistoryServerCapabilitiesType_AccessHistoryDataCapability Variable. /// public static readonly NodeId HistoryServerCapabilitiesType_AccessHistoryDataCapability = new NodeId(Variables.HistoryServerCapabilitiesType_AccessHistoryDataCapability); /// /// The identifier for the HistoryServerCapabilitiesType_AccessHistoryEventsCapability Variable. /// public static readonly NodeId HistoryServerCapabilitiesType_AccessHistoryEventsCapability = new NodeId(Variables.HistoryServerCapabilitiesType_AccessHistoryEventsCapability); /// /// The identifier for the HistoryServerCapabilitiesType_MaxReturnDataValues Variable. /// public static readonly NodeId HistoryServerCapabilitiesType_MaxReturnDataValues = new NodeId(Variables.HistoryServerCapabilitiesType_MaxReturnDataValues); /// /// The identifier for the HistoryServerCapabilitiesType_MaxReturnEventValues Variable. /// public static readonly NodeId HistoryServerCapabilitiesType_MaxReturnEventValues = new NodeId(Variables.HistoryServerCapabilitiesType_MaxReturnEventValues); /// /// The identifier for the HistoryServerCapabilitiesType_InsertDataCapability Variable. /// public static readonly NodeId HistoryServerCapabilitiesType_InsertDataCapability = new NodeId(Variables.HistoryServerCapabilitiesType_InsertDataCapability); /// /// The identifier for the HistoryServerCapabilitiesType_ReplaceDataCapability Variable. /// public static readonly NodeId HistoryServerCapabilitiesType_ReplaceDataCapability = new NodeId(Variables.HistoryServerCapabilitiesType_ReplaceDataCapability); /// /// The identifier for the HistoryServerCapabilitiesType_UpdateDataCapability Variable. /// public static readonly NodeId HistoryServerCapabilitiesType_UpdateDataCapability = new NodeId(Variables.HistoryServerCapabilitiesType_UpdateDataCapability); /// /// The identifier for the HistoryServerCapabilitiesType_DeleteRawCapability Variable. /// public static readonly NodeId HistoryServerCapabilitiesType_DeleteRawCapability = new NodeId(Variables.HistoryServerCapabilitiesType_DeleteRawCapability); /// /// The identifier for the HistoryServerCapabilitiesType_DeleteAtTimeCapability Variable. /// public static readonly NodeId HistoryServerCapabilitiesType_DeleteAtTimeCapability = new NodeId(Variables.HistoryServerCapabilitiesType_DeleteAtTimeCapability); /// /// The identifier for the HistoryServerCapabilitiesType_InsertEventCapability Variable. /// public static readonly NodeId HistoryServerCapabilitiesType_InsertEventCapability = new NodeId(Variables.HistoryServerCapabilitiesType_InsertEventCapability); /// /// The identifier for the HistoryServerCapabilitiesType_ReplaceEventCapability Variable. /// public static readonly NodeId HistoryServerCapabilitiesType_ReplaceEventCapability = new NodeId(Variables.HistoryServerCapabilitiesType_ReplaceEventCapability); /// /// The identifier for the HistoryServerCapabilitiesType_UpdateEventCapability Variable. /// public static readonly NodeId HistoryServerCapabilitiesType_UpdateEventCapability = new NodeId(Variables.HistoryServerCapabilitiesType_UpdateEventCapability); /// /// The identifier for the HistoryServerCapabilitiesType_DeleteEventCapability Variable. /// public static readonly NodeId HistoryServerCapabilitiesType_DeleteEventCapability = new NodeId(Variables.HistoryServerCapabilitiesType_DeleteEventCapability); /// /// The identifier for the HistoryServerCapabilitiesType_InsertAnnotationCapability Variable. /// public static readonly NodeId HistoryServerCapabilitiesType_InsertAnnotationCapability = new NodeId(Variables.HistoryServerCapabilitiesType_InsertAnnotationCapability); /// /// The identifier for the AuditHistoryEventUpdateEventType_UpdatedNode Variable. /// public static readonly NodeId AuditHistoryEventUpdateEventType_UpdatedNode = new NodeId(Variables.AuditHistoryEventUpdateEventType_UpdatedNode); /// /// The identifier for the AuditHistoryEventUpdateEventType_PerformInsertReplace Variable. /// public static readonly NodeId AuditHistoryEventUpdateEventType_PerformInsertReplace = new NodeId(Variables.AuditHistoryEventUpdateEventType_PerformInsertReplace); /// /// The identifier for the AuditHistoryEventUpdateEventType_Filter Variable. /// public static readonly NodeId AuditHistoryEventUpdateEventType_Filter = new NodeId(Variables.AuditHistoryEventUpdateEventType_Filter); /// /// The identifier for the AuditHistoryEventUpdateEventType_NewValues Variable. /// public static readonly NodeId AuditHistoryEventUpdateEventType_NewValues = new NodeId(Variables.AuditHistoryEventUpdateEventType_NewValues); /// /// The identifier for the AuditHistoryEventUpdateEventType_OldValues Variable. /// public static readonly NodeId AuditHistoryEventUpdateEventType_OldValues = new NodeId(Variables.AuditHistoryEventUpdateEventType_OldValues); /// /// The identifier for the AuditHistoryValueUpdateEventType_UpdatedNode Variable. /// public static readonly NodeId AuditHistoryValueUpdateEventType_UpdatedNode = new NodeId(Variables.AuditHistoryValueUpdateEventType_UpdatedNode); /// /// The identifier for the AuditHistoryValueUpdateEventType_PerformInsertReplace Variable. /// public static readonly NodeId AuditHistoryValueUpdateEventType_PerformInsertReplace = new NodeId(Variables.AuditHistoryValueUpdateEventType_PerformInsertReplace); /// /// The identifier for the AuditHistoryValueUpdateEventType_NewValues Variable. /// public static readonly NodeId AuditHistoryValueUpdateEventType_NewValues = new NodeId(Variables.AuditHistoryValueUpdateEventType_NewValues); /// /// The identifier for the AuditHistoryValueUpdateEventType_OldValues Variable. /// public static readonly NodeId AuditHistoryValueUpdateEventType_OldValues = new NodeId(Variables.AuditHistoryValueUpdateEventType_OldValues); /// /// The identifier for the AuditHistoryDeleteEventType_UpdatedNode Variable. /// public static readonly NodeId AuditHistoryDeleteEventType_UpdatedNode = new NodeId(Variables.AuditHistoryDeleteEventType_UpdatedNode); /// /// The identifier for the AuditHistoryRawModifyDeleteEventType_IsDeleteModified Variable. /// public static readonly NodeId AuditHistoryRawModifyDeleteEventType_IsDeleteModified = new NodeId(Variables.AuditHistoryRawModifyDeleteEventType_IsDeleteModified); /// /// The identifier for the AuditHistoryRawModifyDeleteEventType_StartTime Variable. /// public static readonly NodeId AuditHistoryRawModifyDeleteEventType_StartTime = new NodeId(Variables.AuditHistoryRawModifyDeleteEventType_StartTime); /// /// The identifier for the AuditHistoryRawModifyDeleteEventType_EndTime Variable. /// public static readonly NodeId AuditHistoryRawModifyDeleteEventType_EndTime = new NodeId(Variables.AuditHistoryRawModifyDeleteEventType_EndTime); /// /// The identifier for the AuditHistoryRawModifyDeleteEventType_OldValues Variable. /// public static readonly NodeId AuditHistoryRawModifyDeleteEventType_OldValues = new NodeId(Variables.AuditHistoryRawModifyDeleteEventType_OldValues); /// /// The identifier for the AuditHistoryAtTimeDeleteEventType_ReqTimes Variable. /// public static readonly NodeId AuditHistoryAtTimeDeleteEventType_ReqTimes = new NodeId(Variables.AuditHistoryAtTimeDeleteEventType_ReqTimes); /// /// The identifier for the AuditHistoryAtTimeDeleteEventType_OldValues Variable. /// public static readonly NodeId AuditHistoryAtTimeDeleteEventType_OldValues = new NodeId(Variables.AuditHistoryAtTimeDeleteEventType_OldValues); /// /// The identifier for the AuditHistoryEventDeleteEventType_EventIds Variable. /// public static readonly NodeId AuditHistoryEventDeleteEventType_EventIds = new NodeId(Variables.AuditHistoryEventDeleteEventType_EventIds); /// /// The identifier for the AuditHistoryEventDeleteEventType_OldValues Variable. /// public static readonly NodeId AuditHistoryEventDeleteEventType_OldValues = new NodeId(Variables.AuditHistoryEventDeleteEventType_OldValues); /// /// The identifier for the AggregateConfigurationType_TreatUncertainAsBad Variable. /// public static readonly NodeId AggregateConfigurationType_TreatUncertainAsBad = new NodeId(Variables.AggregateConfigurationType_TreatUncertainAsBad); /// /// The identifier for the AggregateConfigurationType_PercentDataBad Variable. /// public static readonly NodeId AggregateConfigurationType_PercentDataBad = new NodeId(Variables.AggregateConfigurationType_PercentDataBad); /// /// The identifier for the AggregateConfigurationType_PercentDataGood Variable. /// public static readonly NodeId AggregateConfigurationType_PercentDataGood = new NodeId(Variables.AggregateConfigurationType_PercentDataGood); /// /// The identifier for the AggregateConfigurationType_UseSlopedExtrapolation Variable. /// public static readonly NodeId AggregateConfigurationType_UseSlopedExtrapolation = new NodeId(Variables.AggregateConfigurationType_UseSlopedExtrapolation); /// /// The identifier for the IdType_EnumStrings Variable. /// public static readonly NodeId IdType_EnumStrings = new NodeId(Variables.IdType_EnumStrings); /// /// The identifier for the NodeClass_EnumValues Variable. /// public static readonly NodeId NodeClass_EnumValues = new NodeId(Variables.NodeClass_EnumValues); /// /// The identifier for the ApplicationType_EnumStrings Variable. /// public static readonly NodeId ApplicationType_EnumStrings = new NodeId(Variables.ApplicationType_EnumStrings); /// /// The identifier for the MessageSecurityMode_EnumStrings Variable. /// public static readonly NodeId MessageSecurityMode_EnumStrings = new NodeId(Variables.MessageSecurityMode_EnumStrings); /// /// The identifier for the UserTokenType_EnumStrings Variable. /// public static readonly NodeId UserTokenType_EnumStrings = new NodeId(Variables.UserTokenType_EnumStrings); /// /// The identifier for the SecurityTokenRequestType_EnumStrings Variable. /// public static readonly NodeId SecurityTokenRequestType_EnumStrings = new NodeId(Variables.SecurityTokenRequestType_EnumStrings); /// /// The identifier for the NodeAttributesMask_EnumValues Variable. /// public static readonly NodeId NodeAttributesMask_EnumValues = new NodeId(Variables.NodeAttributesMask_EnumValues); /// /// The identifier for the AttributeWriteMask_EnumValues Variable. /// public static readonly NodeId AttributeWriteMask_EnumValues = new NodeId(Variables.AttributeWriteMask_EnumValues); /// /// The identifier for the BrowseDirection_EnumStrings Variable. /// public static readonly NodeId BrowseDirection_EnumStrings = new NodeId(Variables.BrowseDirection_EnumStrings); /// /// The identifier for the BrowseResultMask_EnumValues Variable. /// public static readonly NodeId BrowseResultMask_EnumValues = new NodeId(Variables.BrowseResultMask_EnumValues); /// /// The identifier for the ComplianceLevel_EnumStrings Variable. /// public static readonly NodeId ComplianceLevel_EnumStrings = new NodeId(Variables.ComplianceLevel_EnumStrings); /// /// The identifier for the FilterOperator_EnumStrings Variable. /// public static readonly NodeId FilterOperator_EnumStrings = new NodeId(Variables.FilterOperator_EnumStrings); /// /// The identifier for the TimestampsToReturn_EnumStrings Variable. /// public static readonly NodeId TimestampsToReturn_EnumStrings = new NodeId(Variables.TimestampsToReturn_EnumStrings); /// /// The identifier for the HistoryUpdateType_EnumValues Variable. /// public static readonly NodeId HistoryUpdateType_EnumValues = new NodeId(Variables.HistoryUpdateType_EnumValues); /// /// The identifier for the PerformUpdateType_EnumValues Variable. /// public static readonly NodeId PerformUpdateType_EnumValues = new NodeId(Variables.PerformUpdateType_EnumValues); /// /// The identifier for the MonitoringMode_EnumStrings Variable. /// public static readonly NodeId MonitoringMode_EnumStrings = new NodeId(Variables.MonitoringMode_EnumStrings); /// /// The identifier for the DataChangeTrigger_EnumStrings Variable. /// public static readonly NodeId DataChangeTrigger_EnumStrings = new NodeId(Variables.DataChangeTrigger_EnumStrings); /// /// The identifier for the DeadbandType_EnumStrings Variable. /// public static readonly NodeId DeadbandType_EnumStrings = new NodeId(Variables.DeadbandType_EnumStrings); /// /// The identifier for the EnumeratedTestType_EnumValues Variable. /// public static readonly NodeId EnumeratedTestType_EnumValues = new NodeId(Variables.EnumeratedTestType_EnumValues); /// /// The identifier for the RedundancySupport_EnumStrings Variable. /// public static readonly NodeId RedundancySupport_EnumStrings = new NodeId(Variables.RedundancySupport_EnumStrings); /// /// The identifier for the ServerState_EnumStrings Variable. /// public static readonly NodeId ServerState_EnumStrings = new NodeId(Variables.ServerState_EnumStrings); /// /// The identifier for the ModelChangeStructureVerbMask_EnumValues Variable. /// public static readonly NodeId ModelChangeStructureVerbMask_EnumValues = new NodeId(Variables.ModelChangeStructureVerbMask_EnumValues); /// /// The identifier for the AxisScaleEnumeration_EnumStrings Variable. /// public static readonly NodeId AxisScaleEnumeration_EnumStrings = new NodeId(Variables.AxisScaleEnumeration_EnumStrings); /// /// The identifier for the ExceptionDeviationFormat_EnumStrings Variable. /// public static readonly NodeId ExceptionDeviationFormat_EnumStrings = new NodeId(Variables.ExceptionDeviationFormat_EnumStrings); /// /// The identifier for the OpcUa_XmlSchema Variable. /// public static readonly NodeId OpcUa_XmlSchema = new NodeId(Variables.OpcUa_XmlSchema); /// /// The identifier for the OpcUa_XmlSchema_NamespaceUri Variable. /// public static readonly NodeId OpcUa_XmlSchema_NamespaceUri = new NodeId(Variables.OpcUa_XmlSchema_NamespaceUri); /// /// The identifier for the OpcUa_XmlSchema_Argument Variable. /// public static readonly NodeId OpcUa_XmlSchema_Argument = new NodeId(Variables.OpcUa_XmlSchema_Argument); /// /// The identifier for the OpcUa_XmlSchema_EnumValueType Variable. /// public static readonly NodeId OpcUa_XmlSchema_EnumValueType = new NodeId(Variables.OpcUa_XmlSchema_EnumValueType); /// /// The identifier for the OpcUa_XmlSchema_TimeZoneDataType Variable. /// public static readonly NodeId OpcUa_XmlSchema_TimeZoneDataType = new NodeId(Variables.OpcUa_XmlSchema_TimeZoneDataType); /// /// The identifier for the OpcUa_XmlSchema_ApplicationDescription Variable. /// public static readonly NodeId OpcUa_XmlSchema_ApplicationDescription = new NodeId(Variables.OpcUa_XmlSchema_ApplicationDescription); /// /// The identifier for the OpcUa_XmlSchema_DnsServiceRecord Variable. /// public static readonly NodeId OpcUa_XmlSchema_DnsServiceRecord = new NodeId(Variables.OpcUa_XmlSchema_DnsServiceRecord); /// /// The identifier for the OpcUa_XmlSchema_UserTokenPolicy Variable. /// public static readonly NodeId OpcUa_XmlSchema_UserTokenPolicy = new NodeId(Variables.OpcUa_XmlSchema_UserTokenPolicy); /// /// The identifier for the OpcUa_XmlSchema_EndpointDescription Variable. /// public static readonly NodeId OpcUa_XmlSchema_EndpointDescription = new NodeId(Variables.OpcUa_XmlSchema_EndpointDescription); /// /// The identifier for the OpcUa_XmlSchema_RegisteredServer Variable. /// public static readonly NodeId OpcUa_XmlSchema_RegisteredServer = new NodeId(Variables.OpcUa_XmlSchema_RegisteredServer); /// /// The identifier for the OpcUa_XmlSchema_SignedSoftwareCertificate Variable. /// public static readonly NodeId OpcUa_XmlSchema_SignedSoftwareCertificate = new NodeId(Variables.OpcUa_XmlSchema_SignedSoftwareCertificate); /// /// The identifier for the OpcUa_XmlSchema_UserIdentityToken Variable. /// public static readonly NodeId OpcUa_XmlSchema_UserIdentityToken = new NodeId(Variables.OpcUa_XmlSchema_UserIdentityToken); /// /// The identifier for the OpcUa_XmlSchema_AnonymousIdentityToken Variable. /// public static readonly NodeId OpcUa_XmlSchema_AnonymousIdentityToken = new NodeId(Variables.OpcUa_XmlSchema_AnonymousIdentityToken); /// /// The identifier for the OpcUa_XmlSchema_UserNameIdentityToken Variable. /// public static readonly NodeId OpcUa_XmlSchema_UserNameIdentityToken = new NodeId(Variables.OpcUa_XmlSchema_UserNameIdentityToken); /// /// The identifier for the OpcUa_XmlSchema_X509IdentityToken Variable. /// public static readonly NodeId OpcUa_XmlSchema_X509IdentityToken = new NodeId(Variables.OpcUa_XmlSchema_X509IdentityToken); /// /// The identifier for the OpcUa_XmlSchema_IssuedIdentityToken Variable. /// public static readonly NodeId OpcUa_XmlSchema_IssuedIdentityToken = new NodeId(Variables.OpcUa_XmlSchema_IssuedIdentityToken); /// /// The identifier for the OpcUa_XmlSchema_AddNodesItem Variable. /// public static readonly NodeId OpcUa_XmlSchema_AddNodesItem = new NodeId(Variables.OpcUa_XmlSchema_AddNodesItem); /// /// The identifier for the OpcUa_XmlSchema_AddReferencesItem Variable. /// public static readonly NodeId OpcUa_XmlSchema_AddReferencesItem = new NodeId(Variables.OpcUa_XmlSchema_AddReferencesItem); /// /// The identifier for the OpcUa_XmlSchema_DeleteNodesItem Variable. /// public static readonly NodeId OpcUa_XmlSchema_DeleteNodesItem = new NodeId(Variables.OpcUa_XmlSchema_DeleteNodesItem); /// /// The identifier for the OpcUa_XmlSchema_DeleteReferencesItem Variable. /// public static readonly NodeId OpcUa_XmlSchema_DeleteReferencesItem = new NodeId(Variables.OpcUa_XmlSchema_DeleteReferencesItem); /// /// The identifier for the OpcUa_XmlSchema_EndpointConfiguration Variable. /// public static readonly NodeId OpcUa_XmlSchema_EndpointConfiguration = new NodeId(Variables.OpcUa_XmlSchema_EndpointConfiguration); /// /// The identifier for the OpcUa_XmlSchema_SupportedProfile Variable. /// public static readonly NodeId OpcUa_XmlSchema_SupportedProfile = new NodeId(Variables.OpcUa_XmlSchema_SupportedProfile); /// /// The identifier for the OpcUa_XmlSchema_SoftwareCertificate Variable. /// public static readonly NodeId OpcUa_XmlSchema_SoftwareCertificate = new NodeId(Variables.OpcUa_XmlSchema_SoftwareCertificate); /// /// The identifier for the OpcUa_XmlSchema_ContentFilterElement Variable. /// public static readonly NodeId OpcUa_XmlSchema_ContentFilterElement = new NodeId(Variables.OpcUa_XmlSchema_ContentFilterElement); /// /// The identifier for the OpcUa_XmlSchema_ContentFilter Variable. /// public static readonly NodeId OpcUa_XmlSchema_ContentFilter = new NodeId(Variables.OpcUa_XmlSchema_ContentFilter); /// /// The identifier for the OpcUa_XmlSchema_FilterOperand Variable. /// public static readonly NodeId OpcUa_XmlSchema_FilterOperand = new NodeId(Variables.OpcUa_XmlSchema_FilterOperand); /// /// The identifier for the OpcUa_XmlSchema_ElementOperand Variable. /// public static readonly NodeId OpcUa_XmlSchema_ElementOperand = new NodeId(Variables.OpcUa_XmlSchema_ElementOperand); /// /// The identifier for the OpcUa_XmlSchema_LiteralOperand Variable. /// public static readonly NodeId OpcUa_XmlSchema_LiteralOperand = new NodeId(Variables.OpcUa_XmlSchema_LiteralOperand); /// /// The identifier for the OpcUa_XmlSchema_AttributeOperand Variable. /// public static readonly NodeId OpcUa_XmlSchema_AttributeOperand = new NodeId(Variables.OpcUa_XmlSchema_AttributeOperand); /// /// The identifier for the OpcUa_XmlSchema_SimpleAttributeOperand Variable. /// public static readonly NodeId OpcUa_XmlSchema_SimpleAttributeOperand = new NodeId(Variables.OpcUa_XmlSchema_SimpleAttributeOperand); /// /// The identifier for the OpcUa_XmlSchema_HistoryEvent Variable. /// public static readonly NodeId OpcUa_XmlSchema_HistoryEvent = new NodeId(Variables.OpcUa_XmlSchema_HistoryEvent); /// /// The identifier for the OpcUa_XmlSchema_MonitoringFilter Variable. /// public static readonly NodeId OpcUa_XmlSchema_MonitoringFilter = new NodeId(Variables.OpcUa_XmlSchema_MonitoringFilter); /// /// The identifier for the OpcUa_XmlSchema_EventFilter Variable. /// public static readonly NodeId OpcUa_XmlSchema_EventFilter = new NodeId(Variables.OpcUa_XmlSchema_EventFilter); /// /// The identifier for the OpcUa_XmlSchema_AggregateConfiguration Variable. /// public static readonly NodeId OpcUa_XmlSchema_AggregateConfiguration = new NodeId(Variables.OpcUa_XmlSchema_AggregateConfiguration); /// /// The identifier for the OpcUa_XmlSchema_HistoryEventFieldList Variable. /// public static readonly NodeId OpcUa_XmlSchema_HistoryEventFieldList = new NodeId(Variables.OpcUa_XmlSchema_HistoryEventFieldList); /// /// The identifier for the OpcUa_XmlSchema_ScalarTestType Variable. /// public static readonly NodeId OpcUa_XmlSchema_ScalarTestType = new NodeId(Variables.OpcUa_XmlSchema_ScalarTestType); /// /// The identifier for the OpcUa_XmlSchema_ArrayTestType Variable. /// public static readonly NodeId OpcUa_XmlSchema_ArrayTestType = new NodeId(Variables.OpcUa_XmlSchema_ArrayTestType); /// /// The identifier for the OpcUa_XmlSchema_CompositeTestType Variable. /// public static readonly NodeId OpcUa_XmlSchema_CompositeTestType = new NodeId(Variables.OpcUa_XmlSchema_CompositeTestType); /// /// The identifier for the OpcUa_XmlSchema_BuildInfo Variable. /// public static readonly NodeId OpcUa_XmlSchema_BuildInfo = new NodeId(Variables.OpcUa_XmlSchema_BuildInfo); /// /// The identifier for the OpcUa_XmlSchema_RedundantServerDataType Variable. /// public static readonly NodeId OpcUa_XmlSchema_RedundantServerDataType = new NodeId(Variables.OpcUa_XmlSchema_RedundantServerDataType); /// /// The identifier for the OpcUa_XmlSchema_EndpointUrlListDataType Variable. /// public static readonly NodeId OpcUa_XmlSchema_EndpointUrlListDataType = new NodeId(Variables.OpcUa_XmlSchema_EndpointUrlListDataType); /// /// The identifier for the OpcUa_XmlSchema_NetworkGroupDataType Variable. /// public static readonly NodeId OpcUa_XmlSchema_NetworkGroupDataType = new NodeId(Variables.OpcUa_XmlSchema_NetworkGroupDataType); /// /// The identifier for the OpcUa_XmlSchema_SamplingIntervalDiagnosticsDataType Variable. /// public static readonly NodeId OpcUa_XmlSchema_SamplingIntervalDiagnosticsDataType = new NodeId(Variables.OpcUa_XmlSchema_SamplingIntervalDiagnosticsDataType); /// /// The identifier for the OpcUa_XmlSchema_ServerDiagnosticsSummaryDataType Variable. /// public static readonly NodeId OpcUa_XmlSchema_ServerDiagnosticsSummaryDataType = new NodeId(Variables.OpcUa_XmlSchema_ServerDiagnosticsSummaryDataType); /// /// The identifier for the OpcUa_XmlSchema_ServerStatusDataType Variable. /// public static readonly NodeId OpcUa_XmlSchema_ServerStatusDataType = new NodeId(Variables.OpcUa_XmlSchema_ServerStatusDataType); /// /// The identifier for the OpcUa_XmlSchema_SessionDiagnosticsDataType Variable. /// public static readonly NodeId OpcUa_XmlSchema_SessionDiagnosticsDataType = new NodeId(Variables.OpcUa_XmlSchema_SessionDiagnosticsDataType); /// /// The identifier for the OpcUa_XmlSchema_SessionSecurityDiagnosticsDataType Variable. /// public static readonly NodeId OpcUa_XmlSchema_SessionSecurityDiagnosticsDataType = new NodeId(Variables.OpcUa_XmlSchema_SessionSecurityDiagnosticsDataType); /// /// The identifier for the OpcUa_XmlSchema_ServiceCounterDataType Variable. /// public static readonly NodeId OpcUa_XmlSchema_ServiceCounterDataType = new NodeId(Variables.OpcUa_XmlSchema_ServiceCounterDataType); /// /// The identifier for the OpcUa_XmlSchema_StatusResult Variable. /// public static readonly NodeId OpcUa_XmlSchema_StatusResult = new NodeId(Variables.OpcUa_XmlSchema_StatusResult); /// /// The identifier for the OpcUa_XmlSchema_SubscriptionDiagnosticsDataType Variable. /// public static readonly NodeId OpcUa_XmlSchema_SubscriptionDiagnosticsDataType = new NodeId(Variables.OpcUa_XmlSchema_SubscriptionDiagnosticsDataType); /// /// The identifier for the OpcUa_XmlSchema_ModelChangeStructureDataType Variable. /// public static readonly NodeId OpcUa_XmlSchema_ModelChangeStructureDataType = new NodeId(Variables.OpcUa_XmlSchema_ModelChangeStructureDataType); /// /// The identifier for the OpcUa_XmlSchema_SemanticChangeStructureDataType Variable. /// public static readonly NodeId OpcUa_XmlSchema_SemanticChangeStructureDataType = new NodeId(Variables.OpcUa_XmlSchema_SemanticChangeStructureDataType); /// /// The identifier for the OpcUa_XmlSchema_Range Variable. /// public static readonly NodeId OpcUa_XmlSchema_Range = new NodeId(Variables.OpcUa_XmlSchema_Range); /// /// The identifier for the OpcUa_XmlSchema_EUInformation Variable. /// public static readonly NodeId OpcUa_XmlSchema_EUInformation = new NodeId(Variables.OpcUa_XmlSchema_EUInformation); /// /// The identifier for the OpcUa_XmlSchema_ComplexNumberType Variable. /// public static readonly NodeId OpcUa_XmlSchema_ComplexNumberType = new NodeId(Variables.OpcUa_XmlSchema_ComplexNumberType); /// /// The identifier for the OpcUa_XmlSchema_DoubleComplexNumberType Variable. /// public static readonly NodeId OpcUa_XmlSchema_DoubleComplexNumberType = new NodeId(Variables.OpcUa_XmlSchema_DoubleComplexNumberType); /// /// The identifier for the OpcUa_XmlSchema_AxisInformation Variable. /// public static readonly NodeId OpcUa_XmlSchema_AxisInformation = new NodeId(Variables.OpcUa_XmlSchema_AxisInformation); /// /// The identifier for the OpcUa_XmlSchema_XVType Variable. /// public static readonly NodeId OpcUa_XmlSchema_XVType = new NodeId(Variables.OpcUa_XmlSchema_XVType); /// /// The identifier for the OpcUa_XmlSchema_ProgramDiagnosticDataType Variable. /// public static readonly NodeId OpcUa_XmlSchema_ProgramDiagnosticDataType = new NodeId(Variables.OpcUa_XmlSchema_ProgramDiagnosticDataType); /// /// The identifier for the OpcUa_XmlSchema_Annotation Variable. /// public static readonly NodeId OpcUa_XmlSchema_Annotation = new NodeId(Variables.OpcUa_XmlSchema_Annotation); /// /// The identifier for the OpcUa_BinarySchema Variable. /// public static readonly NodeId OpcUa_BinarySchema = new NodeId(Variables.OpcUa_BinarySchema); /// /// The identifier for the OpcUa_BinarySchema_NamespaceUri Variable. /// public static readonly NodeId OpcUa_BinarySchema_NamespaceUri = new NodeId(Variables.OpcUa_BinarySchema_NamespaceUri); /// /// The identifier for the OpcUa_BinarySchema_Argument Variable. /// public static readonly NodeId OpcUa_BinarySchema_Argument = new NodeId(Variables.OpcUa_BinarySchema_Argument); /// /// The identifier for the OpcUa_BinarySchema_EnumValueType Variable. /// public static readonly NodeId OpcUa_BinarySchema_EnumValueType = new NodeId(Variables.OpcUa_BinarySchema_EnumValueType); /// /// The identifier for the OpcUa_BinarySchema_TimeZoneDataType Variable. /// public static readonly NodeId OpcUa_BinarySchema_TimeZoneDataType = new NodeId(Variables.OpcUa_BinarySchema_TimeZoneDataType); /// /// The identifier for the OpcUa_BinarySchema_ApplicationDescription Variable. /// public static readonly NodeId OpcUa_BinarySchema_ApplicationDescription = new NodeId(Variables.OpcUa_BinarySchema_ApplicationDescription); /// /// The identifier for the OpcUa_BinarySchema_DnsServiceRecord Variable. /// public static readonly NodeId OpcUa_BinarySchema_DnsServiceRecord = new NodeId(Variables.OpcUa_BinarySchema_DnsServiceRecord); /// /// The identifier for the OpcUa_BinarySchema_UserTokenPolicy Variable. /// public static readonly NodeId OpcUa_BinarySchema_UserTokenPolicy = new NodeId(Variables.OpcUa_BinarySchema_UserTokenPolicy); /// /// The identifier for the OpcUa_BinarySchema_EndpointDescription Variable. /// public static readonly NodeId OpcUa_BinarySchema_EndpointDescription = new NodeId(Variables.OpcUa_BinarySchema_EndpointDescription); /// /// The identifier for the OpcUa_BinarySchema_RegisteredServer Variable. /// public static readonly NodeId OpcUa_BinarySchema_RegisteredServer = new NodeId(Variables.OpcUa_BinarySchema_RegisteredServer); /// /// The identifier for the OpcUa_BinarySchema_SignedSoftwareCertificate Variable. /// public static readonly NodeId OpcUa_BinarySchema_SignedSoftwareCertificate = new NodeId(Variables.OpcUa_BinarySchema_SignedSoftwareCertificate); /// /// The identifier for the OpcUa_BinarySchema_UserIdentityToken Variable. /// public static readonly NodeId OpcUa_BinarySchema_UserIdentityToken = new NodeId(Variables.OpcUa_BinarySchema_UserIdentityToken); /// /// The identifier for the OpcUa_BinarySchema_AnonymousIdentityToken Variable. /// public static readonly NodeId OpcUa_BinarySchema_AnonymousIdentityToken = new NodeId(Variables.OpcUa_BinarySchema_AnonymousIdentityToken); /// /// The identifier for the OpcUa_BinarySchema_UserNameIdentityToken Variable. /// public static readonly NodeId OpcUa_BinarySchema_UserNameIdentityToken = new NodeId(Variables.OpcUa_BinarySchema_UserNameIdentityToken); /// /// The identifier for the OpcUa_BinarySchema_X509IdentityToken Variable. /// public static readonly NodeId OpcUa_BinarySchema_X509IdentityToken = new NodeId(Variables.OpcUa_BinarySchema_X509IdentityToken); /// /// The identifier for the OpcUa_BinarySchema_IssuedIdentityToken Variable. /// public static readonly NodeId OpcUa_BinarySchema_IssuedIdentityToken = new NodeId(Variables.OpcUa_BinarySchema_IssuedIdentityToken); /// /// The identifier for the OpcUa_BinarySchema_AddNodesItem Variable. /// public static readonly NodeId OpcUa_BinarySchema_AddNodesItem = new NodeId(Variables.OpcUa_BinarySchema_AddNodesItem); /// /// The identifier for the OpcUa_BinarySchema_AddReferencesItem Variable. /// public static readonly NodeId OpcUa_BinarySchema_AddReferencesItem = new NodeId(Variables.OpcUa_BinarySchema_AddReferencesItem); /// /// The identifier for the OpcUa_BinarySchema_DeleteNodesItem Variable. /// public static readonly NodeId OpcUa_BinarySchema_DeleteNodesItem = new NodeId(Variables.OpcUa_BinarySchema_DeleteNodesItem); /// /// The identifier for the OpcUa_BinarySchema_DeleteReferencesItem Variable. /// public static readonly NodeId OpcUa_BinarySchema_DeleteReferencesItem = new NodeId(Variables.OpcUa_BinarySchema_DeleteReferencesItem); /// /// The identifier for the OpcUa_BinarySchema_EndpointConfiguration Variable. /// public static readonly NodeId OpcUa_BinarySchema_EndpointConfiguration = new NodeId(Variables.OpcUa_BinarySchema_EndpointConfiguration); /// /// The identifier for the OpcUa_BinarySchema_SupportedProfile Variable. /// public static readonly NodeId OpcUa_BinarySchema_SupportedProfile = new NodeId(Variables.OpcUa_BinarySchema_SupportedProfile); /// /// The identifier for the OpcUa_BinarySchema_SoftwareCertificate Variable. /// public static readonly NodeId OpcUa_BinarySchema_SoftwareCertificate = new NodeId(Variables.OpcUa_BinarySchema_SoftwareCertificate); /// /// The identifier for the OpcUa_BinarySchema_ContentFilterElement Variable. /// public static readonly NodeId OpcUa_BinarySchema_ContentFilterElement = new NodeId(Variables.OpcUa_BinarySchema_ContentFilterElement); /// /// The identifier for the OpcUa_BinarySchema_ContentFilter Variable. /// public static readonly NodeId OpcUa_BinarySchema_ContentFilter = new NodeId(Variables.OpcUa_BinarySchema_ContentFilter); /// /// The identifier for the OpcUa_BinarySchema_FilterOperand Variable. /// public static readonly NodeId OpcUa_BinarySchema_FilterOperand = new NodeId(Variables.OpcUa_BinarySchema_FilterOperand); /// /// The identifier for the OpcUa_BinarySchema_ElementOperand Variable. /// public static readonly NodeId OpcUa_BinarySchema_ElementOperand = new NodeId(Variables.OpcUa_BinarySchema_ElementOperand); /// /// The identifier for the OpcUa_BinarySchema_LiteralOperand Variable. /// public static readonly NodeId OpcUa_BinarySchema_LiteralOperand = new NodeId(Variables.OpcUa_BinarySchema_LiteralOperand); /// /// The identifier for the OpcUa_BinarySchema_AttributeOperand Variable. /// public static readonly NodeId OpcUa_BinarySchema_AttributeOperand = new NodeId(Variables.OpcUa_BinarySchema_AttributeOperand); /// /// The identifier for the OpcUa_BinarySchema_SimpleAttributeOperand Variable. /// public static readonly NodeId OpcUa_BinarySchema_SimpleAttributeOperand = new NodeId(Variables.OpcUa_BinarySchema_SimpleAttributeOperand); /// /// The identifier for the OpcUa_BinarySchema_HistoryEvent Variable. /// public static readonly NodeId OpcUa_BinarySchema_HistoryEvent = new NodeId(Variables.OpcUa_BinarySchema_HistoryEvent); /// /// The identifier for the OpcUa_BinarySchema_MonitoringFilter Variable. /// public static readonly NodeId OpcUa_BinarySchema_MonitoringFilter = new NodeId(Variables.OpcUa_BinarySchema_MonitoringFilter); /// /// The identifier for the OpcUa_BinarySchema_EventFilter Variable. /// public static readonly NodeId OpcUa_BinarySchema_EventFilter = new NodeId(Variables.OpcUa_BinarySchema_EventFilter); /// /// The identifier for the OpcUa_BinarySchema_AggregateConfiguration Variable. /// public static readonly NodeId OpcUa_BinarySchema_AggregateConfiguration = new NodeId(Variables.OpcUa_BinarySchema_AggregateConfiguration); /// /// The identifier for the OpcUa_BinarySchema_HistoryEventFieldList Variable. /// public static readonly NodeId OpcUa_BinarySchema_HistoryEventFieldList = new NodeId(Variables.OpcUa_BinarySchema_HistoryEventFieldList); /// /// The identifier for the OpcUa_BinarySchema_ScalarTestType Variable. /// public static readonly NodeId OpcUa_BinarySchema_ScalarTestType = new NodeId(Variables.OpcUa_BinarySchema_ScalarTestType); /// /// The identifier for the OpcUa_BinarySchema_ArrayTestType Variable. /// public static readonly NodeId OpcUa_BinarySchema_ArrayTestType = new NodeId(Variables.OpcUa_BinarySchema_ArrayTestType); /// /// The identifier for the OpcUa_BinarySchema_CompositeTestType Variable. /// public static readonly NodeId OpcUa_BinarySchema_CompositeTestType = new NodeId(Variables.OpcUa_BinarySchema_CompositeTestType); /// /// The identifier for the OpcUa_BinarySchema_BuildInfo Variable. /// public static readonly NodeId OpcUa_BinarySchema_BuildInfo = new NodeId(Variables.OpcUa_BinarySchema_BuildInfo); /// /// The identifier for the OpcUa_BinarySchema_RedundantServerDataType Variable. /// public static readonly NodeId OpcUa_BinarySchema_RedundantServerDataType = new NodeId(Variables.OpcUa_BinarySchema_RedundantServerDataType); /// /// The identifier for the OpcUa_BinarySchema_EndpointUrlListDataType Variable. /// public static readonly NodeId OpcUa_BinarySchema_EndpointUrlListDataType = new NodeId(Variables.OpcUa_BinarySchema_EndpointUrlListDataType); /// /// The identifier for the OpcUa_BinarySchema_NetworkGroupDataType Variable. /// public static readonly NodeId OpcUa_BinarySchema_NetworkGroupDataType = new NodeId(Variables.OpcUa_BinarySchema_NetworkGroupDataType); /// /// The identifier for the OpcUa_BinarySchema_SamplingIntervalDiagnosticsDataType Variable. /// public static readonly NodeId OpcUa_BinarySchema_SamplingIntervalDiagnosticsDataType = new NodeId(Variables.OpcUa_BinarySchema_SamplingIntervalDiagnosticsDataType); /// /// The identifier for the OpcUa_BinarySchema_ServerDiagnosticsSummaryDataType Variable. /// public static readonly NodeId OpcUa_BinarySchema_ServerDiagnosticsSummaryDataType = new NodeId(Variables.OpcUa_BinarySchema_ServerDiagnosticsSummaryDataType); /// /// The identifier for the OpcUa_BinarySchema_ServerStatusDataType Variable. /// public static readonly NodeId OpcUa_BinarySchema_ServerStatusDataType = new NodeId(Variables.OpcUa_BinarySchema_ServerStatusDataType); /// /// The identifier for the OpcUa_BinarySchema_SessionDiagnosticsDataType Variable. /// public static readonly NodeId OpcUa_BinarySchema_SessionDiagnosticsDataType = new NodeId(Variables.OpcUa_BinarySchema_SessionDiagnosticsDataType); /// /// The identifier for the OpcUa_BinarySchema_SessionSecurityDiagnosticsDataType Variable. /// public static readonly NodeId OpcUa_BinarySchema_SessionSecurityDiagnosticsDataType = new NodeId(Variables.OpcUa_BinarySchema_SessionSecurityDiagnosticsDataType); /// /// The identifier for the OpcUa_BinarySchema_ServiceCounterDataType Variable. /// public static readonly NodeId OpcUa_BinarySchema_ServiceCounterDataType = new NodeId(Variables.OpcUa_BinarySchema_ServiceCounterDataType); /// /// The identifier for the OpcUa_BinarySchema_StatusResult Variable. /// public static readonly NodeId OpcUa_BinarySchema_StatusResult = new NodeId(Variables.OpcUa_BinarySchema_StatusResult); /// /// The identifier for the OpcUa_BinarySchema_SubscriptionDiagnosticsDataType Variable. /// public static readonly NodeId OpcUa_BinarySchema_SubscriptionDiagnosticsDataType = new NodeId(Variables.OpcUa_BinarySchema_SubscriptionDiagnosticsDataType); /// /// The identifier for the OpcUa_BinarySchema_ModelChangeStructureDataType Variable. /// public static readonly NodeId OpcUa_BinarySchema_ModelChangeStructureDataType = new NodeId(Variables.OpcUa_BinarySchema_ModelChangeStructureDataType); /// /// The identifier for the OpcUa_BinarySchema_SemanticChangeStructureDataType Variable. /// public static readonly NodeId OpcUa_BinarySchema_SemanticChangeStructureDataType = new NodeId(Variables.OpcUa_BinarySchema_SemanticChangeStructureDataType); /// /// The identifier for the OpcUa_BinarySchema_Range Variable. /// public static readonly NodeId OpcUa_BinarySchema_Range = new NodeId(Variables.OpcUa_BinarySchema_Range); /// /// The identifier for the OpcUa_BinarySchema_EUInformation Variable. /// public static readonly NodeId OpcUa_BinarySchema_EUInformation = new NodeId(Variables.OpcUa_BinarySchema_EUInformation); /// /// The identifier for the OpcUa_BinarySchema_ComplexNumberType Variable. /// public static readonly NodeId OpcUa_BinarySchema_ComplexNumberType = new NodeId(Variables.OpcUa_BinarySchema_ComplexNumberType); /// /// The identifier for the OpcUa_BinarySchema_DoubleComplexNumberType Variable. /// public static readonly NodeId OpcUa_BinarySchema_DoubleComplexNumberType = new NodeId(Variables.OpcUa_BinarySchema_DoubleComplexNumberType); /// /// The identifier for the OpcUa_BinarySchema_AxisInformation Variable. /// public static readonly NodeId OpcUa_BinarySchema_AxisInformation = new NodeId(Variables.OpcUa_BinarySchema_AxisInformation); /// /// The identifier for the OpcUa_BinarySchema_XVType Variable. /// public static readonly NodeId OpcUa_BinarySchema_XVType = new NodeId(Variables.OpcUa_BinarySchema_XVType); /// /// The identifier for the OpcUa_BinarySchema_ProgramDiagnosticDataType Variable. /// public static readonly NodeId OpcUa_BinarySchema_ProgramDiagnosticDataType = new NodeId(Variables.OpcUa_BinarySchema_ProgramDiagnosticDataType); /// /// The identifier for the OpcUa_BinarySchema_Annotation Variable. /// public static readonly NodeId OpcUa_BinarySchema_Annotation = new NodeId(Variables.OpcUa_BinarySchema_Annotation); } #endregion #region VariableType Node Identifiers /// /// A class that declares constants for all VariableTypes in the Model Design. /// /// [System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")] public static partial class VariableTypeIds { /// /// The identifier for the BaseVariableType VariableType. /// public static readonly NodeId BaseVariableType = new NodeId(VariableTypes.BaseVariableType); /// /// The identifier for the BaseDataVariableType VariableType. /// public static readonly NodeId BaseDataVariableType = new NodeId(VariableTypes.BaseDataVariableType); /// /// The identifier for the PropertyType VariableType. /// public static readonly NodeId PropertyType = new NodeId(VariableTypes.PropertyType); /// /// The identifier for the DataTypeDescriptionType VariableType. /// public static readonly NodeId DataTypeDescriptionType = new NodeId(VariableTypes.DataTypeDescriptionType); /// /// The identifier for the DataTypeDictionaryType VariableType. /// public static readonly NodeId DataTypeDictionaryType = new NodeId(VariableTypes.DataTypeDictionaryType); /// /// The identifier for the ServerVendorCapabilityType VariableType. /// public static readonly NodeId ServerVendorCapabilityType = new NodeId(VariableTypes.ServerVendorCapabilityType); /// /// The identifier for the ServerStatusType VariableType. /// public static readonly NodeId ServerStatusType = new NodeId(VariableTypes.ServerStatusType); /// /// The identifier for the BuildInfoType VariableType. /// public static readonly NodeId BuildInfoType = new NodeId(VariableTypes.BuildInfoType); /// /// The identifier for the ServerDiagnosticsSummaryType VariableType. /// public static readonly NodeId ServerDiagnosticsSummaryType = new NodeId(VariableTypes.ServerDiagnosticsSummaryType); /// /// The identifier for the SamplingIntervalDiagnosticsArrayType VariableType. /// public static readonly NodeId SamplingIntervalDiagnosticsArrayType = new NodeId(VariableTypes.SamplingIntervalDiagnosticsArrayType); /// /// The identifier for the SamplingIntervalDiagnosticsType VariableType. /// public static readonly NodeId SamplingIntervalDiagnosticsType = new NodeId(VariableTypes.SamplingIntervalDiagnosticsType); /// /// The identifier for the SubscriptionDiagnosticsArrayType VariableType. /// public static readonly NodeId SubscriptionDiagnosticsArrayType = new NodeId(VariableTypes.SubscriptionDiagnosticsArrayType); /// /// The identifier for the SubscriptionDiagnosticsType VariableType. /// public static readonly NodeId SubscriptionDiagnosticsType = new NodeId(VariableTypes.SubscriptionDiagnosticsType); /// /// The identifier for the SessionDiagnosticsArrayType VariableType. /// public static readonly NodeId SessionDiagnosticsArrayType = new NodeId(VariableTypes.SessionDiagnosticsArrayType); /// /// The identifier for the SessionDiagnosticsVariableType VariableType. /// public static readonly NodeId SessionDiagnosticsVariableType = new NodeId(VariableTypes.SessionDiagnosticsVariableType); /// /// The identifier for the SessionSecurityDiagnosticsArrayType VariableType. /// public static readonly NodeId SessionSecurityDiagnosticsArrayType = new NodeId(VariableTypes.SessionSecurityDiagnosticsArrayType); /// /// The identifier for the SessionSecurityDiagnosticsType VariableType. /// public static readonly NodeId SessionSecurityDiagnosticsType = new NodeId(VariableTypes.SessionSecurityDiagnosticsType); /// /// The identifier for the OptionSetType VariableType. /// public static readonly NodeId OptionSetType = new NodeId(VariableTypes.OptionSetType); /// /// The identifier for the StateVariableType VariableType. /// public static readonly NodeId StateVariableType = new NodeId(VariableTypes.StateVariableType); /// /// The identifier for the TransitionVariableType VariableType. /// public static readonly NodeId TransitionVariableType = new NodeId(VariableTypes.TransitionVariableType); /// /// The identifier for the FiniteStateVariableType VariableType. /// public static readonly NodeId FiniteStateVariableType = new NodeId(VariableTypes.FiniteStateVariableType); /// /// The identifier for the FiniteTransitionVariableType VariableType. /// public static readonly NodeId FiniteTransitionVariableType = new NodeId(VariableTypes.FiniteTransitionVariableType); /// /// The identifier for the DataItemType VariableType. /// public static readonly NodeId DataItemType = new NodeId(VariableTypes.DataItemType); /// /// The identifier for the AnalogItemType VariableType. /// public static readonly NodeId AnalogItemType = new NodeId(VariableTypes.AnalogItemType); /// /// The identifier for the DiscreteItemType VariableType. /// public static readonly NodeId DiscreteItemType = new NodeId(VariableTypes.DiscreteItemType); /// /// The identifier for the TwoStateDiscreteType VariableType. /// public static readonly NodeId TwoStateDiscreteType = new NodeId(VariableTypes.TwoStateDiscreteType); /// /// The identifier for the MultiStateDiscreteType VariableType. /// public static readonly NodeId MultiStateDiscreteType = new NodeId(VariableTypes.MultiStateDiscreteType); /// /// The identifier for the MultiStateValueDiscreteType VariableType. /// public static readonly NodeId MultiStateValueDiscreteType = new NodeId(VariableTypes.MultiStateValueDiscreteType); /// /// The identifier for the ArrayItemType VariableType. /// public static readonly NodeId ArrayItemType = new NodeId(VariableTypes.ArrayItemType); /// /// The identifier for the YArrayItemType VariableType. /// public static readonly NodeId YArrayItemType = new NodeId(VariableTypes.YArrayItemType); /// /// The identifier for the XYArrayItemType VariableType. /// public static readonly NodeId XYArrayItemType = new NodeId(VariableTypes.XYArrayItemType); /// /// The identifier for the ImageItemType VariableType. /// public static readonly NodeId ImageItemType = new NodeId(VariableTypes.ImageItemType); /// /// The identifier for the CubeItemType VariableType. /// public static readonly NodeId CubeItemType = new NodeId(VariableTypes.CubeItemType); /// /// The identifier for the NDimensionArrayItemType VariableType. /// public static readonly NodeId NDimensionArrayItemType = new NodeId(VariableTypes.NDimensionArrayItemType); /// /// The identifier for the TwoStateVariableType VariableType. /// public static readonly NodeId TwoStateVariableType = new NodeId(VariableTypes.TwoStateVariableType); /// /// The identifier for the ConditionVariableType VariableType. /// public static readonly NodeId ConditionVariableType = new NodeId(VariableTypes.ConditionVariableType); /// /// The identifier for the ProgramDiagnosticType VariableType. /// public static readonly NodeId ProgramDiagnosticType = new NodeId(VariableTypes.ProgramDiagnosticType); } #endregion #region BrowseName Declarations /// /// Declares all of the BrowseNames used in the Model Design. /// public static partial class BrowseNames { /// /// The BrowseName for the AccessHistoryDataCapability component. /// public const string AccessHistoryDataCapability = "AccessHistoryDataCapability"; /// /// The BrowseName for the AccessHistoryEventsCapability component. /// public const string AccessHistoryEventsCapability = "AccessHistoryEventsCapability"; /// /// The BrowseName for the AckedState component. /// public const string AckedState = "AckedState"; /// /// The BrowseName for the Acknowledge component. /// public const string Acknowledge = "Acknowledge"; /// /// The BrowseName for the AcknowledgeableConditionType component. /// public const string AcknowledgeableConditionType = "AcknowledgeableConditionType"; /// /// The BrowseName for the ActionTimeStamp component. /// public const string ActionTimeStamp = "ActionTimeStamp"; /// /// The BrowseName for the ActivateSessionRequest component. /// public const string ActivateSessionRequest = "ActivateSessionRequest"; /// /// The BrowseName for the ActivateSessionResponse component. /// public const string ActivateSessionResponse = "ActivateSessionResponse"; /// /// The BrowseName for the ActiveState component. /// public const string ActiveState = "ActiveState"; /// /// The BrowseName for the ActualSessionTimeout component. /// public const string ActualSessionTimeout = "ActualSessionTimeout"; /// /// The BrowseName for the AddComment component. /// public const string AddComment = "AddComment"; /// /// The BrowseName for the AddCommentMethodType component. /// public const string AddCommentMethodType = "AddCommentMethodType"; /// /// The BrowseName for the AddNodesCount component. /// public const string AddNodesCount = "AddNodesCount"; /// /// The BrowseName for the AddNodesItem component. /// public const string AddNodesItem = "AddNodesItem"; /// /// The BrowseName for the AddNodesRequest component. /// public const string AddNodesRequest = "AddNodesRequest"; /// /// The BrowseName for the AddNodesResponse component. /// public const string AddNodesResponse = "AddNodesResponse"; /// /// The BrowseName for the AddNodesResult component. /// public const string AddNodesResult = "AddNodesResult"; /// /// The BrowseName for the AddReferencesCount component. /// public const string AddReferencesCount = "AddReferencesCount"; /// /// The BrowseName for the AddReferencesItem component. /// public const string AddReferencesItem = "AddReferencesItem"; /// /// The BrowseName for the AddReferencesRequest component. /// public const string AddReferencesRequest = "AddReferencesRequest"; /// /// The BrowseName for the AddReferencesResponse component. /// public const string AddReferencesResponse = "AddReferencesResponse"; /// /// The BrowseName for the AddressSpaceFile component. /// public const string AddressSpaceFile = "AddressSpaceFile"; /// /// The BrowseName for the AddressSpaceFileType component. /// public const string AddressSpaceFileType = "AddressSpaceFileType"; /// /// The BrowseName for the AggregateConfiguration component. /// public const string AggregateConfiguration = "AggregateConfiguration"; /// /// The BrowseName for the AggregateConfigurationType component. /// public const string AggregateConfigurationType = "AggregateConfigurationType"; /// /// The BrowseName for the AggregateFilter component. /// public const string AggregateFilter = "AggregateFilter"; /// /// The BrowseName for the AggregateFilterResult component. /// public const string AggregateFilterResult = "AggregateFilterResult"; /// /// The BrowseName for the AggregateFunction_AnnotationCount component. /// public const string AggregateFunction_AnnotationCount = "AnnotationCount"; /// /// The BrowseName for the AggregateFunction_Average component. /// public const string AggregateFunction_Average = "Average"; /// /// The BrowseName for the AggregateFunction_Count component. /// public const string AggregateFunction_Count = "Count"; /// /// The BrowseName for the AggregateFunction_Delta component. /// public const string AggregateFunction_Delta = "Delta"; /// /// The BrowseName for the AggregateFunction_DeltaBounds component. /// public const string AggregateFunction_DeltaBounds = "DeltaBounds"; /// /// The BrowseName for the AggregateFunction_DurationBad component. /// public const string AggregateFunction_DurationBad = "DurationBad"; /// /// The BrowseName for the AggregateFunction_DurationGood component. /// public const string AggregateFunction_DurationGood = "DurationGood"; /// /// The BrowseName for the AggregateFunction_DurationInStateNonZero component. /// public const string AggregateFunction_DurationInStateNonZero = "DurationInStateNonZero"; /// /// The BrowseName for the AggregateFunction_DurationInStateZero component. /// public const string AggregateFunction_DurationInStateZero = "DurationInStateZero"; /// /// The BrowseName for the AggregateFunction_End component. /// public const string AggregateFunction_End = "End"; /// /// The BrowseName for the AggregateFunction_EndBound component. /// public const string AggregateFunction_EndBound = "EndBound"; /// /// The BrowseName for the AggregateFunction_Interpolative component. /// public const string AggregateFunction_Interpolative = "Interpolative"; /// /// The BrowseName for the AggregateFunction_Maximum component. /// public const string AggregateFunction_Maximum = "Maximum"; /// /// The BrowseName for the AggregateFunction_Maximum2 component. /// public const string AggregateFunction_Maximum2 = "Maximum2"; /// /// The BrowseName for the AggregateFunction_MaximumActualTime component. /// public const string AggregateFunction_MaximumActualTime = "MaximumActualTime"; /// /// The BrowseName for the AggregateFunction_MaximumActualTime2 component. /// public const string AggregateFunction_MaximumActualTime2 = "MaximumActualTime2"; /// /// The BrowseName for the AggregateFunction_Minimum component. /// public const string AggregateFunction_Minimum = "Minimum"; /// /// The BrowseName for the AggregateFunction_Minimum2 component. /// public const string AggregateFunction_Minimum2 = "Minimum2"; /// /// The BrowseName for the AggregateFunction_MinimumActualTime component. /// public const string AggregateFunction_MinimumActualTime = "MinimumActualTime"; /// /// The BrowseName for the AggregateFunction_MinimumActualTime2 component. /// public const string AggregateFunction_MinimumActualTime2 = "MinimumActualTime2"; /// /// The BrowseName for the AggregateFunction_NumberOfTransitions component. /// public const string AggregateFunction_NumberOfTransitions = "NumberOfTransitions"; /// /// The BrowseName for the AggregateFunction_PercentBad component. /// public const string AggregateFunction_PercentBad = "PercentBad"; /// /// The BrowseName for the AggregateFunction_PercentGood component. /// public const string AggregateFunction_PercentGood = "PercentGood"; /// /// The BrowseName for the AggregateFunction_Range component. /// public const string AggregateFunction_Range = "Range"; /// /// The BrowseName for the AggregateFunction_Range2 component. /// public const string AggregateFunction_Range2 = "Range2"; /// /// The BrowseName for the AggregateFunction_StandardDeviationPopulation component. /// public const string AggregateFunction_StandardDeviationPopulation = "StandardDeviationPopulation"; /// /// The BrowseName for the AggregateFunction_StandardDeviationSample component. /// public const string AggregateFunction_StandardDeviationSample = "StandardDeviationSample"; /// /// The BrowseName for the AggregateFunction_Start component. /// public const string AggregateFunction_Start = "Start"; /// /// The BrowseName for the AggregateFunction_StartBound component. /// public const string AggregateFunction_StartBound = "StartBound"; /// /// The BrowseName for the AggregateFunction_TimeAverage component. /// public const string AggregateFunction_TimeAverage = "TimeAverage"; /// /// The BrowseName for the AggregateFunction_TimeAverage2 component. /// public const string AggregateFunction_TimeAverage2 = "TimeAverage2"; /// /// The BrowseName for the AggregateFunction_Total component. /// public const string AggregateFunction_Total = "Total"; /// /// The BrowseName for the AggregateFunction_Total2 component. /// public const string AggregateFunction_Total2 = "Total2"; /// /// The BrowseName for the AggregateFunction_VariancePopulation component. /// public const string AggregateFunction_VariancePopulation = "VariancePopulation"; /// /// The BrowseName for the AggregateFunction_VarianceSample component. /// public const string AggregateFunction_VarianceSample = "VarianceSample"; /// /// The BrowseName for the AggregateFunction_WorstQuality component. /// public const string AggregateFunction_WorstQuality = "WorstQuality"; /// /// The BrowseName for the AggregateFunction_WorstQuality2 component. /// public const string AggregateFunction_WorstQuality2 = "WorstQuality2"; /// /// The BrowseName for the AggregateFunctions component. /// public const string AggregateFunctions = "AggregateFunctions"; /// /// The BrowseName for the AggregateFunctionType component. /// public const string AggregateFunctionType = "AggregateFunctionType"; /// /// The BrowseName for the Aggregates component. /// public const string Aggregates = "Aggregates"; /// /// The BrowseName for the AlarmConditionType component. /// public const string AlarmConditionType = "AlarmConditionType"; /// /// The BrowseName for the AllowNulls component. /// public const string AllowNulls = "AllowNulls"; /// /// The BrowseName for the AlwaysGeneratesEvent component. /// public const string AlwaysGeneratesEvent = "AlwaysGeneratesEvent"; /// /// The BrowseName for the AnalogItemType component. /// public const string AnalogItemType = "AnalogItemType"; /// /// The BrowseName for the Annotation component. /// public const string Annotation = "Annotation"; /// /// The BrowseName for the Annotations component. /// public const string Annotations = "Annotations"; /// /// The BrowseName for the AnonymousIdentityToken component. /// public const string AnonymousIdentityToken = "AnonymousIdentityToken"; /// /// The BrowseName for the ApplicationDescription component. /// public const string ApplicationDescription = "ApplicationDescription"; /// /// The BrowseName for the ApplicationInstanceCertificate component. /// public const string ApplicationInstanceCertificate = "ApplicationInstanceCertificate"; /// /// The BrowseName for the ApplicationType component. /// public const string ApplicationType = "ApplicationType"; /// /// The BrowseName for the Argument component. /// public const string Argument = "Argument"; /// /// The BrowseName for the ArrayItemType component. /// public const string ArrayItemType = "ArrayItemType"; /// /// The BrowseName for the ArrayTestType component. /// public const string ArrayTestType = "ArrayTestType"; /// /// The BrowseName for the AttributeId component. /// public const string AttributeId = "AttributeId"; /// /// The BrowseName for the AttributeOperand component. /// public const string AttributeOperand = "AttributeOperand"; /// /// The BrowseName for the AttributeWriteMask component. /// public const string AttributeWriteMask = "AttributeWriteMask"; /// /// The BrowseName for the AuditActivateSessionEventType component. /// public const string AuditActivateSessionEventType = "AuditActivateSessionEventType"; /// /// The BrowseName for the AuditAddNodesEventType component. /// public const string AuditAddNodesEventType = "AuditAddNodesEventType"; /// /// The BrowseName for the AuditAddReferencesEventType component. /// public const string AuditAddReferencesEventType = "AuditAddReferencesEventType"; /// /// The BrowseName for the AuditCancelEventType component. /// public const string AuditCancelEventType = "AuditCancelEventType"; /// /// The BrowseName for the AuditCertificateDataMismatchEventType component. /// public const string AuditCertificateDataMismatchEventType = "AuditCertificateDataMismatchEventType"; /// /// The BrowseName for the AuditCertificateEventType component. /// public const string AuditCertificateEventType = "AuditCertificateEventType"; /// /// The BrowseName for the AuditCertificateExpiredEventType component. /// public const string AuditCertificateExpiredEventType = "AuditCertificateExpiredEventType"; /// /// The BrowseName for the AuditCertificateInvalidEventType component. /// public const string AuditCertificateInvalidEventType = "AuditCertificateInvalidEventType"; /// /// The BrowseName for the AuditCertificateMismatchEventType component. /// public const string AuditCertificateMismatchEventType = "AuditCertificateMismatchEventType"; /// /// The BrowseName for the AuditCertificateRevokedEventType component. /// public const string AuditCertificateRevokedEventType = "AuditCertificateRevokedEventType"; /// /// The BrowseName for the AuditCertificateUntrustedEventType component. /// public const string AuditCertificateUntrustedEventType = "AuditCertificateUntrustedEventType"; /// /// The BrowseName for the AuditChannelEventType component. /// public const string AuditChannelEventType = "AuditChannelEventType"; /// /// The BrowseName for the AuditConditionAcknowledgeEventType component. /// public const string AuditConditionAcknowledgeEventType = "AuditConditionAcknowledgeEventType"; /// /// The BrowseName for the AuditConditionCommentEventType component. /// public const string AuditConditionCommentEventType = "AuditConditionCommentEventType"; /// /// The BrowseName for the AuditConditionConfirmEventType component. /// public const string AuditConditionConfirmEventType = "AuditConditionConfirmEventType"; /// /// The BrowseName for the AuditConditionEnableEventType component. /// public const string AuditConditionEnableEventType = "AuditConditionEnableEventType"; /// /// The BrowseName for the AuditConditionEventType component. /// public const string AuditConditionEventType = "AuditConditionEventType"; /// /// The BrowseName for the AuditConditionRespondEventType component. /// public const string AuditConditionRespondEventType = "AuditConditionRespondEventType"; /// /// The BrowseName for the AuditConditionShelvingEventType component. /// public const string AuditConditionShelvingEventType = "AuditConditionShelvingEventType"; /// /// The BrowseName for the AuditCreateSessionEventType component. /// public const string AuditCreateSessionEventType = "AuditCreateSessionEventType"; /// /// The BrowseName for the AuditDeleteNodesEventType component. /// public const string AuditDeleteNodesEventType = "AuditDeleteNodesEventType"; /// /// The BrowseName for the AuditDeleteReferencesEventType component. /// public const string AuditDeleteReferencesEventType = "AuditDeleteReferencesEventType"; /// /// The BrowseName for the AuditEventType component. /// public const string AuditEventType = "AuditEventType"; /// /// The BrowseName for the AuditHistoryAtTimeDeleteEventType component. /// public const string AuditHistoryAtTimeDeleteEventType = "AuditHistoryAtTimeDeleteEventType"; /// /// The BrowseName for the AuditHistoryDeleteEventType component. /// public const string AuditHistoryDeleteEventType = "AuditHistoryDeleteEventType"; /// /// The BrowseName for the AuditHistoryEventDeleteEventType component. /// public const string AuditHistoryEventDeleteEventType = "AuditHistoryEventDeleteEventType"; /// /// The BrowseName for the AuditHistoryEventUpdateEventType component. /// public const string AuditHistoryEventUpdateEventType = "AuditHistoryEventUpdateEventType"; /// /// The BrowseName for the AuditHistoryRawModifyDeleteEventType component. /// public const string AuditHistoryRawModifyDeleteEventType = "AuditHistoryRawModifyDeleteEventType"; /// /// The BrowseName for the AuditHistoryUpdateEventType component. /// public const string AuditHistoryUpdateEventType = "AuditHistoryUpdateEventType"; /// /// The BrowseName for the AuditHistoryValueUpdateEventType component. /// public const string AuditHistoryValueUpdateEventType = "AuditHistoryValueUpdateEventType"; /// /// The BrowseName for the Auditing component. /// public const string Auditing = "Auditing"; /// /// The BrowseName for the AuditNodeManagementEventType component. /// public const string AuditNodeManagementEventType = "AuditNodeManagementEventType"; /// /// The BrowseName for the AuditOpenSecureChannelEventType component. /// public const string AuditOpenSecureChannelEventType = "AuditOpenSecureChannelEventType"; /// /// The BrowseName for the AuditProgramTransitionEventType component. /// public const string AuditProgramTransitionEventType = "AuditProgramTransitionEventType"; /// /// The BrowseName for the AuditSecurityEventType component. /// public const string AuditSecurityEventType = "AuditSecurityEventType"; /// /// The BrowseName for the AuditSessionEventType component. /// public const string AuditSessionEventType = "AuditSessionEventType"; /// /// The BrowseName for the AuditUpdateEventType component. /// public const string AuditUpdateEventType = "AuditUpdateEventType"; /// /// The BrowseName for the AuditUpdateMethodEventType component. /// public const string AuditUpdateMethodEventType = "AuditUpdateMethodEventType"; /// /// The BrowseName for the AuditUpdateStateEventType component. /// public const string AuditUpdateStateEventType = "AuditUpdateStateEventType"; /// /// The BrowseName for the AuditUrlMismatchEventType component. /// public const string AuditUrlMismatchEventType = "AuditUrlMismatchEventType"; /// /// The BrowseName for the AuditWriteUpdateEventType component. /// public const string AuditWriteUpdateEventType = "AuditWriteUpdateEventType"; /// /// The BrowseName for the AuthenticationMechanism component. /// public const string AuthenticationMechanism = "AuthenticationMechanism"; /// /// The BrowseName for the AutoDelete component. /// public const string AutoDelete = "AutoDelete"; /// /// The BrowseName for the AxisDefinition component. /// public const string AxisDefinition = "AxisDefinition"; /// /// The BrowseName for the AxisInformation component. /// public const string AxisInformation = "AxisInformation"; /// /// The BrowseName for the AxisScaleEnumeration component. /// public const string AxisScaleEnumeration = "AxisScaleEnumeration"; /// /// The BrowseName for the AxisScaleType component. /// public const string AxisScaleType = "AxisScaleType"; /// /// The BrowseName for the BaseConditionClassType component. /// public const string BaseConditionClassType = "BaseConditionClassType"; /// /// The BrowseName for the BaseDataType component. /// public const string BaseDataType = "BaseDataType"; /// /// The BrowseName for the BaseDataVariableType component. /// public const string BaseDataVariableType = "BaseDataVariableType"; /// /// The BrowseName for the BaseEventType component. /// public const string BaseEventType = "BaseEventType"; /// /// The BrowseName for the BaseModelChangeEventType component. /// public const string BaseModelChangeEventType = "BaseModelChangeEventType"; /// /// The BrowseName for the BaseObjectType component. /// public const string BaseObjectType = "BaseObjectType"; /// /// The BrowseName for the BaseVariableType component. /// public const string BaseVariableType = "BaseVariableType"; /// /// The BrowseName for the BitFieldMaskDataType component. /// public const string BitFieldMaskDataType = "BitFieldMaskDataType"; /// /// The BrowseName for the BitMask component. /// public const string BitMask = "BitMask"; /// /// The BrowseName for the Boolean component. /// public const string Boolean = "Boolean"; /// /// The BrowseName for the BranchId component. /// public const string BranchId = "BranchId"; /// /// The BrowseName for the BrowseCount component. /// public const string BrowseCount = "BrowseCount"; /// /// The BrowseName for the BrowseDescription component. /// public const string BrowseDescription = "BrowseDescription"; /// /// The BrowseName for the BrowseDirection component. /// public const string BrowseDirection = "BrowseDirection"; /// /// The BrowseName for the BrowseNextCount component. /// public const string BrowseNextCount = "BrowseNextCount"; /// /// The BrowseName for the BrowseNextRequest component. /// public const string BrowseNextRequest = "BrowseNextRequest"; /// /// The BrowseName for the BrowseNextResponse component. /// public const string BrowseNextResponse = "BrowseNextResponse"; /// /// The BrowseName for the BrowsePath component. /// public const string BrowsePath = "BrowsePath"; /// /// The BrowseName for the BrowsePathResult component. /// public const string BrowsePathResult = "BrowsePathResult"; /// /// The BrowseName for the BrowsePathTarget component. /// public const string BrowsePathTarget = "BrowsePathTarget"; /// /// The BrowseName for the BrowseRequest component. /// public const string BrowseRequest = "BrowseRequest"; /// /// The BrowseName for the BrowseResponse component. /// public const string BrowseResponse = "BrowseResponse"; /// /// The BrowseName for the BrowseResult component. /// public const string BrowseResult = "BrowseResult"; /// /// The BrowseName for the BrowseResultMask component. /// public const string BrowseResultMask = "BrowseResultMask"; /// /// The BrowseName for the BuildDate component. /// public const string BuildDate = "BuildDate"; /// /// The BrowseName for the BuildInfo component. /// public const string BuildInfo = "BuildInfo"; /// /// The BrowseName for the BuildInfoType component. /// public const string BuildInfoType = "BuildInfoType"; /// /// The BrowseName for the BuildNumber component. /// public const string BuildNumber = "BuildNumber"; /// /// The BrowseName for the Byte component. /// public const string Byte = "Byte"; /// /// The BrowseName for the ByteString component. /// public const string ByteString = "ByteString"; /// /// The BrowseName for the CallCount component. /// public const string CallCount = "CallCount"; /// /// The BrowseName for the CallMethodRequest component. /// public const string CallMethodRequest = "CallMethodRequest"; /// /// The BrowseName for the CallMethodResult component. /// public const string CallMethodResult = "CallMethodResult"; /// /// The BrowseName for the CallRequest component. /// public const string CallRequest = "CallRequest"; /// /// The BrowseName for the CallResponse component. /// public const string CallResponse = "CallResponse"; /// /// The BrowseName for the CancelRequest component. /// public const string CancelRequest = "CancelRequest"; /// /// The BrowseName for the CancelResponse component. /// public const string CancelResponse = "CancelResponse"; /// /// The BrowseName for the Certificate component. /// public const string Certificate = "Certificate"; /// /// The BrowseName for the Changes component. /// public const string Changes = "Changes"; /// /// The BrowseName for the ChannelSecurityToken component. /// public const string ChannelSecurityToken = "ChannelSecurityToken"; /// /// The BrowseName for the ClientAuditEntryId component. /// public const string ClientAuditEntryId = "ClientAuditEntryId"; /// /// The BrowseName for the ClientCertificate component. /// public const string ClientCertificate = "ClientCertificate"; /// /// The BrowseName for the ClientCertificateThumbprint component. /// public const string ClientCertificateThumbprint = "ClientCertificateThumbprint"; /// /// The BrowseName for the ClientConnectionTime component. /// public const string ClientConnectionTime = "ClientConnectionTime"; /// /// The BrowseName for the ClientDescription component. /// public const string ClientDescription = "ClientDescription"; /// /// The BrowseName for the ClientLastContactTime component. /// public const string ClientLastContactTime = "ClientLastContactTime"; /// /// The BrowseName for the ClientSoftwareCertificates component. /// public const string ClientSoftwareCertificates = "ClientSoftwareCertificates"; /// /// The BrowseName for the ClientUserId component. /// public const string ClientUserId = "ClientUserId"; /// /// The BrowseName for the ClientUserIdHistory component. /// public const string ClientUserIdHistory = "ClientUserIdHistory"; /// /// The BrowseName for the ClientUserIdOfSession component. /// public const string ClientUserIdOfSession = "ClientUserIdOfSession"; /// /// The BrowseName for the Close component. /// public const string Close = "Close"; /// /// The BrowseName for the CloseMethodType component. /// public const string CloseMethodType = "CloseMethodType"; /// /// The BrowseName for the CloseSecureChannelRequest component. /// public const string CloseSecureChannelRequest = "CloseSecureChannelRequest"; /// /// The BrowseName for the CloseSecureChannelResponse component. /// public const string CloseSecureChannelResponse = "CloseSecureChannelResponse"; /// /// The BrowseName for the CloseSessionRequest component. /// public const string CloseSessionRequest = "CloseSessionRequest"; /// /// The BrowseName for the CloseSessionResponse component. /// public const string CloseSessionResponse = "CloseSessionResponse"; /// /// The BrowseName for the Comment component. /// public const string Comment = "Comment"; /// /// The BrowseName for the ComplexNumberType component. /// public const string ComplexNumberType = "ComplexNumberType"; /// /// The BrowseName for the ComplianceLevel component. /// public const string ComplianceLevel = "ComplianceLevel"; /// /// The BrowseName for the CompositeTestType component. /// public const string CompositeTestType = "CompositeTestType"; /// /// The BrowseName for the ConditionClassId component. /// public const string ConditionClassId = "ConditionClassId"; /// /// The BrowseName for the ConditionClassName component. /// public const string ConditionClassName = "ConditionClassName"; /// /// The BrowseName for the ConditionName component. /// public const string ConditionName = "ConditionName"; /// /// The BrowseName for the ConditionRefresh component. /// public const string ConditionRefresh = "ConditionRefresh"; /// /// The BrowseName for the ConditionRefreshMethodType component. /// public const string ConditionRefreshMethodType = "ConditionRefreshMethodType"; /// /// The BrowseName for the ConditionType component. /// public const string ConditionType = "ConditionType"; /// /// The BrowseName for the ConditionVariableType component. /// public const string ConditionVariableType = "ConditionVariableType"; /// /// The BrowseName for the Confirm component. /// public const string Confirm = "Confirm"; /// /// The BrowseName for the ConfirmedState component. /// public const string ConfirmedState = "ConfirmedState"; /// /// The BrowseName for the ContentFilter component. /// public const string ContentFilter = "ContentFilter"; /// /// The BrowseName for the ContentFilterElement component. /// public const string ContentFilterElement = "ContentFilterElement"; /// /// The BrowseName for the ContentFilterElementResult component. /// public const string ContentFilterElementResult = "ContentFilterElementResult"; /// /// The BrowseName for the ContentFilterResult component. /// public const string ContentFilterResult = "ContentFilterResult"; /// /// The BrowseName for the ContinuationPoint component. /// public const string ContinuationPoint = "ContinuationPoint"; /// /// The BrowseName for the Counter component. /// public const string Counter = "Counter"; /// /// The BrowseName for the Creatable component. /// public const string Creatable = "Creatable"; /// /// The BrowseName for the CreateClientName component. /// public const string CreateClientName = "CreateClientName"; /// /// The BrowseName for the CreateMonitoredItemsCount component. /// public const string CreateMonitoredItemsCount = "CreateMonitoredItemsCount"; /// /// The BrowseName for the CreateMonitoredItemsRequest component. /// public const string CreateMonitoredItemsRequest = "CreateMonitoredItemsRequest"; /// /// The BrowseName for the CreateMonitoredItemsResponse component. /// public const string CreateMonitoredItemsResponse = "CreateMonitoredItemsResponse"; /// /// The BrowseName for the CreateSessionId component. /// public const string CreateSessionId = "CreateSessionId"; /// /// The BrowseName for the CreateSessionRequest component. /// public const string CreateSessionRequest = "CreateSessionRequest"; /// /// The BrowseName for the CreateSessionResponse component. /// public const string CreateSessionResponse = "CreateSessionResponse"; /// /// The BrowseName for the CreateSubscriptionCount component. /// public const string CreateSubscriptionCount = "CreateSubscriptionCount"; /// /// The BrowseName for the CreateSubscriptionRequest component. /// public const string CreateSubscriptionRequest = "CreateSubscriptionRequest"; /// /// The BrowseName for the CreateSubscriptionResponse component. /// public const string CreateSubscriptionResponse = "CreateSubscriptionResponse"; /// /// The BrowseName for the CubeItemType component. /// public const string CubeItemType = "CubeItemType"; /// /// The BrowseName for the CumulatedSessionCount component. /// public const string CumulatedSessionCount = "CumulatedSessionCount"; /// /// The BrowseName for the CumulatedSubscriptionCount component. /// public const string CumulatedSubscriptionCount = "CumulatedSubscriptionCount"; /// /// The BrowseName for the CurrentKeepAliveCount component. /// public const string CurrentKeepAliveCount = "CurrentKeepAliveCount"; /// /// The BrowseName for the CurrentLifetimeCount component. /// public const string CurrentLifetimeCount = "CurrentLifetimeCount"; /// /// The BrowseName for the CurrentMonitoredItemsCount component. /// public const string CurrentMonitoredItemsCount = "CurrentMonitoredItemsCount"; /// /// The BrowseName for the CurrentPublishRequestsInQueue component. /// public const string CurrentPublishRequestsInQueue = "CurrentPublishRequestsInQueue"; /// /// The BrowseName for the CurrentServerId component. /// public const string CurrentServerId = "CurrentServerId"; /// /// The BrowseName for the CurrentSessionCount component. /// public const string CurrentSessionCount = "CurrentSessionCount"; /// /// The BrowseName for the CurrentState component. /// public const string CurrentState = "CurrentState"; /// /// The BrowseName for the CurrentSubscriptionCount component. /// public const string CurrentSubscriptionCount = "CurrentSubscriptionCount"; /// /// The BrowseName for the CurrentSubscriptionsCount component. /// public const string CurrentSubscriptionsCount = "CurrentSubscriptionsCount"; /// /// The BrowseName for the CurrentTime component. /// public const string CurrentTime = "CurrentTime"; /// /// The BrowseName for the DataChangeFilter component. /// public const string DataChangeFilter = "DataChangeFilter"; /// /// The BrowseName for the DataChangeNotification component. /// public const string DataChangeNotification = "DataChangeNotification"; /// /// The BrowseName for the DataChangeNotificationsCount component. /// public const string DataChangeNotificationsCount = "DataChangeNotificationsCount"; /// /// The BrowseName for the DataChangeTrigger component. /// public const string DataChangeTrigger = "DataChangeTrigger"; /// /// The BrowseName for the DataItemType component. /// public const string DataItemType = "DataItemType"; /// /// The BrowseName for the DataTypeAttributes component. /// public const string DataTypeAttributes = "DataTypeAttributes"; /// /// The BrowseName for the DataTypeDescriptionType component. /// public const string DataTypeDescriptionType = "DataTypeDescriptionType"; /// /// The BrowseName for the DataTypeDictionaryType component. /// public const string DataTypeDictionaryType = "DataTypeDictionaryType"; /// /// The BrowseName for the DataTypeEncodingType component. /// public const string DataTypeEncodingType = "DataTypeEncodingType"; /// /// The BrowseName for the DataTypeNode component. /// public const string DataTypeNode = "DataTypeNode"; /// /// The BrowseName for the DataTypesFolder component. /// public const string DataTypesFolder = "DataTypes"; /// /// The BrowseName for the DataTypeSystemType component. /// public const string DataTypeSystemType = "DataTypeSystemType"; /// /// The BrowseName for the DataTypeVersion component. /// public const string DataTypeVersion = "DataTypeVersion"; /// /// The BrowseName for the DataValue component. /// public const string DataValue = "DataValue"; /// /// The BrowseName for the Date component. /// public const string Date = "Date"; /// /// The BrowseName for the DateTime component. /// public const string DateTime = "DateTime"; /// /// The BrowseName for the DeadbandType component. /// public const string DeadbandType = "DeadbandType"; /// /// The BrowseName for the DefaultBinary component. /// public const string DefaultBinary = "Default Binary"; /// /// The BrowseName for the DefaultResponse component. /// public const string DefaultResponse = "DefaultResponse"; /// /// The BrowseName for the DefaultXml component. /// public const string DefaultXml = "Default XML"; /// /// The BrowseName for the Definition component. /// public const string Definition = "Definition"; /// /// The BrowseName for the Deletable component. /// public const string Deletable = "Deletable"; /// /// The BrowseName for the DeleteAtTimeCapability component. /// public const string DeleteAtTimeCapability = "DeleteAtTimeCapability"; /// /// The BrowseName for the DeleteAtTimeDetails component. /// public const string DeleteAtTimeDetails = "DeleteAtTimeDetails"; /// /// The BrowseName for the DeleteEventCapability component. /// public const string DeleteEventCapability = "DeleteEventCapability"; /// /// The BrowseName for the DeleteEventDetails component. /// public const string DeleteEventDetails = "DeleteEventDetails"; /// /// The BrowseName for the DeleteMonitoredItemsCount component. /// public const string DeleteMonitoredItemsCount = "DeleteMonitoredItemsCount"; /// /// The BrowseName for the DeleteMonitoredItemsRequest component. /// public const string DeleteMonitoredItemsRequest = "DeleteMonitoredItemsRequest"; /// /// The BrowseName for the DeleteMonitoredItemsResponse component. /// public const string DeleteMonitoredItemsResponse = "DeleteMonitoredItemsResponse"; /// /// The BrowseName for the DeleteNodesCount component. /// public const string DeleteNodesCount = "DeleteNodesCount"; /// /// The BrowseName for the DeleteNodesItem component. /// public const string DeleteNodesItem = "DeleteNodesItem"; /// /// The BrowseName for the DeleteNodesRequest component. /// public const string DeleteNodesRequest = "DeleteNodesRequest"; /// /// The BrowseName for the DeleteNodesResponse component. /// public const string DeleteNodesResponse = "DeleteNodesResponse"; /// /// The BrowseName for the DeleteRawCapability component. /// public const string DeleteRawCapability = "DeleteRawCapability"; /// /// The BrowseName for the DeleteRawModifiedDetails component. /// public const string DeleteRawModifiedDetails = "DeleteRawModifiedDetails"; /// /// The BrowseName for the DeleteReferencesCount component. /// public const string DeleteReferencesCount = "DeleteReferencesCount"; /// /// The BrowseName for the DeleteReferencesItem component. /// public const string DeleteReferencesItem = "DeleteReferencesItem"; /// /// The BrowseName for the DeleteReferencesRequest component. /// public const string DeleteReferencesRequest = "DeleteReferencesRequest"; /// /// The BrowseName for the DeleteReferencesResponse component. /// public const string DeleteReferencesResponse = "DeleteReferencesResponse"; /// /// The BrowseName for the DeleteSubscriptionsCount component. /// public const string DeleteSubscriptionsCount = "DeleteSubscriptionsCount"; /// /// The BrowseName for the DeleteSubscriptionsRequest component. /// public const string DeleteSubscriptionsRequest = "DeleteSubscriptionsRequest"; /// /// The BrowseName for the DeleteSubscriptionsResponse component. /// public const string DeleteSubscriptionsResponse = "DeleteSubscriptionsResponse"; /// /// The BrowseName for the DeviceFailureEventType component. /// public const string DeviceFailureEventType = "DeviceFailureEventType"; /// /// The BrowseName for the DiagnosticInfo component. /// public const string DiagnosticInfo = "DiagnosticInfo"; /// /// The BrowseName for the DialogConditionType component. /// public const string DialogConditionType = "DialogConditionType"; /// /// The BrowseName for the DialogResponseMethodType component. /// public const string DialogResponseMethodType = "DialogResponseMethodType"; /// /// The BrowseName for the DialogState component. /// public const string DialogState = "DialogState"; /// /// The BrowseName for the DictionaryFragment component. /// public const string DictionaryFragment = "DictionaryFragment"; /// /// The BrowseName for the Disable component. /// public const string Disable = "Disable"; /// /// The BrowseName for the DisableCount component. /// public const string DisableCount = "DisableCount"; /// /// The BrowseName for the DisabledMonitoredItemCount component. /// public const string DisabledMonitoredItemCount = "DisabledMonitoredItemCount"; /// /// The BrowseName for the DisabledMonitoredItemsSamplingCount component. /// public const string DisabledMonitoredItemsSamplingCount = "DisabledMonitoredItemsSamplingCount"; /// /// The BrowseName for the DiscardedMessageCount component. /// public const string DiscardedMessageCount = "DiscardedMessageCount"; /// /// The BrowseName for the DiscreteAlarmType component. /// public const string DiscreteAlarmType = "DiscreteAlarmType"; /// /// The BrowseName for the DiscreteItemType component. /// public const string DiscreteItemType = "DiscreteItemType"; /// /// The BrowseName for the DnsServiceRecord component. /// public const string DnsServiceRecord = "DnsServiceRecord"; /// /// The BrowseName for the Double component. /// public const string Double = "Double"; /// /// The BrowseName for the DoubleComplexNumberType component. /// public const string DoubleComplexNumberType = "DoubleComplexNumberType"; /// /// The BrowseName for the Duration component. /// public const string Duration = "Duration"; /// /// The BrowseName for the EffectiveDisplayName component. /// public const string EffectiveDisplayName = "EffectiveDisplayName"; /// /// The BrowseName for the EffectiveTransitionTime component. /// public const string EffectiveTransitionTime = "EffectiveTransitionTime"; /// /// The BrowseName for the ElementOperand component. /// public const string ElementOperand = "ElementOperand"; /// /// The BrowseName for the Enable component. /// public const string Enable = "Enable"; /// /// The BrowseName for the EnableCount component. /// public const string EnableCount = "EnableCount"; /// /// The BrowseName for the EnabledFlag component. /// public const string EnabledFlag = "EnabledFlag"; /// /// The BrowseName for the EnabledState component. /// public const string EnabledState = "EnabledState"; /// /// The BrowseName for the Encoding component. /// public const string Encoding = "Encoding"; /// /// The BrowseName for the EndpointConfiguration component. /// public const string EndpointConfiguration = "EndpointConfiguration"; /// /// The BrowseName for the EndpointDescription component. /// public const string EndpointDescription = "EndpointDescription"; /// /// The BrowseName for the EndpointUrl component. /// public const string EndpointUrl = "EndpointUrl"; /// /// The BrowseName for the EndpointUrlListDataType component. /// public const string EndpointUrlListDataType = "EndpointUrlListDataType"; /// /// The BrowseName for the EndTime component. /// public const string EndTime = "EndTime"; /// /// The BrowseName for the EngineeringUnits component. /// public const string EngineeringUnits = "EngineeringUnits"; /// /// The BrowseName for the EnumeratedTestType component. /// public const string EnumeratedTestType = "EnumeratedTestType"; /// /// The BrowseName for the Enumeration component. /// public const string Enumeration = "Enumeration"; /// /// The BrowseName for the EnumStrings component. /// public const string EnumStrings = "EnumStrings"; /// /// The BrowseName for the EnumValues component. /// public const string EnumValues = "EnumValues"; /// /// The BrowseName for the EnumValueType component. /// public const string EnumValueType = "EnumValueType"; /// /// The BrowseName for the EUInformation component. /// public const string EUInformation = "EUInformation"; /// /// The BrowseName for the EURange component. /// public const string EURange = "EURange"; /// /// The BrowseName for the EventFieldList component. /// public const string EventFieldList = "EventFieldList"; /// /// The BrowseName for the EventFilter component. /// public const string EventFilter = "EventFilter"; /// /// The BrowseName for the EventFilterResult component. /// public const string EventFilterResult = "EventFilterResult"; /// /// The BrowseName for the EventId component. /// public const string EventId = "EventId"; /// /// The BrowseName for the EventIds component. /// public const string EventIds = "EventIds"; /// /// The BrowseName for the EventNotificationList component. /// public const string EventNotificationList = "EventNotificationList"; /// /// The BrowseName for the EventNotificationsCount component. /// public const string EventNotificationsCount = "EventNotificationsCount"; /// /// The BrowseName for the EventQueueOverFlowCount component. /// public const string EventQueueOverFlowCount = "EventQueueOverFlowCount"; /// /// The BrowseName for the EventQueueOverflowEventType component. /// public const string EventQueueOverflowEventType = "EventQueueOverflowEventType"; /// /// The BrowseName for the EventType component. /// public const string EventType = "EventType"; /// /// The BrowseName for the EventTypesFolder component. /// public const string EventTypesFolder = "EventTypes"; /// /// The BrowseName for the ExceptionDeviation component. /// public const string ExceptionDeviation = "ExceptionDeviation"; /// /// The BrowseName for the ExceptionDeviationFormat component. /// public const string ExceptionDeviationFormat = "ExceptionDeviationFormat"; /// /// The BrowseName for the ExclusiveDeviationAlarmType component. /// public const string ExclusiveDeviationAlarmType = "ExclusiveDeviationAlarmType"; /// /// The BrowseName for the ExclusiveLevelAlarmType component. /// public const string ExclusiveLevelAlarmType = "ExclusiveLevelAlarmType"; /// /// The BrowseName for the ExclusiveLimitAlarmType component. /// public const string ExclusiveLimitAlarmType = "ExclusiveLimitAlarmType"; /// /// The BrowseName for the ExclusiveLimitStateMachineType component. /// public const string ExclusiveLimitStateMachineType = "ExclusiveLimitStateMachineType"; /// /// The BrowseName for the ExclusiveRateOfChangeAlarmType component. /// public const string ExclusiveRateOfChangeAlarmType = "ExclusiveRateOfChangeAlarmType"; /// /// The BrowseName for the ExpandedNodeId component. /// public const string ExpandedNodeId = "ExpandedNodeId"; /// /// The BrowseName for the ExportNamespace component. /// public const string ExportNamespace = "ExportNamespace"; /// /// The BrowseName for the FalseState component. /// public const string FalseState = "FalseState"; /// /// The BrowseName for the FileType component. /// public const string FileType = "FileType"; /// /// The BrowseName for the Filter component. /// public const string Filter = "Filter"; /// /// The BrowseName for the FilterOperand component. /// public const string FilterOperand = "FilterOperand"; /// /// The BrowseName for the FilterOperator component. /// public const string FilterOperator = "FilterOperator"; /// /// The BrowseName for the FinalResultData component. /// public const string FinalResultData = "FinalResultData"; /// /// The BrowseName for the FindDnsServicesRequest component. /// public const string FindDnsServicesRequest = "FindDnsServicesRequest"; /// /// The BrowseName for the FindDnsServicesResponse component. /// public const string FindDnsServicesResponse = "FindDnsServicesResponse"; /// /// The BrowseName for the FindServersRequest component. /// public const string FindServersRequest = "FindServersRequest"; /// /// The BrowseName for the FindServersResponse component. /// public const string FindServersResponse = "FindServersResponse"; /// /// The BrowseName for the FiniteStateMachineType component. /// public const string FiniteStateMachineType = "FiniteStateMachineType"; /// /// The BrowseName for the FiniteStateVariableType component. /// public const string FiniteStateVariableType = "FiniteStateVariableType"; /// /// The BrowseName for the FiniteTransitionVariableType component. /// public const string FiniteTransitionVariableType = "FiniteTransitionVariableType"; /// /// The BrowseName for the Float component. /// public const string Float = "Float"; /// /// The BrowseName for the FolderType component. /// public const string FolderType = "FolderType"; /// /// The BrowseName for the FromState component. /// public const string FromState = "FromState"; /// /// The BrowseName for the GeneralModelChangeEventType component. /// public const string GeneralModelChangeEventType = "GeneralModelChangeEventType"; /// /// The BrowseName for the GeneratesEvent component. /// public const string GeneratesEvent = "GeneratesEvent"; /// /// The BrowseName for the GetEndpointsRequest component. /// public const string GetEndpointsRequest = "GetEndpointsRequest"; /// /// The BrowseName for the GetEndpointsResponse component. /// public const string GetEndpointsResponse = "GetEndpointsResponse"; /// /// The BrowseName for the GetMonitoredItems component. /// public const string GetMonitoredItems = "GetMonitoredItems"; /// /// The BrowseName for the GetMonitoredItemsMethodType component. /// public const string GetMonitoredItemsMethodType = "GetMonitoredItemsMethodType"; /// /// The BrowseName for the GetPosition component. /// public const string GetPosition = "GetPosition"; /// /// The BrowseName for the GetPositionMethodType component. /// public const string GetPositionMethodType = "GetPositionMethodType"; /// /// The BrowseName for the Guid component. /// public const string Guid = "Guid"; /// /// The BrowseName for the HAConfiguration component. /// public const string HAConfiguration = "HA Configuration"; /// /// The BrowseName for the Halt component. /// public const string Halt = "Halt"; /// /// The BrowseName for the Halted component. /// public const string Halted = "Halted"; /// /// The BrowseName for the HaltedToReady component. /// public const string HaltedToReady = "HaltedToReady"; /// /// The BrowseName for the HasCause component. /// public const string HasCause = "HasCause"; /// /// The BrowseName for the HasChild component. /// public const string HasChild = "HasChild"; /// /// The BrowseName for the HasComponent component. /// public const string HasComponent = "HasComponent"; /// /// The BrowseName for the HasCondition component. /// public const string HasCondition = "HasCondition"; /// /// The BrowseName for the HasDescription component. /// public const string HasDescription = "HasDescription"; /// /// The BrowseName for the HasEffect component. /// public const string HasEffect = "HasEffect"; /// /// The BrowseName for the HasEncoding component. /// public const string HasEncoding = "HasEncoding"; /// /// The BrowseName for the HasEventSource component. /// public const string HasEventSource = "HasEventSource"; /// /// The BrowseName for the HasFalseSubState component. /// public const string HasFalseSubState = "HasFalseSubState"; /// /// The BrowseName for the HasHistoricalConfiguration component. /// public const string HasHistoricalConfiguration = "HasHistoricalConfiguration"; /// /// The BrowseName for the HasModellingRule component. /// public const string HasModellingRule = "HasModellingRule"; /// /// The BrowseName for the HasNotifier component. /// public const string HasNotifier = "HasNotifier"; /// /// The BrowseName for the HasOrderedComponent component. /// public const string HasOrderedComponent = "HasOrderedComponent"; /// /// The BrowseName for the HasProperty component. /// public const string HasProperty = "HasProperty"; /// /// The BrowseName for the HasSubStateMachine component. /// public const string HasSubStateMachine = "HasSubStateMachine"; /// /// The BrowseName for the HasSubtype component. /// public const string HasSubtype = "HasSubtype"; /// /// The BrowseName for the HasTrueSubState component. /// public const string HasTrueSubState = "HasTrueSubState"; /// /// The BrowseName for the HasTypeDefinition component. /// public const string HasTypeDefinition = "HasTypeDefinition"; /// /// The BrowseName for the HierarchicalReferences component. /// public const string HierarchicalReferences = "HierarchicalReferences"; /// /// The BrowseName for the High component. /// public const string High = "High"; /// /// The BrowseName for the HighHigh component. /// public const string HighHigh = "HighHigh"; /// /// The BrowseName for the HighHighLimit component. /// public const string HighHighLimit = "HighHighLimit"; /// /// The BrowseName for the HighHighState component. /// public const string HighHighState = "HighHighState"; /// /// The BrowseName for the HighHighToHigh component. /// public const string HighHighToHigh = "HighHighToHigh"; /// /// The BrowseName for the HighLimit component. /// public const string HighLimit = "HighLimit"; /// /// The BrowseName for the HighState component. /// public const string HighState = "HighState"; /// /// The BrowseName for the HighToHighHigh component. /// public const string HighToHighHigh = "HighToHighHigh"; /// /// The BrowseName for the HistoricalDataConfigurationType component. /// public const string HistoricalDataConfigurationType = "HistoricalDataConfigurationType"; /// /// The BrowseName for the HistoricalEventFilter component. /// public const string HistoricalEventFilter = "HistoricalEventFilter"; /// /// The BrowseName for the HistoryData component. /// public const string HistoryData = "HistoryData"; /// /// The BrowseName for the HistoryEvent component. /// public const string HistoryEvent = "HistoryEvent"; /// /// The BrowseName for the HistoryEventFieldList component. /// public const string HistoryEventFieldList = "HistoryEventFieldList"; /// /// The BrowseName for the HistoryModifiedData component. /// public const string HistoryModifiedData = "HistoryModifiedData"; /// /// The BrowseName for the HistoryReadCount component. /// public const string HistoryReadCount = "HistoryReadCount"; /// /// The BrowseName for the HistoryReadDetails component. /// public const string HistoryReadDetails = "HistoryReadDetails"; /// /// The BrowseName for the HistoryReadRequest component. /// public const string HistoryReadRequest = "HistoryReadRequest"; /// /// The BrowseName for the HistoryReadResponse component. /// public const string HistoryReadResponse = "HistoryReadResponse"; /// /// The BrowseName for the HistoryReadResult component. /// public const string HistoryReadResult = "HistoryReadResult"; /// /// The BrowseName for the HistoryReadValueId component. /// public const string HistoryReadValueId = "HistoryReadValueId"; /// /// The BrowseName for the HistoryServerCapabilities component. /// public const string HistoryServerCapabilities = "HistoryServerCapabilities"; /// /// The BrowseName for the HistoryServerCapabilitiesType component. /// public const string HistoryServerCapabilitiesType = "HistoryServerCapabilitiesType"; /// /// The BrowseName for the HistoryUpdateCount component. /// public const string HistoryUpdateCount = "HistoryUpdateCount"; /// /// The BrowseName for the HistoryUpdateDetails component. /// public const string HistoryUpdateDetails = "HistoryUpdateDetails"; /// /// The BrowseName for the HistoryUpdateEventResult component. /// public const string HistoryUpdateEventResult = "HistoryUpdateEventResult"; /// /// The BrowseName for the HistoryUpdateRequest component. /// public const string HistoryUpdateRequest = "HistoryUpdateRequest"; /// /// The BrowseName for the HistoryUpdateResponse component. /// public const string HistoryUpdateResponse = "HistoryUpdateResponse"; /// /// The BrowseName for the HistoryUpdateResult component. /// public const string HistoryUpdateResult = "HistoryUpdateResult"; /// /// The BrowseName for the HistoryUpdateType component. /// public const string HistoryUpdateType = "HistoryUpdateType"; /// /// The BrowseName for the Icon component. /// public const string Icon = "Icon"; /// /// The BrowseName for the Id component. /// public const string Id = "Id"; /// /// The BrowseName for the IdType component. /// public const string IdType = "IdType"; /// /// The BrowseName for the Image component. /// public const string Image = "Image"; /// /// The BrowseName for the ImageBMP component. /// public const string ImageBMP = "ImageBMP"; /// /// The BrowseName for the ImageGIF component. /// public const string ImageGIF = "ImageGIF"; /// /// The BrowseName for the ImageItemType component. /// public const string ImageItemType = "ImageItemType"; /// /// The BrowseName for the ImageJPG component. /// public const string ImageJPG = "ImageJPG"; /// /// The BrowseName for the ImagePNG component. /// public const string ImagePNG = "ImagePNG"; /// /// The BrowseName for the IndexRange component. /// public const string IndexRange = "IndexRange"; /// /// The BrowseName for the InitialStateType component. /// public const string InitialStateType = "InitialStateType"; /// /// The BrowseName for the InputArguments component. /// public const string InputArguments = "InputArguments"; /// /// The BrowseName for the InputNode component. /// public const string InputNode = "InputNode"; /// /// The BrowseName for the InsertAnnotationCapability component. /// public const string InsertAnnotationCapability = "InsertAnnotationCapability"; /// /// The BrowseName for the InsertDataCapability component. /// public const string InsertDataCapability = "InsertDataCapability"; /// /// The BrowseName for the InsertEventCapability component. /// public const string InsertEventCapability = "InsertEventCapability"; /// /// The BrowseName for the InstanceCount component. /// public const string InstanceCount = "InstanceCount"; /// /// The BrowseName for the InstanceNode component. /// public const string InstanceNode = "InstanceNode"; /// /// The BrowseName for the InstrumentRange component. /// public const string InstrumentRange = "InstrumentRange"; /// /// The BrowseName for the Int16 component. /// public const string Int16 = "Int16"; /// /// The BrowseName for the Int32 component. /// public const string Int32 = "Int32"; /// /// The BrowseName for the Int64 component. /// public const string Int64 = "Int64"; /// /// The BrowseName for the Integer component. /// public const string Integer = "Integer"; /// /// The BrowseName for the IntegerId component. /// public const string IntegerId = "IntegerId"; /// /// The BrowseName for the IntermediateResult component. /// public const string IntermediateResult = "IntermediateResult"; /// /// The BrowseName for the InvalidHostname component. /// public const string InvalidHostname = "InvalidHostname"; /// /// The BrowseName for the InvalidUri component. /// public const string InvalidUri = "InvalidUri"; /// /// The BrowseName for the InvocationCreationTime component. /// public const string InvocationCreationTime = "InvocationCreationTime"; /// /// The BrowseName for the IsDeleteModified component. /// public const string IsDeleteModified = "IsDeleteModified"; /// /// The BrowseName for the IsNamespaceSubset component. /// public const string IsNamespaceSubset = "IsNamespaceSubset"; /// /// The BrowseName for the IssuedIdentityToken component. /// public const string IssuedIdentityToken = "IssuedIdentityToken"; /// /// The BrowseName for the LastMethodCall component. /// public const string LastMethodCall = "LastMethodCall"; /// /// The BrowseName for the LastMethodCallTime component. /// public const string LastMethodCallTime = "LastMethodCallTime"; /// /// The BrowseName for the LastMethodInputArguments component. /// public const string LastMethodInputArguments = "LastMethodInputArguments"; /// /// The BrowseName for the LastMethodOutputArguments component. /// public const string LastMethodOutputArguments = "LastMethodOutputArguments"; /// /// The BrowseName for the LastMethodReturnStatus component. /// public const string LastMethodReturnStatus = "LastMethodReturnStatus"; /// /// The BrowseName for the LastMethodSessionId component. /// public const string LastMethodSessionId = "LastMethodSessionId"; /// /// The BrowseName for the LastResponse component. /// public const string LastResponse = "LastResponse"; /// /// The BrowseName for the LastSeverity component. /// public const string LastSeverity = "LastSeverity"; /// /// The BrowseName for the LastTransition component. /// public const string LastTransition = "LastTransition"; /// /// The BrowseName for the LastTransitionTime component. /// public const string LastTransitionTime = "LastTransitionTime"; /// /// The BrowseName for the LatePublishRequestCount component. /// public const string LatePublishRequestCount = "LatePublishRequestCount"; /// /// The BrowseName for the LimitAlarmType component. /// public const string LimitAlarmType = "LimitAlarmType"; /// /// The BrowseName for the LimitState component. /// public const string LimitState = "LimitState"; /// /// The BrowseName for the LiteralOperand component. /// public const string LiteralOperand = "LiteralOperand"; /// /// The BrowseName for the LocaleId component. /// public const string LocaleId = "LocaleId"; /// /// The BrowseName for the LocaleIdArray component. /// public const string LocaleIdArray = "LocaleIdArray"; /// /// The BrowseName for the LocaleIds component. /// public const string LocaleIds = "LocaleIds"; /// /// The BrowseName for the LocalizedText component. /// public const string LocalizedText = "LocalizedText"; /// /// The BrowseName for the LocalTime component. /// public const string LocalTime = "LocalTime"; /// /// The BrowseName for the Lock component. /// public const string Lock = "Lock"; /// /// The BrowseName for the LockType component. /// public const string LockType = "LockType"; /// /// The BrowseName for the Low component. /// public const string Low = "Low"; /// /// The BrowseName for the LowLimit component. /// public const string LowLimit = "LowLimit"; /// /// The BrowseName for the LowLow component. /// public const string LowLow = "LowLow"; /// /// The BrowseName for the LowLowLimit component. /// public const string LowLowLimit = "LowLowLimit"; /// /// The BrowseName for the LowLowState component. /// public const string LowLowState = "LowLowState"; /// /// The BrowseName for the LowLowToLow component. /// public const string LowLowToLow = "LowLowToLow"; /// /// The BrowseName for the LowState component. /// public const string LowState = "LowState"; /// /// The BrowseName for the LowToLowLow component. /// public const string LowToLowLow = "LowToLowLow"; /// /// The BrowseName for the MaintenanceConditionClassType component. /// public const string MaintenanceConditionClassType = "MaintenanceConditionClassType"; /// /// The BrowseName for the ManufacturerName component. /// public const string ManufacturerName = "ManufacturerName"; /// /// The BrowseName for the MaxArrayLength component. /// public const string MaxArrayLength = "MaxArrayLength"; /// /// The BrowseName for the MaxBrowseContinuationPoints component. /// public const string MaxBrowseContinuationPoints = "MaxBrowseContinuationPoints"; /// /// The BrowseName for the MaxHistoryContinuationPoints component. /// public const string MaxHistoryContinuationPoints = "MaxHistoryContinuationPoints"; /// /// The BrowseName for the MaxInstanceCount component. /// public const string MaxInstanceCount = "MaxInstanceCount"; /// /// The BrowseName for the MaxKeepAliveCount component. /// public const string MaxKeepAliveCount = "MaxKeepAliveCount"; /// /// The BrowseName for the MaxLifetimeCount component. /// public const string MaxLifetimeCount = "MaxLifetimeCount"; /// /// The BrowseName for the MaxMonitoredItemsPerCall component. /// public const string MaxMonitoredItemsPerCall = "MaxMonitoredItemsPerCall"; /// /// The BrowseName for the MaxNodesPerBrowse component. /// public const string MaxNodesPerBrowse = "MaxNodesPerBrowse"; /// /// The BrowseName for the MaxNodesPerHistoryReadData component. /// public const string MaxNodesPerHistoryReadData = "MaxNodesPerHistoryReadData"; /// /// The BrowseName for the MaxNodesPerHistoryReadEvents component. /// public const string MaxNodesPerHistoryReadEvents = "MaxNodesPerHistoryReadEvents"; /// /// The BrowseName for the MaxNodesPerHistoryUpdateData component. /// public const string MaxNodesPerHistoryUpdateData = "MaxNodesPerHistoryUpdateData"; /// /// The BrowseName for the MaxNodesPerHistoryUpdateEvents component. /// public const string MaxNodesPerHistoryUpdateEvents = "MaxNodesPerHistoryUpdateEvents"; /// /// The BrowseName for the MaxNodesPerMethodCall component. /// public const string MaxNodesPerMethodCall = "MaxNodesPerMethodCall"; /// /// The BrowseName for the MaxNodesPerNodeManagement component. /// public const string MaxNodesPerNodeManagement = "MaxNodesPerNodeManagement"; /// /// The BrowseName for the MaxNodesPerRead component. /// public const string MaxNodesPerRead = "MaxNodesPerRead"; /// /// The BrowseName for the MaxNodesPerRegisterNodes component. /// public const string MaxNodesPerRegisterNodes = "MaxNodesPerRegisterNodes"; /// /// The BrowseName for the MaxNodesPerTranslateBrowsePathsToNodeIds component. /// public const string MaxNodesPerTranslateBrowsePathsToNodeIds = "MaxNodesPerTranslateBrowsePathsToNodeIds"; /// /// The BrowseName for the MaxNodesPerWrite component. /// public const string MaxNodesPerWrite = "MaxNodesPerWrite"; /// /// The BrowseName for the MaxNotificationsPerPublish component. /// public const string MaxNotificationsPerPublish = "MaxNotificationsPerPublish"; /// /// The BrowseName for the MaxQueryContinuationPoints component. /// public const string MaxQueryContinuationPoints = "MaxQueryContinuationPoints"; /// /// The BrowseName for the MaxRecycleCount component. /// public const string MaxRecycleCount = "MaxRecycleCount"; /// /// The BrowseName for the MaxResponseMessageSize component. /// public const string MaxResponseMessageSize = "MaxResponseMessageSize"; /// /// The BrowseName for the MaxReturnDataValues component. /// public const string MaxReturnDataValues = "MaxReturnDataValues"; /// /// The BrowseName for the MaxReturnEventValues component. /// public const string MaxReturnEventValues = "MaxReturnEventValues"; /// /// The BrowseName for the MaxSampledMonitoredItemsCount component. /// public const string MaxSampledMonitoredItemsCount = "MaxSampledMonitoredItemsCount"; /// /// The BrowseName for the MaxStringLength component. /// public const string MaxStringLength = "MaxStringLength"; /// /// The BrowseName for the MaxTimeInterval component. /// public const string MaxTimeInterval = "MaxTimeInterval"; /// /// The BrowseName for the MaxTimeShelved component. /// public const string MaxTimeShelved = "MaxTimeShelved"; /// /// The BrowseName for the Message component. /// public const string Message = "Message"; /// /// The BrowseName for the MessageSecurityMode component. /// public const string MessageSecurityMode = "MessageSecurityMode"; /// /// The BrowseName for the MethodAttributes component. /// public const string MethodAttributes = "MethodAttributes"; /// /// The BrowseName for the MethodId component. /// public const string MethodId = "MethodId"; /// /// The BrowseName for the MethodNode component. /// public const string MethodNode = "MethodNode"; /// /// The BrowseName for the MinSupportedSampleRate component. /// public const string MinSupportedSampleRate = "MinSupportedSampleRate"; /// /// The BrowseName for the MinTimeInterval component. /// public const string MinTimeInterval = "MinTimeInterval"; /// /// The BrowseName for the ModelChangeStructureDataType component. /// public const string ModelChangeStructureDataType = "ModelChangeStructureDataType"; /// /// The BrowseName for the ModelChangeStructureVerbMask component. /// public const string ModelChangeStructureVerbMask = "ModelChangeStructureVerbMask"; /// /// The BrowseName for the ModellingRule_ExposesItsArray component. /// public const string ModellingRule_ExposesItsArray = "ExposesItsArray"; /// /// The BrowseName for the ModellingRule_Mandatory component. /// public const string ModellingRule_Mandatory = "Mandatory"; /// /// The BrowseName for the ModellingRule_MandatoryPlaceholder component. /// public const string ModellingRule_MandatoryPlaceholder = "MandatoryPlaceholder"; /// /// The BrowseName for the ModellingRule_MandatoryShared component. /// public const string ModellingRule_MandatoryShared = "MandatoryShared"; /// /// The BrowseName for the ModellingRule_Optional component. /// public const string ModellingRule_Optional = "Optional"; /// /// The BrowseName for the ModellingRule_OptionalPlaceholder component. /// public const string ModellingRule_OptionalPlaceholder = "OptionalPlaceholder"; /// /// The BrowseName for the ModellingRules component. /// public const string ModellingRules = "ModellingRules"; /// /// The BrowseName for the ModellingRuleType component. /// public const string ModellingRuleType = "ModellingRuleType"; /// /// The BrowseName for the ModificationInfo component. /// public const string ModificationInfo = "ModificationInfo"; /// /// The BrowseName for the ModifyCount component. /// public const string ModifyCount = "ModifyCount"; /// /// The BrowseName for the ModifyMonitoredItemsCount component. /// public const string ModifyMonitoredItemsCount = "ModifyMonitoredItemsCount"; /// /// The BrowseName for the ModifyMonitoredItemsRequest component. /// public const string ModifyMonitoredItemsRequest = "ModifyMonitoredItemsRequest"; /// /// The BrowseName for the ModifyMonitoredItemsResponse component. /// public const string ModifyMonitoredItemsResponse = "ModifyMonitoredItemsResponse"; /// /// The BrowseName for the ModifySubscriptionCount component. /// public const string ModifySubscriptionCount = "ModifySubscriptionCount"; /// /// The BrowseName for the ModifySubscriptionRequest component. /// public const string ModifySubscriptionRequest = "ModifySubscriptionRequest"; /// /// The BrowseName for the ModifySubscriptionResponse component. /// public const string ModifySubscriptionResponse = "ModifySubscriptionResponse"; /// /// The BrowseName for the MonitoredItemCount component. /// public const string MonitoredItemCount = "MonitoredItemCount"; /// /// The BrowseName for the MonitoredItemCreateRequest component. /// public const string MonitoredItemCreateRequest = "MonitoredItemCreateRequest"; /// /// The BrowseName for the MonitoredItemCreateResult component. /// public const string MonitoredItemCreateResult = "MonitoredItemCreateResult"; /// /// The BrowseName for the MonitoredItemModifyRequest component. /// public const string MonitoredItemModifyRequest = "MonitoredItemModifyRequest"; /// /// The BrowseName for the MonitoredItemModifyResult component. /// public const string MonitoredItemModifyResult = "MonitoredItemModifyResult"; /// /// The BrowseName for the MonitoredItemNotification component. /// public const string MonitoredItemNotification = "MonitoredItemNotification"; /// /// The BrowseName for the MonitoringFilter component. /// public const string MonitoringFilter = "MonitoringFilter"; /// /// The BrowseName for the MonitoringFilterResult component. /// public const string MonitoringFilterResult = "MonitoringFilterResult"; /// /// The BrowseName for the MonitoringMode component. /// public const string MonitoringMode = "MonitoringMode"; /// /// The BrowseName for the MonitoringParameters component. /// public const string MonitoringParameters = "MonitoringParameters"; /// /// The BrowseName for the MonitoringQueueOverflowCount component. /// public const string MonitoringQueueOverflowCount = "MonitoringQueueOverflowCount"; /// /// The BrowseName for the MultiStateDiscreteType component. /// public const string MultiStateDiscreteType = "MultiStateDiscreteType"; /// /// The BrowseName for the MultiStateValueDiscreteType component. /// public const string MultiStateValueDiscreteType = "MultiStateValueDiscreteType"; /// /// The BrowseName for the Name component. /// public const string Name = "Name"; /// /// The BrowseName for the NamespaceArray component. /// public const string NamespaceArray = "NamespaceArray"; /// /// The BrowseName for the NamespaceFile component. /// public const string NamespaceFile = "NamespaceFile"; /// /// The BrowseName for the NamespaceIdentifier component. /// public const string NamespaceIdentifier = ""; /// /// The BrowseName for the NamespaceMetadataType component. /// public const string NamespaceMetadataType = "NamespaceMetadataType"; /// /// The BrowseName for the NamespacePublicationDate component. /// public const string NamespacePublicationDate = "NamespacePublicationDate"; /// /// The BrowseName for the Namespaces component. /// public const string Namespaces = "Namespaces"; /// /// The BrowseName for the NamespacesType component. /// public const string NamespacesType = "NamespacesType"; /// /// The BrowseName for the NamespaceUri component. /// public const string NamespaceUri = "NamespaceUri"; /// /// The BrowseName for the NamespaceVersion component. /// public const string NamespaceVersion = "NamespaceVersion"; /// /// The BrowseName for the NamingRule component. /// public const string NamingRule = "NamingRule"; /// /// The BrowseName for the NamingRuleType component. /// public const string NamingRuleType = "NamingRuleType"; /// /// The BrowseName for the NDimensionArrayItemType component. /// public const string NDimensionArrayItemType = "NDimensionArrayItemType"; /// /// The BrowseName for the NetworkGroupDataType component. /// public const string NetworkGroupDataType = "NetworkGroupDataType"; /// /// The BrowseName for the NewStateId component. /// public const string NewStateId = "NewStateId"; /// /// The BrowseName for the NewValue component. /// public const string NewValue = "NewValue"; /// /// The BrowseName for the NewValues component. /// public const string NewValues = "NewValues"; /// /// The BrowseName for the NextSequenceNumber component. /// public const string NextSequenceNumber = "NextSequenceNumber"; /// /// The BrowseName for the Node component. /// public const string Node = "Node"; /// /// The BrowseName for the NodeAttributes component. /// public const string NodeAttributes = "NodeAttributes"; /// /// The BrowseName for the NodeAttributesMask component. /// public const string NodeAttributesMask = "NodeAttributesMask"; /// /// The BrowseName for the NodeClass component. /// public const string NodeClass = "NodeClass"; /// /// The BrowseName for the NodeId component. /// public const string NodeId = "NodeId"; /// /// The BrowseName for the NodeReference component. /// public const string NodeReference = "NodeReference"; /// /// The BrowseName for the NodesToAdd component. /// public const string NodesToAdd = "NodesToAdd"; /// /// The BrowseName for the NodesToDelete component. /// public const string NodesToDelete = "NodesToDelete"; /// /// The BrowseName for the NodeTypeDescription component. /// public const string NodeTypeDescription = "NodeTypeDescription"; /// /// The BrowseName for the NodeVersion component. /// public const string NodeVersion = "NodeVersion"; /// /// The BrowseName for the NonExclusiveDeviationAlarmType component. /// public const string NonExclusiveDeviationAlarmType = "NonExclusiveDeviationAlarmType"; /// /// The BrowseName for the NonExclusiveLevelAlarmType component. /// public const string NonExclusiveLevelAlarmType = "NonExclusiveLevelAlarmType"; /// /// The BrowseName for the NonExclusiveLimitAlarmType component. /// public const string NonExclusiveLimitAlarmType = "NonExclusiveLimitAlarmType"; /// /// The BrowseName for the NonExclusiveRateOfChangeAlarmType component. /// public const string NonExclusiveRateOfChangeAlarmType = "NonExclusiveRateOfChangeAlarmType"; /// /// The BrowseName for the NonHierarchicalReferences component. /// public const string NonHierarchicalReferences = "NonHierarchicalReferences"; /// /// The BrowseName for the NonTransparentNetworkRedundancyType component. /// public const string NonTransparentNetworkRedundancyType = "NonTransparentNetworkRedundancyType"; /// /// The BrowseName for the NonTransparentRedundancyType component. /// public const string NonTransparentRedundancyType = "NonTransparentRedundancyType"; /// /// The BrowseName for the NormalState component. /// public const string NormalState = "NormalState"; /// /// The BrowseName for the NotificationData component. /// public const string NotificationData = "NotificationData"; /// /// The BrowseName for the NotificationMessage component. /// public const string NotificationMessage = "NotificationMessage"; /// /// The BrowseName for the NotificationsCount component. /// public const string NotificationsCount = "NotificationsCount"; /// /// The BrowseName for the Number component. /// public const string Number = "Number"; /// /// The BrowseName for the NumericRange component. /// public const string NumericRange = "NumericRange"; /// /// The BrowseName for the ObjectAttributes component. /// public const string ObjectAttributes = "ObjectAttributes"; /// /// The BrowseName for the ObjectNode component. /// public const string ObjectNode = "ObjectNode"; /// /// The BrowseName for the ObjectsFolder component. /// public const string ObjectsFolder = "Objects"; /// /// The BrowseName for the ObjectTypeAttributes component. /// public const string ObjectTypeAttributes = "ObjectTypeAttributes"; /// /// The BrowseName for the ObjectTypeNode component. /// public const string ObjectTypeNode = "ObjectTypeNode"; /// /// The BrowseName for the ObjectTypesFolder component. /// public const string ObjectTypesFolder = "ObjectTypes"; /// /// The BrowseName for the OffNormalAlarmType component. /// public const string OffNormalAlarmType = "OffNormalAlarmType"; /// /// The BrowseName for the OkResponse component. /// public const string OkResponse = "OkResponse"; /// /// The BrowseName for the OldStateId component. /// public const string OldStateId = "OldStateId"; /// /// The BrowseName for the OldValue component. /// public const string OldValue = "OldValue"; /// /// The BrowseName for the OldValues component. /// public const string OldValues = "OldValues"; /// /// The BrowseName for the OneShotShelve component. /// public const string OneShotShelve = "OneShotShelve"; /// /// The BrowseName for the OneShotShelved component. /// public const string OneShotShelved = "OneShotShelved"; /// /// The BrowseName for the OneShotShelvedToTimedShelved component. /// public const string OneShotShelvedToTimedShelved = "OneShotShelvedToTimedShelved"; /// /// The BrowseName for the OneShotShelvedToUnshelved component. /// public const string OneShotShelvedToUnshelved = "OneShotShelvedToUnshelved"; /// /// The BrowseName for the OPCBinarySchema_TypeSystem component. /// public const string OPCBinarySchema_TypeSystem = "OPC Binary"; /// /// The BrowseName for the OpcUa_BinarySchema component. /// public const string OpcUa_BinarySchema = "Opc.Ua"; /// /// The BrowseName for the OpcUa_XmlSchema component. /// public const string OpcUa_XmlSchema = "Opc.Ua"; /// /// The BrowseName for the Open component. /// public const string Open = "Open"; /// /// The BrowseName for the OpenCount component. /// public const string OpenCount = "OpenCount"; /// /// The BrowseName for the OpenFileMode component. /// public const string OpenFileMode = "OpenFileMode"; /// /// The BrowseName for the OpenMethodType component. /// public const string OpenMethodType = "OpenMethodType"; /// /// The BrowseName for the OpenSecureChannelRequest component. /// public const string OpenSecureChannelRequest = "OpenSecureChannelRequest"; /// /// The BrowseName for the OpenSecureChannelResponse component. /// public const string OpenSecureChannelResponse = "OpenSecureChannelResponse"; /// /// The BrowseName for the OperationLimits component. /// public const string OperationLimits = "OperationLimits"; /// /// The BrowseName for the OperationLimitsType component. /// public const string OperationLimitsType = "OperationLimitsType"; /// /// The BrowseName for the OptionSetType component. /// public const string OptionSetType = "OptionSetType"; /// /// The BrowseName for the OptionSetValues component. /// public const string OptionSetValues = "OptionSetValues"; /// /// The BrowseName for the Organizes component. /// public const string Organizes = "Organizes"; /// /// The BrowseName for the OutputArguments component. /// public const string OutputArguments = "OutputArguments"; /// /// The BrowseName for the ParameterDataTypeId component. /// public const string ParameterDataTypeId = "ParameterDataTypeId"; /// /// The BrowseName for the ParsingResult component. /// public const string ParsingResult = "ParsingResult"; /// /// The BrowseName for the PercentDataBad component. /// public const string PercentDataBad = "PercentDataBad"; /// /// The BrowseName for the PercentDataGood component. /// public const string PercentDataGood = "PercentDataGood"; /// /// The BrowseName for the PerformInsertReplace component. /// public const string PerformInsertReplace = "PerformInsertReplace"; /// /// The BrowseName for the PerformUpdateType component. /// public const string PerformUpdateType = "PerformUpdateType"; /// /// The BrowseName for the Priority component. /// public const string Priority = "Priority"; /// /// The BrowseName for the ProcessConditionClassType component. /// public const string ProcessConditionClassType = "ProcessConditionClassType"; /// /// The BrowseName for the ProductName component. /// public const string ProductName = "ProductName"; /// /// The BrowseName for the ProductUri component. /// public const string ProductUri = "ProductUri"; /// /// The BrowseName for the ProgramDiagnosticDataType component. /// public const string ProgramDiagnosticDataType = "ProgramDiagnosticDataType"; /// /// The BrowseName for the ProgramDiagnostics component. /// public const string ProgramDiagnostics = "ProgramDiagnostics"; /// /// The BrowseName for the ProgramDiagnosticType component. /// public const string ProgramDiagnosticType = "ProgramDiagnosticType"; /// /// The BrowseName for the ProgramStateMachineType component. /// public const string ProgramStateMachineType = "ProgramStateMachineType"; /// /// The BrowseName for the ProgramTransitionAuditEventType component. /// public const string ProgramTransitionAuditEventType = "ProgramTransitionAuditEventType"; /// /// The BrowseName for the ProgramTransitionEventType component. /// public const string ProgramTransitionEventType = "ProgramTransitionEventType"; /// /// The BrowseName for the ProgressEventType component. /// public const string ProgressEventType = "ProgressEventType"; /// /// The BrowseName for the Prompt component. /// public const string Prompt = "Prompt"; /// /// The BrowseName for the PropertyType component. /// public const string PropertyType = "PropertyType"; /// /// The BrowseName for the PublishCount component. /// public const string PublishCount = "PublishCount"; /// /// The BrowseName for the PublishingEnabled component. /// public const string PublishingEnabled = "PublishingEnabled"; /// /// The BrowseName for the PublishingInterval component. /// public const string PublishingInterval = "PublishingInterval"; /// /// The BrowseName for the PublishingIntervalCount component. /// public const string PublishingIntervalCount = "PublishingIntervalCount"; /// /// The BrowseName for the PublishRequest component. /// public const string PublishRequest = "PublishRequest"; /// /// The BrowseName for the PublishRequestCount component. /// public const string PublishRequestCount = "PublishRequestCount"; /// /// The BrowseName for the PublishResponse component. /// public const string PublishResponse = "PublishResponse"; /// /// The BrowseName for the QualifiedName component. /// public const string QualifiedName = "QualifiedName"; /// /// The BrowseName for the Quality component. /// public const string Quality = "Quality"; /// /// The BrowseName for the QueryDataDescription component. /// public const string QueryDataDescription = "QueryDataDescription"; /// /// The BrowseName for the QueryDataSet component. /// public const string QueryDataSet = "QueryDataSet"; /// /// The BrowseName for the QueryFirstCount component. /// public const string QueryFirstCount = "QueryFirstCount"; /// /// The BrowseName for the QueryFirstRequest component. /// public const string QueryFirstRequest = "QueryFirstRequest"; /// /// The BrowseName for the QueryFirstResponse component. /// public const string QueryFirstResponse = "QueryFirstResponse"; /// /// The BrowseName for the QueryNextCount component. /// public const string QueryNextCount = "QueryNextCount"; /// /// The BrowseName for the QueryNextRequest component. /// public const string QueryNextRequest = "QueryNextRequest"; /// /// The BrowseName for the QueryNextResponse component. /// public const string QueryNextResponse = "QueryNextResponse"; /// /// The BrowseName for the Range component. /// public const string Range = "Range"; /// /// The BrowseName for the Read component. /// public const string Read = "Read"; /// /// The BrowseName for the ReadAtTimeDetails component. /// public const string ReadAtTimeDetails = "ReadAtTimeDetails"; /// /// The BrowseName for the ReadCount component. /// public const string ReadCount = "ReadCount"; /// /// The BrowseName for the ReadEventDetails component. /// public const string ReadEventDetails = "ReadEventDetails"; /// /// The BrowseName for the ReadMethodType component. /// public const string ReadMethodType = "ReadMethodType"; /// /// The BrowseName for the ReadProcessedDetails component. /// public const string ReadProcessedDetails = "ReadProcessedDetails"; /// /// The BrowseName for the ReadRawModifiedDetails component. /// public const string ReadRawModifiedDetails = "ReadRawModifiedDetails"; /// /// The BrowseName for the ReadRequest component. /// public const string ReadRequest = "ReadRequest"; /// /// The BrowseName for the ReadResponse component. /// public const string ReadResponse = "ReadResponse"; /// /// The BrowseName for the ReadValueId component. /// public const string ReadValueId = "ReadValueId"; /// /// The BrowseName for the Ready component. /// public const string Ready = "Ready"; /// /// The BrowseName for the ReadyToHalted component. /// public const string ReadyToHalted = "ReadyToHalted"; /// /// The BrowseName for the ReadyToRunning component. /// public const string ReadyToRunning = "ReadyToRunning"; /// /// The BrowseName for the ReceiveTime component. /// public const string ReceiveTime = "ReceiveTime"; /// /// The BrowseName for the RecycleCount component. /// public const string RecycleCount = "RecycleCount"; /// /// The BrowseName for the RedundancySupport component. /// public const string RedundancySupport = "RedundancySupport"; /// /// The BrowseName for the RedundantServerArray component. /// public const string RedundantServerArray = "RedundantServerArray"; /// /// The BrowseName for the RedundantServerDataType component. /// public const string RedundantServerDataType = "RedundantServerDataType"; /// /// The BrowseName for the ReferenceDescription component. /// public const string ReferenceDescription = "ReferenceDescription"; /// /// The BrowseName for the ReferenceNode component. /// public const string ReferenceNode = "ReferenceNode"; /// /// The BrowseName for the References component. /// public const string References = "References"; /// /// The BrowseName for the ReferencesToAdd component. /// public const string ReferencesToAdd = "ReferencesToAdd"; /// /// The BrowseName for the ReferencesToDelete component. /// public const string ReferencesToDelete = "ReferencesToDelete"; /// /// The BrowseName for the ReferenceTypeAttributes component. /// public const string ReferenceTypeAttributes = "ReferenceTypeAttributes"; /// /// The BrowseName for the ReferenceTypeNode component. /// public const string ReferenceTypeNode = "ReferenceTypeNode"; /// /// The BrowseName for the ReferenceTypesFolder component. /// public const string ReferenceTypesFolder = "ReferenceTypes"; /// /// The BrowseName for the RefreshEndEventType component. /// public const string RefreshEndEventType = "RefreshEndEventType"; /// /// The BrowseName for the RefreshRequiredEventType component. /// public const string RefreshRequiredEventType = "RefreshRequiredEventType"; /// /// The BrowseName for the RefreshStartEventType component. /// public const string RefreshStartEventType = "RefreshStartEventType"; /// /// The BrowseName for the RegisteredServer component. /// public const string RegisteredServer = "RegisteredServer"; /// /// The BrowseName for the RegisterNodesCount component. /// public const string RegisterNodesCount = "RegisterNodesCount"; /// /// The BrowseName for the RegisterNodesRequest component. /// public const string RegisterNodesRequest = "RegisterNodesRequest"; /// /// The BrowseName for the RegisterNodesResponse component. /// public const string RegisterNodesResponse = "RegisterNodesResponse"; /// /// The BrowseName for the RegisterServerRequest component. /// public const string RegisterServerRequest = "RegisterServerRequest"; /// /// The BrowseName for the RegisterServerResponse component. /// public const string RegisterServerResponse = "RegisterServerResponse"; /// /// The BrowseName for the RejectedRequestsCount component. /// public const string RejectedRequestsCount = "RejectedRequestsCount"; /// /// The BrowseName for the RejectedSessionCount component. /// public const string RejectedSessionCount = "RejectedSessionCount"; /// /// The BrowseName for the RelativePath component. /// public const string RelativePath = "RelativePath"; /// /// The BrowseName for the RelativePathElement component. /// public const string RelativePathElement = "RelativePathElement"; /// /// The BrowseName for the ReplaceDataCapability component. /// public const string ReplaceDataCapability = "ReplaceDataCapability"; /// /// The BrowseName for the ReplaceEventCapability component. /// public const string ReplaceEventCapability = "ReplaceEventCapability"; /// /// The BrowseName for the RepublishCount component. /// public const string RepublishCount = "RepublishCount"; /// /// The BrowseName for the RepublishMessageCount component. /// public const string RepublishMessageCount = "RepublishMessageCount"; /// /// The BrowseName for the RepublishMessageRequestCount component. /// public const string RepublishMessageRequestCount = "RepublishMessageRequestCount"; /// /// The BrowseName for the RepublishRequest component. /// public const string RepublishRequest = "RepublishRequest"; /// /// The BrowseName for the RepublishRequestCount component. /// public const string RepublishRequestCount = "RepublishRequestCount"; /// /// The BrowseName for the RepublishResponse component. /// public const string RepublishResponse = "RepublishResponse"; /// /// The BrowseName for the ReqTimes component. /// public const string ReqTimes = "ReqTimes"; /// /// The BrowseName for the RequestedLifetime component. /// public const string RequestedLifetime = "RequestedLifetime"; /// /// The BrowseName for the RequestHandle component. /// public const string RequestHandle = "RequestHandle"; /// /// The BrowseName for the RequestHeader component. /// public const string RequestHeader = "RequestHeader"; /// /// The BrowseName for the RequestType component. /// public const string RequestType = "RequestType"; /// /// The BrowseName for the Reset component. /// public const string Reset = "Reset"; /// /// The BrowseName for the Respond component. /// public const string Respond = "Respond"; /// /// The BrowseName for the ResponseHeader component. /// public const string ResponseHeader = "ResponseHeader"; /// /// The BrowseName for the ResponseOptionSet component. /// public const string ResponseOptionSet = "ResponseOptionSet"; /// /// The BrowseName for the Resume component. /// public const string Resume = "Resume"; /// /// The BrowseName for the Retain component. /// public const string Retain = "Retain"; /// /// The BrowseName for the RevisedSessionTimeout component. /// public const string RevisedSessionTimeout = "RevisedSessionTimeout"; /// /// The BrowseName for the RootFolder component. /// public const string RootFolder = "Root"; /// /// The BrowseName for the Running component. /// public const string Running = "Running"; /// /// The BrowseName for the RunningToHalted component. /// public const string RunningToHalted = "RunningToHalted"; /// /// The BrowseName for the RunningToReady component. /// public const string RunningToReady = "RunningToReady"; /// /// The BrowseName for the RunningToSuspended component. /// public const string RunningToSuspended = "RunningToSuspended"; /// /// The BrowseName for the SampledMonitoredItemsCount component. /// public const string SampledMonitoredItemsCount = "SampledMonitoredItemsCount"; /// /// The BrowseName for the SamplingInterval component. /// public const string SamplingInterval = "SamplingInterval"; /// /// The BrowseName for the SamplingIntervalDiagnosticsArray component. /// public const string SamplingIntervalDiagnosticsArray = "SamplingIntervalDiagnosticsArray"; /// /// The BrowseName for the SamplingIntervalDiagnosticsArrayType component. /// public const string SamplingIntervalDiagnosticsArrayType = "SamplingIntervalDiagnosticsArrayType"; /// /// The BrowseName for the SamplingIntervalDiagnosticsDataType component. /// public const string SamplingIntervalDiagnosticsDataType = "SamplingIntervalDiagnosticsDataType"; /// /// The BrowseName for the SamplingIntervalDiagnosticsType component. /// public const string SamplingIntervalDiagnosticsType = "SamplingIntervalDiagnosticsType"; /// /// The BrowseName for the SByte component. /// public const string SByte = "SByte"; /// /// The BrowseName for the ScalarTestType component. /// public const string ScalarTestType = "ScalarTestType"; /// /// The BrowseName for the SecondsTillShutdown component. /// public const string SecondsTillShutdown = "SecondsTillShutdown"; /// /// The BrowseName for the SecureChannelId component. /// public const string SecureChannelId = "SecureChannelId"; /// /// The BrowseName for the SecurityMode component. /// public const string SecurityMode = "SecurityMode"; /// /// The BrowseName for the SecurityPolicyUri component. /// public const string SecurityPolicyUri = "SecurityPolicyUri"; /// /// The BrowseName for the SecurityRejectedRequestsCount component. /// public const string SecurityRejectedRequestsCount = "SecurityRejectedRequestsCount"; /// /// The BrowseName for the SecurityRejectedSessionCount component. /// public const string SecurityRejectedSessionCount = "SecurityRejectedSessionCount"; /// /// The BrowseName for the SecurityTokenRequestType component. /// public const string SecurityTokenRequestType = "SecurityTokenRequestType"; /// /// The BrowseName for the SelectedResponse component. /// public const string SelectedResponse = "SelectedResponse"; /// /// The BrowseName for the SemanticChangeEventType component. /// public const string SemanticChangeEventType = "SemanticChangeEventType"; /// /// The BrowseName for the SemanticChangeStructureDataType component. /// public const string SemanticChangeStructureDataType = "SemanticChangeStructureDataType"; /// /// The BrowseName for the Server component. /// public const string Server = "Server"; /// /// The BrowseName for the ServerArray component. /// public const string ServerArray = "ServerArray"; /// /// The BrowseName for the ServerCapabilities component. /// public const string ServerCapabilities = "ServerCapabilities"; /// /// The BrowseName for the ServerCapabilitiesType component. /// public const string ServerCapabilitiesType = "ServerCapabilitiesType"; /// /// The BrowseName for the ServerDiagnostics component. /// public const string ServerDiagnostics = "ServerDiagnostics"; /// /// The BrowseName for the ServerDiagnosticsSummary component. /// public const string ServerDiagnosticsSummary = "ServerDiagnosticsSummary"; /// /// The BrowseName for the ServerDiagnosticsSummaryDataType component. /// public const string ServerDiagnosticsSummaryDataType = "ServerDiagnosticsSummaryDataType"; /// /// The BrowseName for the ServerDiagnosticsSummaryType component. /// public const string ServerDiagnosticsSummaryType = "ServerDiagnosticsSummaryType"; /// /// The BrowseName for the ServerDiagnosticsType component. /// public const string ServerDiagnosticsType = "ServerDiagnosticsType"; /// /// The BrowseName for the ServerId component. /// public const string ServerId = "ServerId"; /// /// The BrowseName for the ServerLock component. /// public const string ServerLock = "ServerLock"; /// /// The BrowseName for the ServerNetworkGroups component. /// public const string ServerNetworkGroups = "ServerNetworkGroups"; /// /// The BrowseName for the ServerProfileArray component. /// public const string ServerProfileArray = "ServerProfileArray"; /// /// The BrowseName for the ServerRedundancy component. /// public const string ServerRedundancy = "ServerRedundancy"; /// /// The BrowseName for the ServerRedundancyType component. /// public const string ServerRedundancyType = "ServerRedundancyType"; /// /// The BrowseName for the ServerState component. /// public const string ServerState = "ServerState"; /// /// The BrowseName for the ServerStatus component. /// public const string ServerStatus = "ServerStatus"; /// /// The BrowseName for the ServerStatusDataType component. /// public const string ServerStatusDataType = "ServerStatusDataType"; /// /// The BrowseName for the ServerStatusType component. /// public const string ServerStatusType = "ServerStatusType"; /// /// The BrowseName for the ServerType component. /// public const string ServerType = "ServerType"; /// /// The BrowseName for the ServerUri component. /// public const string ServerUri = "ServerUri"; /// /// The BrowseName for the ServerUriArray component. /// public const string ServerUriArray = "ServerUriArray"; /// /// The BrowseName for the ServerVendorCapabilityType component. /// public const string ServerVendorCapabilityType = "ServerVendorCapabilityType"; /// /// The BrowseName for the ServerViewCount component. /// public const string ServerViewCount = "ServerViewCount"; /// /// The BrowseName for the ServiceCounterDataType component. /// public const string ServiceCounterDataType = "ServiceCounterDataType"; /// /// The BrowseName for the ServiceFault component. /// public const string ServiceFault = "ServiceFault"; /// /// The BrowseName for the ServiceLevel component. /// public const string ServiceLevel = "ServiceLevel"; /// /// The BrowseName for the SessionAbortCount component. /// public const string SessionAbortCount = "SessionAbortCount"; /// /// The BrowseName for the SessionAuthenticationToken component. /// public const string SessionAuthenticationToken = "SessionAuthenticationToken"; /// /// The BrowseName for the SessionDiagnostics component. /// public const string SessionDiagnostics = "SessionDiagnostics"; /// /// The BrowseName for the SessionDiagnosticsArray component. /// public const string SessionDiagnosticsArray = "SessionDiagnosticsArray"; /// /// The BrowseName for the SessionDiagnosticsArrayType component. /// public const string SessionDiagnosticsArrayType = "SessionDiagnosticsArrayType"; /// /// The BrowseName for the SessionDiagnosticsDataType component. /// public const string SessionDiagnosticsDataType = "SessionDiagnosticsDataType"; /// /// The BrowseName for the SessionDiagnosticsObjectType component. /// public const string SessionDiagnosticsObjectType = "SessionDiagnosticsObjectType"; /// /// The BrowseName for the SessionDiagnosticsVariableType component. /// public const string SessionDiagnosticsVariableType = "SessionDiagnosticsVariableType"; /// /// The BrowseName for the SessionId component. /// public const string SessionId = "SessionId"; /// /// The BrowseName for the SessionName component. /// public const string SessionName = "SessionName"; /// /// The BrowseName for the SessionPlaceholder component. /// public const string SessionPlaceholder = ""; /// /// The BrowseName for the SessionsDiagnosticsSummary component. /// public const string SessionsDiagnosticsSummary = "SessionsDiagnosticsSummary"; /// /// The BrowseName for the SessionsDiagnosticsSummaryType component. /// public const string SessionsDiagnosticsSummaryType = "SessionsDiagnosticsSummaryType"; /// /// The BrowseName for the SessionSecurityDiagnostics component. /// public const string SessionSecurityDiagnostics = "SessionSecurityDiagnostics"; /// /// The BrowseName for the SessionSecurityDiagnosticsArray component. /// public const string SessionSecurityDiagnosticsArray = "SessionSecurityDiagnosticsArray"; /// /// The BrowseName for the SessionSecurityDiagnosticsArrayType component. /// public const string SessionSecurityDiagnosticsArrayType = "SessionSecurityDiagnosticsArrayType"; /// /// The BrowseName for the SessionSecurityDiagnosticsDataType component. /// public const string SessionSecurityDiagnosticsDataType = "SessionSecurityDiagnosticsDataType"; /// /// The BrowseName for the SessionSecurityDiagnosticsType component. /// public const string SessionSecurityDiagnosticsType = "SessionSecurityDiagnosticsType"; /// /// The BrowseName for the SessionTimeoutCount component. /// public const string SessionTimeoutCount = "SessionTimeoutCount"; /// /// The BrowseName for the SetMonitoringModeCount component. /// public const string SetMonitoringModeCount = "SetMonitoringModeCount"; /// /// The BrowseName for the SetMonitoringModeRequest component. /// public const string SetMonitoringModeRequest = "SetMonitoringModeRequest"; /// /// The BrowseName for the SetMonitoringModeResponse component. /// public const string SetMonitoringModeResponse = "SetMonitoringModeResponse"; /// /// The BrowseName for the SetpointNode component. /// public const string SetpointNode = "SetpointNode"; /// /// The BrowseName for the SetPosition component. /// public const string SetPosition = "SetPosition"; /// /// The BrowseName for the SetPositionMethodType component. /// public const string SetPositionMethodType = "SetPositionMethodType"; /// /// The BrowseName for the SetPublishingModeCount component. /// public const string SetPublishingModeCount = "SetPublishingModeCount"; /// /// The BrowseName for the SetPublishingModeRequest component. /// public const string SetPublishingModeRequest = "SetPublishingModeRequest"; /// /// The BrowseName for the SetPublishingModeResponse component. /// public const string SetPublishingModeResponse = "SetPublishingModeResponse"; /// /// The BrowseName for the SetTriggeringCount component. /// public const string SetTriggeringCount = "SetTriggeringCount"; /// /// The BrowseName for the SetTriggeringRequest component. /// public const string SetTriggeringRequest = "SetTriggeringRequest"; /// /// The BrowseName for the SetTriggeringResponse component. /// public const string SetTriggeringResponse = "SetTriggeringResponse"; /// /// The BrowseName for the Severity component. /// public const string Severity = "Severity"; /// /// The BrowseName for the ShelvedStateMachineType component. /// public const string ShelvedStateMachineType = "ShelvedStateMachineType"; /// /// The BrowseName for the ShelvingState component. /// public const string ShelvingState = "ShelvingState"; /// /// The BrowseName for the ShelvingTime component. /// public const string ShelvingTime = "ShelvingTime"; /// /// The BrowseName for the ShutdownReason component. /// public const string ShutdownReason = "ShutdownReason"; /// /// The BrowseName for the SignatureData component. /// public const string SignatureData = "SignatureData"; /// /// The BrowseName for the SignedSoftwareCertificate component. /// public const string SignedSoftwareCertificate = "SignedSoftwareCertificate"; /// /// The BrowseName for the SimpleAttributeOperand component. /// public const string SimpleAttributeOperand = "SimpleAttributeOperand"; /// /// The BrowseName for the Size component. /// public const string Size = "Size"; /// /// The BrowseName for the SoftwareCertificate component. /// public const string SoftwareCertificate = "SoftwareCertificate"; /// /// The BrowseName for the SoftwareCertificates component. /// public const string SoftwareCertificates = "SoftwareCertificates"; /// /// The BrowseName for the SoftwareVersion component. /// public const string SoftwareVersion = "SoftwareVersion"; /// /// The BrowseName for the SourceName component. /// public const string SourceName = "SourceName"; /// /// The BrowseName for the SourceNode component. /// public const string SourceNode = "SourceNode"; /// /// The BrowseName for the SourceTimestamp component. /// public const string SourceTimestamp = "SourceTimestamp"; /// /// The BrowseName for the Start component. /// public const string Start = "Start"; /// /// The BrowseName for the StartOfArchive component. /// public const string StartOfArchive = "StartOfArchive"; /// /// The BrowseName for the StartOfOnlineArchive component. /// public const string StartOfOnlineArchive = "StartOfOnlineArchive"; /// /// The BrowseName for the StartTime component. /// public const string StartTime = "StartTime"; /// /// The BrowseName for the State component. /// public const string State = "State"; /// /// The BrowseName for the StateMachineType component. /// public const string StateMachineType = "StateMachineType"; /// /// The BrowseName for the StateNumber component. /// public const string StateNumber = "StateNumber"; /// /// The BrowseName for the StateType component. /// public const string StateType = "StateType"; /// /// The BrowseName for the StateVariableType component. /// public const string StateVariableType = "StateVariableType"; /// /// The BrowseName for the StaticNodeIdIndentifierTypes component. /// public const string StaticNodeIdIndentifierTypes = "StaticNodeIdIndentifierTypes"; /// /// The BrowseName for the StaticNumericNodeIdRange component. /// public const string StaticNumericNodeIdRange = "StaticNumericNodeIdRange"; /// /// The BrowseName for the StaticStringNodeIdPattern component. /// public const string StaticStringNodeIdPattern = "StaticStringNodeIdPattern"; /// /// The BrowseName for the Status component. /// public const string Status = "Status"; /// /// The BrowseName for the StatusChangeNotification component. /// public const string StatusChangeNotification = "StatusChangeNotification"; /// /// The BrowseName for the StatusCode component. /// public const string StatusCode = "StatusCode"; /// /// The BrowseName for the StatusResult component. /// public const string StatusResult = "StatusResult"; /// /// The BrowseName for the Stepped component. /// public const string Stepped = "Stepped"; /// /// The BrowseName for the String component. /// public const string String = "String"; /// /// The BrowseName for the Structure component. /// public const string Structure = "Structure"; /// /// The BrowseName for the SubscriptionAcknowledgement component. /// public const string SubscriptionAcknowledgement = "SubscriptionAcknowledgement"; /// /// The BrowseName for the SubscriptionDiagnosticsArray component. /// public const string SubscriptionDiagnosticsArray = "SubscriptionDiagnosticsArray"; /// /// The BrowseName for the SubscriptionDiagnosticsArrayType component. /// public const string SubscriptionDiagnosticsArrayType = "SubscriptionDiagnosticsArrayType"; /// /// The BrowseName for the SubscriptionDiagnosticsDataType component. /// public const string SubscriptionDiagnosticsDataType = "SubscriptionDiagnosticsDataType"; /// /// The BrowseName for the SubscriptionDiagnosticsType component. /// public const string SubscriptionDiagnosticsType = "SubscriptionDiagnosticsType"; /// /// The BrowseName for the SubscriptionId component. /// public const string SubscriptionId = "SubscriptionId"; /// /// The BrowseName for the SupportedProfile component. /// public const string SupportedProfile = "SupportedProfile"; /// /// The BrowseName for the SuppressedOrShelved component. /// public const string SuppressedOrShelved = "SuppressedOrShelved"; /// /// The BrowseName for the SuppressedState component. /// public const string SuppressedState = "SuppressedState"; /// /// The BrowseName for the Suspend component. /// public const string Suspend = "Suspend"; /// /// The BrowseName for the Suspended component. /// public const string Suspended = "Suspended"; /// /// The BrowseName for the SuspendedToHalted component. /// public const string SuspendedToHalted = "SuspendedToHalted"; /// /// The BrowseName for the SuspendedToReady component. /// public const string SuspendedToReady = "SuspendedToReady"; /// /// The BrowseName for the SuspendedToRunning component. /// public const string SuspendedToRunning = "SuspendedToRunning"; /// /// The BrowseName for the SystemConditionClassType component. /// public const string SystemConditionClassType = "SystemConditionClassType"; /// /// The BrowseName for the SystemEventType component. /// public const string SystemEventType = "SystemEventType"; /// /// The BrowseName for the SystemOffNormalAlarmType component. /// public const string SystemOffNormalAlarmType = "SystemOffNormalAlarmType"; /// /// The BrowseName for the SystemState component. /// public const string SystemState = "SystemState"; /// /// The BrowseName for the SystemStatusChangeEventType component. /// public const string SystemStatusChangeEventType = "SystemStatusChangeEventType"; /// /// The BrowseName for the TestStackExRequest component. /// public const string TestStackExRequest = "TestStackExRequest"; /// /// The BrowseName for the TestStackExResponse component. /// public const string TestStackExResponse = "TestStackExResponse"; /// /// The BrowseName for the TestStackRequest component. /// public const string TestStackRequest = "TestStackRequest"; /// /// The BrowseName for the TestStackResponse component. /// public const string TestStackResponse = "TestStackResponse"; /// /// The BrowseName for the Time component. /// public const string Time = "Time"; /// /// The BrowseName for the TimedShelve component. /// public const string TimedShelve = "TimedShelve"; /// /// The BrowseName for the TimedShelved component. /// public const string TimedShelved = "TimedShelved"; /// /// The BrowseName for the TimedShelvedToOneShotShelved component. /// public const string TimedShelvedToOneShotShelved = "TimedShelvedToOneShotShelved"; /// /// The BrowseName for the TimedShelvedToUnshelved component. /// public const string TimedShelvedToUnshelved = "TimedShelvedToUnshelved"; /// /// The BrowseName for the TimedShelveMethodType component. /// public const string TimedShelveMethodType = "TimedShelveMethodType"; /// /// The BrowseName for the TimestampsToReturn component. /// public const string TimestampsToReturn = "TimestampsToReturn"; /// /// The BrowseName for the TimeZoneDataType component. /// public const string TimeZoneDataType = "TimeZoneDataType"; /// /// The BrowseName for the Title component. /// public const string Title = "Title"; /// /// The BrowseName for the ToState component. /// public const string ToState = "ToState"; /// /// The BrowseName for the TotalRequestCount component. /// public const string TotalRequestCount = "TotalRequestCount"; /// /// The BrowseName for the TransferredToAltClientCount component. /// public const string TransferredToAltClientCount = "TransferredToAltClientCount"; /// /// The BrowseName for the TransferredToSameClientCount component. /// public const string TransferredToSameClientCount = "TransferredToSameClientCount"; /// /// The BrowseName for the TransferRequestCount component. /// public const string TransferRequestCount = "TransferRequestCount"; /// /// The BrowseName for the TransferResult component. /// public const string TransferResult = "TransferResult"; /// /// The BrowseName for the TransferSubscriptionsCount component. /// public const string TransferSubscriptionsCount = "TransferSubscriptionsCount"; /// /// The BrowseName for the TransferSubscriptionsRequest component. /// public const string TransferSubscriptionsRequest = "TransferSubscriptionsRequest"; /// /// The BrowseName for the TransferSubscriptionsResponse component. /// public const string TransferSubscriptionsResponse = "TransferSubscriptionsResponse"; /// /// The BrowseName for the Transition component. /// public const string Transition = "Transition"; /// /// The BrowseName for the TransitionEventType component. /// public const string TransitionEventType = "TransitionEventType"; /// /// The BrowseName for the TransitionNumber component. /// public const string TransitionNumber = "TransitionNumber"; /// /// The BrowseName for the TransitionTime component. /// public const string TransitionTime = "TransitionTime"; /// /// The BrowseName for the TransitionType component. /// public const string TransitionType = "TransitionType"; /// /// The BrowseName for the TransitionVariableType component. /// public const string TransitionVariableType = "TransitionVariableType"; /// /// The BrowseName for the TranslateBrowsePathsToNodeIdsCount component. /// public const string TranslateBrowsePathsToNodeIdsCount = "TranslateBrowsePathsToNodeIdsCount"; /// /// The BrowseName for the TranslateBrowsePathsToNodeIdsRequest component. /// public const string TranslateBrowsePathsToNodeIdsRequest = "TranslateBrowsePathsToNodeIdsRequest"; /// /// The BrowseName for the TranslateBrowsePathsToNodeIdsResponse component. /// public const string TranslateBrowsePathsToNodeIdsResponse = "TranslateBrowsePathsToNodeIdsResponse"; /// /// The BrowseName for the TransparentRedundancyType component. /// public const string TransparentRedundancyType = "TransparentRedundancyType"; /// /// The BrowseName for the TransportProtocol component. /// public const string TransportProtocol = "TransportProtocol"; /// /// The BrowseName for the TreatUncertainAsBad component. /// public const string TreatUncertainAsBad = "TreatUncertainAsBad"; /// /// The BrowseName for the TripAlarmType component. /// public const string TripAlarmType = "TripAlarmType"; /// /// The BrowseName for the TrueState component. /// public const string TrueState = "TrueState"; /// /// The BrowseName for the TwoStateDiscreteType component. /// public const string TwoStateDiscreteType = "TwoStateDiscreteType"; /// /// The BrowseName for the TwoStateVariableType component. /// public const string TwoStateVariableType = "TwoStateVariableType"; /// /// The BrowseName for the TypeNode component. /// public const string TypeNode = "TypeNode"; /// /// The BrowseName for the TypesFolder component. /// public const string TypesFolder = "Types"; /// /// The BrowseName for the UInt16 component. /// public const string UInt16 = "UInt16"; /// /// The BrowseName for the UInt32 component. /// public const string UInt32 = "UInt32"; /// /// The BrowseName for the UInt64 component. /// public const string UInt64 = "UInt64"; /// /// The BrowseName for the UInteger component. /// public const string UInteger = "UInteger"; /// /// The BrowseName for the UnacknowledgedMessageCount component. /// public const string UnacknowledgedMessageCount = "UnacknowledgedMessageCount"; /// /// The BrowseName for the UnauthorizedRequestCount component. /// public const string UnauthorizedRequestCount = "UnauthorizedRequestCount"; /// /// The BrowseName for the Unlock component. /// public const string Unlock = "Unlock"; /// /// The BrowseName for the UnregisterNodesCount component. /// public const string UnregisterNodesCount = "UnregisterNodesCount"; /// /// The BrowseName for the UnregisterNodesRequest component. /// public const string UnregisterNodesRequest = "UnregisterNodesRequest"; /// /// The BrowseName for the UnregisterNodesResponse component. /// public const string UnregisterNodesResponse = "UnregisterNodesResponse"; /// /// The BrowseName for the Unshelve component. /// public const string Unshelve = "Unshelve"; /// /// The BrowseName for the Unshelved component. /// public const string Unshelved = "Unshelved"; /// /// The BrowseName for the UnshelvedToOneShotShelved component. /// public const string UnshelvedToOneShotShelved = "UnshelvedToOneShotShelved"; /// /// The BrowseName for the UnshelvedToTimedShelved component. /// public const string UnshelvedToTimedShelved = "UnshelvedToTimedShelved"; /// /// The BrowseName for the UnshelveTime component. /// public const string UnshelveTime = "UnshelveTime"; /// /// The BrowseName for the UpdateDataCapability component. /// public const string UpdateDataCapability = "UpdateDataCapability"; /// /// The BrowseName for the UpdateDataDetails component. /// public const string UpdateDataDetails = "UpdateDataDetails"; /// /// The BrowseName for the UpdatedNode component. /// public const string UpdatedNode = "UpdatedNode"; /// /// The BrowseName for the UpdateEventCapability component. /// public const string UpdateEventCapability = "UpdateEventCapability"; /// /// The BrowseName for the UpdateEventDetails component. /// public const string UpdateEventDetails = "UpdateEventDetails"; /// /// The BrowseName for the UpdateStructureDataDetails component. /// public const string UpdateStructureDataDetails = "UpdateStructureDataDetails"; /// /// The BrowseName for the UserIdentityToken component. /// public const string UserIdentityToken = "UserIdentityToken"; /// /// The BrowseName for the UserNameIdentityToken component. /// public const string UserNameIdentityToken = "UserNameIdentityToken"; /// /// The BrowseName for the UserTokenPolicy component. /// public const string UserTokenPolicy = "UserTokenPolicy"; /// /// The BrowseName for the UserTokenType component. /// public const string UserTokenType = "UserTokenType"; /// /// The BrowseName for the UserWriteable component. /// public const string UserWriteable = "UserWriteable"; /// /// The BrowseName for the UseSlopedExtrapolation component. /// public const string UseSlopedExtrapolation = "UseSlopedExtrapolation"; /// /// The BrowseName for the UtcTime component. /// public const string UtcTime = "UtcTime"; /// /// The BrowseName for the ValueAsText component. /// public const string ValueAsText = "ValueAsText"; /// /// The BrowseName for the ValuePrecision component. /// public const string ValuePrecision = "ValuePrecision"; /// /// The BrowseName for the VariableAttributes component. /// public const string VariableAttributes = "VariableAttributes"; /// /// The BrowseName for the VariableNode component. /// public const string VariableNode = "VariableNode"; /// /// The BrowseName for the VariableTypeAttributes component. /// public const string VariableTypeAttributes = "VariableTypeAttributes"; /// /// The BrowseName for the VariableTypeNode component. /// public const string VariableTypeNode = "VariableTypeNode"; /// /// The BrowseName for the VariableTypesFolder component. /// public const string VariableTypesFolder = "VariableTypes"; /// /// The BrowseName for the VendorCapability component. /// public const string VendorCapability = ""; /// /// The BrowseName for the VendorServerInfo component. /// public const string VendorServerInfo = "VendorServerInfo"; /// /// The BrowseName for the VendorServerInfoType component. /// public const string VendorServerInfoType = "VendorServerInfoType"; /// /// The BrowseName for the ViewAttributes component. /// public const string ViewAttributes = "ViewAttributes"; /// /// The BrowseName for the ViewDescription component. /// public const string ViewDescription = "ViewDescription"; /// /// The BrowseName for the ViewNode component. /// public const string ViewNode = "ViewNode"; /// /// The BrowseName for the ViewsFolder component. /// public const string ViewsFolder = "Views"; /// /// The BrowseName for the ViewVersion component. /// public const string ViewVersion = "ViewVersion"; /// /// The BrowseName for the Write component. /// public const string Write = "Write"; /// /// The BrowseName for the Writeable component. /// public const string Writeable = "Writeable"; /// /// The BrowseName for the WriteCount component. /// public const string WriteCount = "WriteCount"; /// /// The BrowseName for the WriteMethodType component. /// public const string WriteMethodType = "WriteMethodType"; /// /// The BrowseName for the WriteRequest component. /// public const string WriteRequest = "WriteRequest"; /// /// The BrowseName for the WriteResponse component. /// public const string WriteResponse = "WriteResponse"; /// /// The BrowseName for the WriteValue component. /// public const string WriteValue = "WriteValue"; /// /// The BrowseName for the X509IdentityToken component. /// public const string X509IdentityToken = "X509IdentityToken"; /// /// The BrowseName for the XAxisDefinition component. /// public const string XAxisDefinition = "XAxisDefinition"; /// /// The BrowseName for the XmlElement component. /// public const string XmlElement = "XmlElement"; /// /// The BrowseName for the XmlSchema_TypeSystem component. /// public const string XmlSchema_TypeSystem = "XML Schema"; /// /// The BrowseName for the XVType component. /// public const string XVType = "XVType"; /// /// The BrowseName for the XYArrayItemType component. /// public const string XYArrayItemType = "XYArrayItemType"; /// /// The BrowseName for the YArrayItemType component. /// public const string YArrayItemType = "YArrayItemType"; /// /// The BrowseName for the YAxisDefinition component. /// public const string YAxisDefinition = "YAxisDefinition"; /// /// The BrowseName for the ZAxisDefinition component. /// public const string ZAxisDefinition = "ZAxisDefinition"; } #endregion #region Namespace Declarations /// /// Defines constants for all namespaces referenced by the model design. /// public static partial class Namespaces { /// /// The URI for the OpcUa namespace (.NET code namespace is 'Opc.Ua'). /// public const string OpcUa = "http://opcfoundation.org/UA/"; /// /// The URI for the OpcUaXsd namespace (.NET code namespace is 'Opc.Ua'). /// public const string OpcUaXsd = "http://opcfoundation.org/UA/2008/02/Types.xsd"; } #endregion } ================================================ FILE: SemanticData/UANodeSetValidation/UANodeContext.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2022, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Xml; using UAOOI.SemanticData.AddressSpace.Abstractions; using UAOOI.SemanticData.BuildingErrorsHandling; using UAOOI.SemanticData.InformationModelFactory; using UAOOI.SemanticData.UANodeSetValidation.DataSerialization; using UAOOI.SemanticData.UANodeSetValidation.UAInformationModel; namespace UAOOI.SemanticData.UANodeSetValidation { /// /// Class UANodeContext - it wraps the and provides functionality to analyze its semantic. /// internal class UANodeContext : IUANodeContext, IUANodeBase { #region constructor /// /// Initializes a new instance of the class. /// /// An object of that stores an identifier for a node in a server's address space. /// The address space context. /// The trace message callback. /// traceMessageCallback internal UANodeContext(NodeId nodeId, IAddressSpaceBuildContext addressSpaceContext, Action traceMessageCallback) { TraceEvent = traceMessageCallback ?? throw new ArgumentNullException(nameof(traceMessageCallback)); NodeIdContext = nodeId; this.m_AddressSpaceContext = addressSpaceContext; } #endregion constructor #region IUANodeContext /// /// Builds the symbolic identifier. /// /// The browse path. //NetworkIdentifier is missing in generated Model Design for DI model #629 public void BuildSymbolicId(List path) { if (this.UANode == null) { TraceEvent(TraceMessage.BuildErrorTraceMessage(BuildError.DanglingReferenceTarget, $"The target node NodeId={this.NodeIdContext}, current path {string.Join(", ", path)}")); return; } IEnumerable _parentConnector = m_AddressSpaceContext.GetReferences2Me(this).Where(x => x.ChildConnector); Debug.Assert(_parentConnector.Count() <= 1); UAReferenceContext _connector = _parentConnector.FirstOrDefault(); if (_connector != null) _connector.BuildSymbolicId(path); string _BranchName = string.IsNullOrEmpty(this.UANode.SymbolicName) ? this.UANode.BrowseName.Name : this.UANode.SymbolicName; path.Add(_BranchName); } /// /// Gets or sets a value indicating whether the node is in recursion chain - selected for analysis second time. /// /// true if the node is in recursion chain; otherwise, false. public bool InRecursionChain { get; set; } = false; /// /// Updates this instance in case the wrapped is recognized in the model. /// /// The node containing definition to be added to the model. /// Used to add new reference to the common collection of references. /// node - Argument must not be null public void Update(IUANode node, Action addReference) { if (node == null) throw new ArgumentException(nameof(node), $"Argument must not be null at {nameof(Update)} "); if (this.UANode != null) { TraceEvent(TraceMessage.BuildErrorTraceMessage(BuildError.NodeIdDuplicated, string.Format("The {0} is already defined and is removed from further processing.", node.NodeId.ToString()))); return; } UANode = node; if (node.References == null) return; foreach (IReference _reference in node.References) { UAReferenceContext _newReference = new UAReferenceContext(_reference, this.m_AddressSpaceContext, this); switch (_newReference.ReferenceKind) { case ReferenceKindEnum.Custom: case ReferenceKindEnum.HasComponent: case ReferenceKindEnum.HasProperty: break; case ReferenceKindEnum.HasModellingRule: ModelingRule = _newReference.GetModelingRule(); break; case ReferenceKindEnum.HasSubtype: //TODO Part 3 7.10 HasSubtype - add test cases #35 m_BaseTypeNode = _newReference.SourceNode; break; case ReferenceKindEnum.HasTypeDefinition: //Recognize problems with P3.7.13 HasTypeDefinition ReferenceType #39 m_BaseTypeNode = _newReference.TargetNode; break; } addReference(_newReference); } } public IUANodeContext CreateUANodeContext(NodeId id) { return new UANodeContext(id, m_AddressSpaceContext, TraceEvent); } #endregion IUANodeContext #region IUANodeBase /// /// Exports the browse name of the wrapped node by this instance. /// /// An instance of representing the BrowseName of the node. public XmlQualifiedName ExportNodeBrowseName() { return new XmlQualifiedName(UANode.BrowseName.Name, m_AddressSpaceContext.GetNamespace(UANode.BrowseName.NamespaceIndex)); } /// /// Calculates the node references. /// /// The node factory. /// list of selected members to export. /// The validator. /// It creates the node at the top level of the model. Called if the node has reference to another node that cannot be defined as a child. //TODO Import simple NodeSet2 file is incomplete #510 void IUANodeBase.CalculateNodeReferences(INodeFactory nodeFactory, List allNodesInConcern, IValidator validator, Action validateExportNode2Model) { if (nodeFactory == null) throw new ArgumentNullException(nameof(nodeFactory), $"{nodeFactory} must not be null in {nameof(IUANodeBase.CalculateNodeReferences)}"); if (validator is null) throw new ArgumentNullException(nameof(validator), $"{nameof(validator)} must not be null in {nameof(IUANodeBase.CalculateNodeReferences)}"); if (validateExportNode2Model == null) throw new ArgumentNullException(nameof(validateExportNode2Model), $"The parameter must not be null in {nameof(IUANodeBase.CalculateNodeReferences)}"); List _children = new List(); foreach (UAReferenceContext _rfx in m_AddressSpaceContext.GetMyReferences(this)) { if (_rfx.TargetNode.UANode == null) { TraceEvent(TraceMessage.BuildErrorTraceMessage(BuildError.DanglingReferenceTarget, $"The Node {_rfx.TargetNode} has not been defined and is excluded from further model processing.")); continue; } switch (_rfx.ReferenceKind) { case ReferenceKindEnum.Custom: XmlQualifiedName _ReferenceType = _rfx.GetReferenceTypeName(); if (_ReferenceType == XmlQualifiedName.Empty) { BuildError _err = BuildError.DanglingReferenceTarget; TraceEvent(TraceMessage.BuildErrorTraceMessage(_err, "Information")); } else if (_ReferenceType == new XmlQualifiedName(BrowseNames.HasEncoding, Namespaces.OpcUa)) { TraceEvent(TraceMessage.DiagnosticTraceMessage($"Removed the graph of nodes at {_ReferenceType.ToString()} from the model")); return; } IReferenceFactory _or = nodeFactory.NewReference(); _or.IsInverse = !_rfx.IsForward; _or.ReferenceType = _ReferenceType; //TODO The exported model doesn't contain all nodes #653 //TODO NetworkIdentifier is missing in generated Model Design for DI model #629 _or.TargetId = _rfx.BrowsePath(); switch (_rfx.TargetNode.UANode.NodeClass) { case NodeClassEnum.UADataType: case NodeClassEnum.UAObjectType: case NodeClassEnum.UAReferenceType: case NodeClassEnum.UAVariableType: break; //TODO NetworkIdentifier is missing in generated Model Design for DI model #629 //TODO The exported model doesn't contain all nodes #653 case NodeClassEnum.UAObject: case NodeClassEnum.UAVariable: case NodeClassEnum.UAMethod: //validator.ValidateExportNode(_rfx.TargetNode, allNodesInConcern, nodeFactory, validateExportNode2Model, _rfx); validateExportNode2Model(_rfx.TargetNode); break; case NodeClassEnum.UAView: TraceEvent(TraceMessage.DiagnosticTraceMessage($"Removed the graph of nodes at {_rfx.TargetNode} from the model")); break; case NodeClassEnum.Unknown: TraceEvent(TraceMessage.DiagnosticTraceMessage($"Removed the graph of nodes at {_rfx.TargetNode} from the model")); break; default: throw new ArgumentOutOfRangeException(nameof(_rfx.TargetNode.UANode.NodeClass)); } break; case ReferenceKindEnum.HasComponent: _children.Add(_rfx); break; case ReferenceKindEnum.HasProperty: _children.Add(_rfx); break; case ReferenceKindEnum.HasModellingRule: break; case ReferenceKindEnum.HasSubtype: break; case ReferenceKindEnum.HasTypeDefinition: //TODO Recognize problems with P3.7.13 HasTypeDefinition ReferenceType #39 IsProperty = _rfx.TargetNode.IsPropertyVariableType; break; } } //TODO The exported model doesn't contain all nodes #653 RemoveDerivedChildren(nodeFactory, allNodesInConcern, validator, validateExportNode2Model, _children); } private void RemoveDerivedChildren(INodeFactory nodeFactory, List allNodesInConcern, IValidator validator, Action validateExportNode2Model, List children) { Dictionary referencedChildren = children.ToDictionary(x => x.TargetNode); NodesCollection derivedChildren = m_BaseTypeNode == null ? new NodesCollection() : m_BaseTypeNode.GetDerivedInstances(); foreach (var _rc in referencedChildren) { IUANodeBase _instanceDeclaration = null; string name = _rc.Key.UANode.BrowseName.Name; if (!string.IsNullOrEmpty(name)) _instanceDeclaration = derivedChildren.ContainsKey(name) ? derivedChildren[name] : null; if (_rc.Key.Equals(_instanceDeclaration)) { TraceEvent(TraceMessage.DiagnosticTraceMessage($"{2054200566} - Removing instance declaration {_rc.Key}")); if (!allNodesInConcern.Remove(_rc.Key)) TraceEvent(TraceMessage.DiagnosticTraceMessage($"{2064801864} - Derived node {_rc.Key} doesn't exist in all nodes")); continue; } _rc.Key.RemoveInheritedValues(_instanceDeclaration); validator.ValidateExportNode(_rc.Key, allNodesInConcern, nodeFactory, validateExportNode2Model, _rc.Value); } } /// /// Gets the instance of of this context source /// /// The source UA node from the model. public IUANode UANode { get; private set; } = null; /// /// Gets the node identifier. /// /// The imported node identifier. public NodeId NodeIdContext { get; private set; } /// /// Gets a value indicating whether this instance is a property. /// /// true if this instance is property; otherwise, false. public bool IsProperty { get; private set; } = false; /// /// Exports the browse name of a node recognized as or target. /// /// An instance of encapsulating the base type name. public XmlQualifiedName ExportBaseTypeBrowseName() { bool type = UANode is IUAType; return m_BaseTypeNode == null ? null : m_BaseTypeNode.ExportBrowseNameBaseType(x => TraceErrorUndefinedBaseType(x, type)); } /// /// Gets the modeling rule associated with this node. /// /// The modeling rule. Null if valid modeling rule cannot be recognized. public ModelingRules? ModelingRule { get; private set; } = new Nullable(); /// /// Exports the browse name of this node recognized as or target. /// /// The trace event. /// An instance of representing subtype or type of an instance. public XmlQualifiedName ExportBrowseNameBaseType(Action traceEvent) { //TODO It cannot be the reference type if (this.NodeIdContext == ObjectTypeIds.BaseObjectType) return null; if (this.NodeIdContext == VariableTypeIds.BaseDataVariableType) return null; if (this.NodeIdContext == VariableTypeIds.PropertyType) return null; if (Object.ReferenceEquals(UANode, null)) { traceEvent(this.NodeIdContext); return XmlQualifiedName.Empty; } return ExportNodeBrowseName(); } /// /// Gets the derived instances. /// /// An instance of or null if there is nothing to return //TODO NetworkIdentifier is missing in generated Model Design for DI model #629 //TODO The exported model doesn't contain all nodes #653 public NodesCollection GetDerivedInstances() { if (m_InGetDerivedInstances) { TraceMessage errorToLog = TraceMessage.BuildErrorTraceMessage(BuildError.NotValidLoopingHierarchy, $"Circular loop in {nameof(GetDerivedInstances)}"); TraceEvent(errorToLog); return null; } try { m_InGetDerivedInstances = true; IEnumerable _myChildren = m_AddressSpaceContext.GetChildren(this); NodesCollection _instanceDeclarations = m_BaseTypeNode == null ? new NodesCollection() : m_BaseTypeNode.GetDerivedInstances(); foreach (IUANodeBase item in _myChildren) _instanceDeclarations.AddOrReplace(item, true); return _instanceDeclarations; } finally { m_InGetDerivedInstances = false; } } /// /// Gets a value indicating whether this instance is property variable type. /// /// true if this instance is property variable type; otherwise, false. bool IUANodeBase.IsPropertyVariableType => this.NodeIdContext == VariableTypeIds.PropertyType; /// /// Removes the inherited values. /// /// The instance declaration. /// If a member is overridden all inherited values of the node attributes must be removed. void IUANodeBase.RemoveInheritedValues(IUANodeBase instanceDeclaration) { if (instanceDeclaration is null) return; this.UANode.RemoveInheritedValues(instanceDeclaration.UANode); if (this.ModelingRule == instanceDeclaration.ModelingRule) this.ModelingRule = null; } #endregion IUANodeBase #region IEquatable /// /// Indicates whether the current object is equal to another object of the same type. /// /// An object to compare with this object. /// true if the current object is equal to the other parameter; otherwise, false. public bool Equals(IUANodeBase other) { if (Object.ReferenceEquals(other, null)) return false; return this.UANode.Equals(other.UANode); } #endregion IEquatable #region object public override string ToString() { string browseName = this.UANode == null ? " ???? " : $"{this.UANode.BrowseName}"; return $"NodeId=\"{this.NodeIdContext}\", BrowseName=\"{browseName}\", ModellingRule=\"{ModelingRule}\""; } #endregion object #region private private IUANodeBase m_BaseTypeNode; private readonly IAddressSpaceBuildContext m_AddressSpaceContext = null; private bool m_InGetDerivedInstances = false; private readonly Action TraceEvent = null; //methods private void TraceErrorUndefinedBaseType(NodeId target, bool type) { if (type) { string _msg = string.Format("BaseType of Id={0} for node {1}", target, this.UANode.BrowseName); TraceEvent(TraceMessage.BuildErrorTraceMessage(BuildError.UndefinedHasSubtypeTarget, _msg)); } else { string _msg = string.Format("TypeDefinition of Id={0} for node {1}", target, this.UANode.BrowseName); TraceEvent(TraceMessage.BuildErrorTraceMessage(BuildError.UndefinedHasTypeDefinition, _msg)); } } #endregion private } } ================================================ FILE: SemanticData/UANodeSetValidation/UAReferenceContext.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2022, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Xml; using UAOOI.SemanticData.AddressSpace.Abstractions; using UAOOI.SemanticData.InformationModelFactory; using UAOOI.SemanticData.UANodeSetValidation.DataSerialization; using UAOOI.SemanticData.UANodeSetValidation.UAInformationModel; namespace UAOOI.SemanticData.UANodeSetValidation { /// /// Class UAReferenceContext - encapsulates information about a reference /// internal class UAReferenceContext { #region constructor internal UAReferenceContext(IReference reference, IAddressSpaceBuildContext addressSpaceContext, IUANodeContext parentNode) { if (reference == null) throw new ArgumentNullException(nameof(reference)); this._AddressSpace = addressSpaceContext ?? throw new ArgumentNullException(nameof(addressSpaceContext)); if (parentNode == null) throw new ArgumentNullException(nameof(parentNode)); IUANodeContext targetNode = _AddressSpace.GetOrCreateNodeContext(reference.ValueNodeId, parentNode.CreateUANodeContext); this.IsForward = reference.IsForward; this.SourceNode = reference.IsForward ? parentNode : targetNode; this.TargetNode = reference.IsForward ? targetNode : parentNode; this.TypeNode = addressSpaceContext.GetOrCreateNodeContext(reference.ReferenceTypeNodeid, parentNode.CreateUANodeContext); } #endregion constructor #region API #region semantics /// /// Gets the kind of the reference. /// /// The kind of the reference. internal ReferenceKindEnum ReferenceKind { get { if (_ReferenceKindEnum == null) _ReferenceKindEnum = CalculateReferenceKind(); return _ReferenceKindEnum.Value; } } /// /// Gets the modeling rule. /// /// System.Nullable{ModelingRules}. internal ModelingRules? GetModelingRule() { Debug.Assert(TargetNode.NodeIdContext.IdType == IdType.Numeric_0); //Debug.Assert(ReferenceKind == ReferenceKindEnum.HasModellingRule); int _targetId = TargetNode.NodeIdContext.NamespaceIndex != 0 ? -1 : Convert.ToInt32(TargetNode.NodeIdContext.IdentifierPart); ModelingRules? _ret = new Nullable(); if (_targetId == Objects.ModellingRule_Mandatory) _ret = ModelingRules.Mandatory; else if (_targetId == Objects.ModellingRule_Optional) _ret = ModelingRules.Optional; else if (_targetId == Objects.ModellingRule_MandatoryPlaceholder) _ret = ModelingRules.MandatoryPlaceholder; else if (_targetId == Objects.ModellingRule_OptionalPlaceholder) _ret = ModelingRules.OptionalPlaceholder; else if (_targetId == Objects.ModellingRule_ExposesItsArray) _ret = ModelingRules.OptionalPlaceholder; return _ret; } /// /// Gets a value indicating whether the reference has been derived form or . /// /// true if it is child reference; otherwise, false. //TODO NetworkIdentifier is missing in generated Model Design for DI model #629 //TODO The exported model doesn't contain all nodes #653 internal bool ChildConnector => (ReferenceKind == ReferenceKindEnum.HasProperty) || (ReferenceKind == ReferenceKindEnum.HasComponent); #endregion semantics #region naming /// /// Gets the name of the reference type. /// /// An instance of capturing name of the reference type. internal XmlQualifiedName GetReferenceTypeName() { return _AddressSpace.ExportBrowseName(this.TypeNode.NodeIdContext, GetDefault()); } /// /// Calculates the browse path starting from the node pointed out by this reference. If the is use, otherwise. /// /// An instance of representing the browse path. internal XmlQualifiedName BrowsePath() { List _path = new List(); IUANodeContext _startingNode = this.IsForward ? TargetNode : SourceNode; _startingNode.BuildSymbolicId(_path); string _symbolicId = _path.SymbolicName(); return new XmlQualifiedName(_symbolicId, _AddressSpace.GetNamespace(_startingNode.NodeIdContext.NamespaceIndex)); } /// /// It recursively builds the symbolic identifier. /// /// The browse path. internal void BuildSymbolicId(List path) { this.SourceNode.BuildSymbolicId(path); } #endregion naming #region navigation /// /// Gets the parent node that the reference is attached to. /// /// An instance of the of the parent node. internal IUANodeContext ParentNode => IsForward ? SourceNode : TargetNode; /// /// Gets the type node. /// /// An instance of that captures information about a node representing type of the reference. internal IUANodeContext TypeNode { get; private set; } /// /// Gets the target node. /// /// An instance of that captures information about a target node. internal IUANodeContext TargetNode { get; private set; } /// /// Gets the source node context. /// /// An instance of that captures information about a source node. internal IUANodeContext SourceNode { get; private set; } /// /// Gets the key. /// /// The key. internal string Key => string.Format("{0}:{1}:{2}", SourceNode.NodeIdContext.Format(), TypeNode.NodeIdContext.Format(), TargetNode.NodeIdContext.Format()); /// /// Gets a value indicating whether this instance is forward. /// /// true if this instance is forward; otherwise, false. internal bool IsForward { get; private set; } #endregion navigation #endregion API #region private //fields private IAddressSpaceBuildContext _AddressSpace; private ReferenceKindEnum? _ReferenceKindEnum = new Nullable(); //methods private ReferenceKindEnum CalculateReferenceKind() { if ((TypeNode == null) || TypeNode.NodeIdContext.NamespaceIndex != 0) return ReferenceKindEnum.Custom; ReferenceKindEnum _ret = default(ReferenceKindEnum); List inheritanceChain = new List(); _AddressSpace.GetBaseTypes(TypeNode, inheritanceChain); if (inheritanceChain.Where(x => x.NodeIdContext == ReferenceTypeIds.HasProperty).Any()) _ret = ReferenceKindEnum.HasProperty; else if (inheritanceChain.Where(x => x.NodeIdContext == ReferenceTypeIds.HasComponent).Any()) _ret = ReferenceKindEnum.HasComponent; else if (inheritanceChain.Where(x => x.NodeIdContext == ReferenceTypeIds.HasSubtype).Any()) _ret = ReferenceKindEnum.HasSubtype; else if (inheritanceChain.Where(x => x.NodeIdContext == ReferenceTypeIds.HasTypeDefinition).Any()) _ret = ReferenceKindEnum.HasTypeDefinition; else if (inheritanceChain.Where(x => x.NodeIdContext == ReferenceTypeIds.HasModellingRule).Any()) _ret = ReferenceKindEnum.HasModellingRule; else _ret = ReferenceKindEnum.Custom; return _ret; } private NodeId GetDefault() { NodeId _default = NodeId.Null; switch (ReferenceKind) { case ReferenceKindEnum.HasComponent: _default = ReferenceTypeIds.HasComponent; break; case ReferenceKindEnum.HasTypeDefinition: _default = ReferenceTypeIds.HasTypeDefinition; break; case ReferenceKindEnum.HasSubtype: _default = ReferenceTypeIds.HasSubtype; break; case ReferenceKindEnum.HasProperty: _default = ReferenceTypeIds.HasProperty; break; default: break; } return _default; } #endregion private }; } ================================================ FILE: SemanticData/UANodeSetValidation/Validator.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2022, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Xml; using UAOOI.SemanticData.AddressSpace.Abstractions; using UAOOI.SemanticData.BuildingErrorsHandling; using UAOOI.SemanticData.InformationModelFactory; using UAOOI.SemanticData.UANodeSetValidation.DataSerialization; using UAOOI.SemanticData.UANodeSetValidation.Diagnostic; using UAOOI.SemanticData.UANodeSetValidation.UAInformationModel; namespace UAOOI.SemanticData.UANodeSetValidation { /// /// Class Validator - contains static methods used to validate and export a collection of nodes - part of the Address Space. /// internal class Validator : IValidator { internal Validator(IAddressSpaceBuildContext addressSpace, IBuildErrorsHandling traceBuildErrorsHandling) { m_AddressSpace = addressSpace; m_buildErrorsHandling = traceBuildErrorsHandling; } #region IValidator /// /// Validates and exports it using an object of type. /// /// The node context to be validated and exported. /// list of selected members to export. /// A model export factory. /// It creates the node at the top level of the model. Called if the node has reference to another node that cannot be defined as a child. public void ValidateExportNode(IUANodeBase nodeContext, List allNodesInConcern, INodeContainer exportFactory, Action validateExportNode2Model) { ValidateExportNode(nodeContext, allNodesInConcern, exportFactory, validateExportNode2Model, null); } /// /// Validates and exports it using an object of type. /// /// The node context to be validated and exported. /// list of selected members to export. /// A model export factory. /// The reference to parent node. /// It creates the node at the top level of the model. Called if the node has reference to another node that cannot be defined as a child. public void ValidateExportNode(IUANodeBase nodeContext, List allNodesInConcern, INodeContainer exportFactory, Action validateExportNode2Model, UAReferenceContext parentReference) { Debug.Assert(nodeContext != null, "Validator.ValidateExportNode the argument nodeContext is null."); //TODO Handle HasComponent ReferenceType errors. #42 if (Object.ReferenceEquals(nodeContext.UANode, null)) { string _msg = string.Format("The node {0} is undefined", nodeContext.NodeIdContext); BuildError _be = null; if (parentReference == null || parentReference.ReferenceKind == ReferenceKindEnum.HasProperty) _be = BuildError.UndefinedHasPropertyTarget; else _be = BuildError.UndefinedHasComponentTarget; TraceMessage _traceMessage = TraceMessage.BuildErrorTraceMessage(_be, _msg); m_buildErrorsHandling.WriteTraceMessage(_traceMessage); CreateModelDesignStub(exportFactory); } else { switch (nodeContext.UANode.NodeClass) { case NodeClassEnum.UADataType: CreateNode(exportFactory.AddNodeFactory, nodeContext, (x, y) => Update(x, y), UpdateType, validateExportNode2Model, allNodesInConcern); break; case NodeClassEnum.UAMethod: CreateNode(exportFactory.AddNodeFactory, nodeContext, (x, y) => Update(x, y, parentReference), UpdateInstance, validateExportNode2Model, allNodesInConcern); break; case NodeClassEnum.UAObject: CreateNode(exportFactory.AddNodeFactory, nodeContext, (x, y) => Update(x, y), UpdateInstance, validateExportNode2Model, allNodesInConcern); break; case NodeClassEnum.UAObjectType: CreateNode(exportFactory.AddNodeFactory, nodeContext, Update, UpdateType, validateExportNode2Model, allNodesInConcern); break; case NodeClassEnum.UAReferenceType: CreateNode(exportFactory.AddNodeFactory, nodeContext, (x, y) => Update(x, y), UpdateType, validateExportNode2Model, allNodesInConcern); break; case NodeClassEnum.UAVariable: if ((parentReference != null) && (parentReference.ReferenceKind == ReferenceKindEnum.HasProperty)) CreateNode(exportFactory.AddNodeFactory, nodeContext, (x, y) => Update(x, y, nodeContext, parentReference), UpdateInstance, validateExportNode2Model, allNodesInConcern); else CreateNode(exportFactory.AddNodeFactory, nodeContext, (x, y) => Update(x, y, nodeContext, parentReference), UpdateInstance, validateExportNode2Model, allNodesInConcern); break; case NodeClassEnum.UAVariableType: CreateNode(exportFactory.AddNodeFactory, nodeContext, (x, y) => Update(x, y), UpdateType, validateExportNode2Model, allNodesInConcern); break; case NodeClassEnum.UAView: CreateNode(exportFactory.AddNodeFactory, nodeContext, (x, y) => Update(x, y), UpdateInstance, validateExportNode2Model, allNodesInConcern); break; case NodeClassEnum.Unknown: throw new ApplicationException($"In {nameof(ValidateExportNode)} unexpected NodeClass value"); } } } #endregion IValidator #region private // vars private readonly IAddressSpaceBuildContext m_AddressSpace; private readonly IBuildErrorsHandling m_buildErrorsHandling; private static ApplicationException InstanceDeclarationNotSupported(NodeClassEnum nodeClass) { return new ApplicationException($"{nodeClass} doesn't support instance declarations"); } private void Update(IObjectInstanceFactory nodeDesign, IUAObject nodeSet) { nodeDesign.SupportsEvents = nodeSet.EventNotifier.ParseSupportsEvents(m_buildErrorsHandling.WriteTraceMessage); } private void Update(IPropertyInstanceFactory nodeDesign, IUAVariable nodeSet, IUANodeBase nodeContext, UAReferenceContext parentReference) { try { Update(nodeDesign, nodeSet, parentReference); if (!nodeContext.IsProperty && !Object.ReferenceEquals(parentReference, null)) { XmlQualifiedName baseType = nodeContext.ExportBaseTypeBrowseName(); string baseTypeName = baseType == null ? "a base type" : $"the {baseType.ToString()} type."; m_buildErrorsHandling.WriteTraceMessage ( TraceMessage.BuildErrorTraceMessage(BuildError.WrongReference2Property, $"Target node of the {parentReference.ReferenceKind} reference cannot be {nodeContext.UANode.BrowseName} of {baseTypeName}.") ); } } catch (Exception _ex) { m_buildErrorsHandling.WriteTraceMessage( TraceMessage.BuildErrorTraceMessage(BuildError.WrongReference2Property, string.Format("Cannot resolve the reference for Property because of error {0} at: {1}.", _ex, _ex.StackTrace))); } } private void Update(IVariableInstanceFactory nodeDesign, IUAVariable nodeSet, IUANodeBase nodeContext, UAReferenceContext parentReference) { try { Update(nodeDesign, nodeSet, parentReference); //TODO NetworkIdentifier is missing in generated Model Design for DI model #629 parentReference System.NullReferenceException //TODO The exported model doesn't contain all nodes #653 review WrongReference2PropertyTestMethod //if (nodeContext.IsProperty) // m_buildErrorsHandling.WriteTraceMessage(TraceMessage.BuildErrorTraceMessage(BuildError.WrongReference2Variable, string.Format("Creating Variable - wrong reference type {0}", parentReference.ReferenceKind.ToString()))); } catch (Exception _ex) { m_buildErrorsHandling.WriteTraceMessage( TraceMessage.BuildErrorTraceMessage(BuildError.WrongReference2Property, string.Format("Cannot resolve the reference for Variable because of error {0} at: {1}.", _ex, _ex.StackTrace))); } } private void Update(IVariableInstanceFactory nodeDesign, IUAVariable nodeSet, UAReferenceContext parentReference) { nodeDesign.ReferenceType = parentReference == null ? null : parentReference.GetReferenceTypeName(); nodeDesign.AccessLevel = nodeSet.AccessLevel; //.GetAccessLevel(m_buildErrorsHandling.WriteTraceMessage); nodeDesign.ArrayDimensions = nodeSet.ArrayDimensions.ExportString(string.Empty); nodeDesign.DataType = m_AddressSpace.ExportBrowseName(nodeSet.DataType, DataTypes.Number);//TODO add test case must be DataType, must not be abstract nodeDesign.DefaultValue = nodeSet.Value; //TODO add test case must be of type defined by DataType nodeDesign.Historizing = nodeSet.Historizing.Export(false); nodeDesign.MinimumSamplingInterval = nodeSet.MinimumSamplingInterval.Export(0D); nodeDesign.ValueRank = nodeSet.ValueRank.ParseValueRank(m_buildErrorsHandling.WriteTraceMessage); if (nodeSet.Translation) m_buildErrorsHandling.WriteTraceMessage(TraceMessage.BuildErrorTraceMessage(BuildError.NotSupportedFeature, "- the Translation element for the UAVariable")); } private void Update(IVariableTypeFactory nodeDesign, IUAVariableType nodeSet) { nodeDesign.ArrayDimensions = nodeSet.ArrayDimensions.ExportString(string.Empty); nodeDesign.DataType = m_AddressSpace.ExportBrowseName(nodeSet.DataType, DataTypes.Number); nodeDesign.DefaultValue = nodeSet.Value; nodeDesign.ValueRank = nodeSet.ValueRank.ParseValueRank(m_buildErrorsHandling.WriteTraceMessage); } private void Update(IMethodInstanceFactory nodeDesign, IUAMethod nodeSet, UAReferenceContext parentReference) { if (nodeSet.ArgumentDescription != null) foreach (UAMethodArgument _argument in nodeSet.ArgumentDescription) { if (_argument.Description == null) continue; foreach (LocalizedText _description in _argument.Description) nodeDesign.AddArgumentDescription(_argument.Name, _description.Locale, _description.Text); } nodeDesign.Executable = !nodeSet.Executable ? nodeSet.Executable : new Nullable(); nodeDesign.UserExecutable = !nodeSet.UserExecutable ? nodeSet.UserExecutable : new Nullable(); nodeDesign.MethodDeclarationId = nodeSet.MethodDeclarationId; nodeDesign.ReleaseStatus = nodeSet.ReleaseStatus; //TODO UANodeSetValidation.Extensions.GetObject - object reference not set #624 //nodeDesign.AddInputArguments(x => GetParameters(x)); //nodeDesign.AddOutputArguments(x => GetParameters(x)); } private void Update(IViewInstanceFactory nodeDesign, IUAView nodeSet) { nodeDesign.ContainsNoLoops = nodeSet.ContainsNoLoops;//TODO add test case against the loops in the model. nodeDesign.SupportsEvents = nodeSet.EventNotifier.ParseSupportsEvents(m_buildErrorsHandling.WriteTraceMessage); } private void Update(IDataTypeFactory nodeDesign, IUADataType nodeSet) { nodeSet.Definition.GetParameters(nodeDesign.NewDefinition(), m_AddressSpace, m_buildErrorsHandling.WriteTraceMessage); nodeDesign.DataTypePurpose = nodeSet.Purpose; if (nodeSet.Purpose != DataTypePurpose.Normal) m_buildErrorsHandling.WriteTraceMessage(TraceMessage.DiagnosticTraceMessage($"DataTypePurpose value {nodeSet.Purpose} is not supported by the tool")); } private void Update(IReferenceTypeFactory nodeDesign, IUAReferenceType nodeSet) { nodeSet.InverseName.ExportLocalizedTextArray(nodeDesign.AddInverseName); nodeDesign.Symmetric = nodeSet.Symmetric; if (nodeSet.Symmetric && (nodeSet.InverseName != null && nodeSet.InverseName.Where(x => !string.IsNullOrEmpty(x.Text)).Any())) { LocalizedText _notEmpty = nodeSet.InverseName.Where(x => !string.IsNullOrEmpty(x.Text)).First(); m_buildErrorsHandling.WriteTraceMessage(TraceMessage.BuildErrorTraceMessage( BuildError.WrongInverseName, string.Format("If ReferenceType {0} is symmetric the InverseName {1}:{2} shall be omitted.", nodeSet.NodeIdentifier(), _notEmpty.Locale, _notEmpty.Text))); } else if (!nodeSet.Symmetric && !nodeSet.IsAbstract && (nodeSet.InverseName == null || !nodeSet.InverseName.Where(x => !string.IsNullOrEmpty(x.Text)).Any())) m_buildErrorsHandling.WriteTraceMessage(TraceMessage.BuildErrorTraceMessage( BuildError.WrongInverseName, string.Format("If ReferenceType {0} is not symmetric and not abstract the InverseName shall be specified.", nodeSet.NodeIdentifier()))); } private void Update(IObjectTypeFactory nodeDesign, IUAObjectType nodeSet) { } private void CreateNode ( Func createNode, IUANodeBase nodeContext, Action updateNode, Action updateBase, Action validateExportNode2Model, List allNodesInConcern ) where FactoryType : INodeFactory where NodeSetType : IUANode { if (!allNodesInConcern.Remove(nodeContext)) return; FactoryType _nodeFactory = createNode(); nodeContext.CalculateNodeReferences(_nodeFactory, allNodesInConcern, this, validateExportNode2Model); NodeSetType _nodeSet = (NodeSetType)nodeContext.UANode; XmlQualifiedName _browseName = nodeContext.ExportNodeBrowseName(); string _symbolicName; if (string.IsNullOrEmpty(_nodeSet.SymbolicName)) _symbolicName = _browseName.Name.ValidateIdentifier(m_buildErrorsHandling.WriteTraceMessage); //TODO IsValidLanguageIndependentIdentifier is not supported by the .NET standard #340 else _symbolicName = _nodeSet.SymbolicName.ValidateIdentifier(m_buildErrorsHandling.WriteTraceMessage); //TODO IsValidLanguageIndependentIdentifier is not supported by the .NET standard #340 _nodeFactory.BrowseName = _browseName.Name.ExportString(_symbolicName); _nodeSet.Description.ExportLocalizedTextArray(_nodeFactory.AddDescription); _nodeSet.DisplayName.Truncate(512, m_buildErrorsHandling.WriteTraceMessage).ExportLocalizedTextArray(_nodeFactory.AddDisplayName); _nodeFactory.SymbolicName = new XmlQualifiedName(_symbolicName, _browseName.Namespace); Action _doReport = (AttributeWriteMask x, NodeClassEnum y) => { m_buildErrorsHandling.WriteTraceMessage(TraceMessage.BuildErrorTraceMessage(BuildError.WrongWriteMaskValue, string.Format("The current value is {0:x} of the node type {1}.", x, y))); }; _nodeFactory.WriteAccess = _nodeSet.NodeClass == NodeClassEnum.UAVariable ? (UInt32)_nodeSet.WriteMask.Validate( AttributeWriteMask.ValueForVariableType, x => _doReport(x, _nodeSet.NodeClass)) : (UInt32)_nodeSet.WriteMask.Validate(AttributeWriteMask.AccessLevelEx, x => _doReport(x, _nodeSet.NodeClass)); _nodeFactory.AccessRestrictions = _nodeSet.AccessRestrictions; _nodeFactory.Category = _nodeSet.Category; if (_nodeSet.RolePermissions != null) m_buildErrorsHandling.WriteTraceMessage(TraceMessage.DiagnosticTraceMessage("RolePermissions is not supported. You must fix it manually.")); if (!string.IsNullOrEmpty(_nodeSet.Documentation)) m_buildErrorsHandling.WriteTraceMessage(TraceMessage.DiagnosticTraceMessage("Documentation is not supported. You must fix it manually.")); updateBase(_nodeFactory, _nodeSet, nodeContext); updateNode(_nodeFactory, _nodeSet); } private void UpdateType(ITypeFactory nodeDesign, IUAType nodeSet, IUANodeBase nodeContext) { nodeDesign.BaseType = nodeContext.ExportBaseTypeBrowseName(); nodeDesign.IsAbstract = nodeSet.IsAbstract; } private static void UpdateInstance(IInstanceFactory nodeDesign, IUANode nodeSet, IUANodeBase nodeContext) { if (nodeContext.ModelingRule.HasValue) nodeDesign.ModelingRule = nodeContext.ModelingRule.Value; nodeDesign.TypeDefinition = nodeContext.ExportBaseTypeBrowseName(); //nodeSet.ParentNodeId - The NodeId of the Node that is the parent of the Node within the information model. This field is used to indicate //that a tight coupling exists between the Node and its parent (e.g. when the parent is deleted the child is deleted //as well). This information does not appear in the AddressSpace and is intended for use by design tools. } private static void CreateModelDesignStub(INodeContainer factory) { BuildError _err = BuildError.DanglingReferenceTarget; IPropertyInstanceFactory _pr = factory.AddNodeFactory(); _pr.SymbolicName = new XmlQualifiedName(string.Format("{0}{1}", _err.Focus.ToString(), m_ErrorNumber++), "http://commsvr.com/OOIUA/SemanticData/UANodeSetValidation"); _pr.AddDescription("en-en", _err.Descriptor); _pr.AddDisplayName("en-en", string.Format("ERROR{0}", m_ErrorNumber)); } /// /// Gets the parameters. /// /// The encapsulates the arguments. /// Parameter[]. private Parameter[] GetParameters(XmlElement arguments) { List _parameters = new List(); //TODO UANodeSetValidation.Extensions.GetObject - object reference not set #624 foreach (DataSerialization.Argument _item in arguments.GetParameters()) _parameters.Add(m_AddressSpace.ExportArgument(_item)); return _parameters.ToArray(); } private static int m_ErrorNumber = 0; #endregion private } } ================================================ FILE: SemanticData/UANodeSetValidation/XML/ClassDiagram.cd ================================================  AEADECiCAACkACgAwJNQIAEIBCBUEIAAEBiAAgAECjA= XML\UANode.cs AAAAAAAAABCAAAAAACAAAAAAAAAAAAAAAAAAAAAEAAA= XML\UANodeSet.cs AAAAAAAAAACAAAAAAABAAAAAAAAAAAQAAAIAAAAEAAA= XML\UAInstance.cs AAAAAAAAAAAAAAAAIAAAAAAAAAAAAACAgBAAAAAAEAA= XML\UANodeSet.cs AAAAAAAAAAAACAAAAAAAAQAABAAAAAAAIBAAAAAEAAA= XML\UADataType.cs AAAEAAAAAAIAAIAAAAAAAAAAAAQCAAAAABAgIAAECAA= XML\UANodeSet.cs AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAA= XML\UANodeSet.cs AQAAAAAAAACAAAAAAACAIAAAAAAAAAAAABABAAAAAAA= XML\UANodeSet.cs AAAAAAAAQCCAAAAAAAAAAgAABACAAAAADBAAAAAGAAA= XML\UAMethod.cs ABgEAAAQAAKAgIACQAAAAAAAAGQiAAAQABAgIAAECAQ= XML\UANodeSet.cs AQAAAAAAAACAAAAAAACAAAAAAAAAAAAAABAAAAAAAAA= XML\UANodeSet.cs ABABQgCIAAAICAACAAECAAACAEBAAAAAAAkAAAAEAAI= XML\UANodeSet.cs AAAAAAAAAAIAAAAAAAAAAAAAAAAKAAAAAAAgAAAEAAA= XML\NodeIdAlias.cs AAAAAAAAAAAAAAEEgAACAABAAAACAAAAAAAgAAAMAAA= XML\Reference.cs ================================================ FILE: SemanticData/UANodeSetValidation/XML/Conversions.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2022, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ using System; using System.Collections.Generic; using UAOOI.SemanticData.AddressSpace.Abstractions; using UAOOI.SemanticData.BuildingErrorsHandling; using UAOOI.SemanticData.InformationModelFactory.UAConstants; using OOIReleaseStatus = UAOOI.SemanticData.InformationModelFactory.ReleaseStatus; namespace UAOOI.SemanticData.UANodeSetValidation.XML { internal static class Conversions { internal static DataSerialization.LocalizedText[] GetLocalizedTextArray(this LocalizedText[] value) { if (value == null || value.Length == 0) return null; List ret = new List(); foreach (LocalizedText item in value) ret.Add(new DataSerialization.LocalizedText() { Locale = item.Locale, Text = item.Value }); return ret.ToArray(); } internal static AccessRestrictions GetAccessRestrictions(this byte accessRestrictions, NodeClassEnum typeName, Action buildErrorsHandling) { if (accessRestrictions > 7) { buildErrorsHandling(TraceMessage.BuildErrorTraceMessage(BuildError.WrongAccessLevel, $"The current value is {accessRestrictions} of the node type {typeName}. Assigned max value")); return AccessRestrictions.EncryptionRequired & AccessRestrictions.SessionRequired & AccessRestrictions.SigningRequired; } return (AccessRestrictions)accessRestrictions; } internal static AttributeWriteMask GetAttributeWriteMask(this UInt32 value) { return (AttributeWriteMask)value; } internal static OOIReleaseStatus GetReleaseStatus(this ReleaseStatus value) { OOIReleaseStatus retValue = default(OOIReleaseStatus); switch (value) { case ReleaseStatus.Released: retValue = OOIReleaseStatus.Released; break; case ReleaseStatus.Draft: retValue = OOIReleaseStatus.Draft; break; case ReleaseStatus.Deprecated: retValue = OOIReleaseStatus.Deprecated; break; default: break; } return retValue; } } } ================================================ FILE: SemanticData/UANodeSetValidation/XML/DataTypeDefinition.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2022, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ using System; using UAOOI.SemanticData.AddressSpace.Abstractions; using UAOOI.SemanticData.UANodeSetValidation.DataSerialization; namespace UAOOI.SemanticData.UANodeSetValidation.XML { public partial class DataTypeDefinition : IDataTypeDefinition { IDataTypeField[] IDataTypeDefinition.Field { get => this.Field; } internal void RecalculateNodeIds(Func importNodeId) { //BaseType - is obsolete and no longer used. Left in for backwards compatibility. // this.Name - name should be QualifiedName but it is not. if (Field is null) return; foreach (DataTypeField _field in Field) _field.RecalculateNodeIds(importNodeId); } } } ================================================ FILE: SemanticData/UANodeSetValidation/XML/DataTypeField.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2022, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ using System; using UAOOI.SemanticData.AddressSpace.Abstractions; using UAOOI.SemanticData.UANodeSetValidation.DataSerialization; namespace UAOOI.SemanticData.UANodeSetValidation.XML { /// /// Class DataTypeField /// public partial class DataTypeField : IDataTypeField { internal void RecalculateNodeIds(Func importNodeId) { DataTypeNodeIdBackingField = importNodeId(DataType); } NodeId IDataTypeField.DataTypeNodeId { get { return DataTypeNodeIdBackingField; } } private NodeId DataTypeNodeIdBackingField; #region IDataTypeField DataSerialization.LocalizedText[] IDataTypeField.DisplayName { get => this.DisplayName.GetLocalizedTextArray(); set => throw new NotImplementedException(); } DataSerialization.LocalizedText[] IDataTypeField.Description { get => this.Description.GetLocalizedTextArray(); set => throw new NotImplementedException(); } #endregion IDataTypeField } } ================================================ FILE: SemanticData/UANodeSetValidation/XML/IUAModelContext.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2022, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ using System; using UAOOI.SemanticData.BuildingErrorsHandling; using UAOOI.SemanticData.UANodeSetValidation.DataSerialization; namespace UAOOI.SemanticData.UANodeSetValidation.XML { /// /// Interface IUAModelContext - represents an OPC UA Information Model /// internal interface IUAModelContext { /// /// Registers the of ReferenceType Node. /// /// An instance of used as a name of the ReferenceType node. void RegisterUAReferenceType(QualifiedName browseName); /// /// Imports the browse name and Node identifier as . It recalculates the and against local namespace index table. /// /// The serialized as text to be imported. /// The serialized as text to be imported. /// Captures the functionality of trace. /// A instance containing and with recalculated NamespaceIndex. (QualifiedName browseName, NodeId nodeId) ImportBrowseName(string browseNameText, string nodeIdText, Action trace); /// /// Imports the node identifier if is not empty. /// /// The serialized as string to be imported. /// Captures the functionality of trace. /// An instance of the or random if the is null or empty. NodeId ImportNodeId(string nodeId, Action trace); } } ================================================ FILE: SemanticData/UANodeSetValidation/XML/IUANodeSetModelHeader.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2021, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System.Xml; namespace UAOOI.SemanticData.UANodeSetValidation.XML { /// /// Interface IUANodeSetModelHeader - represents a structure of the document header. /// internal interface IUANodeSetModelHeader { /// /// Gets the list of NamespaceUris used in the . /// /// An array of representing URI. string[] NamespaceUris { get; } /// /// Gets the list of ServerUris used in the . /// /// An array of representing URI. string[] ServerUris { get; } /// /// Gets the list of that are defined in the along with any dependencies these models have. /// /// An array of representing a model. ModelTableEntry[] Models { get; } /// /// Gets the list of used in the . /// /// An array of representing alias description. NodeIdAlias[] Aliases { get; } /// /// Gets the array of containing any vendor defined extensions to the . /// /// An array of representing extension. XmlElement[] Extensions { get; } } } ================================================ FILE: SemanticData/UANodeSetValidation/XML/ModelTableEntry.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2022, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ using System; using UAOOI.SemanticData.AddressSpace.Abstractions; namespace UAOOI.SemanticData.UANodeSetValidation.XML { /// /// Class ModelTableEntry. /// Implements the /// /// public partial class ModelTableEntry : IModelTableEntry { /// /// Gets or sets the required model. A list of dependencies for the model. If the model requires a minimum version the PublicationDate shall be specified. /// Tools which attempt to resolve these dependencies may accept any PublicationDate after this date. /// /// The required model. IModelTableEntry[] IModelTableEntry.RequiredModel => RequiredModel; /// /// Gets or sets the role permissions. The list of default RolePermissions for all Nodes in the model. /// /// The role permissions. IRolePermission[] IModelTableEntry.RolePermissions => RolePermissions; /// /// Gets or sets the access restrictions. The default AccessRestrictions that apply to all Nodes in the model. /// /// The access restrictions. byte IModelTableEntry.AccessRestrictions => AccessRestrictions; /// /// Gets the for the model. This URI should be one of the entries in the namespace table. /// /// The model . Uri IModelTableEntry.ModelUri => new Uri(ModelUri); /// /// Gets or sets the publication date. When the model was published. This value is used for comparisons if the model is defined in multiple UANodeSet files. /// /// The publication date. DateTime? IModelTableEntry.PublicationDate => this.PublicationDateSpecified ? PublicationDate : new Nullable(); /// /// Gets or sets the version. The version of the model defined in the UANodeSet. This is a human readable string and not intended for programmatic comparisons. /// /// The version. Version IModelTableEntry.Version { get { Version version = null; System.Version.TryParse(this.Version, out version); return version; } } } } ================================================ FILE: SemanticData/UANodeSetValidation/XML/NodeIdAlias.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2021, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System; using UAOOI.SemanticData.UANodeSetValidation.DataSerialization; namespace UAOOI.SemanticData.UANodeSetValidation.XML { /// /// Class NodeIdAlias. /// public partial class NodeIdAlias { internal void RecalculateNodeIds(Func importNodeId) { this.ValueNodeId = importNodeId(Value); } internal NodeId ValueNodeId { get; private set; } } } ================================================ FILE: SemanticData/UANodeSetValidation/XML/NodeToDelete.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2021, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System; using UAOOI.SemanticData.UANodeSetValidation.DataSerialization; namespace UAOOI.SemanticData.UANodeSetValidation.XML { public partial class NodeToDelete { internal void RecalculateNodeIds(Func importNodeId) { throw new NotImplementedException(); } } } ================================================ FILE: SemanticData/UANodeSetValidation/XML/OPCBinarySchema.GoCS.cmd ================================================ xsd.exe OPCBinarySchema.xsd /c /l:cs /n:UAOOI.SemanticData.UANodeSetValidation.XML ================================================ FILE: SemanticData/UANodeSetValidation/XML/OPCBinarySchema.cs ================================================ //------------------------------------------------------------------------------ // // This code was generated by a tool. // Runtime Version:4.0.30319.42000 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. // //------------------------------------------------------------------------------ // // This source code was auto-generated by xsd, Version=4.6.1055.0. // #pragma warning disable CS1591 // Missing XML comment for publicly visible type or member namespace UAOOI.SemanticData.UANodeSetValidation.XML { using System.Xml.Serialization; /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://opcfoundation.org/BinarySchema/")] [System.Xml.Serialization.XmlRootAttribute(Namespace = "http://opcfoundation.org/BinarySchema/", IsNullable = false)] public partial class Documentation { private System.Xml.XmlElement[] itemsField; private string[] textField; private System.Xml.XmlAttribute[] anyAttrField; /// [System.Xml.Serialization.XmlAnyElementAttribute()] public System.Xml.XmlElement[] Items { get { return this.itemsField; } set { this.itemsField = value; } } /// [System.Xml.Serialization.XmlTextAttribute()] public string[] Text { get { return this.textField; } set { this.textField = value; } } /// [System.Xml.Serialization.XmlAnyAttributeAttribute()] public System.Xml.XmlAttribute[] AnyAttr { get { return this.anyAttrField; } set { this.anyAttrField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://opcfoundation.org/BinarySchema/")] public partial class FieldType { private Documentation documentationField; private string nameField; private System.Xml.XmlQualifiedName typeNameField; private uint lengthField; private bool lengthFieldSpecified; private string lengthFieldField; private bool isLengthInBytesField; private string switchFieldField; private uint switchValueField; private bool switchValueFieldSpecified; private SwitchOperand switchOperandField; private bool switchOperandFieldSpecified; private byte[] terminatorField; private System.Xml.XmlAttribute[] anyAttrField; public FieldType() { this.isLengthInBytesField = false; } /// public Documentation Documentation { get { return this.documentationField; } set { this.documentationField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] public string Name { get { return this.nameField; } set { this.nameField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] public System.Xml.XmlQualifiedName TypeName { get { return this.typeNameField; } set { this.typeNameField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] public uint Length { get { return this.lengthField; } set { this.lengthField = value; } } /// [System.Xml.Serialization.XmlIgnoreAttribute()] public bool LengthSpecified { get { return this.lengthFieldSpecified; } set { this.lengthFieldSpecified = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] public string LengthField { get { return this.lengthFieldField; } set { this.lengthFieldField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] [System.ComponentModel.DefaultValueAttribute(false)] public bool IsLengthInBytes { get { return this.isLengthInBytesField; } set { this.isLengthInBytesField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] public string SwitchField { get { return this.switchFieldField; } set { this.switchFieldField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] public uint SwitchValue { get { return this.switchValueField; } set { this.switchValueField = value; } } /// [System.Xml.Serialization.XmlIgnoreAttribute()] public bool SwitchValueSpecified { get { return this.switchValueFieldSpecified; } set { this.switchValueFieldSpecified = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] public SwitchOperand SwitchOperand { get { return this.switchOperandField; } set { this.switchOperandField = value; } } /// [System.Xml.Serialization.XmlIgnoreAttribute()] public bool SwitchOperandSpecified { get { return this.switchOperandFieldSpecified; } set { this.switchOperandFieldSpecified = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute(DataType = "hexBinary")] public byte[] Terminator { get { return this.terminatorField; } set { this.terminatorField = value; } } /// [System.Xml.Serialization.XmlAnyAttributeAttribute()] public System.Xml.XmlAttribute[] AnyAttr { get { return this.anyAttrField; } set { this.anyAttrField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] [System.SerializableAttribute()] [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://opcfoundation.org/BinarySchema/")] public enum SwitchOperand { /// Equals, /// GreaterThan, /// LessThan, /// GreaterThanOrEqual, /// LessThanOrEqual, /// NotEqual, } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://opcfoundation.org/BinarySchema/")] public partial class EnumeratedValue { private Documentation documentationField; private string nameField; private int valueField; private bool valueFieldSpecified; /// public Documentation Documentation { get { return this.documentationField; } set { this.documentationField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] public string Name { get { return this.nameField; } set { this.nameField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] public int Value { get { return this.valueField; } set { this.valueField = value; } } /// [System.Xml.Serialization.XmlIgnoreAttribute()] public bool ValueSpecified { get { return this.valueFieldSpecified; } set { this.valueFieldSpecified = value; } } } /// [System.Xml.Serialization.XmlIncludeAttribute(typeof(StructuredType))] [System.Xml.Serialization.XmlIncludeAttribute(typeof(OpaqueType))] [System.Xml.Serialization.XmlIncludeAttribute(typeof(EnumeratedType))] [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://opcfoundation.org/BinarySchema/")] public partial class TypeDescription { private Documentation documentationField; private string nameField; private ByteOrder defaultByteOrderField; private bool defaultByteOrderFieldSpecified; private System.Xml.XmlAttribute[] anyAttrField; /// public Documentation Documentation { get { return this.documentationField; } set { this.documentationField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute(DataType = "NCName")] public string Name { get { return this.nameField; } set { this.nameField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] public ByteOrder DefaultByteOrder { get { return this.defaultByteOrderField; } set { this.defaultByteOrderField = value; } } /// [System.Xml.Serialization.XmlIgnoreAttribute()] public bool DefaultByteOrderSpecified { get { return this.defaultByteOrderFieldSpecified; } set { this.defaultByteOrderFieldSpecified = value; } } /// [System.Xml.Serialization.XmlAnyAttributeAttribute()] public System.Xml.XmlAttribute[] AnyAttr { get { return this.anyAttrField; } set { this.anyAttrField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] [System.SerializableAttribute()] [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://opcfoundation.org/BinarySchema/")] public enum ByteOrder { /// BigEndian, /// LittleEndian, } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://opcfoundation.org/BinarySchema/")] public partial class StructuredType : TypeDescription { private FieldType[] fieldField; /// [System.Xml.Serialization.XmlElementAttribute("Field")] public FieldType[] Field { get { return this.fieldField; } set { this.fieldField = value; } } } /// [System.Xml.Serialization.XmlIncludeAttribute(typeof(EnumeratedType))] [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://opcfoundation.org/BinarySchema/")] public partial class OpaqueType : TypeDescription { private int lengthInBitsField; private bool lengthInBitsFieldSpecified; private bool byteOrderSignificantField; public OpaqueType() { this.byteOrderSignificantField = false; } /// [System.Xml.Serialization.XmlAttributeAttribute()] public int LengthInBits { get { return this.lengthInBitsField; } set { this.lengthInBitsField = value; } } /// [System.Xml.Serialization.XmlIgnoreAttribute()] public bool LengthInBitsSpecified { get { return this.lengthInBitsFieldSpecified; } set { this.lengthInBitsFieldSpecified = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] [System.ComponentModel.DefaultValueAttribute(false)] public bool ByteOrderSignificant { get { return this.byteOrderSignificantField; } set { this.byteOrderSignificantField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://opcfoundation.org/BinarySchema/")] public partial class EnumeratedType : OpaqueType { private EnumeratedValue[] enumeratedValueField; /// [System.Xml.Serialization.XmlElementAttribute("EnumeratedValue")] public EnumeratedValue[] EnumeratedValue { get { return this.enumeratedValueField; } set { this.enumeratedValueField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://opcfoundation.org/BinarySchema/")] public partial class ImportDirective { private string namespaceField; private string locationField; /// [System.Xml.Serialization.XmlAttributeAttribute()] public string Namespace { get { return this.namespaceField; } set { this.namespaceField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] public string Location { get { return this.locationField; } set { this.locationField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://opcfoundation.org/BinarySchema/")] [System.Xml.Serialization.XmlRootAttribute(Namespace = "http://opcfoundation.org/BinarySchema/", IsNullable = false)] public partial class TypeDictionary { private Documentation documentationField; private ImportDirective[] importField; private TypeDescription[] itemsField; private string targetNamespaceField; private ByteOrder defaultByteOrderField; private bool defaultByteOrderFieldSpecified; private System.Xml.XmlAttribute[] anyAttrField; /// public Documentation Documentation { get { return this.documentationField; } set { this.documentationField = value; } } /// [System.Xml.Serialization.XmlElementAttribute("Import")] public ImportDirective[] Import { get { return this.importField; } set { this.importField = value; } } /// [System.Xml.Serialization.XmlElementAttribute("EnumeratedType", typeof(EnumeratedType))] [System.Xml.Serialization.XmlElementAttribute("OpaqueType", typeof(OpaqueType))] [System.Xml.Serialization.XmlElementAttribute("StructuredType", typeof(StructuredType))] public TypeDescription[] Items { get { return this.itemsField; } set { this.itemsField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] public string TargetNamespace { get { return this.targetNamespaceField; } set { this.targetNamespaceField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] public ByteOrder DefaultByteOrder { get { return this.defaultByteOrderField; } set { this.defaultByteOrderField = value; } } /// [System.Xml.Serialization.XmlIgnoreAttribute()] public bool DefaultByteOrderSpecified { get { return this.defaultByteOrderFieldSpecified; } set { this.defaultByteOrderFieldSpecified = value; } } /// [System.Xml.Serialization.XmlAnyAttributeAttribute()] public System.Xml.XmlAttribute[] AnyAttr { get { return this.anyAttrField; } set { this.anyAttrField = value; } } } #pragma warning restore CS1591 // Missing XML comment for publicly visible type or member } ================================================ FILE: SemanticData/UANodeSetValidation/XML/OPCBinarySchema.xsd ================================================ ================================================ FILE: SemanticData/UANodeSetValidation/XML/OPCFCTTInformationModelling.Svcutil.cmd ================================================  rem https://msdn.microsoft.com/en-us/library/aa347733(v=vs.110).aspx Svcutil OPCFCTTInformationModelling.xsd /N:http://commsvr.com/UAOOI/SemanticData/UANodeSetValidation/OPCFCTTInformationModelling.xsd,UAOOI.SemanticData.UANodeSetValidation.XML /o:OPCFCTTInformationModelling.cs /dconly /s /serializer:DataContractSerializer /internal ================================================ FILE: SemanticData/UANodeSetValidation/XML/OPCFCTTInformationModelling.cs ================================================ //------------------------------------------------------------------------------ // // This code was generated by a tool. // Runtime Version:4.0.30319.34209 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. // //------------------------------------------------------------------------------ [assembly: System.Runtime.Serialization.ContractNamespaceAttribute("http://commsvr.com/UAOOI/SemanticData/UANodeSetValidation/OPCFCTTInformationModel" + "ling.xsd", ClrNamespace="UAOOI.SemanticData.UANodeSetValidation.XML")] namespace UAOOI.SemanticData.UANodeSetValidation.XML { using System.Runtime.Serialization; using System; [System.Diagnostics.DebuggerStepThroughAttribute()] [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")] [System.Runtime.Serialization.CollectionDataContractAttribute(Name="Tests", Namespace="http://commsvr.com/UAOOI/SemanticData/UANodeSetValidation/OPCFCTTInformationModel" + "ling.xsd", ItemName="TestCase")] [System.SerializableAttribute()] internal class Tests : System.Collections.Generic.List { } [System.Diagnostics.DebuggerStepThroughAttribute()] [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")] [System.Runtime.Serialization.DataContractAttribute(Name="TestCase", Namespace="http://commsvr.com/UAOOI/SemanticData/UANodeSetValidation/OPCFCTTInformationModel" + "ling.xsd")] [System.SerializableAttribute()] internal partial class TestCase : object, System.Runtime.Serialization.IExtensibleDataObject { [System.NonSerializedAttribute()] private System.Runtime.Serialization.ExtensionDataObject extensionDataField; [System.Runtime.Serialization.OptionalFieldAttribute()] private string CTTField; [System.Runtime.Serialization.OptionalFieldAttribute()] private string SpecLinkField; [System.Runtime.Serialization.OptionalFieldAttribute()] private string StepField; [System.Runtime.Serialization.OptionalFieldAttribute()] private string NodeClassField; private string FocusField; [System.Runtime.Serialization.OptionalFieldAttribute()] private string TestCaseMemberField; [System.Runtime.Serialization.OptionalFieldAttribute()] private string ExpectedResultsField; [System.Runtime.Serialization.OptionalFieldAttribute()] private string ReviewedField; [System.Runtime.Serialization.OptionalFieldAttribute()] private string IdentifierField; [System.Runtime.Serialization.OptionalFieldAttribute()] private string CommentsField; public System.Runtime.Serialization.ExtensionDataObject ExtensionData { get { return this.extensionDataField; } set { this.extensionDataField = value; } } [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false)] internal string CTT { get { return this.CTTField; } set { this.CTTField = value; } } [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false)] internal string SpecLink { get { return this.SpecLinkField; } set { this.SpecLinkField = value; } } [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false)] internal string Step { get { return this.StepField; } set { this.StepField = value; } } [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=3)] internal string NodeClass { get { return this.NodeClassField; } set { this.NodeClassField = value; } } [System.Runtime.Serialization.DataMemberAttribute(IsRequired=true, EmitDefaultValue=false, Order=4)] internal string Focus { get { return this.FocusField; } set { this.FocusField = value; } } [System.Runtime.Serialization.DataMemberAttribute(Name="TestCase", EmitDefaultValue=false, Order=5)] internal string TestCaseMember { get { return this.TestCaseMemberField; } set { this.TestCaseMemberField = value; } } [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=6)] internal string ExpectedResults { get { return this.ExpectedResultsField; } set { this.ExpectedResultsField = value; } } [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=7)] internal string Reviewed { get { return this.ReviewedField; } set { this.ReviewedField = value; } } [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=8)] internal string Identifier { get { return this.IdentifierField; } set { this.IdentifierField = value; } } [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=9)] internal string Comments { get { return this.CommentsField; } set { this.CommentsField = value; } } } } ================================================ FILE: SemanticData/UANodeSetValidation/XML/OPCFCTTInformationModelling.xml ================================================ y P3-4.4.2-002 All Properties BrowseNames must be unique in the context of the Parent node. Also specified in P3-5.6.3. ok y P3-4.4.2-003 All Properties Properties always reside in the same Server. ok NA y P3-4.5.1-001 Object, Variable HasTypeDefinition HasTypeDefinition: reference will point to a TypeDefinitionNode (of some type). All Objects and Variables MUST have a HasTypeDefinition reference. The target NodeId may be in a Remote Server; this is permissable. The reference must point to an actual type. A well-known type may not exist in the address-space, i.e. UA Part 3, Part 4, Part 5, Part 8, etc. But, if they are present then they have a numeric Id and are in namespace 0. ok ??? y P3-4.5.2-001 Object, Variable TypeDefinitionNodes Must point to an instance; not another type definition. ok y P3-4.5.3-001 SubType Mandatory items are present. Optional items are present and still marked as Optional or Mandatory. Any optional items that have become mandatory is permitted. Additional Nodes may have been added. Data-types may have been made "more specific", e.g. from Number to Int16. ok y P3-4.5.4-001 ObjectType, VariableType TypeDefinitionNodes Read the Forward references. The BrowseName of the targets are unique and match the names and other rules of their parent type definition. ok y P3-4.5.4-002 ObjectType, VariableType InstanceDeclaration Read the Forward references. The BrowseName of the targets are unique and match the names and other rules of their parent type definition. ok y P3-4.5.4-003 ObjectType, VariableType, ReferenceType InstanceDeclaration Instances derived from an InstanceDeclaration shall be of the same TypeDefinitionNode or a subtype of this TypeDefinitionNode. The string-part of the BrowseName is case sensitive. ok y P3-5.2-000 NodeClass Structure matches Table 2 (includes data-types etc). Note to Developer: Table 12 provides a good summary of all other node class types. Attributes exist and comply where required. If Optional attributes exist then they comply. n P3-5.2.2-001 NodeClass Server shall persist the NodeId of a Node, that is, it shall not generate new NodeIds when rebooting. ok y P3-5.3.1-000 ReferenceType Structure matches Table 4. If this type is found in TypeSystem browsing then (a) check the only References that exist are either HasProperty or HasSubtype. Attributes exist and comply where required. If Optional attributes exist then they comply. Mandatory Properties exist and comply; optionals are checked if they exist References follow the constraints/rules as described. ok Y P3-5.3.2-001 ReferenceType BrowseName is unique. No two references can have the same browse name! ok Y P3-5.3.2-002 ReferenceType IsAbstract is set to TRUE means that this type is ONLY defined in the Type System. When walking through the address-space no references of this type exist. ok y P3-5.3.2-003 ReferenceType Symmetric and InverseName rules. When: IsAbstract=N; Symmetric=N then InverseName=Y. IsAbstract=Y; Symmetric=Y then InverseName=N. IsAbstract=Y; Symmetric=N then InverseName=Y/N (optional). IsAbstract=N; Symmetric=Y then InverseName=N. ok Y P3-5.3.2-004 ReferenceType References (forward and inverse) do not result in an infinite loop. For hierarchical references. For example: RefA --> RefB --> RefC --> [RefA = not allowed] ok Y P3-5.3.3.2-001 HasProperty May only be used on Variable NodeClass types. TargetNode is a Property (Variable type). Must point to a Type that is actually a Property. ok UndefinedHasPropertyTarget y P3-5.3.3.3-001 HasSubtype Derived types must declare that they are a subtype and specify their parent type. Parent types are NOT required to declare the subtypes below them. ok y P3-5.3.3.3-002 HasSubtype Multiple inheritence not allowed. Only one parent type is permitted. Only 1 reference of type IsSubTypeOf is defined for ALL types! ok y P3-5.4-000 View Structure matches Table 5. Attributes exist and comply where required. If Optional attributes exist then they comply. Properties exist and comply where required; optionals are checked too. References follow the constraints/rules as described. ok y P3-5.4-001 View HasProperty references are permitted. Points to property types. ok y P3-5.4-002 View Browse the address-space WITHIN a View, and follow the references; you can't find the Server object. The Server object is not available/accessible from a View. ok y P3-5.4-003 View Views can be the SourceNode of Hierarchical references only. ok y P3-5.5.1-000 Object Structure matches Table 6. Attributes exist and comply where required. If Optional attributes exist then they comply. Properties exist and comply where required; optionals are checked too. References follow the constraints/rules as described. ok y P3-5.5.1-001 Object References follow the rules defined in Table 6. (Script Developer: one "script" per Reference type for validating the rules are followed) ok y P3-5.5.3-000 ObjectType Structure matches Table 7. Attributes exist and comply where required. If Optional attributes exist then they comply. Properties exist and comply where required; optionals are checked too. References follow the constraints/rules as described. ok y P3-5.6.1-000 Variable Structure matches Table 8. Attributes exist and comply where required. If Optional attributes exist then they comply. Properties exist and comply where required; optionals are checked too. References follow the constraints/rules as described. ok y P3-5.6.1-001 Variable Instances of this type are either (a) DataVariable (b) Property. Verify that references exist, and then follow the inverse reference(s) to make sure that if the current node is a Property (and has the PropertyType reference) then the parent can be anything except a Property. ok y P3-5.6.3-001 Properties Shall not be the SourceNode of any hierarchical Reference. May be the SourceNode of non-hieararchical references. ok y P3-5.6.3-002 Properties Has the type definition reference: PropertyType. ok y P3-5.6.3-003 Properties Must be the TargetNode of least one HasProperty reference. ok y P3-5.6.5-000 VariableType Structure matches Table 9. Attributes exist and comply where required. If Optional attributes exist then they comply. Properties exist and comply where required; optionals are checked too. References follow the constraints/rules as described. ok y P3-5.7-000 Method Structure matches Table 10. Attributes exist and comply where required. If Optional attributes exist then they comply. Properties exist and comply where required; optionals are checked too. References follow the constraints/rules as described. ok y P3-5.8.3-000 DataType Structure matches Table 11. Attributes exist and comply where required. If Optional attributes exist then they comply. Properties exist and comply where required; optionals are checked too. References follow the constraints/rules as described. ok y P3-6.2.1-001 InstanceDeclaration Is an Object, Variable, or Method. Has a HasModellingRule reference and is the TargetNode of a hierarchical reference from a TypeDefinitionNode, or resolves from a TypeDefinitionNode. ok y P3-6.4.4-001 ModellingRules NamingRule property exists and contains one of these values (a) Optional (b) Mandatory (c ) Constraint (d) mandatory placeholder (e) optional placeholder. Property is required; values are from the enumeration. ok y P3-6.4.4-002 ModellingRules Properties obey the rules defined in Table 15 and 16. ok y P3-7.1-000 ReferenceType The inheritence chain matches Figure 24. Use just the references in Figure 24; any custom reference types detected should be permitted. Note: As we find more types derived from this diagram we can add this to this test-script. ok y P3-7.3-001 HierarchicalReference The SourceNode and TargetNode cannot point to the same NodeId. ok y P3-7.7-001 HasComponent IF the Source of this reference is an Object or ObjectType; the Target is used with Objects, DataVariables, or Methods. If the Source of this reference is Variable or VariableTypes, then the Target is used with DataVariables. ok WrongReference2Method; WrongReference2Variable; UndefinedHasComponentTarget y P3-7.10-001 HasSubtype SourceNode is an ObjectType, VariableType, DataType, or ReferenceType; TargetNode is of the same NodeClass as the SourceNode. ok UndefinedHasSubtypeTarget y P3-7.11-001 Organizes SourceNode of type Object or View. If an Object then it is of type FolderType or a sub-type. ok y P3-7.12-001 HasModellingRule SourceNode is an Object, Variable, or Method. The TargetNode is an Object of type ModellingRule or sub-type. ok y P3-7.13-001 HasTypeDefinition SourceNode is Object or Variable. If Object then TargetNode is an ObjectType; if Variable then TargetNode is VariableType. ok UndefinedHasTypeDefinition y P3-7.14-001 HasEncoding SourceNode is DataType. TargetNode is a DataTypeEncodingType or sub-type. ok y P3-7.15-001 HasDescription SourceNode is DataTypeEncodingType or a sub-type. TargetNode is a DataTypeDescriptionType or sub-type. ok y P3-7.16-001 GeneratesEvent SourceNode is an ObjectType, VariableType, or Method. TargetNode is an event type that ultimately (not necessarily immediately) derives from BaseEventType. Target Node ultimately derives from BaseEventType ok y P3-7.17-001 AlwaysGeneratesEvent SourceNode is Method. TargetNode is an event type that ultimately (not necessarily immediately) derives from BaseEventType. Target node ultimately derives from BaseEventType ok y P3-7.18-001 HasEventSource SourceNode is an Object that represents the source. SourceNode exists and the EventNotifier.SubscribeToEvents is TRUE. ok y P3-7.19-001 HasNotifier SourceNode is an Object or View. TargetNode are Objects. SourceNode exists and the EventNotifier.SubscribeToEvents is TRUE. ok y P3-8.14 Enumeration Any enumeration DataType not directly inheriting (sub-type) from the Enumeration DataType can only restrict the enumeration values of its supertype. That is, it shall neither add enumeration values nor change the text associated to the enumeration value ok y P3-8.33 Structure Structured DataTypes shall inherit from the base Structure DataType. This means that you cannot derive from any other structure. ok y P3-8.39 XmlElement If this type is found then issue a Warning to notify the tester that this type really shouldn't be used, and that a Structure should be used instead. ok y P5-4.1-001 NodeId Standard OPC Foundationd defined types use NamespaceIndex=0. ok Y P5-12-000 AbstractTypes Abstract or Composite types like numeric, integer, uinteger etc. must be verified (e.g. uint16 unacceptable when received for a type defined as integer); sub-types may further restrict the type (e.g. parent is Numeric, subtype restricts to int16) Applies to: Integer, UInteger, Double, Number, ByteString, DateTime, String, Structure, and Image. ok y P3-Annex-C TypeDictionary Structure If the type is a custom Structure (i.e. not 'well-known') then decode it according to the TypeDictionary. Each decoded 'element' applies with the applicable UA built-in type. If the element is a structure, enumeration, or opaque, then recursively apply the same rules. ok ================================================ FILE: SemanticData/UANodeSetValidation/XML/OPCFCTTInformationModelling.xsd ================================================  ================================================ FILE: SemanticData/UANodeSetValidation/XML/Opc.Ua.NodeSet2.xml ================================================  i=1 i=2 i=3 i=4 i=5 i=6 i=7 i=8 i=9 i=10 i=11 i=13 i=12 i=15 i=14 i=16 i=17 i=18 i=20 i=21 i=19 i=22 i=26 i=27 i=28 i=47 i=46 i=35 i=36 i=48 i=45 i=40 i=37 i=38 i=39 i=53 i=52 i=51 i=54 i=9004 i=9005 i=17597 i=9006 i=15112 i=17604 i=17603 Default Binary i=58 Default XML i=58 BaseDataType Number i=24 Integer i=26 UInteger i=26 Enumeration i=24 Boolean i=24 SByte i=27 Byte i=28 Int16 i=27 UInt16 i=28 Int32 i=27 UInt32 i=28 Int64 i=27 UInt64 i=28 Float i=26 Double i=26 String i=24 DateTime i=24 Guid i=24 ByteString i=24 XmlElement i=24 NodeId i=24 ExpandedNodeId i=24 StatusCode i=24 QualifiedName i=24 LocalizedText i=24 Structure i=24 DataValue i=24 DiagnosticInfo i=24 Image i=15 Decimal i=26 References NonHierarchicalReferences i=31 HierarchicalReferences i=31 HierarchicalReferences HasChild i=33 ChildOf Organizes i=33 OrganizedBy HasEventSource i=33 EventSourceOf HasModellingRule i=32 ModellingRuleOf HasEncoding i=32 EncodingOf HasDescription i=32 DescriptionOf HasTypeDefinition i=32 TypeDefinitionOf GeneratesEvent i=32 GeneratedBy AlwaysGeneratesEvent i=41 AlwaysGeneratedBy Aggregates i=34 AggregatedBy HasSubtype i=34 SubtypeOf HasProperty i=44 PropertyOf HasComponent i=44 ComponentOf HasNotifier i=36 NotifierOf HasOrderedComponent i=47 OrderedComponentOf FromState i=32 ToTransition ToState i=32 FromTransition HasCause i=32 MayBeCausedBy HasEffect i=32 MayBeEffectedBy HasSubStateMachine i=32 SubStateMachineOf HasHistoricalConfiguration i=44 HistoricalConfigurationOf BaseObjectType FolderType i=58 BaseVariableType BaseDataVariableType i=62 PropertyType i=62 DataTypeDescriptionType i=104 i=105 i=63 DataTypeVersion i=68 i=80 i=69 DictionaryFragment i=68 i=80 i=69 DataTypeDictionaryType i=106 i=107 i=15001 i=63 DataTypeVersion i=68 i=80 i=72 NamespaceUri i=68 i=80 i=72 Deprecated i=68 i=80 i=72 DataTypeSystemType i=58 DataTypeEncodingType i=58 NamingRuleType i=12169 i=29 The BrowseName must appear in all instances of the type. The BrowseName may appear in an instance of the type. The modelling rule defines a constraint and the BrowseName is not used in an instance of the type. EnumValues i=68 i=120 i=7616 1 Mandatory The BrowseName must appear in all instances of the type. i=7616 2 Optional The BrowseName may appear in an instance of the type. i=7616 3 Constraint The modelling rule defines a constraint and the BrowseName is not used in an instance of the type. ModellingRuleType i=111 i=58 NamingRule i=68 i=78 i=77 1 Mandatory i=112 i=77 NamingRule i=68 i=78 1 Optional i=113 i=77 NamingRule i=68 i=80 2 ExposesItsArray i=114 i=77 NamingRule i=68 i=83 3 OptionalPlaceholder i=11509 i=77 NamingRule i=68 i=11508 2 MandatoryPlaceholder i=11511 i=77 NamingRule i=68 i=11510 1 Root i=61 Objects i=84 i=61 Types i=84 i=61 Views i=84 i=61 ObjectTypes i=86 i=58 i=61 VariableTypes i=86 i=62 i=61 DataTypes i=86 i=24 i=61 ReferenceTypes i=86 i=31 i=61 XML Schema i=90 i=75 OPC Binary i=90 i=75 HasArgumentDescription i=47 ArgumentDescriptionOf HasOptionalInputArgumentDescription i=129 OptionalInputArgumentDescriptionOf http://opcfoundation.org/UA/ i=15958 i=15959 i=15960 i=15961 i=15962 i=15963 i=15964 i=16134 i=16135 i=16136 i=11715 i=11616 NamespaceUri i=68 i=15957 http://opcfoundation.org/UA/ NamespaceVersion i=68 i=15957 v104 NamespacePublicationDate i=68 i=15957 2021-09-15T00:00:00Z IsNamespaceSubset i=68 i=15957 false StaticNodeIdTypes i=68 i=15957 0 StaticNumericNodeIdRange i=68 i=15957 1:2252 2270 2273 2280 2283 2291:2293 2297:2734 2738:2991 2995 2998:3703 3710:11191 11194:11195 11202:11241 11243:11272 11276:11280 11284:11311 11315:11491 11495:11501 11503:11701 11706 11708 11716:12164 12169:12748 12752:12872 12875:12884 12888:12910 12912:14414 14416:15003 15005:15605 15607:16300 16306:17633 17635:19090 19092:2147483647 StaticStringNodeIdPattern i=68 i=15957 DefaultRolePermissions i=68 i=15957 DefaultUserRolePermissions i=68 i=15957 DefaultAccessRestrictions i=68 i=15957 NodeVersion i=68 ViewVersion i=68 Icon i=68 LocalTime i=68 AllowNulls i=68 ValueAsText i=68 MaxStringLength i=68 MaxCharacters i=68 MaxByteStringLength i=68 MaxArrayLength i=68 EngineeringUnits i=68 EnumStrings i=68 EnumValues i=68 OptionSetValues i=68 InputArguments i=68 OutputArguments i=68 DefaultInstanceBrowseName i=68 ImageBMP i=30 ImageGIF i=30 ImageJPG i=30 ImagePNG i=30 AudioDataType i=15 Union i=22 ServerType i=2005 i=2006 i=15003 i=2007 i=2008 i=2742 i=12882 i=17612 i=2009 i=2010 i=2011 i=2012 i=11527 i=11489 i=12871 i=12746 i=12883 i=58 ServerArray i=68 i=78 i=2004 NamespaceArray i=68 i=78 i=2004 UrisVersion i=68 i=80 i=2004 ServerStatus i=3074 i=3075 i=3076 i=3077 i=3084 i=3085 i=2138 i=78 i=2004 StartTime i=63 i=78 i=2007 CurrentTime i=63 i=78 i=2007 State i=63 i=78 i=2007 BuildInfo i=3078 i=3079 i=3080 i=3081 i=3082 i=3083 i=3051 i=78 i=2007 ProductUri i=63 i=78 i=3077 ManufacturerName i=63 i=78 i=3077 ProductName i=63 i=78 i=3077 SoftwareVersion i=63 i=78 i=3077 BuildNumber i=63 i=78 i=3077 BuildDate i=63 i=78 i=3077 SecondsTillShutdown i=63 i=78 i=2007 ShutdownReason i=63 i=78 i=2007 ServiceLevel i=68 i=78 i=2004 Auditing i=68 i=78 i=2004 EstimatedReturnTime i=68 i=80 i=2004 LocalTime i=68 i=80 i=2004 ServerCapabilities i=3086 i=3087 i=3088 i=3089 i=3090 i=3091 i=3092 i=3093 i=3094 i=2013 i=78 i=2004 ServerProfileArray i=68 i=78 i=2009 LocaleIdArray i=68 i=78 i=2009 MinSupportedSampleRate i=68 i=78 i=2009 MaxBrowseContinuationPoints i=68 i=78 i=2009 MaxQueryContinuationPoints i=68 i=78 i=2009 MaxHistoryContinuationPoints i=68 i=78 i=2009 SoftwareCertificates i=68 i=78 i=2009 ModellingRules i=61 i=78 i=2009 AggregateFunctions i=61 i=78 i=2009 ServerDiagnostics i=3095 i=3110 i=3111 i=3114 i=2020 i=78 i=2004 ServerDiagnosticsSummary i=3096 i=3097 i=3098 i=3099 i=3100 i=3101 i=3102 i=3104 i=3105 i=3106 i=3107 i=3108 i=2150 i=78 i=2010 ServerViewCount i=63 i=78 i=3095 CurrentSessionCount i=63 i=78 i=3095 CumulatedSessionCount i=63 i=78 i=3095 SecurityRejectedSessionCount i=63 i=78 i=3095 RejectedSessionCount i=63 i=78 i=3095 SessionTimeoutCount i=63 i=78 i=3095 SessionAbortCount i=63 i=78 i=3095 PublishingIntervalCount i=63 i=78 i=3095 CurrentSubscriptionCount i=63 i=78 i=3095 CumulatedSubscriptionCount i=63 i=78 i=3095 SecurityRejectedRequestsCount i=63 i=78 i=3095 RejectedRequestsCount i=63 i=78 i=3095 SubscriptionDiagnosticsArray i=2171 i=78 i=2010 SessionsDiagnosticsSummary i=3112 i=3113 i=2026 i=78 i=2010 SessionDiagnosticsArray i=2196 i=78 i=3111 SessionSecurityDiagnosticsArray i=2243 i=78 i=3111 EnabledFlag i=68 i=78 i=2010 VendorServerInfo i=2033 i=78 i=2004 ServerRedundancy i=3115 i=2034 i=78 i=2004 RedundancySupport i=68 i=78 i=2012 Namespaces i=11645 i=80 i=2004 GetMonitoredItems i=11490 i=11491 i=80 i=2004 InputArguments i=68 i=78 i=11489 i=297 SubscriptionId i=7 -1 OutputArguments i=68 i=78 i=11489 i=297 ServerHandles i=7 1 0 i=297 ClientHandles i=7 1 0 ResendData i=12872 i=80 i=2004 InputArguments i=68 i=78 i=12871 i=297 SubscriptionId i=7 -1 SetSubscriptionDurable i=12747 i=12748 i=80 i=2004 InputArguments i=68 i=78 i=12746 i=297 SubscriptionId i=7 -1 i=297 LifetimeInHours i=7 -1 OutputArguments i=68 i=78 i=12746 i=297 RevisedLifetimeInHours i=7 -1 RequestServerStateChange i=12884 i=80 i=2004 InputArguments i=68 i=78 i=12883 i=297 State i=852 -1 i=297 EstimatedReturnTime i=13 -1 i=297 SecondsTillShutdown i=7 -1 i=297 Reason i=21 -1 i=297 Restart i=1 -1 ServerCapabilitiesType i=2014 i=2016 i=2017 i=2732 i=2733 i=2734 i=3049 i=11549 i=11550 i=12910 i=11551 i=2019 i=2754 i=11562 i=16295 i=58 ServerProfileArray i=68 i=78 i=2013 LocaleIdArray i=68 i=78 i=2013 MinSupportedSampleRate i=68 i=78 i=2013 MaxBrowseContinuationPoints i=68 i=78 i=2013 MaxQueryContinuationPoints i=68 i=78 i=2013 MaxHistoryContinuationPoints i=68 i=78 i=2013 SoftwareCertificates i=68 i=78 i=2013 MaxArrayLength i=68 i=80 i=2013 MaxStringLength i=68 i=80 i=2013 MaxByteStringLength i=68 i=80 i=2013 OperationLimits i=11564 i=80 i=2013 ModellingRules i=61 i=78 i=2013 AggregateFunctions i=61 i=78 i=2013 <VendorCapability> i=2137 i=11508 i=2013 RoleSet i=16296 i=16299 i=15607 i=80 i=2013 AddRole i=16297 i=16298 i=78 i=16295 InputArguments i=68 i=78 i=16296 i=297 RoleName i=12 -1 i=297 NamespaceUri i=12 -1 OutputArguments i=68 i=78 i=16296 i=297 RoleNodeId i=17 -1 RemoveRole i=16300 i=78 i=16295 InputArguments i=68 i=78 i=16299 i=297 RoleNodeId i=17 -1 ServerDiagnosticsType i=2021 i=2022 i=2023 i=2744 i=2025 i=58 ServerDiagnosticsSummary i=3116 i=3117 i=3118 i=3119 i=3120 i=3121 i=3122 i=3124 i=3125 i=3126 i=3127 i=3128 i=2150 i=78 i=2020 ServerViewCount i=63 i=78 i=2021 CurrentSessionCount i=63 i=78 i=2021 CumulatedSessionCount i=63 i=78 i=2021 SecurityRejectedSessionCount i=63 i=78 i=2021 RejectedSessionCount i=63 i=78 i=2021 SessionTimeoutCount i=63 i=78 i=2021 SessionAbortCount i=63 i=78 i=2021 PublishingIntervalCount i=63 i=78 i=2021 CurrentSubscriptionCount i=63 i=78 i=2021 CumulatedSubscriptionCount i=63 i=78 i=2021 SecurityRejectedRequestsCount i=63 i=78 i=2021 RejectedRequestsCount i=63 i=78 i=2021 SamplingIntervalDiagnosticsArray i=2164 i=80 i=2020 SubscriptionDiagnosticsArray i=2171 i=78 i=2020 SessionsDiagnosticsSummary i=3129 i=3130 i=2026 i=78 i=2020 SessionDiagnosticsArray i=2196 i=78 i=2744 SessionSecurityDiagnosticsArray i=2243 i=78 i=2744 EnabledFlag i=68 i=78 i=2020 SessionsDiagnosticsSummaryType i=2027 i=2028 i=12097 i=58 SessionDiagnosticsArray i=2196 i=78 i=2026 SessionSecurityDiagnosticsArray i=2243 i=78 i=2026 <ClientName> i=12098 i=12142 i=12152 i=2029 i=11508 i=2026 SessionDiagnostics i=12099 i=12100 i=12101 i=12102 i=12103 i=12104 i=12105 i=12106 i=12107 i=12108 i=12109 i=12110 i=12111 i=12112 i=12113 i=12114 i=12115 i=12116 i=12117 i=12118 i=12119 i=12120 i=12121 i=12122 i=12123 i=12124 i=12125 i=12126 i=12127 i=12128 i=12129 i=12130 i=12131 i=12132 i=12133 i=12134 i=12135 i=12136 i=12137 i=12138 i=12139 i=12140 i=12141 i=2197 i=78 i=12097 SessionId i=63 i=78 i=12098 SessionName i=63 i=78 i=12098 ClientDescription i=63 i=78 i=12098 ServerUri i=63 i=78 i=12098 EndpointUrl i=63 i=78 i=12098 LocaleIds i=63 i=78 i=12098 ActualSessionTimeout i=63 i=78 i=12098 MaxResponseMessageSize i=63 i=78 i=12098 ClientConnectionTime i=63 i=78 i=12098 ClientLastContactTime i=63 i=78 i=12098 CurrentSubscriptionsCount i=63 i=78 i=12098 CurrentMonitoredItemsCount i=63 i=78 i=12098 CurrentPublishRequestsInQueue i=63 i=78 i=12098 TotalRequestCount i=63 i=78 i=12098 UnauthorizedRequestCount i=63 i=78 i=12098 ReadCount i=63 i=78 i=12098 HistoryReadCount i=63 i=78 i=12098 WriteCount i=63 i=78 i=12098 HistoryUpdateCount i=63 i=78 i=12098 CallCount i=63 i=78 i=12098 CreateMonitoredItemsCount i=63 i=78 i=12098 ModifyMonitoredItemsCount i=63 i=78 i=12098 SetMonitoringModeCount i=63 i=78 i=12098 SetTriggeringCount i=63 i=78 i=12098 DeleteMonitoredItemsCount i=63 i=78 i=12098 CreateSubscriptionCount i=63 i=78 i=12098 ModifySubscriptionCount i=63 i=78 i=12098 SetPublishingModeCount i=63 i=78 i=12098 PublishCount i=63 i=78 i=12098 RepublishCount i=63 i=78 i=12098 TransferSubscriptionsCount i=63 i=78 i=12098 DeleteSubscriptionsCount i=63 i=78 i=12098 AddNodesCount i=63 i=78 i=12098 AddReferencesCount i=63 i=78 i=12098 DeleteNodesCount i=63 i=78 i=12098 DeleteReferencesCount i=63 i=78 i=12098 BrowseCount i=63 i=78 i=12098 BrowseNextCount i=63 i=78 i=12098 TranslateBrowsePathsToNodeIdsCount i=63 i=78 i=12098 QueryFirstCount i=63 i=78 i=12098 QueryNextCount i=63 i=78 i=12098 RegisterNodesCount i=63 i=78 i=12098 UnregisterNodesCount i=63 i=78 i=12098 SessionSecurityDiagnostics i=12143 i=12144 i=12145 i=12146 i=12147 i=12148 i=12149 i=12150 i=12151 i=2244 i=78 i=12097 SessionId i=63 i=78 i=12142 ClientUserIdOfSession i=63 i=78 i=12142 ClientUserIdHistory i=63 i=78 i=12142 AuthenticationMechanism i=63 i=78 i=12142 Encoding i=63 i=78 i=12142 TransportProtocol i=63 i=78 i=12142 SecurityMode i=63 i=78 i=12142 SecurityPolicyUri i=63 i=78 i=12142 ClientCertificate i=63 i=78 i=12142 SubscriptionDiagnosticsArray i=2171 i=78 i=12097 SessionDiagnosticsObjectType i=2030 i=2031 i=2032 i=58 SessionDiagnostics i=3131 i=3132 i=3133 i=3134 i=3135 i=3136 i=3137 i=3138 i=3139 i=3140 i=3141 i=3142 i=3143 i=8898 i=11891 i=3151 i=3152 i=3153 i=3154 i=3155 i=3156 i=3157 i=3158 i=3159 i=3160 i=3161 i=3162 i=3163 i=3164 i=3165 i=3166 i=3167 i=3168 i=3169 i=3170 i=3171 i=3172 i=3173 i=3174 i=3175 i=3176 i=3177 i=3178 i=2197 i=78 i=2029 SessionId i=63 i=78 i=2030 SessionName i=63 i=78 i=2030 ClientDescription i=63 i=78 i=2030 ServerUri i=63 i=78 i=2030 EndpointUrl i=63 i=78 i=2030 LocaleIds i=63 i=78 i=2030 ActualSessionTimeout i=63 i=78 i=2030 MaxResponseMessageSize i=63 i=78 i=2030 ClientConnectionTime i=63 i=78 i=2030 ClientLastContactTime i=63 i=78 i=2030 CurrentSubscriptionsCount i=63 i=78 i=2030 CurrentMonitoredItemsCount i=63 i=78 i=2030 CurrentPublishRequestsInQueue i=63 i=78 i=2030 TotalRequestCount i=63 i=78 i=2030 UnauthorizedRequestCount i=63 i=78 i=2030 ReadCount i=63 i=78 i=2030 HistoryReadCount i=63 i=78 i=2030 WriteCount i=63 i=78 i=2030 HistoryUpdateCount i=63 i=78 i=2030 CallCount i=63 i=78 i=2030 CreateMonitoredItemsCount i=63 i=78 i=2030 ModifyMonitoredItemsCount i=63 i=78 i=2030 SetMonitoringModeCount i=63 i=78 i=2030 SetTriggeringCount i=63 i=78 i=2030 DeleteMonitoredItemsCount i=63 i=78 i=2030 CreateSubscriptionCount i=63 i=78 i=2030 ModifySubscriptionCount i=63 i=78 i=2030 SetPublishingModeCount i=63 i=78 i=2030 PublishCount i=63 i=78 i=2030 RepublishCount i=63 i=78 i=2030 TransferSubscriptionsCount i=63 i=78 i=2030 DeleteSubscriptionsCount i=63 i=78 i=2030 AddNodesCount i=63 i=78 i=2030 AddReferencesCount i=63 i=78 i=2030 DeleteNodesCount i=63 i=78 i=2030 DeleteReferencesCount i=63 i=78 i=2030 BrowseCount i=63 i=78 i=2030 BrowseNextCount i=63 i=78 i=2030 TranslateBrowsePathsToNodeIdsCount i=63 i=78 i=2030 QueryFirstCount i=63 i=78 i=2030 QueryNextCount i=63 i=78 i=2030 RegisterNodesCount i=63 i=78 i=2030 UnregisterNodesCount i=63 i=78 i=2030 SessionSecurityDiagnostics i=3179 i=3180 i=3181 i=3182 i=3183 i=3184 i=3185 i=3186 i=3187 i=2244 i=78 i=2029 SessionId i=63 i=78 i=2031 ClientUserIdOfSession i=63 i=78 i=2031 ClientUserIdHistory i=63 i=78 i=2031 AuthenticationMechanism i=63 i=78 i=2031 Encoding i=63 i=78 i=2031 TransportProtocol i=63 i=78 i=2031 SecurityMode i=63 i=78 i=2031 SecurityPolicyUri i=63 i=78 i=2031 ClientCertificate i=63 i=78 i=2031 SubscriptionDiagnosticsArray i=2171 i=78 i=2029 VendorServerInfoType i=58 ServerRedundancyType i=2035 i=58 RedundancySupport i=68 i=78 i=2034 TransparentRedundancyType i=2037 i=2038 i=2034 CurrentServerId i=68 i=78 i=2036 RedundantServerArray i=68 i=78 i=2036 NonTransparentRedundancyType i=2040 i=2034 ServerUriArray i=68 i=78 i=2039 NonTransparentNetworkRedundancyType i=11948 i=2039 ServerNetworkGroups i=68 i=78 i=11945 OperationLimitsType i=11565 i=12161 i=12162 i=11567 i=12163 i=12164 i=11569 i=11570 i=11571 i=11572 i=11573 i=11574 i=61 MaxNodesPerRead i=68 i=80 i=11564 MaxNodesPerHistoryReadData i=68 i=80 i=11564 MaxNodesPerHistoryReadEvents i=68 i=80 i=11564 MaxNodesPerWrite i=68 i=80 i=11564 MaxNodesPerHistoryUpdateData i=68 i=80 i=11564 MaxNodesPerHistoryUpdateEvents i=68 i=80 i=11564 MaxNodesPerMethodCall i=68 i=80 i=11564 MaxNodesPerBrowse i=68 i=80 i=11564 MaxNodesPerRegisterNodes i=68 i=80 i=11564 MaxNodesPerTranslateBrowsePathsToNodeIds i=68 i=80 i=11564 MaxNodesPerNodeManagement i=68 i=80 i=11564 MaxMonitoredItemsPerCall i=68 i=80 i=11564 FileType i=11576 i=12686 i=12687 i=11579 i=13341 i=24244 i=11580 i=11583 i=11585 i=11588 i=11590 i=11593 i=58 Size i=68 i=78 i=11575 Writable i=68 i=78 i=11575 UserWritable i=68 i=78 i=11575 OpenCount i=68 i=78 i=11575 MimeType i=68 i=80 i=11575 MaxByteStringLength i=68 i=80 i=11575 Open i=11581 i=11582 i=78 i=11575 InputArguments i=68 i=78 i=11580 i=297 Mode i=3 -1 OutputArguments i=68 i=78 i=11580 i=297 FileHandle i=7 -1 Close i=11584 i=78 i=11575 InputArguments i=68 i=78 i=11583 i=297 FileHandle i=7 -1 Read i=11586 i=11587 i=78 i=11575 InputArguments i=68 i=78 i=11585 i=297 FileHandle i=7 -1 i=297 Length i=6 -1 OutputArguments i=68 i=78 i=11585 i=297 Data i=15 -1 Write i=11589 i=78 i=11575 InputArguments i=68 i=78 i=11588 i=297 FileHandle i=7 -1 i=297 Data i=15 -1 GetPosition i=11591 i=11592 i=78 i=11575 InputArguments i=68 i=78 i=11590 i=297 FileHandle i=7 -1 OutputArguments i=68 i=78 i=11590 i=297 Position i=9 -1 SetPosition i=11594 i=78 i=11575 InputArguments i=68 i=78 i=11593 i=297 FileHandle i=7 -1 i=297 Position i=9 -1 AddressSpaceFileType i=11615 i=11575 ExportNamespace i=80 i=11595 NamespaceMetadataType i=11617 i=11618 i=11619 i=11620 i=11621 i=11622 i=11623 i=11624 i=16137 i=16138 i=16139 i=58 NamespaceUri i=68 i=78 i=11616 NamespaceVersion i=68 i=78 i=11616 NamespacePublicationDate i=68 i=78 i=11616 IsNamespaceSubset i=68 i=78 i=11616 StaticNodeIdTypes i=68 i=78 i=11616 StaticNumericNodeIdRange i=68 i=78 i=11616 StaticStringNodeIdPattern i=68 i=78 i=11616 NamespaceFile i=11625 i=12690 i=12691 i=11628 i=11629 i=11632 i=11634 i=11637 i=11639 i=11642 i=11595 i=80 i=11616 Size i=68 i=78 i=11624 Writable i=68 i=78 i=11624 UserWritable i=68 i=78 i=11624 OpenCount i=68 i=78 i=11624 Open i=11630 i=11631 i=78 i=11624 InputArguments i=68 i=78 i=11629 i=297 Mode i=3 -1 OutputArguments i=68 i=78 i=11629 i=297 FileHandle i=7 -1 Close i=11633 i=78 i=11624 InputArguments i=68 i=78 i=11632 i=297 FileHandle i=7 -1 Read i=11635 i=11636 i=78 i=11624 InputArguments i=68 i=78 i=11634 i=297 FileHandle i=7 -1 i=297 Length i=6 -1 OutputArguments i=68 i=78 i=11634 i=297 Data i=15 -1 Write i=11638 i=78 i=11624 InputArguments i=68 i=78 i=11637 i=297 FileHandle i=7 -1 i=297 Data i=15 -1 GetPosition i=11640 i=11641 i=78 i=11624 InputArguments i=68 i=78 i=11639 i=297 FileHandle i=7 -1 OutputArguments i=68 i=78 i=11639 i=297 Position i=9 -1 SetPosition i=11643 i=78 i=11624 InputArguments i=68 i=78 i=11642 i=297 FileHandle i=7 -1 i=297 Position i=9 -1 DefaultRolePermissions i=68 i=80 i=11616 DefaultUserRolePermissions i=68 i=80 i=11616 DefaultAccessRestrictions i=68 i=80 i=11616 NamespacesType i=11646 i=58 <NamespaceIdentifier> i=11647 i=11648 i=11649 i=11650 i=11651 i=11652 i=11653 i=11616 i=11508 i=11645 NamespaceUri i=68 i=78 i=11646 NamespaceVersion i=68 i=78 i=11646 NamespacePublicationDate i=68 i=78 i=11646 IsNamespaceSubset i=68 i=78 i=11646 StaticNodeIdTypes i=68 i=78 i=11646 StaticNumericNodeIdRange i=68 i=78 i=11646 StaticStringNodeIdPattern i=68 i=78 i=11646 BaseEventType i=2042 i=2043 i=2044 i=2045 i=2046 i=2047 i=3190 i=2050 i=2051 i=58 EventId i=68 i=78 i=2041 EventType i=68 i=78 i=2041 SourceNode i=68 i=78 i=2041 SourceName i=68 i=78 i=2041 Time i=68 i=78 i=2041 ReceiveTime i=68 i=78 i=2041 LocalTime i=68 i=80 i=2041 Message i=68 i=78 i=2041 Severity i=68 i=78 i=2041 AuditEventType i=2053 i=2054 i=2055 i=2056 i=2057 i=2041 ActionTimeStamp i=68 i=78 i=2052 Status i=68 i=78 i=2052 ServerId i=68 i=78 i=2052 ClientAuditEntryId i=68 i=78 i=2052 ClientUserId i=68 i=78 i=2052 AuditSecurityEventType i=17615 i=2052 StatusCodeId i=68 i=80 i=2058 AuditChannelEventType i=2745 i=2058 SecureChannelId i=68 i=78 i=2059 AuditOpenSecureChannelEventType i=2061 i=2746 i=2062 i=2063 i=2065 i=2066 i=2059 ClientCertificate i=68 i=78 i=2060 ClientCertificateThumbprint i=68 i=78 i=2060 RequestType i=68 i=78 i=2060 SecurityPolicyUri i=68 i=78 i=2060 SecurityMode i=68 i=78 i=2060 RequestedLifetime i=68 i=78 i=2060 AuditSessionEventType i=2070 i=2058 SessionId i=68 i=78 i=2069 AuditCreateSessionEventType i=2072 i=2073 i=2747 i=2074 i=2069 SecureChannelId i=68 i=78 i=2071 ClientCertificate i=68 i=78 i=2071 ClientCertificateThumbprint i=68 i=78 i=2071 RevisedSessionTimeout i=68 i=78 i=2071 AuditUrlMismatchEventType i=2749 i=2071 EndpointUrl i=68 i=78 i=2748 AuditActivateSessionEventType i=2076 i=2077 i=11485 i=2069 ClientSoftwareCertificates i=68 i=78 i=2075 UserIdentityToken i=68 i=78 i=2075 SecureChannelId i=68 i=78 i=2075 AuditCancelEventType i=2079 i=2069 RequestHandle i=68 i=78 i=2078 AuditCertificateEventType i=2081 i=2058 Certificate i=68 i=78 i=2080 AuditCertificateDataMismatchEventType i=2083 i=2084 i=2080 InvalidHostname i=68 i=78 i=2082 InvalidUri i=68 i=78 i=2082 AuditCertificateExpiredEventType i=2080 AuditCertificateInvalidEventType i=2080 AuditCertificateUntrustedEventType i=2080 AuditCertificateRevokedEventType i=2080 AuditCertificateMismatchEventType i=2080 AuditNodeManagementEventType i=2052 AuditAddNodesEventType i=2092 i=2090 NodesToAdd i=68 i=78 i=2091 AuditDeleteNodesEventType i=2094 i=2090 NodesToDelete i=68 i=78 i=2093 AuditAddReferencesEventType i=2096 i=2090 ReferencesToAdd i=68 i=78 i=2095 AuditDeleteReferencesEventType i=2098 i=2090 ReferencesToDelete i=68 i=78 i=2097 AuditUpdateEventType i=2052 AuditWriteUpdateEventType i=2750 i=2101 i=2102 i=2103 i=2099 AttributeId i=68 i=78 i=2100 IndexRange i=68 i=78 i=2100 OldValue i=68 i=78 i=2100 NewValue i=68 i=78 i=2100 AuditHistoryUpdateEventType i=2751 i=2099 ParameterDataTypeId i=68 i=78 i=2104 AuditUpdateMethodEventType i=2128 i=2129 i=2052 MethodId i=68 i=78 i=2127 InputArguments i=68 i=78 i=2127 SystemEventType i=2041 DeviceFailureEventType i=2130 SystemStatusChangeEventType i=11696 i=2130 SystemState i=68 i=78 i=11446 BaseModelChangeEventType i=2041 GeneralModelChangeEventType i=2134 i=2132 Changes i=68 i=78 i=2133 SemanticChangeEventType i=2739 i=2041 Changes i=68 i=78 i=2738 EventQueueOverflowEventType i=2041 ProgressEventType i=12502 i=12503 i=2041 Context i=68 i=78 i=11436 Progress i=68 i=78 i=11436 AggregateFunctionType i=58 ServerVendorCapabilityType i=63 ServerStatusType i=2139 i=2140 i=2141 i=2142 i=2752 i=2753 i=63 StartTime i=63 i=78 i=2138 CurrentTime i=63 i=78 i=2138 State i=63 i=78 i=2138 BuildInfo i=3698 i=3699 i=3700 i=3701 i=3702 i=3703 i=3051 i=78 i=2138 ProductUri i=63 i=78 i=2142 ManufacturerName i=63 i=78 i=2142 ProductName i=63 i=78 i=2142 SoftwareVersion i=63 i=78 i=2142 BuildNumber i=63 i=78 i=2142 BuildDate i=63 i=78 i=2142 SecondsTillShutdown i=63 i=78 i=2138 ShutdownReason i=63 i=78 i=2138 BuildInfoType i=3052 i=3053 i=3054 i=3055 i=3056 i=3057 i=63 ProductUri i=63 i=78 i=3051 ManufacturerName i=63 i=78 i=3051 ProductName i=63 i=78 i=3051 SoftwareVersion i=63 i=78 i=3051 BuildNumber i=63 i=78 i=3051 BuildDate i=63 i=78 i=3051 ServerDiagnosticsSummaryType i=2151 i=2152 i=2153 i=2154 i=2155 i=2156 i=2157 i=2159 i=2160 i=2161 i=2162 i=2163 i=63 ServerViewCount i=63 i=78 i=2150 CurrentSessionCount i=63 i=78 i=2150 CumulatedSessionCount i=63 i=78 i=2150 SecurityRejectedSessionCount i=63 i=78 i=2150 RejectedSessionCount i=63 i=78 i=2150 SessionTimeoutCount i=63 i=78 i=2150 SessionAbortCount i=63 i=78 i=2150 PublishingIntervalCount i=63 i=78 i=2150 CurrentSubscriptionCount i=63 i=78 i=2150 CumulatedSubscriptionCount i=63 i=78 i=2150 SecurityRejectedRequestsCount i=63 i=78 i=2150 RejectedRequestsCount i=63 i=78 i=2150 SamplingIntervalDiagnosticsArrayType i=12779 i=63 SamplingIntervalDiagnostics i=12780 i=12781 i=12782 i=12783 i=2165 i=83 i=2164 SamplingInterval i=63 i=78 i=12779 SampledMonitoredItemsCount i=63 i=78 i=12779 MaxSampledMonitoredItemsCount i=63 i=78 i=12779 DisabledMonitoredItemsSamplingCount i=63 i=78 i=12779 SamplingIntervalDiagnosticsType i=2166 i=11697 i=11698 i=11699 i=63 SamplingInterval i=63 i=78 i=2165 SampledMonitoredItemsCount i=63 i=78 i=2165 MaxSampledMonitoredItemsCount i=63 i=78 i=2165 DisabledMonitoredItemsSamplingCount i=63 i=78 i=2165 SubscriptionDiagnosticsArrayType i=12784 i=63 SubscriptionDiagnostics i=12785 i=12786 i=12787 i=12788 i=12789 i=12790 i=12791 i=12792 i=12793 i=12794 i=12795 i=12796 i=12797 i=12798 i=12799 i=12800 i=12801 i=12802 i=12803 i=12804 i=12805 i=12806 i=12807 i=12808 i=12809 i=12810 i=12811 i=12812 i=12813 i=12814 i=12815 i=2172 i=83 i=2171 SessionId i=63 i=78 i=12784 SubscriptionId i=63 i=78 i=12784 Priority i=63 i=78 i=12784 PublishingInterval i=63 i=78 i=12784 MaxKeepAliveCount i=63 i=78 i=12784 MaxLifetimeCount i=63 i=78 i=12784 MaxNotificationsPerPublish i=63 i=78 i=12784 PublishingEnabled i=63 i=78 i=12784 ModifyCount i=63 i=78 i=12784 EnableCount i=63 i=78 i=12784 DisableCount i=63 i=78 i=12784 RepublishRequestCount i=63 i=78 i=12784 RepublishMessageRequestCount i=63 i=78 i=12784 RepublishMessageCount i=63 i=78 i=12784 TransferRequestCount i=63 i=78 i=12784 TransferredToAltClientCount i=63 i=78 i=12784 TransferredToSameClientCount i=63 i=78 i=12784 PublishRequestCount i=63 i=78 i=12784 DataChangeNotificationsCount i=63 i=78 i=12784 EventNotificationsCount i=63 i=78 i=12784 NotificationsCount i=63 i=78 i=12784 LatePublishRequestCount i=63 i=78 i=12784 CurrentKeepAliveCount i=63 i=78 i=12784 CurrentLifetimeCount i=63 i=78 i=12784 UnacknowledgedMessageCount i=63 i=78 i=12784 DiscardedMessageCount i=63 i=78 i=12784 MonitoredItemCount i=63 i=78 i=12784 DisabledMonitoredItemCount i=63 i=78 i=12784 MonitoringQueueOverflowCount i=63 i=78 i=12784 NextSequenceNumber i=63 i=78 i=12784 EventQueueOverflowCount i=63 i=78 i=12784 SubscriptionDiagnosticsType i=2173 i=2174 i=2175 i=2176 i=2177 i=8888 i=2179 i=2180 i=2181 i=2182 i=2183 i=2184 i=2185 i=2186 i=2187 i=2188 i=2189 i=2190 i=2191 i=2998 i=2193 i=8889 i=8890 i=8891 i=8892 i=8893 i=8894 i=8895 i=8896 i=8897 i=8902 i=63 SessionId i=63 i=78 i=2172 SubscriptionId i=63 i=78 i=2172 Priority i=63 i=78 i=2172 PublishingInterval i=63 i=78 i=2172 MaxKeepAliveCount i=63 i=78 i=2172 MaxLifetimeCount i=63 i=78 i=2172 MaxNotificationsPerPublish i=63 i=78 i=2172 PublishingEnabled i=63 i=78 i=2172 ModifyCount i=63 i=78 i=2172 EnableCount i=63 i=78 i=2172 DisableCount i=63 i=78 i=2172 RepublishRequestCount i=63 i=78 i=2172 RepublishMessageRequestCount i=63 i=78 i=2172 RepublishMessageCount i=63 i=78 i=2172 TransferRequestCount i=63 i=78 i=2172 TransferredToAltClientCount i=63 i=78 i=2172 TransferredToSameClientCount i=63 i=78 i=2172 PublishRequestCount i=63 i=78 i=2172 DataChangeNotificationsCount i=63 i=78 i=2172 EventNotificationsCount i=63 i=78 i=2172 NotificationsCount i=63 i=78 i=2172 LatePublishRequestCount i=63 i=78 i=2172 CurrentKeepAliveCount i=63 i=78 i=2172 CurrentLifetimeCount i=63 i=78 i=2172 UnacknowledgedMessageCount i=63 i=78 i=2172 DiscardedMessageCount i=63 i=78 i=2172 MonitoredItemCount i=63 i=78 i=2172 DisabledMonitoredItemCount i=63 i=78 i=2172 MonitoringQueueOverflowCount i=63 i=78 i=2172 NextSequenceNumber i=63 i=78 i=2172 EventQueueOverflowCount i=63 i=78 i=2172 SessionDiagnosticsArrayType i=12816 i=63 SessionDiagnostics i=12817 i=12818 i=12819 i=12820 i=12821 i=12822 i=12823 i=12824 i=12825 i=12826 i=12827 i=12828 i=12829 i=12830 i=12831 i=12832 i=12833 i=12834 i=12835 i=12836 i=12837 i=12838 i=12839 i=12840 i=12841 i=12842 i=12843 i=12844 i=12845 i=12846 i=12847 i=12848 i=12849 i=12850 i=12851 i=12852 i=12853 i=12854 i=12855 i=12856 i=12857 i=12858 i=12859 i=2197 i=83 i=2196 SessionId i=63 i=78 i=12816 SessionName i=63 i=78 i=12816 ClientDescription i=63 i=78 i=12816 ServerUri i=63 i=78 i=12816 EndpointUrl i=63 i=78 i=12816 LocaleIds i=63 i=78 i=12816 ActualSessionTimeout i=63 i=78 i=12816 MaxResponseMessageSize i=63 i=78 i=12816 ClientConnectionTime i=63 i=78 i=12816 ClientLastContactTime i=63 i=78 i=12816 CurrentSubscriptionsCount i=63 i=78 i=12816 CurrentMonitoredItemsCount i=63 i=78 i=12816 CurrentPublishRequestsInQueue i=63 i=78 i=12816 TotalRequestCount i=63 i=78 i=12816 UnauthorizedRequestCount i=63 i=78 i=12816 ReadCount i=63 i=78 i=12816 HistoryReadCount i=63 i=78 i=12816 WriteCount i=63 i=78 i=12816 HistoryUpdateCount i=63 i=78 i=12816 CallCount i=63 i=78 i=12816 CreateMonitoredItemsCount i=63 i=78 i=12816 ModifyMonitoredItemsCount i=63 i=78 i=12816 SetMonitoringModeCount i=63 i=78 i=12816 SetTriggeringCount i=63 i=78 i=12816 DeleteMonitoredItemsCount i=63 i=78 i=12816 CreateSubscriptionCount i=63 i=78 i=12816 ModifySubscriptionCount i=63 i=78 i=12816 SetPublishingModeCount i=63 i=78 i=12816 PublishCount i=63 i=78 i=12816 RepublishCount i=63 i=78 i=12816 TransferSubscriptionsCount i=63 i=78 i=12816 DeleteSubscriptionsCount i=63 i=78 i=12816 AddNodesCount i=63 i=78 i=12816 AddReferencesCount i=63 i=78 i=12816 DeleteNodesCount i=63 i=78 i=12816 DeleteReferencesCount i=63 i=78 i=12816 BrowseCount i=63 i=78 i=12816 BrowseNextCount i=63 i=78 i=12816 TranslateBrowsePathsToNodeIdsCount i=63 i=78 i=12816 QueryFirstCount i=63 i=78 i=12816 QueryNextCount i=63 i=78 i=12816 RegisterNodesCount i=63 i=78 i=12816 UnregisterNodesCount i=63 i=78 i=12816 SessionDiagnosticsVariableType i=2198 i=2199 i=2200 i=2201 i=2202 i=2203 i=2204 i=3050 i=2205 i=2206 i=2207 i=2208 i=2209 i=8900 i=11892 i=2217 i=2218 i=2219 i=2220 i=2221 i=2222 i=2223 i=2224 i=2225 i=2226 i=2227 i=2228 i=2229 i=2230 i=2231 i=2232 i=2233 i=2234 i=2235 i=2236 i=2237 i=2238 i=2239 i=2240 i=2241 i=2242 i=2730 i=2731 i=63 SessionId i=63 i=78 i=2197 SessionName i=63 i=78 i=2197 ClientDescription i=63 i=78 i=2197 ServerUri i=63 i=78 i=2197 EndpointUrl i=63 i=78 i=2197 LocaleIds i=63 i=78 i=2197 ActualSessionTimeout i=63 i=78 i=2197 MaxResponseMessageSize i=63 i=78 i=2197 ClientConnectionTime i=63 i=78 i=2197 ClientLastContactTime i=63 i=78 i=2197 CurrentSubscriptionsCount i=63 i=78 i=2197 CurrentMonitoredItemsCount i=63 i=78 i=2197 CurrentPublishRequestsInQueue i=63 i=78 i=2197 TotalRequestCount i=63 i=78 i=2197 UnauthorizedRequestCount i=63 i=78 i=2197 ReadCount i=63 i=78 i=2197 HistoryReadCount i=63 i=78 i=2197 WriteCount i=63 i=78 i=2197 HistoryUpdateCount i=63 i=78 i=2197 CallCount i=63 i=78 i=2197 CreateMonitoredItemsCount i=63 i=78 i=2197 ModifyMonitoredItemsCount i=63 i=78 i=2197 SetMonitoringModeCount i=63 i=78 i=2197 SetTriggeringCount i=63 i=78 i=2197 DeleteMonitoredItemsCount i=63 i=78 i=2197 CreateSubscriptionCount i=63 i=78 i=2197 ModifySubscriptionCount i=63 i=78 i=2197 SetPublishingModeCount i=63 i=78 i=2197 PublishCount i=63 i=78 i=2197 RepublishCount i=63 i=78 i=2197 TransferSubscriptionsCount i=63 i=78 i=2197 DeleteSubscriptionsCount i=63 i=78 i=2197 AddNodesCount i=63 i=78 i=2197 AddReferencesCount i=63 i=78 i=2197 DeleteNodesCount i=63 i=78 i=2197 DeleteReferencesCount i=63 i=78 i=2197 BrowseCount i=63 i=78 i=2197 BrowseNextCount i=63 i=78 i=2197 TranslateBrowsePathsToNodeIdsCount i=63 i=78 i=2197 QueryFirstCount i=63 i=78 i=2197 QueryNextCount i=63 i=78 i=2197 RegisterNodesCount i=63 i=78 i=2197 UnregisterNodesCount i=63 i=78 i=2197 SessionSecurityDiagnosticsArrayType i=12860 i=63 SessionSecurityDiagnostics i=12861 i=12862 i=12863 i=12864 i=12865 i=12866 i=12867 i=12868 i=12869 i=2244 i=83 i=2243 SessionId i=63 i=78 i=12860 ClientUserIdOfSession i=63 i=78 i=12860 ClientUserIdHistory i=63 i=78 i=12860 AuthenticationMechanism i=63 i=78 i=12860 Encoding i=63 i=78 i=12860 TransportProtocol i=63 i=78 i=12860 SecurityMode i=63 i=78 i=12860 SecurityPolicyUri i=63 i=78 i=12860 ClientCertificate i=63 i=78 i=12860 SessionSecurityDiagnosticsType i=2245 i=2246 i=2247 i=2248 i=2249 i=2250 i=2251 i=2252 i=3058 i=63 SessionId i=63 i=78 i=2244 ClientUserIdOfSession i=63 i=78 i=2244 ClientUserIdHistory i=63 i=78 i=2244 AuthenticationMechanism i=63 i=78 i=2244 Encoding i=63 i=78 i=2244 TransportProtocol i=63 i=78 i=2244 SecurityMode i=63 i=78 i=2244 SecurityPolicyUri i=63 i=78 i=2244 ClientCertificate i=63 i=78 i=2244 OptionSetType i=11488 i=11701 i=63 OptionSetValues i=68 i=78 i=11487 BitMask i=68 i=80 i=11487 SelectionListType i=17632 i=17633 i=16312 i=63 Selections i=68 i=78 i=16309 SelectionDescriptions i=68 i=80 i=16309 RestrictToList i=68 i=80 i=16309 AudioVariableType i=17988 i=17989 i=17990 i=63 ListId i=68 i=80 i=17986 AgencyId i=68 i=80 i=17986 VersionId i=68 i=80 i=17986 EventTypes i=86 i=2041 i=61 Server i=2254 i=2255 i=2256 i=2267 i=2994 i=12885 i=17634 i=2268 i=2274 i=2295 i=2296 i=11715 i=11492 i=12873 i=12749 i=12886 i=85 i=2004 ServerArray i=68 i=2253 NamespaceArray i=68 i=2253 ServerStatus i=2257 i=2258 i=2259 i=2260 i=2992 i=2993 i=2138 i=2253 StartTime i=63 i=2256 CurrentTime i=63 i=2256 State i=63 i=2256 BuildInfo i=2262 i=2263 i=2261 i=2264 i=2265 i=2266 i=3051 i=2256 ProductUri i=63 i=2260 ManufacturerName i=63 i=2260 ProductName i=63 i=2260 SoftwareVersion i=63 i=2260 BuildNumber i=63 i=2260 BuildDate i=63 i=2260 SecondsTillShutdown i=63 i=2256 ShutdownReason i=63 i=2256 ServiceLevel i=68 i=2253 Auditing i=68 i=2253 EstimatedReturnTime i=68 i=2253 LocalTime i=68 i=2253 ServerCapabilities i=2269 i=2271 i=2272 i=2735 i=2736 i=2737 i=3704 i=11702 i=11703 i=12911 i=11704 i=2996 i=2997 i=15606 i=2013 i=2253 ServerProfileArray i=68 i=2268 LocaleIdArray i=68 i=2268 MinSupportedSampleRate i=68 i=2268 MaxBrowseContinuationPoints i=68 i=2268 MaxQueryContinuationPoints i=68 i=2268 MaxHistoryContinuationPoints i=68 i=2268 SoftwareCertificates i=68 i=2268 MaxArrayLength i=68 i=2268 MaxStringLength i=68 i=2268 MaxByteStringLength i=68 i=2268 OperationLimits i=11705 i=12165 i=12166 i=11707 i=12167 i=12168 i=11709 i=11710 i=11711 i=11712 i=11713 i=11714 i=11564 i=2268 MaxNodesPerRead i=68 i=11704 MaxNodesPerHistoryReadData i=68 i=11704 MaxNodesPerHistoryReadEvents i=68 i=11704 MaxNodesPerWrite i=68 i=11704 MaxNodesPerHistoryUpdateData i=68 i=11704 MaxNodesPerHistoryUpdateEvents i=68 i=11704 MaxNodesPerMethodCall i=68 i=11704 MaxNodesPerBrowse i=68 i=11704 MaxNodesPerRegisterNodes i=68 i=11704 MaxNodesPerTranslateBrowsePathsToNodeIds i=68 i=11704 MaxNodesPerNodeManagement i=68 i=11704 MaxMonitoredItemsPerCall i=68 i=11704 ModellingRules i=61 i=2268 AggregateFunctions i=61 i=2268 RoleSet i=16301 i=16304 i=15607 i=2268 AddRole i=16302 i=16303 i=15606 InputArguments i=68 i=16301 i=297 RoleName i=12 -1 i=297 NamespaceUri i=12 -1 OutputArguments i=68 i=16301 i=297 RoleNodeId i=17 -1 RemoveRole i=16305 i=15606 InputArguments i=68 i=16304 i=297 RoleNodeId i=17 -1 ServerDiagnostics i=2275 i=2289 i=2290 i=3706 i=2294 i=2020 i=2253 ServerDiagnosticsSummary i=2276 i=2277 i=2278 i=2279 i=3705 i=2281 i=2282 i=2284 i=2285 i=2286 i=2287 i=2288 i=2150 i=2274 ServerViewCount i=63 i=2275 CurrentSessionCount i=63 i=2275 CumulatedSessionCount i=63 i=2275 SecurityRejectedSessionCount i=63 i=2275 RejectedSessionCount i=63 i=2275 SessionTimeoutCount i=63 i=2275 SessionAbortCount i=63 i=2275 PublishingIntervalCount i=63 i=2275 CurrentSubscriptionCount i=63 i=2275 CumulatedSubscriptionCount i=63 i=2275 SecurityRejectedRequestsCount i=63 i=2275 RejectedRequestsCount i=63 i=2275 SamplingIntervalDiagnosticsArray i=2164 i=2274 SubscriptionDiagnosticsArray i=2171 i=2274 SessionsDiagnosticsSummary i=3707 i=3708 i=2026 i=2274 SessionDiagnosticsArray i=2196 i=3706 SessionSecurityDiagnosticsArray i=2243 i=3706 EnabledFlag i=68 i=2274 VendorServerInfo i=2033 i=2253 ServerRedundancy i=3709 i=2034 i=2253 RedundancySupport i=68 i=2296 Namespaces i=11645 i=2253 GetMonitoredItems i=11493 i=11494 i=2253 InputArguments i=68 i=11492 i=297 SubscriptionId i=7 -1 OutputArguments i=68 i=11492 i=297 ServerHandles i=7 1 0 i=297 ClientHandles i=7 1 0 ResendData i=12874 i=2253 InputArguments i=68 i=12873 i=297 SubscriptionId i=7 -1 SetSubscriptionDurable i=12750 i=12751 i=2253 InputArguments i=68 i=12749 i=297 SubscriptionId i=7 -1 i=297 LifetimeInHours i=7 -1 OutputArguments i=68 i=12749 i=297 RevisedLifetimeInHours i=7 -1 RequestServerStateChange i=12887 i=2253 InputArguments i=68 i=12886 i=297 State i=852 -1 i=297 EstimatedReturnTime i=13 -1 i=297 SecondsTillShutdown i=7 -1 i=297 Reason i=21 -1 i=297 Restart i=1 -1 CurrentServerId i=68 RedundantServerArray i=68 ServerUriArray i=68 ServerNetworkGroups i=68 HistoryServerCapabilities i=11193 i=11242 i=11273 i=11274 i=11196 i=11197 i=11198 i=11199 i=11200 i=11281 i=11282 i=11283 i=11502 i=11275 i=11201 i=19091 i=2268 i=2330 AccessHistoryDataCapability i=68 i=11192 AccessHistoryEventsCapability i=68 i=11192 MaxReturnDataValues i=68 i=11192 MaxReturnEventValues i=68 i=11192 InsertDataCapability i=68 i=11192 ReplaceDataCapability i=68 i=11192 UpdateDataCapability i=68 i=11192 DeleteRawCapability i=68 i=11192 DeleteAtTimeCapability i=68 i=11192 InsertEventCapability i=68 i=11192 ReplaceEventCapability i=68 i=11192 UpdateEventCapability i=68 i=11192 DeleteEventCapability i=68 i=11192 InsertAnnotationCapability i=68 i=11192 AggregateFunctions i=61 i=11192 ServerTimestampSupported i=68 i=11192 BitFieldMaskDataType i=9 KeyValuePair i=22 AdditionalParametersType i=22 EphemeralKeyType i=22 EndpointType i=22 StateMachineType i=2769 i=2770 i=58 CurrentState i=3720 i=2755 i=78 i=2299 Id i=68 i=78 i=2769 LastTransition i=3724 i=2762 i=80 i=2299 Id i=68 i=78 i=2770 StateVariableType i=2756 i=2757 i=2758 i=2759 i=63 Id i=68 i=78 i=2755 Name i=68 i=80 i=2755 Number i=68 i=80 i=2755 EffectiveDisplayName i=68 i=80 i=2755 TransitionVariableType i=2763 i=2764 i=2765 i=2766 i=11456 i=63 Id i=68 i=78 i=2762 Name i=68 i=80 i=2762 Number i=68 i=80 i=2762 TransitionTime i=68 i=80 i=2762 EffectiveTransitionTime i=68 i=80 i=2762 FiniteStateMachineType i=2772 i=2773 i=17635 i=17636 i=2299 CurrentState i=3728 i=2760 i=78 i=2771 Id i=68 i=78 i=2772 LastTransition i=3732 i=2767 i=80 i=2771 Id i=68 i=78 i=2773 AvailableStates i=63 i=80 i=2771 AvailableTransitions i=63 i=80 i=2771 FiniteStateVariableType i=2761 i=2755 Id i=68 i=78 i=2760 FiniteTransitionVariableType i=2768 i=2762 Id i=68 i=78 i=2767 StateType i=2308 i=58 StateNumber i=68 i=78 i=2307 InitialStateType i=2307 TransitionType i=2312 i=58 TransitionNumber i=68 i=78 i=2310 ChoiceStateType i=2307 HasGuard i=47 GuardOf GuardVariableType i=63 ExpressionGuardVariableType i=15129 i=15113 Expression i=68 i=78 i=15128 ElseGuardVariableType i=15113 RationalNumberType i=17712 i=17713 i=63 Numerator i=63 i=78 i=17709 Denominator i=63 i=78 i=17709 VectorType i=17715 i=63 VectorUnit i=68 i=80 i=17714 3DVectorType i=18769 i=18770 i=18771 i=17714 X i=63 i=78 i=17716 Y i=63 i=78 i=17716 Z i=63 i=78 i=17716 CartesianCoordinatesType i=18773 i=63 LengthUnit i=68 i=80 i=18772 3DCartesianCoordinatesType i=18776 i=18777 i=18778 i=18772 X i=63 i=78 i=18774 Y i=63 i=78 i=18774 Z i=63 i=78 i=18774 OrientationType i=18780 i=63 AngleUnit i=68 i=80 i=18779 3DOrientationType i=18783 i=18784 i=18785 i=18779 A i=63 i=78 i=18781 B i=63 i=78 i=18781 C i=63 i=78 i=18781 FrameType i=18801 i=18787 i=18788 i=18789 i=18790 i=63 CartesianCoordinates i=18772 i=78 i=18786 Orientation i=18779 i=78 i=18786 Constant i=68 i=80 i=18786 BaseFrame i=63 i=80 i=18786 FixedBase i=68 i=80 i=18786 3DFrameType i=18796 i=18792 i=18786 CartesianCoordinates i=18798 i=18799 i=18800 i=18774 i=78 i=18791 X i=63 i=78 i=18796 Y i=63 i=78 i=18796 Z i=63 i=78 i=18796 Orientation i=19074 i=19075 i=19076 i=18781 i=78 i=18791 A i=63 i=78 i=18792 B i=63 i=78 i=18792 C i=63 i=78 i=18792 RationalNumber i=22 Vector i=22 3DVector i=18807 CartesianCoordinates i=22 3DCartesianCoordinates i=18809 Orientation i=22 3DOrientation i=18811 Frame i=22 3DFrame i=18813 TransitionEventType i=2774 i=2775 i=2776 i=2041 Transition i=3754 i=2762 i=78 i=2311 Id i=68 i=78 i=2774 FromState i=3746 i=2755 i=78 i=2311 Id i=68 i=78 i=2775 ToState i=3750 i=2755 i=78 i=2311 Id i=68 i=78 i=2776 AuditUpdateStateEventType i=2777 i=2778 i=2127 OldStateId i=68 i=78 i=2315 NewStateId i=68 i=78 i=2315 OpenFileMode i=11940 i=29 EnumValues i=68 i=11939 i=7616 1 Read i=7616 2 Write i=7616 4 EraseExisting i=7616 8 Append FileDirectoryType i=13354 i=13366 i=13387 i=13390 i=13393 i=13395 i=61 <FileDirectoryName> i=13355 i=13358 i=17718 i=13363 i=13353 i=11508 i=13353 CreateDirectory i=13356 i=13357 i=78 i=13354 InputArguments i=68 i=78 i=13355 i=297 DirectoryName i=12 -1 OutputArguments i=68 i=78 i=13355 i=297 DirectoryNodeId i=17 -1 CreateFile i=13359 i=13360 i=78 i=13354 InputArguments i=68 i=78 i=13358 i=297 FileName i=12 -1 i=297 RequestFileOpen i=1 -1 OutputArguments i=68 i=78 i=13358 i=297 FileNodeId i=17 -1 i=297 FileHandle i=7 -1 Delete i=17719 i=78 i=13354 InputArguments i=68 i=78 i=17718 i=297 ObjectToDelete i=17 -1 MoveOrCopy i=13364 i=13365 i=78 i=13354 InputArguments i=68 i=78 i=13363 i=297 ObjectToMoveOrCopy i=17 -1 i=297 TargetDirectory i=17 -1 i=297 CreateCopy i=1 -1 i=297 NewName i=12 -1 OutputArguments i=68 i=78 i=13363 i=297 NewNodeId i=17 -1 <FileName> i=13367 i=13368 i=13369 i=13370 i=13372 i=13375 i=13377 i=13380 i=13382 i=13385 i=11575 i=11508 i=13353 Size i=68 i=78 i=13366 Writable i=68 i=78 i=13366 UserWritable i=68 i=78 i=13366 OpenCount i=68 i=78 i=13366 Open i=13373 i=13374 i=78 i=13366 InputArguments i=68 i=78 i=13372 i=297 Mode i=3 -1 OutputArguments i=68 i=78 i=13372 i=297 FileHandle i=7 -1 Close i=13376 i=78 i=13366 InputArguments i=68 i=78 i=13375 i=297 FileHandle i=7 -1 Read i=13378 i=13379 i=78 i=13366 InputArguments i=68 i=78 i=13377 i=297 FileHandle i=7 -1 i=297 Length i=6 -1 OutputArguments i=68 i=78 i=13377 i=297 Data i=15 -1 Write i=13381 i=78 i=13366 InputArguments i=68 i=78 i=13380 i=297 FileHandle i=7 -1 i=297 Data i=15 -1 GetPosition i=13383 i=13384 i=78 i=13366 InputArguments i=68 i=78 i=13382 i=297 FileHandle i=7 -1 OutputArguments i=68 i=78 i=13382 i=297 Position i=9 -1 SetPosition i=13386 i=78 i=13366 InputArguments i=68 i=78 i=13385 i=297 FileHandle i=7 -1 i=297 Position i=9 -1 CreateDirectory i=13388 i=13389 i=78 i=13353 InputArguments i=68 i=78 i=13387 i=297 DirectoryName i=12 -1 OutputArguments i=68 i=78 i=13387 i=297 DirectoryNodeId i=17 -1 CreateFile i=13391 i=13392 i=78 i=13353 InputArguments i=68 i=78 i=13390 i=297 FileName i=12 -1 i=297 RequestFileOpen i=1 -1 OutputArguments i=68 i=78 i=13390 i=297 FileNodeId i=17 -1 i=297 FileHandle i=7 -1 Delete i=13394 i=78 i=13353 InputArguments i=68 i=78 i=13393 i=297 ObjectToDelete i=17 -1 MoveOrCopy i=13396 i=13397 i=78 i=13353 InputArguments i=68 i=78 i=13395 i=297 ObjectToMoveOrCopy i=17 -1 i=297 TargetDirectory i=17 -1 i=297 CreateCopy i=1 -1 i=297 NewName i=12 -1 OutputArguments i=68 i=78 i=13395 i=297 NewNodeId i=17 -1 FileSystem i=16348 i=16351 i=16354 i=16356 i=13353 CreateDirectory i=16349 i=16350 i=16314 InputArguments i=68 i=16348 i=297 DirectoryName i=12 -1 OutputArguments i=68 i=16348 i=297 DirectoryNodeId i=17 -1 CreateFile i=16352 i=16353 i=16314 InputArguments i=68 i=16351 i=297 FileName i=12 -1 i=297 RequestFileOpen i=1 -1 OutputArguments i=68 i=16351 i=297 FileNodeId i=17 -1 i=297 FileHandle i=7 -1 Delete i=16355 i=16314 InputArguments i=68 i=16354 i=297 ObjectToDelete i=17 -1 MoveOrCopy i=16357 i=16358 i=16314 InputArguments i=68 i=16356 i=297 ObjectToMoveOrCopy i=17 -1 i=297 TargetDirectory i=17 -1 i=297 CreateCopy i=1 -1 i=297 NewName i=12 -1 OutputArguments i=68 i=16356 i=297 NewNodeId i=17 -1 TemporaryFileTransferType i=15745 i=15746 i=15749 i=15751 i=15754 i=58 ClientProcessingTimeout i=68 i=78 i=15744 GenerateFileForRead i=15747 i=15748 i=78 i=15744 InputArguments i=68 i=78 i=15746 i=297 GenerateOptions i=24 -1 OutputArguments i=68 i=78 i=15746 i=297 FileNodeId i=17 -1 i=297 FileHandle i=7 -1 i=297 CompletionStateMachine i=17 -1 GenerateFileForWrite i=16359 i=15750 i=78 i=15744 InputArguments i=68 i=78 i=15749 i=297 GenerateOptions i=24 -1 OutputArguments i=68 i=78 i=15749 i=297 FileNodeId i=17 -1 i=297 FileHandle i=7 -1 CloseAndCommit i=15752 i=15753 i=78 i=15744 InputArguments i=68 i=78 i=15751 i=297 FileHandle i=7 -1 OutputArguments i=68 i=78 i=15751 i=297 CompletionStateMachine i=17 -1 <TransferState> i=15755 i=15794 i=15803 i=11508 i=15744 CurrentState i=15756 i=2760 i=78 i=15754 Id i=68 i=78 i=15755 Reset i=78 i=15754 FileTransferStateMachineType i=15815 i=15817 i=15819 i=15821 i=15823 i=15825 i=15827 i=15829 i=15831 i=15833 i=15835 i=15837 i=15839 i=15841 i=15843 i=2771 Idle i=15816 i=15825 i=15829 i=15831 i=15833 i=15841 i=2309 i=15803 StateNumber i=68 i=78 i=15815 1 ReadPrepare i=15818 i=15825 i=15827 i=15835 i=2307 i=15803 StateNumber i=68 i=78 i=15817 2 ReadTransfer i=15820 i=15827 i=15829 i=15837 i=2307 i=15803 StateNumber i=68 i=78 i=15819 3 ApplyWrite i=15822 i=15831 i=15833 i=15839 i=2307 i=15803 StateNumber i=68 i=78 i=15821 4 Error i=15824 i=15835 i=15837 i=15839 i=15841 i=2307 i=15803 StateNumber i=68 i=78 i=15823 5 IdleToReadPrepare i=15826 i=15815 i=15817 i=2311 i=2310 i=15803 TransitionNumber i=68 i=78 i=15825 12 ReadPrepareToReadTransfer i=15828 i=15817 i=15819 i=2311 i=2310 i=15803 TransitionNumber i=68 i=78 i=15827 23 ReadTransferToIdle i=15830 i=15819 i=15815 i=2311 i=2310 i=15803 TransitionNumber i=68 i=78 i=15829 31 IdleToApplyWrite i=15832 i=15815 i=15821 i=2311 i=2310 i=15803 TransitionNumber i=68 i=78 i=15831 14 ApplyWriteToIdle i=15834 i=15821 i=15815 i=2311 i=2310 i=15803 TransitionNumber i=68 i=78 i=15833 41 ReadPrepareToError i=15836 i=15817 i=15823 i=2311 i=2310 i=15803 TransitionNumber i=68 i=78 i=15835 25 ReadTransferToError i=15838 i=15819 i=15823 i=2311 i=2310 i=15803 TransitionNumber i=68 i=78 i=15837 35 ApplyWriteToError i=15840 i=15821 i=15823 i=2311 i=2310 i=15803 TransitionNumber i=68 i=78 i=15839 45 ErrorToIdle i=15842 i=15823 i=15815 i=2311 i=2310 i=15803 TransitionNumber i=68 i=78 i=15841 51 Reset i=78 i=15803 RoleSetType i=15608 i=15997 i=16000 i=58 <RoleName> i=16162 i=15620 i=11508 i=15607 Identities i=68 i=78 i=15608 AddRole i=15998 i=15999 i=78 i=15607 InputArguments i=68 i=78 i=15997 i=297 RoleName i=12 -1 i=297 NamespaceUri i=12 -1 OutputArguments i=68 i=78 i=15997 i=297 RoleNodeId i=17 -1 RemoveRole i=16001 i=78 i=15607 InputArguments i=68 i=78 i=16000 i=297 RoleNodeId i=17 -1 RoleType i=16173 i=16174 i=15410 i=16175 i=15411 i=15624 i=15626 i=16176 i=16178 i=16180 i=16182 i=58 Identities i=68 i=78 i=15620 Applications i=68 i=80 i=15620 ApplicationsExclude i=68 i=80 i=15620 Endpoints i=68 i=80 i=15620 EndpointsExclude i=68 i=80 i=15620 AddIdentity i=15625 i=80 i=15620 InputArguments i=68 i=78 i=15624 i=297 Rule i=15634 -1 RemoveIdentity i=15627 i=80 i=15620 InputArguments i=68 i=78 i=15626 i=297 Rule i=15634 -1 AddApplication i=16177 i=80 i=15620 InputArguments i=68 i=78 i=16176 i=297 ApplicationUri i=12 -1 RemoveApplication i=16179 i=80 i=15620 InputArguments i=68 i=78 i=16178 i=297 ApplicationUri i=12 -1 AddEndpoint i=16181 i=80 i=15620 InputArguments i=68 i=78 i=16180 i=297 Endpoint i=15528 -1 RemoveEndpoint i=16183 i=80 i=15620 InputArguments i=68 i=78 i=16182 i=297 Endpoint i=15528 -1 IdentityCriteriaType i=15633 i=29 EnumValues i=68 i=15632 i=7616 1 UserName i=7616 2 Thumbprint i=7616 3 Role i=7616 4 GroupId i=7616 5 Anonymous i=7616 6 AuthenticatedUser i=7616 7 Application IdentityMappingRuleType i=22 RoleMappingRuleChangedAuditEventType i=2127 Anonymous i=16192 i=16193 i=15412 i=16194 i=15413 i=15648 i=15650 i=16195 i=16197 i=16199 i=16201 i=15606 i=15620 Identities i=68 i=15644 Applications i=68 i=15644 ApplicationsExclude i=68 i=15644 Endpoints i=68 i=15644 EndpointsExclude i=68 i=15644 AddIdentity i=15649 i=15644 InputArguments i=68 i=15648 i=297 Rule i=15634 -1 RemoveIdentity i=15651 i=15644 InputArguments i=68 i=15650 i=297 Rule i=15634 -1 AddApplication i=16196 i=15644 InputArguments i=68 i=16195 i=297 ApplicationUri i=12 -1 RemoveApplication i=16198 i=15644 InputArguments i=68 i=16197 i=297 ApplicationUri i=12 -1 AddEndpoint i=16200 i=15644 InputArguments i=68 i=16199 i=297 Endpoint i=15528 -1 RemoveEndpoint i=16202 i=15644 InputArguments i=68 i=16201 i=297 Endpoint i=15528 -1 AuthenticatedUser i=16203 i=16204 i=15414 i=16205 i=15415 i=15660 i=15662 i=16206 i=16208 i=16210 i=16212 i=15606 i=15620 Identities i=68 i=15656 Applications i=68 i=15656 ApplicationsExclude i=68 i=15656 Endpoints i=68 i=15656 EndpointsExclude i=68 i=15656 AddIdentity i=15661 i=15656 InputArguments i=68 i=15660 i=297 Rule i=15634 -1 RemoveIdentity i=15663 i=15656 InputArguments i=68 i=15662 i=297 Rule i=15634 -1 AddApplication i=16207 i=15656 InputArguments i=68 i=16206 i=297 ApplicationUri i=12 -1 RemoveApplication i=16209 i=15656 InputArguments i=68 i=16208 i=297 ApplicationUri i=12 -1 AddEndpoint i=16211 i=15656 InputArguments i=68 i=16210 i=297 Endpoint i=15528 -1 RemoveEndpoint i=16213 i=15656 InputArguments i=68 i=16212 i=297 Endpoint i=15528 -1 Observer i=16214 i=16215 i=15416 i=16216 i=15417 i=15672 i=15674 i=16217 i=16219 i=16221 i=16223 i=15606 i=15620 Identities i=68 i=15668 Applications i=68 i=15668 ApplicationsExclude i=68 i=15668 Endpoints i=68 i=15668 EndpointsExclude i=68 i=15668 AddIdentity i=15673 i=15668 InputArguments i=68 i=15672 i=297 Rule i=15634 -1 RemoveIdentity i=15675 i=15668 InputArguments i=68 i=15674 i=297 Rule i=15634 -1 AddApplication i=16218 i=15668 InputArguments i=68 i=16217 i=297 ApplicationUri i=12 -1 RemoveApplication i=16220 i=15668 InputArguments i=68 i=16219 i=297 ApplicationUri i=12 -1 AddEndpoint i=16222 i=15668 InputArguments i=68 i=16221 i=297 Endpoint i=15528 -1 RemoveEndpoint i=16224 i=15668 InputArguments i=68 i=16223 i=297 Endpoint i=15528 -1 Operator i=16225 i=16226 i=15418 i=16227 i=15423 i=15684 i=15686 i=16228 i=16230 i=16232 i=16234 i=15606 i=15620 Identities i=68 i=15680 Applications i=68 i=15680 ApplicationsExclude i=68 i=15680 Endpoints i=68 i=15680 EndpointsExclude i=68 i=15680 AddIdentity i=15685 i=15680 InputArguments i=68 i=15684 i=297 Rule i=15634 -1 RemoveIdentity i=15687 i=15680 InputArguments i=68 i=15686 i=297 Rule i=15634 -1 AddApplication i=16229 i=15680 InputArguments i=68 i=16228 i=297 ApplicationUri i=12 -1 RemoveApplication i=16231 i=15680 InputArguments i=68 i=16230 i=297 ApplicationUri i=12 -1 AddEndpoint i=16233 i=15680 InputArguments i=68 i=16232 i=297 Endpoint i=15528 -1 RemoveEndpoint i=16235 i=15680 InputArguments i=68 i=16234 i=297 Endpoint i=15528 -1 Engineer i=16236 i=16237 i=15424 i=16238 i=15425 i=16041 i=16043 i=16239 i=16241 i=16243 i=16245 i=15606 i=15620 Identities i=68 i=16036 Applications i=68 i=16036 ApplicationsExclude i=68 i=16036 Endpoints i=68 i=16036 EndpointsExclude i=68 i=16036 AddIdentity i=16042 i=16036 InputArguments i=68 i=16041 i=297 Rule i=15634 -1 RemoveIdentity i=16044 i=16036 InputArguments i=68 i=16043 i=297 Rule i=15634 -1 AddApplication i=16240 i=16036 InputArguments i=68 i=16239 i=297 ApplicationUri i=12 -1 RemoveApplication i=16242 i=16036 InputArguments i=68 i=16241 i=297 ApplicationUri i=12 -1 AddEndpoint i=16244 i=16036 InputArguments i=68 i=16243 i=297 Endpoint i=15528 -1 RemoveEndpoint i=16246 i=16036 InputArguments i=68 i=16245 i=297 Endpoint i=15528 -1 Supervisor i=16247 i=16248 i=15426 i=16249 i=15427 i=15696 i=15698 i=16250 i=16252 i=16254 i=16256 i=15606 i=15620 Identities i=68 i=15692 Applications i=68 i=15692 ApplicationsExclude i=68 i=15692 Endpoints i=68 i=15692 EndpointsExclude i=68 i=15692 AddIdentity i=15697 i=15692 InputArguments i=68 i=15696 i=297 Rule i=15634 -1 RemoveIdentity i=15699 i=15692 InputArguments i=68 i=15698 i=297 Rule i=15634 -1 AddApplication i=16251 i=15692 InputArguments i=68 i=16250 i=297 ApplicationUri i=12 -1 RemoveApplication i=16253 i=15692 InputArguments i=68 i=16252 i=297 ApplicationUri i=12 -1 AddEndpoint i=16255 i=15692 InputArguments i=68 i=16254 i=297 Endpoint i=15528 -1 RemoveEndpoint i=16257 i=15692 InputArguments i=68 i=16256 i=297 Endpoint i=15528 -1 ConfigureAdmin i=16269 i=16270 i=15428 i=16271 i=15429 i=15720 i=15722 i=16272 i=16274 i=16276 i=16278 i=15606 i=15620 Identities i=68 i=15716 Applications i=68 i=15716 ApplicationsExclude i=68 i=15716 Endpoints i=68 i=15716 EndpointsExclude i=68 i=15716 AddIdentity i=15721 i=15716 InputArguments i=68 i=15720 i=297 Rule i=15634 -1 RemoveIdentity i=15723 i=15716 InputArguments i=68 i=15722 i=297 Rule i=15634 -1 AddApplication i=16273 i=15716 InputArguments i=68 i=16272 i=297 ApplicationUri i=12 -1 RemoveApplication i=16275 i=15716 InputArguments i=68 i=16274 i=297 ApplicationUri i=12 -1 AddEndpoint i=16277 i=15716 InputArguments i=68 i=16276 i=297 Endpoint i=15528 -1 RemoveEndpoint i=16279 i=15716 InputArguments i=68 i=16278 i=297 Endpoint i=15528 -1 SecurityAdmin i=16258 i=16259 i=15430 i=16260 i=15527 i=15708 i=15710 i=16261 i=16263 i=16265 i=16267 i=15606 i=15620 Identities i=68 i=15704 Applications i=68 i=15704 ApplicationsExclude i=68 i=15704 Endpoints i=68 i=15704 EndpointsExclude i=68 i=15704 AddIdentity i=15709 i=15704 InputArguments i=68 i=15708 i=297 Rule i=15634 -1 RemoveIdentity i=15711 i=15704 InputArguments i=68 i=15710 i=297 Rule i=15634 -1 AddApplication i=16262 i=15704 InputArguments i=68 i=16261 i=297 ApplicationUri i=12 -1 RemoveApplication i=16264 i=15704 InputArguments i=68 i=16263 i=297 ApplicationUri i=12 -1 AddEndpoint i=16266 i=15704 InputArguments i=68 i=16265 i=297 Endpoint i=15528 -1 RemoveEndpoint i=16268 i=15704 InputArguments i=68 i=16267 i=297 Endpoint i=15528 -1 DictionaryEntryType i=17590 i=58 <DictionaryEntryName> i=17589 i=11508 i=17589 DictionaryFolderType i=17592 i=17593 i=61 <DictionaryFolderName> i=17591 i=11508 i=17591 <DictionaryEntryName> i=17589 i=11508 i=17591 Dictionaries i=2253 i=17591 HasDictionaryEntry i=32 DictionaryEntryOf IrdiDictionaryEntryType i=17589 UriDictionaryEntryType i=17589 BaseInterfaceType i=58 InterfaceTypes i=17602 i=86 i=61 HasInterface i=32 InterfaceOf HasAddIn i=47 AddInOf CurrencyUnitType i=22 CurrencyUnit i=68 IOrderedObjectType i=23517 i=17602 NumberInList i=68 i=78 i=23513 OrderedListType i=23519 i=23525 i=2133 i=58 <OrderedObject> i=23521 i=23513 i=58 i=11508 i=23518 NumberInList i=68 i=78 i=23519 NodeVersion i=68 i=80 i=23518 DataItemType i=2366 i=2367 i=63 Definition i=68 i=80 i=2365 ValuePrecision i=68 i=80 i=2365 BaseAnalogType i=17567 i=17568 i=17569 i=2365 InstrumentRange i=68 i=80 i=15318 EURange i=68 i=80 i=15318 EngineeringUnits i=68 i=80 i=15318 AnalogItemType i=2369 i=15318 EURange i=68 i=78 i=2368 AnalogUnitType i=17502 i=15318 EngineeringUnits i=68 i=78 i=17497 AnalogUnitRangeType i=17575 i=2368 EngineeringUnits i=68 i=78 i=17570 DiscreteItemType i=2365 TwoStateDiscreteType i=2374 i=2375 i=2372 FalseState i=68 i=78 i=2373 TrueState i=68 i=78 i=2373 MultiStateDiscreteType i=2377 i=2372 EnumStrings i=68 i=78 i=2376 MultiStateValueDiscreteType i=11241 i=11461 i=2372 EnumValues i=68 i=78 i=11238 ValueAsText i=68 i=78 i=11238 ArrayItemType i=12024 i=12025 i=12026 i=12027 i=12028 i=2365 InstrumentRange i=68 i=80 i=12021 EURange i=68 i=78 i=12021 EngineeringUnits i=68 i=78 i=12021 Title i=68 i=78 i=12021 AxisScaleType i=68 i=78 i=12021 YArrayItemType i=12037 i=12021 XAxisDefinition i=68 i=78 i=12029 XYArrayItemType i=12046 i=12021 XAxisDefinition i=68 i=78 i=12038 ImageItemType i=12055 i=12056 i=12021 XAxisDefinition i=68 i=78 i=12047 YAxisDefinition i=68 i=78 i=12047 CubeItemType i=12065 i=12066 i=12067 i=12021 XAxisDefinition i=68 i=78 i=12057 YAxisDefinition i=68 i=78 i=12057 ZAxisDefinition i=68 i=78 i=12057 NDimensionArrayItemType i=12076 i=12021 AxisDefinition i=68 i=78 i=12068 TwoStateVariableType i=8996 i=9000 i=9001 i=11110 i=11111 i=2755 Id i=68 i=78 i=8995 TransitionTime i=68 i=80 i=8995 EffectiveTransitionTime i=68 i=80 i=8995 TrueState i=68 i=80 i=8995 FalseState i=68 i=80 i=8995 ConditionVariableType i=9003 i=63 SourceTimestamp i=68 i=78 i=9002 HasTrueSubState i=32 IsTrueSubStateOf HasFalseSubState i=32 IsFalseSubStateOf HasAlarmSuppressionGroup i=47 IsAlarmSuppressionGroupOf AlarmGroupMember i=35 MemberOfAlarmGroup ConditionType i=11112 i=11113 i=16363 i=16364 i=9009 i=9010 i=3874 i=9011 i=9020 i=9022 i=9024 i=9026 i=9028 i=9027 i=9029 i=3875 i=12912 i=2041 ConditionClassId i=68 i=78 i=2782 ConditionClassName i=68 i=78 i=2782 ConditionSubClassId i=68 i=80 i=2782 ConditionSubClassName i=68 i=80 i=2782 ConditionName i=68 i=78 i=2782 BranchId i=68 i=78 i=2782 Retain i=68 i=78 i=2782 EnabledState i=9012 i=9015 i=9016 i=9017 i=9018 i=9019 i=8995 i=78 i=2782 Id i=68 i=78 i=9011 EffectiveDisplayName i=68 i=80 i=9011 TransitionTime i=68 i=80 i=9011 EffectiveTransitionTime i=68 i=80 i=9011 TrueState i=68 i=80 i=9011 en Enabled FalseState i=68 i=80 i=9011 en Disabled Quality i=9021 i=9002 i=78 i=2782 SourceTimestamp i=68 i=78 i=9020 LastSeverity i=9023 i=9002 i=78 i=2782 SourceTimestamp i=68 i=78 i=9022 Comment i=9025 i=9002 i=78 i=2782 SourceTimestamp i=68 i=78 i=9024 ClientUserId i=68 i=78 i=2782 Disable i=2803 i=78 i=2782 Enable i=2803 i=78 i=2782 AddComment i=9030 i=2829 i=78 i=2782 InputArguments i=68 i=78 i=9029 i=297 EventId i=15 -1 The identifier for the event to comment. i=297 Comment i=21 -1 The comment to add to the condition. ConditionRefresh i=3876 i=2787 i=2788 i=2782 InputArguments i=68 i=78 i=3875 i=297 SubscriptionId i=288 -1 The identifier for the subscription to refresh. ConditionRefresh2 i=12913 i=2787 i=2788 i=2782 InputArguments i=68 i=78 i=12912 i=297 SubscriptionId i=288 -1 The identifier for the subscription to refresh. i=297 MonitoredItemId i=288 -1 The identifier for the monitored item to refresh. DialogConditionType i=9035 i=9055 i=2831 i=9064 i=9065 i=9066 i=9067 i=9068 i=9069 i=2782 EnabledState i=9036 i=9055 i=8995 i=78 i=2830 Id i=68 i=78 i=9035 DialogState i=9056 i=9060 i=9062 i=9063 i=9035 i=8995 i=78 i=2830 Id i=68 i=78 i=9055 TransitionTime i=68 i=80 i=9055 TrueState i=68 i=80 i=9055 en Active FalseState i=68 i=80 i=9055 en Inactive Prompt i=68 i=78 i=2830 ResponseOptionSet i=68 i=78 i=2830 DefaultResponse i=68 i=78 i=2830 OkResponse i=68 i=78 i=2830 CancelResponse i=68 i=78 i=2830 LastResponse i=68 i=78 i=2830 Respond i=9070 i=8927 i=78 i=2830 InputArguments i=68 i=78 i=9069 i=297 SelectedResponse i=6 -1 The response to the dialog condition. AcknowledgeableConditionType i=9073 i=9093 i=9102 i=9111 i=9113 i=2782 EnabledState i=9074 i=9093 i=9102 i=8995 i=78 i=2881 Id i=68 i=78 i=9073 AckedState i=9094 i=9098 i=9100 i=9101 i=9073 i=8995 i=78 i=2881 Id i=68 i=78 i=9093 TransitionTime i=68 i=80 i=9093 TrueState i=68 i=80 i=9093 en Acknowledged FalseState i=68 i=80 i=9093 en Unacknowledged ConfirmedState i=9103 i=9107 i=9109 i=9110 i=9073 i=8995 i=80 i=2881 Id i=68 i=78 i=9102 TransitionTime i=68 i=80 i=9102 TrueState i=68 i=80 i=9102 en Confirmed FalseState i=68 i=80 i=9102 en Unconfirmed Acknowledge i=9112 i=8944 i=78 i=2881 InputArguments i=68 i=78 i=9111 i=297 EventId i=15 -1 The identifier for the event to comment. i=297 Comment i=21 -1 The comment to add to the condition. Confirm i=9114 i=8961 i=80 i=2881 InputArguments i=68 i=78 i=9113 i=297 EventId i=15 -1 The identifier for the event to comment. i=297 Comment i=21 -1 The comment to add to the condition. AlarmConditionType i=9118 i=9160 i=11120 i=9169 i=16371 i=9178 i=9215 i=9216 i=16389 i=16390 i=16380 i=16395 i=16396 i=16397 i=16398 i=18190 i=16399 i=16400 i=16401 i=16402 i=16403 i=17868 i=17869 i=17870 i=18199 i=2881 EnabledState i=9119 i=9160 i=9169 i=9178 i=8995 i=78 i=2915 Id i=68 i=78 i=9118 ActiveState i=9161 i=9164 i=9165 i=9166 i=9167 i=9168 i=9118 i=8995 i=78 i=2915 Id i=68 i=78 i=9160 EffectiveDisplayName i=68 i=80 i=9160 TransitionTime i=68 i=80 i=9160 EffectiveTransitionTime i=68 i=80 i=9160 TrueState i=68 i=80 i=9160 en Active FalseState i=68 i=80 i=9160 en Inactive InputNode i=68 i=78 i=2915 SuppressedState i=9170 i=9174 i=9176 i=9177 i=9118 i=8995 i=80 i=2915 Id i=68 i=78 i=9169 TransitionTime i=68 i=80 i=9169 TrueState i=68 i=80 i=9169 en Suppressed FalseState i=68 i=80 i=9169 en Unsuppressed OutOfServiceState i=16372 i=16376 i=16378 i=16379 i=8995 i=80 i=2915 Id i=68 i=78 i=16371 TransitionTime i=68 i=80 i=16371 TrueState i=68 i=80 i=16371 en Out of Service FalseState i=68 i=80 i=16371 en In Service ShelvingState i=9179 i=9184 i=9189 i=9213 i=9211 i=9212 i=9118 i=2929 i=80 i=2915 CurrentState i=9180 i=2760 i=78 i=9178 Id i=68 i=78 i=9179 LastTransition i=9185 i=9188 i=2767 i=80 i=9178 Id i=68 i=78 i=9184 TransitionTime i=68 i=80 i=9184 UnshelveTime i=68 i=78 i=9178 TimedShelve i=9214 i=11093 i=78 i=9178 InputArguments i=68 i=78 i=9213 i=297 ShelvingTime i=290 -1 If not 0, this parameter specifies a fixed time for which the Alarm is to be shelved. Unshelve i=11093 i=78 i=9178 OneShotShelve i=11093 i=78 i=9178 SuppressedOrShelved i=68 i=78 i=2915 MaxTimeShelved i=68 i=80 i=2915 AudibleEnabled i=68 i=80 i=2915 AudibleSound i=17986 i=80 i=2915 SilenceState i=16381 i=16385 i=16387 i=16388 i=8995 i=80 i=2915 Id i=68 i=78 i=16380 TransitionTime i=68 i=80 i=16380 TrueState i=68 i=80 i=16380 en Silenced FalseState i=68 i=80 i=16380 en Not Silenced OnDelay i=68 i=80 i=2915 OffDelay i=68 i=80 i=2915 FirstInGroupFlag i=63 i=80 i=2915 FirstInGroup i=16405 i=80 i=2915 LatchedState i=18191 i=18195 i=18197 i=18198 i=8995 i=80 i=2915 Id i=68 i=78 i=18190 TransitionTime i=68 i=80 i=18190 TrueState i=68 i=80 i=18190 en Latched FalseState i=68 i=80 i=18190 en Unlatched <AlarmGroup> i=16405 i=11508 i=2915 ReAlarmTime i=68 i=80 i=2915 ReAlarmRepeatCount i=63 i=80 i=2915 Silence i=17242 i=80 i=2915 Suppress i=17225 i=80 i=2915 Unsuppress i=17225 i=80 i=2915 RemoveFromService i=17259 i=80 i=2915 PlaceInService i=17259 i=80 i=2915 Reset i=15013 i=80 i=2915 AlarmGroupType i=16406 i=61 <AlarmConditionInstance> i=16407 i=16408 i=16409 i=16410 i=16411 i=16412 i=16414 i=16415 i=16416 i=16417 i=16420 i=16421 i=16422 i=16423 i=16432 i=16434 i=16436 i=16438 i=16439 i=16440 i=16441 i=16443 i=16461 i=16465 i=16474 i=16519 i=2915 i=11508 i=16405 EventId i=68 i=78 i=16406 EventType i=68 i=78 i=16406 SourceNode i=68 i=78 i=16406 SourceName i=68 i=78 i=16406 Time i=68 i=78 i=16406 ReceiveTime i=68 i=78 i=16406 Message i=68 i=78 i=16406 Severity i=68 i=78 i=16406 ConditionClassId i=68 i=78 i=16406 ConditionClassName i=68 i=78 i=16406 ConditionName i=68 i=78 i=16406 BranchId i=68 i=78 i=16406 Retain i=68 i=78 i=16406 EnabledState i=16424 i=8995 i=78 i=16406 Id i=68 i=78 i=16423 Quality i=16433 i=9002 i=78 i=16406 SourceTimestamp i=68 i=78 i=16432 LastSeverity i=16435 i=9002 i=78 i=16406 SourceTimestamp i=68 i=78 i=16434 Comment i=16437 i=9002 i=78 i=16406 SourceTimestamp i=68 i=78 i=16436 ClientUserId i=68 i=78 i=16406 Disable i=2803 i=78 i=16406 Enable i=2803 i=78 i=16406 AddComment i=16442 i=2829 i=78 i=16406 InputArguments i=68 i=78 i=16441 i=297 EventId i=15 -1 The identifier for the event to comment. i=297 Comment i=21 -1 The comment to add to the condition. AckedState i=16444 i=8995 i=78 i=16406 Id i=68 i=78 i=16443 Acknowledge i=16462 i=8944 i=78 i=16406 InputArguments i=68 i=78 i=16461 i=297 EventId i=15 -1 The identifier for the event to comment. i=297 Comment i=21 -1 The comment to add to the condition. ActiveState i=16466 i=8995 i=78 i=16406 Id i=68 i=78 i=16465 InputNode i=68 i=78 i=16406 SuppressedOrShelved i=68 i=78 i=16406 ShelvedStateMachineType i=9115 i=2930 i=2932 i=2933 i=2935 i=2936 i=2940 i=2942 i=2943 i=2945 i=2949 i=2947 i=2948 i=2771 UnshelveTime i=68 i=78 i=2929 Unshelved i=6098 i=2935 i=2936 i=2940 i=2943 i=2307 i=2929 StateNumber i=68 i=78 i=2930 1 TimedShelved i=6100 i=2935 i=2940 i=2942 i=2945 i=2307 i=2929 StateNumber i=68 i=78 i=2932 2 OneShotShelved i=6101 i=2936 i=2942 i=2943 i=2945 i=2307 i=2929 StateNumber i=68 i=78 i=2933 3 UnshelvedToTimedShelved i=11322 i=2930 i=2932 i=2915 i=2949 i=2310 i=2929 TransitionNumber i=68 i=78 i=2935 12 UnshelvedToOneShotShelved i=11323 i=2930 i=2933 i=2915 i=2948 i=2310 i=2929 TransitionNumber i=68 i=78 i=2936 13 TimedShelvedToUnshelved i=11324 i=2932 i=2930 i=2915 i=2947 i=2310 i=2929 TransitionNumber i=68 i=78 i=2940 21 TimedShelvedToOneShotShelved i=11325 i=2932 i=2933 i=2915 i=2948 i=2310 i=2929 TransitionNumber i=68 i=78 i=2942 23 OneShotShelvedToUnshelved i=11326 i=2933 i=2930 i=2915 i=2947 i=2310 i=2929 TransitionNumber i=68 i=78 i=2943 31 OneShotShelvedToTimedShelved i=11327 i=2933 i=2932 i=2915 i=2949 i=2310 i=2929 TransitionNumber i=68 i=78 i=2945 32 TimedShelve i=2991 i=2935 i=2945 i=11093 i=78 i=2929 InputArguments i=68 i=78 i=2949 i=297 ShelvingTime i=290 -1 If not 0, this parameter specifies a fixed time for which the Alarm is to be shelved. Unshelve i=2940 i=2943 i=11093 i=78 i=2929 OneShotShelve i=2936 i=2942 i=11093 i=78 i=2929 LimitAlarmType i=11124 i=11125 i=11126 i=11127 i=16572 i=16573 i=16574 i=16575 i=2915 HighHighLimit i=68 i=80 i=2955 HighLimit i=68 i=80 i=2955 LowLimit i=68 i=80 i=2955 LowLowLimit i=68 i=80 i=2955 BaseHighHighLimit i=68 i=80 i=2955 BaseHighLimit i=68 i=80 i=2955 BaseLowLimit i=68 i=80 i=2955 BaseLowLowLimit i=68 i=80 i=2955 ExclusiveLimitStateMachineType i=9329 i=9331 i=9333 i=9335 i=9337 i=9338 i=9339 i=9340 i=2771 HighHigh i=9330 i=9339 i=9340 i=2307 i=9318 StateNumber i=68 i=78 i=9329 1 High i=9332 i=9339 i=9340 i=2307 i=9318 StateNumber i=68 i=78 i=9331 2 Low i=9334 i=9337 i=9338 i=2307 i=9318 StateNumber i=68 i=78 i=9333 3 LowLow i=9336 i=9337 i=9338 i=2307 i=9318 StateNumber i=68 i=78 i=9335 4 LowLowToLow i=11340 i=9335 i=9333 i=2310 i=9318 TransitionNumber i=68 i=78 i=9337 43 LowToLowLow i=11341 i=9333 i=9335 i=2310 i=9318 TransitionNumber i=68 i=78 i=9338 34 HighHighToHigh i=11342 i=9329 i=9331 i=2310 i=9318 TransitionNumber i=68 i=78 i=9339 12 HighToHighHigh i=11343 i=9331 i=9329 i=2310 i=9318 TransitionNumber i=68 i=78 i=9340 21 ExclusiveLimitAlarmType i=9398 i=9455 i=2955 ActiveState i=9399 i=9455 i=8995 i=78 i=9341 Id i=68 i=78 i=9398 LimitState i=9456 i=9461 i=9398 i=9318 i=78 i=9341 CurrentState i=9457 i=2760 i=78 i=9455 Id i=68 i=78 i=9456 LastTransition i=9462 i=9465 i=2767 i=80 i=9455 Id i=68 i=78 i=9461 TransitionTime i=68 i=80 i=9461 NonExclusiveLimitAlarmType i=9963 i=10020 i=10029 i=10038 i=10047 i=2955 ActiveState i=9964 i=10020 i=10029 i=10038 i=10047 i=8995 i=78 i=9906 Id i=68 i=78 i=9963 HighHighState i=10021 i=10025 i=10027 i=10028 i=9963 i=8995 i=80 i=9906 Id i=68 i=78 i=10020 TransitionTime i=68 i=80 i=10020 TrueState i=68 i=80 i=10020 en HighHigh active FalseState i=68 i=80 i=10020 en HighHigh inactive HighState i=10030 i=10034 i=10036 i=10037 i=9963 i=8995 i=80 i=9906 Id i=68 i=78 i=10029 TransitionTime i=68 i=80 i=10029 TrueState i=68 i=80 i=10029 en High active FalseState i=68 i=80 i=10029 en High inactive LowState i=10039 i=10043 i=10045 i=10046 i=9963 i=8995 i=80 i=9906 Id i=68 i=78 i=10038 TransitionTime i=68 i=80 i=10038 TrueState i=68 i=80 i=10038 en Low active FalseState i=68 i=80 i=10038 en Low inactive LowLowState i=10048 i=10052 i=10054 i=10055 i=9963 i=8995 i=80 i=9906 Id i=68 i=78 i=10047 TransitionTime i=68 i=80 i=10047 TrueState i=68 i=80 i=10047 en LowLow active FalseState i=68 i=80 i=10047 en LowLow inactive NonExclusiveLevelAlarmType i=9906 ExclusiveLevelAlarmType i=9341 NonExclusiveDeviationAlarmType i=10522 i=16776 i=9906 SetpointNode i=68 i=78 i=10368 BaseSetpointNode i=68 i=80 i=10368 NonExclusiveRateOfChangeAlarmType i=16858 i=9906 EngineeringUnits i=68 i=80 i=10214 ExclusiveDeviationAlarmType i=9905 i=16817 i=9341 SetpointNode i=68 i=78 i=9764 BaseSetpointNode i=68 i=80 i=9764 ExclusiveRateOfChangeAlarmType i=16899 i=9341 EngineeringUnits i=68 i=80 i=9623 DiscreteAlarmType i=2915 OffNormalAlarmType i=11158 i=10523 NormalState i=68 i=78 i=10637 SystemOffNormalAlarmType i=10637 TripAlarmType i=10637 InstrumentDiagnosticAlarmType i=10637 SystemDiagnosticAlarmType i=10637 CertificateExpirationAlarmType i=13325 i=14900 i=13326 i=13327 i=11753 ExpirationDate i=68 i=78 i=13225 ExpirationLimit i=68 i=80 i=13225 CertificateType i=68 i=78 i=13225 Certificate i=68 i=78 i=13225 DiscrepancyAlarmType i=17215 i=17216 i=17217 i=2915 TargetValueNode i=68 i=78 i=17080 ExpectedTime i=68 i=78 i=17080 Tolerance i=68 i=80 i=17080 BaseConditionClassType i=58 ProcessConditionClassType i=11163 MaintenanceConditionClassType i=11163 SystemConditionClassType i=11163 SafetyConditionClassType i=11163 HighlyManagedAlarmConditionClassType i=11163 TrainingConditionClassType i=11163 StatisticalConditionClassType i=11163 TestingConditionSubClassType i=11163 AuditConditionEventType i=2127 AuditConditionEnableEventType i=2790 AuditConditionCommentEventType i=17222 i=11851 i=2790 ConditionEventId i=68 i=78 i=2829 Comment i=68 i=78 i=2829 AuditConditionRespondEventType i=11852 i=2790 SelectedResponse i=68 i=78 i=8927 AuditConditionAcknowledgeEventType i=17223 i=11853 i=2790 ConditionEventId i=68 i=78 i=8944 Comment i=68 i=78 i=8944 AuditConditionConfirmEventType i=17224 i=11854 i=2790 ConditionEventId i=68 i=78 i=8961 Comment i=68 i=78 i=8961 AuditConditionShelvingEventType i=11855 i=2790 ShelvingTime i=68 i=80 i=11093 AuditConditionSuppressionEventType i=2790 AuditConditionSilenceEventType i=2790 AuditConditionResetEventType i=2790 AuditConditionOutOfServiceEventType i=2790 RefreshStartEventType i=2130 RefreshEndEventType i=2130 RefreshRequiredEventType i=2130 HasCondition i=32 IsConditionOf HasEffectDisable i=54 MayBeDisabledBy HasEffectEnable i=54 MayBeEnabledBy HasEffectSuppressed i=54 MayBeSuppressedBy HasEffectUnsuppressed i=54 MayBeUnsuppressedBy AlarmMetricsType i=17280 i=17991 i=17281 i=17282 i=17284 i=17286 i=17283 i=17288 i=18666 i=58 AlarmCount i=63 i=78 i=17279 StartTime i=63 i=78 i=17279 MaximumActiveState i=63 i=78 i=17279 MaximumUnAck i=63 i=78 i=17279 CurrentAlarmRate i=17285 i=17277 i=78 i=17279 Rate i=68 i=78 i=17284 MaximumAlarmRate i=17287 i=17277 i=78 i=17279 Rate i=68 i=78 i=17286 MaximumReAlarmCount i=63 i=78 i=17279 AverageAlarmRate i=17289 i=17277 i=78 i=17279 Rate i=68 i=78 i=17288 Reset i=2127 i=78 i=17279 AlarmRateVariableType i=17278 i=63 Rate i=68 i=78 i=17277 ProgramStateMachineType i=3830 i=3835 i=2392 i=2393 i=2394 i=2395 i=2396 i=2397 i=2398 i=2399 i=3850 i=2406 i=2400 i=2402 i=2404 i=2408 i=2410 i=2412 i=2414 i=2416 i=2418 i=2420 i=2422 i=2424 i=2426 i=2427 i=2428 i=2429 i=2430 i=2771 CurrentState i=3831 i=3833 i=2760 i=78 i=2391 Id i=68 i=78 i=3830 Number i=68 i=78 i=3830 LastTransition i=3836 i=3838 i=3839 i=2767 i=78 i=2391 Id i=68 i=78 i=3835 Number i=68 i=78 i=3835 TransitionTime i=68 i=78 i=3835 Creatable i=68 i=2391 Deletable i=68 i=78 i=2391 AutoDelete i=68 i=78 i=2391 RecycleCount i=68 i=78 i=2391 InstanceCount i=68 i=2391 MaxInstanceCount i=68 i=2391 MaxRecycleCount i=68 i=2391 ProgramDiagnostic i=3840 i=3841 i=3842 i=3843 i=3844 i=3845 i=3846 i=3847 i=15038 i=15040 i=3848 i=3849 i=15383 i=80 i=2391 CreateSessionId i=63 i=78 i=2399 CreateClientName i=63 i=78 i=2399 InvocationCreationTime i=63 i=78 i=2399 LastTransitionTime i=68 i=78 i=2399 LastMethodCall i=63 i=78 i=2399 LastMethodSessionId i=63 i=78 i=2399 LastMethodInputArguments i=63 i=78 i=2399 LastMethodOutputArguments i=63 i=78 i=2399 LastMethodInputValues i=63 i=78 i=2399 LastMethodOutputValues i=63 i=78 i=2399 LastMethodCallTime i=63 i=78 i=2399 LastMethodReturnStatus i=63 i=78 i=2399 FinalResultData i=58 i=80 i=2391 Halted i=2407 i=2408 i=2412 i=2420 i=2424 i=2307 i=2391 StateNumber i=68 i=78 i=2406 11 Ready i=2401 i=2408 i=2410 i=2414 i=2422 i=2424 i=2307 i=2391 StateNumber i=68 i=78 i=2400 12 Running i=2403 i=2410 i=2412 i=2414 i=2416 i=2418 i=2307 i=2391 StateNumber i=68 i=78 i=2402 13 Suspended i=2405 i=2416 i=2418 i=2420 i=2422 i=2307 i=2391 StateNumber i=68 i=78 i=2404 14 HaltedToReady i=2409 i=2406 i=2400 i=2430 i=2378 i=2310 i=2391 TransitionNumber i=68 i=78 i=2408 1 ReadyToRunning i=2411 i=2400 i=2402 i=2426 i=2378 i=2310 i=2391 TransitionNumber i=68 i=78 i=2410 2 RunningToHalted i=2413 i=2402 i=2406 i=2429 i=2378 i=2310 i=2391 TransitionNumber i=68 i=78 i=2412 3 RunningToReady i=2415 i=2402 i=2400 i=2378 i=2310 i=2391 TransitionNumber i=68 i=78 i=2414 4 RunningToSuspended i=2417 i=2402 i=2404 i=2427 i=2378 i=2310 i=2391 TransitionNumber i=68 i=78 i=2416 5 SuspendedToRunning i=2419 i=2404 i=2402 i=2428 i=2378 i=2310 i=2391 TransitionNumber i=68 i=78 i=2418 6 SuspendedToHalted i=2421 i=2404 i=2406 i=2429 i=2378 i=2310 i=2391 TransitionNumber i=68 i=78 i=2420 7 SuspendedToReady i=2423 i=2404 i=2400 i=2378 i=2310 i=2391 TransitionNumber i=68 i=78 i=2422 8 ReadyToHalted i=2425 i=2400 i=2406 i=2429 i=2378 i=2310 i=2391 TransitionNumber i=68 i=78 i=2424 9 Start i=2410 i=11508 i=2391 Suspend i=2416 i=11508 i=2391 Resume i=2418 i=11508 i=2391 Halt i=2412 i=2420 i=2424 i=11508 i=2391 Reset i=2408 i=11508 i=2391 ProgramTransitionEventType i=2379 i=2311 IntermediateResult i=63 i=78 i=2378 AuditProgramTransitionEventType i=11875 i=2315 TransitionNumber i=68 i=78 i=11856 ProgramTransitionAuditEventType i=3825 i=2315 Transition i=3826 i=2767 i=78 i=3806 Id i=68 i=78 i=3825 ProgramDiagnosticType i=2381 i=2382 i=2383 i=2384 i=2385 i=2386 i=2387 i=2388 i=2389 i=2390 i=63 CreateSessionId i=68 i=78 i=2380 CreateClientName i=68 i=78 i=2380 InvocationCreationTime i=68 i=78 i=2380 LastTransitionTime i=68 i=78 i=2380 LastMethodCall i=68 i=78 i=2380 LastMethodSessionId i=68 i=78 i=2380 LastMethodInputArguments i=68 i=78 i=2380 LastMethodOutputArguments i=68 i=78 i=2380 LastMethodCallTime i=68 i=78 i=2380 LastMethodReturnStatus i=68 i=78 i=2380 ProgramDiagnostic2Type i=15384 i=15385 i=15386 i=15387 i=15388 i=15389 i=15390 i=15391 i=15392 i=15393 i=15394 i=15395 i=63 CreateSessionId i=63 i=78 i=15383 CreateClientName i=63 i=78 i=15383 InvocationCreationTime i=63 i=78 i=15383 LastTransitionTime i=68 i=78 i=15383 LastMethodCall i=63 i=78 i=15383 LastMethodSessionId i=63 i=78 i=15383 LastMethodInputArguments i=63 i=78 i=15383 LastMethodOutputArguments i=63 i=78 i=15383 LastMethodInputValues i=63 i=78 i=15383 LastMethodOutputValues i=63 i=78 i=15383 LastMethodCallTime i=63 i=78 i=15383 LastMethodReturnStatus i=63 i=78 i=15383 Annotations i=68 HistoricalDataConfigurationType i=3059 i=11876 i=2323 i=2324 i=2325 i=2326 i=2327 i=2328 i=11499 i=11500 i=19092 i=58 AggregateConfiguration i=11168 i=11169 i=11170 i=11171 i=11187 i=78 i=2318 TreatUncertainAsBad i=68 i=78 i=3059 PercentDataBad i=68 i=78 i=3059 PercentDataGood i=68 i=78 i=3059 UseSlopedExtrapolation i=68 i=78 i=3059 AggregateFunctions i=61 i=80 i=2318 Stepped i=68 i=78 i=2318 Definition i=68 i=80 i=2318 MaxTimeInterval i=68 i=80 i=2318 MinTimeInterval i=68 i=80 i=2318 ExceptionDeviation i=68 i=80 i=2318 ExceptionDeviationFormat i=68 i=80 i=2318 StartOfArchive i=68 i=80 i=2318 StartOfOnlineArchive i=68 i=80 i=2318 ServerTimestampSupported i=68 i=80 i=2318 HA Configuration i=11203 i=11208 i=2318 AggregateConfiguration i=11204 i=11205 i=11206 i=11207 i=11187 i=11202 TreatUncertainAsBad i=68 i=11203 PercentDataBad i=68 i=11203 PercentDataGood i=68 i=11203 UseSlopedExtrapolation i=68 i=11203 Stepped i=68 i=11202 HistoricalEventFilter i=68 HistoryServerCapabilitiesType i=2331 i=2332 i=11268 i=11269 i=2334 i=2335 i=2336 i=2337 i=2338 i=11278 i=11279 i=11280 i=11501 i=11270 i=11172 i=19094 i=58 AccessHistoryDataCapability i=68 i=78 i=2330 AccessHistoryEventsCapability i=68 i=78 i=2330 MaxReturnDataValues i=68 i=78 i=2330 MaxReturnEventValues i=68 i=78 i=2330 InsertDataCapability i=68 i=78 i=2330 ReplaceDataCapability i=68 i=78 i=2330 UpdateDataCapability i=68 i=78 i=2330 DeleteRawCapability i=68 i=78 i=2330 DeleteAtTimeCapability i=68 i=78 i=2330 InsertEventCapability i=68 i=78 i=2330 ReplaceEventCapability i=68 i=78 i=2330 UpdateEventCapability i=68 i=78 i=2330 DeleteEventCapability i=68 i=78 i=2330 InsertAnnotationCapability i=68 i=78 i=2330 AggregateFunctions i=61 i=78 i=2330 ServerTimestampSupported i=68 i=78 i=2330 AuditHistoryEventUpdateEventType i=3025 i=3028 i=3003 i=3029 i=3030 i=2104 UpdatedNode i=68 i=78 i=2999 PerformInsertReplace i=68 i=78 i=2999 Filter i=68 i=78 i=2999 NewValues i=68 i=78 i=2999 OldValues i=68 i=78 i=2999 AuditHistoryValueUpdateEventType i=3026 i=3031 i=3032 i=3033 i=2104 UpdatedNode i=68 i=78 i=3006 PerformInsertReplace i=68 i=78 i=3006 NewValues i=68 i=78 i=3006 OldValues i=68 i=78 i=3006 AuditHistoryAnnotationUpdateEventType i=19293 i=19294 i=19295 i=2104 PerformInsertReplace i=68 i=78 i=19095 NewValues i=68 i=78 i=19095 OldValues i=68 i=78 i=19095 AuditHistoryDeleteEventType i=3027 i=2104 UpdatedNode i=68 i=78 i=3012 AuditHistoryRawModifyDeleteEventType i=3015 i=3016 i=3017 i=3034 i=3012 IsDeleteModified i=68 i=78 i=3014 StartTime i=68 i=78 i=3014 EndTime i=68 i=78 i=3014 OldValues i=68 i=78 i=3014 AuditHistoryAtTimeDeleteEventType i=3020 i=3021 i=3012 ReqTimes i=68 i=78 i=3019 OldValues i=68 i=78 i=3019 AuditHistoryEventDeleteEventType i=3023 i=3024 i=3012 EventIds i=68 i=78 i=3022 OldValues i=68 i=78 i=3022 TrustListType i=12542 i=19296 i=12543 i=12546 i=12548 i=12550 i=11575 LastUpdateTime i=68 i=78 i=12522 UpdateFrequency i=68 i=80 i=12522 OpenWithMasks i=12544 i=12545 i=78 i=12522 InputArguments i=68 i=78 i=12543 i=297 Masks i=7 -1 OutputArguments i=68 i=78 i=12543 i=297 FileHandle i=7 -1 CloseAndUpdate i=12705 i=12547 i=80 i=12522 InputArguments i=68 i=78 i=12546 i=297 FileHandle i=7 -1 OutputArguments i=68 i=78 i=12546 i=297 ApplyChangesRequired i=1 -1 AddCertificate i=12549 i=80 i=12522 InputArguments i=68 i=78 i=12548 i=297 Certificate i=15 -1 i=297 IsTrustedCertificate i=1 -1 RemoveCertificate i=12551 i=80 i=12522 InputArguments i=68 i=78 i=12550 i=297 Thumbprint i=12 -1 i=297 IsTrustedCertificate i=1 -1 TrustListMasks i=12553 i=29 EnumValues i=68 i=12552 i=7616 0 None i=7616 1 TrustedCertificates i=7616 2 TrustedCrls i=7616 4 IssuerCertificates i=7616 8 IssuerCrls i=7616 15 All TrustListDataType i=22 TrustListOutOfDateAlarmType i=19446 i=19447 i=19448 i=11753 TrustListId i=68 i=78 i=19297 LastUpdateTime i=68 i=78 i=19297 UpdateFrequency i=68 i=78 i=19297 CertificateGroupType i=13599 i=13631 i=19450 i=20143 i=23526 i=58 TrustList i=13600 i=13601 i=13602 i=13603 i=13605 i=13608 i=13610 i=13613 i=13615 i=13618 i=13620 i=13621 i=12522 i=78 i=12555 Size i=68 i=78 i=13599 Writable i=68 i=78 i=13599 UserWritable i=68 i=78 i=13599 OpenCount i=68 i=78 i=13599 Open i=13606 i=13607 i=78 i=13599 InputArguments i=68 i=78 i=13605 i=297 Mode i=3 -1 OutputArguments i=68 i=78 i=13605 i=297 FileHandle i=7 -1 Close i=13609 i=78 i=13599 InputArguments i=68 i=78 i=13608 i=297 FileHandle i=7 -1 Read i=13611 i=13612 i=78 i=13599 InputArguments i=68 i=78 i=13610 i=297 FileHandle i=7 -1 i=297 Length i=6 -1 OutputArguments i=68 i=78 i=13610 i=297 Data i=15 -1 Write i=13614 i=78 i=13599 InputArguments i=68 i=78 i=13613 i=297 FileHandle i=7 -1 i=297 Data i=15 -1 GetPosition i=13616 i=13617 i=78 i=13599 InputArguments i=68 i=78 i=13615 i=297 FileHandle i=7 -1 OutputArguments i=68 i=78 i=13615 i=297 Position i=9 -1 SetPosition i=13619 i=78 i=13599 InputArguments i=68 i=78 i=13618 i=297 FileHandle i=7 -1 i=297 Position i=9 -1 LastUpdateTime i=68 i=78 i=13599 OpenWithMasks i=13622 i=13623 i=78 i=13599 InputArguments i=68 i=78 i=13621 i=297 Masks i=7 -1 OutputArguments i=68 i=78 i=13621 i=297 FileHandle i=7 -1 CertificateTypes i=68 i=78 i=12555 CertificateExpired i=19451 i=19452 i=19453 i=19454 i=19455 i=19456 i=19458 i=19459 i=19460 i=19461 i=19464 i=19465 i=19466 i=19467 i=19476 i=19478 i=19480 i=19482 i=19483 i=19484 i=19485 i=19487 i=19505 i=19509 i=19518 i=20101 i=20138 i=20139 i=20141 i=20142 i=13225 i=80 i=12555 EventId i=68 i=78 i=19450 EventType i=68 i=78 i=19450 SourceNode i=68 i=78 i=19450 SourceName i=68 i=78 i=19450 Time i=68 i=78 i=19450 ReceiveTime i=68 i=78 i=19450 Message i=68 i=78 i=19450 Severity i=68 i=78 i=19450 ConditionClassId i=68 i=78 i=19450 ConditionClassName i=68 i=78 i=19450 ConditionName i=68 i=78 i=19450 BranchId i=68 i=78 i=19450 Retain i=68 i=78 i=19450 EnabledState i=19468 i=8995 i=78 i=19450 Id i=68 i=78 i=19467 Quality i=19477 i=9002 i=78 i=19450 SourceTimestamp i=68 i=78 i=19476 LastSeverity i=19479 i=9002 i=78 i=19450 SourceTimestamp i=68 i=78 i=19478 Comment i=19481 i=9002 i=78 i=19450 SourceTimestamp i=68 i=78 i=19480 ClientUserId i=68 i=78 i=19450 Disable i=2803 i=78 i=19450 Enable i=2803 i=78 i=19450 AddComment i=19486 i=2829 i=78 i=19450 InputArguments i=68 i=78 i=19485 i=297 EventId i=15 -1 The identifier for the event to comment. i=297 Comment i=21 -1 The comment to add to the condition. AckedState i=19488 i=8995 i=78 i=19450 Id i=68 i=78 i=19487 Acknowledge i=19506 i=8944 i=78 i=19450 InputArguments i=68 i=78 i=19505 i=297 EventId i=15 -1 The identifier for the event to comment. i=297 Comment i=21 -1 The comment to add to the condition. ActiveState i=19510 i=8995 i=78 i=19450 Id i=68 i=78 i=19509 InputNode i=68 i=78 i=19450 SuppressedOrShelved i=68 i=78 i=19450 NormalState i=68 i=78 i=19450 ExpirationDate i=68 i=78 i=19450 CertificateType i=68 i=78 i=19450 Certificate i=68 i=78 i=19450 TrustListOutOfDate i=20144 i=20145 i=20146 i=20147 i=20148 i=20149 i=20151 i=20152 i=20153 i=20154 i=20157 i=20158 i=20159 i=20160 i=20169 i=20171 i=20173 i=20175 i=20176 i=20177 i=20178 i=20180 i=20198 i=20202 i=20211 i=20249 i=20286 i=20287 i=20288 i=20289 i=19297 i=80 i=12555 EventId i=68 i=78 i=20143 EventType i=68 i=78 i=20143 SourceNode i=68 i=78 i=20143 SourceName i=68 i=78 i=20143 Time i=68 i=78 i=20143 ReceiveTime i=68 i=78 i=20143 Message i=68 i=78 i=20143 Severity i=68 i=78 i=20143 ConditionClassId i=68 i=78 i=20143 ConditionClassName i=68 i=78 i=20143 ConditionName i=68 i=78 i=20143 BranchId i=68 i=78 i=20143 Retain i=68 i=78 i=20143 EnabledState i=20161 i=8995 i=78 i=20143 Id i=68 i=78 i=20160 Quality i=20170 i=9002 i=78 i=20143 SourceTimestamp i=68 i=78 i=20169 LastSeverity i=20172 i=9002 i=78 i=20143 SourceTimestamp i=68 i=78 i=20171 Comment i=20174 i=9002 i=78 i=20143 SourceTimestamp i=68 i=78 i=20173 ClientUserId i=68 i=78 i=20143 Disable i=2803 i=78 i=20143 Enable i=2803 i=78 i=20143 AddComment i=20179 i=2829 i=78 i=20143 InputArguments i=68 i=78 i=20178 i=297 EventId i=15 -1 The identifier for the event to comment. i=297 Comment i=21 -1 The comment to add to the condition. AckedState i=20181 i=8995 i=78 i=20143 Id i=68 i=78 i=20180 Acknowledge i=20199 i=8944 i=78 i=20143 InputArguments i=68 i=78 i=20198 i=297 EventId i=15 -1 The identifier for the event to comment. i=297 Comment i=21 -1 The comment to add to the condition. ActiveState i=20203 i=8995 i=78 i=20143 Id i=68 i=78 i=20202 InputNode i=68 i=78 i=20143 SuppressedOrShelved i=68 i=78 i=20143 NormalState i=68 i=78 i=20143 TrustListId i=68 i=78 i=20143 LastUpdateTime i=68 i=78 i=20143 UpdateFrequency i=68 i=78 i=20143 GetRejectedList i=23527 i=80 i=12555 OutputArguments i=68 i=78 i=23526 i=297 Certificates i=15 1 0 CertificateGroupFolderType i=13814 i=13848 i=13882 i=13916 i=61 DefaultApplicationGroup i=13815 i=13847 i=12555 i=78 i=13813 TrustList i=13816 i=13817 i=13818 i=13819 i=13821 i=13824 i=13826 i=13829 i=13831 i=13834 i=13836 i=13837 i=12522 i=78 i=13814 Size i=68 i=78 i=13815 Writable i=68 i=78 i=13815 UserWritable i=68 i=78 i=13815 OpenCount i=68 i=78 i=13815 Open i=13822 i=13823 i=78 i=13815 InputArguments i=68 i=78 i=13821 i=297 Mode i=3 -1 OutputArguments i=68 i=78 i=13821 i=297 FileHandle i=7 -1 Close i=13825 i=78 i=13815 InputArguments i=68 i=78 i=13824 i=297 FileHandle i=7 -1 Read i=13827 i=13828 i=78 i=13815 InputArguments i=68 i=78 i=13826 i=297 FileHandle i=7 -1 i=297 Length i=6 -1 OutputArguments i=68 i=78 i=13826 i=297 Data i=15 -1 Write i=13830 i=78 i=13815 InputArguments i=68 i=78 i=13829 i=297 FileHandle i=7 -1 i=297 Data i=15 -1 GetPosition i=13832 i=13833 i=78 i=13815 InputArguments i=68 i=78 i=13831 i=297 FileHandle i=7 -1 OutputArguments i=68 i=78 i=13831 i=297 Position i=9 -1 SetPosition i=13835 i=78 i=13815 InputArguments i=68 i=78 i=13834 i=297 FileHandle i=7 -1 i=297 Position i=9 -1 LastUpdateTime i=68 i=78 i=13815 OpenWithMasks i=13838 i=13839 i=78 i=13815 InputArguments i=68 i=78 i=13837 i=297 Masks i=7 -1 OutputArguments i=68 i=78 i=13837 i=297 FileHandle i=7 -1 CertificateTypes i=68 i=78 i=13814 DefaultHttpsGroup i=13849 i=13881 i=12555 i=80 i=13813 TrustList i=13850 i=13851 i=13852 i=13853 i=13855 i=13858 i=13860 i=13863 i=13865 i=13868 i=13870 i=13871 i=12522 i=78 i=13848 Size i=68 i=78 i=13849 Writable i=68 i=78 i=13849 UserWritable i=68 i=78 i=13849 OpenCount i=68 i=78 i=13849 Open i=13856 i=13857 i=78 i=13849 InputArguments i=68 i=78 i=13855 i=297 Mode i=3 -1 OutputArguments i=68 i=78 i=13855 i=297 FileHandle i=7 -1 Close i=13859 i=78 i=13849 InputArguments i=68 i=78 i=13858 i=297 FileHandle i=7 -1 Read i=13861 i=13862 i=78 i=13849 InputArguments i=68 i=78 i=13860 i=297 FileHandle i=7 -1 i=297 Length i=6 -1 OutputArguments i=68 i=78 i=13860 i=297 Data i=15 -1 Write i=13864 i=78 i=13849 InputArguments i=68 i=78 i=13863 i=297 FileHandle i=7 -1 i=297 Data i=15 -1 GetPosition i=13866 i=13867 i=78 i=13849 InputArguments i=68 i=78 i=13865 i=297 FileHandle i=7 -1 OutputArguments i=68 i=78 i=13865 i=297 Position i=9 -1 SetPosition i=13869 i=78 i=13849 InputArguments i=68 i=78 i=13868 i=297 FileHandle i=7 -1 i=297 Position i=9 -1 LastUpdateTime i=68 i=78 i=13849 OpenWithMasks i=13872 i=13873 i=78 i=13849 InputArguments i=68 i=78 i=13871 i=297 Masks i=7 -1 OutputArguments i=68 i=78 i=13871 i=297 FileHandle i=7 -1 CertificateTypes i=68 i=78 i=13848 DefaultUserTokenGroup i=13883 i=13915 i=12555 i=80 i=13813 TrustList i=13884 i=13885 i=13886 i=13887 i=13889 i=13892 i=13894 i=13897 i=13899 i=13902 i=13904 i=13905 i=12522 i=78 i=13882 Size i=68 i=78 i=13883 Writable i=68 i=78 i=13883 UserWritable i=68 i=78 i=13883 OpenCount i=68 i=78 i=13883 Open i=13890 i=13891 i=78 i=13883 InputArguments i=68 i=78 i=13889 i=297 Mode i=3 -1 OutputArguments i=68 i=78 i=13889 i=297 FileHandle i=7 -1 Close i=13893 i=78 i=13883 InputArguments i=68 i=78 i=13892 i=297 FileHandle i=7 -1 Read i=13895 i=13896 i=78 i=13883 InputArguments i=68 i=78 i=13894 i=297 FileHandle i=7 -1 i=297 Length i=6 -1 OutputArguments i=68 i=78 i=13894 i=297 Data i=15 -1 Write i=13898 i=78 i=13883 InputArguments i=68 i=78 i=13897 i=297 FileHandle i=7 -1 i=297 Data i=15 -1 GetPosition i=13900 i=13901 i=78 i=13883 InputArguments i=68 i=78 i=13899 i=297 FileHandle i=7 -1 OutputArguments i=68 i=78 i=13899 i=297 Position i=9 -1 SetPosition i=13903 i=78 i=13883 InputArguments i=68 i=78 i=13902 i=297 FileHandle i=7 -1 i=297 Position i=9 -1 LastUpdateTime i=68 i=78 i=13883 OpenWithMasks i=13906 i=13907 i=78 i=13883 InputArguments i=68 i=78 i=13905 i=297 Masks i=7 -1 OutputArguments i=68 i=78 i=13905 i=297 FileHandle i=7 -1 CertificateTypes i=68 i=78 i=13882 <AdditionalGroup> i=13917 i=13949 i=12555 i=11508 i=13813 TrustList i=13918 i=13919 i=13920 i=13921 i=13923 i=13926 i=13928 i=13931 i=13933 i=13936 i=13938 i=13939 i=12522 i=78 i=13916 Size i=68 i=78 i=13917 Writable i=68 i=78 i=13917 UserWritable i=68 i=78 i=13917 OpenCount i=68 i=78 i=13917 Open i=13924 i=13925 i=78 i=13917 InputArguments i=68 i=78 i=13923 i=297 Mode i=3 -1 OutputArguments i=68 i=78 i=13923 i=297 FileHandle i=7 -1 Close i=13927 i=78 i=13917 InputArguments i=68 i=78 i=13926 i=297 FileHandle i=7 -1 Read i=13929 i=13930 i=78 i=13917 InputArguments i=68 i=78 i=13928 i=297 FileHandle i=7 -1 i=297 Length i=6 -1 OutputArguments i=68 i=78 i=13928 i=297 Data i=15 -1 Write i=13932 i=78 i=13917 InputArguments i=68 i=78 i=13931 i=297 FileHandle i=7 -1 i=297 Data i=15 -1 GetPosition i=13934 i=13935 i=78 i=13917 InputArguments i=68 i=78 i=13933 i=297 FileHandle i=7 -1 OutputArguments i=68 i=78 i=13933 i=297 Position i=9 -1 SetPosition i=13937 i=78 i=13917 InputArguments i=68 i=78 i=13936 i=297 FileHandle i=7 -1 i=297 Position i=9 -1 LastUpdateTime i=68 i=78 i=13917 OpenWithMasks i=13940 i=13941 i=78 i=13917 InputArguments i=68 i=78 i=13939 i=297 Masks i=7 -1 OutputArguments i=68 i=78 i=13939 i=297 FileHandle i=7 -1 CertificateTypes i=68 i=78 i=13916 CertificateType i=58 ApplicationCertificateType i=12556 HttpsCertificateType i=12556 UserCredentialCertificateType i=12556 RsaMinApplicationCertificateType i=12557 RsaSha256ApplicationCertificateType i=12557 EccApplicationCertificateType i=12557 EccNistP256ApplicationCertificateType i=23537 EccNistP384ApplicationCertificateType i=23537 EccBrainpoolP256r1ApplicationCertificateType i=23537 EccBrainpoolP384r1ApplicationCertificateType i=23537 EccCurve25519ApplicationCertificateType i=23537 EccCurve448ApplicationCertificateType i=23537 TrustListUpdatedAuditEventType i=2127 ServerConfigurationType i=13950 i=12708 i=12583 i=12584 i=12585 i=12616 i=12734 i=12731 i=12775 i=58 CertificateGroups i=13951 i=13813 i=78 i=12581 DefaultApplicationGroup i=13952 i=13984 i=12555 i=78 i=13950 TrustList i=13953 i=13954 i=13955 i=13956 i=13958 i=13961 i=13963 i=13966 i=13968 i=13971 i=13973 i=13974 i=12522 i=78 i=13951 Size i=68 i=78 i=13952 Writable i=68 i=78 i=13952 UserWritable i=68 i=78 i=13952 OpenCount i=68 i=78 i=13952 Open i=13959 i=13960 i=78 i=13952 InputArguments i=68 i=78 i=13958 i=297 Mode i=3 -1 OutputArguments i=68 i=78 i=13958 i=297 FileHandle i=7 -1 Close i=13962 i=78 i=13952 InputArguments i=68 i=78 i=13961 i=297 FileHandle i=7 -1 Read i=13964 i=13965 i=78 i=13952 InputArguments i=68 i=78 i=13963 i=297 FileHandle i=7 -1 i=297 Length i=6 -1 OutputArguments i=68 i=78 i=13963 i=297 Data i=15 -1 Write i=13967 i=78 i=13952 InputArguments i=68 i=78 i=13966 i=297 FileHandle i=7 -1 i=297 Data i=15 -1 GetPosition i=13969 i=13970 i=78 i=13952 InputArguments i=68 i=78 i=13968 i=297 FileHandle i=7 -1 OutputArguments i=68 i=78 i=13968 i=297 Position i=9 -1 SetPosition i=13972 i=78 i=13952 InputArguments i=68 i=78 i=13971 i=297 FileHandle i=7 -1 i=297 Position i=9 -1 LastUpdateTime i=68 i=78 i=13952 OpenWithMasks i=13975 i=13976 i=78 i=13952 InputArguments i=68 i=78 i=13974 i=297 Masks i=7 -1 OutputArguments i=68 i=78 i=13974 i=297 FileHandle i=7 -1 CertificateTypes i=68 i=78 i=13951 ServerCapabilities i=68 i=78 i=12581 SupportedPrivateKeyFormats i=68 i=78 i=12581 MaxTrustListSize i=68 i=78 i=12581 MulticastDnsEnabled i=68 i=78 i=12581 UpdateCertificate i=12617 i=12618 i=78 i=12581 InputArguments i=68 i=78 i=12616 i=297 CertificateGroupId i=17 -1 i=297 CertificateTypeId i=17 -1 i=297 Certificate i=15 -1 i=297 IssuerCertificates i=15 1 0 i=297 PrivateKeyFormat i=12 -1 i=297 PrivateKey i=15 -1 OutputArguments i=68 i=78 i=12616 i=297 ApplyChangesRequired i=1 -1 ApplyChanges i=78 i=12581 CreateSigningRequest i=12732 i=12733 i=78 i=12581 InputArguments i=68 i=78 i=12731 i=297 CertificateGroupId i=17 -1 i=297 CertificateTypeId i=17 -1 i=297 SubjectName i=12 -1 i=297 RegeneratePrivateKey i=1 -1 i=297 Nonce i=15 -1 OutputArguments i=68 i=78 i=12731 i=297 CertificateRequest i=15 -1 GetRejectedList i=12776 i=78 i=12581 OutputArguments i=68 i=78 i=12775 i=297 Certificates i=15 1 0 CertificateUpdatedAuditEventType i=13735 i=13736 i=2127 CertificateGroup i=68 i=78 i=12620 CertificateType i=68 i=78 i=12620 ServerConfiguration i=14053 i=12710 i=12639 i=12640 i=12641 i=13737 i=12740 i=12737 i=12777 i=2253 i=12581 CertificateGroups i=14156 i=14088 i=14122 i=13813 i=12637 DefaultApplicationGroup i=12642 i=14161 i=12555 i=14053 TrustList i=12643 i=14157 i=14158 i=12646 i=12647 i=12650 i=12652 i=12655 i=12657 i=12660 i=12662 i=12663 i=12666 i=12668 i=12670 i=12522 i=14156 Size i=68 i=12642 Writable i=68 i=12642 UserWritable i=68 i=12642 OpenCount i=68 i=12642 Open i=12648 i=12649 i=12642 InputArguments i=68 i=12647 i=297 Mode i=3 -1 OutputArguments i=68 i=12647 i=297 FileHandle i=7 -1 Close i=12651 i=12642 InputArguments i=68 i=12650 i=297 FileHandle i=7 -1 Read i=12653 i=12654 i=12642 InputArguments i=68 i=12652 i=297 FileHandle i=7 -1 i=297 Length i=6 -1 OutputArguments i=68 i=12652 i=297 Data i=15 -1 Write i=12656 i=12642 InputArguments i=68 i=12655 i=297 FileHandle i=7 -1 i=297 Data i=15 -1 GetPosition i=12658 i=12659 i=12642 InputArguments i=68 i=12657 i=297 FileHandle i=7 -1 OutputArguments i=68 i=12657 i=297 Position i=9 -1 SetPosition i=12661 i=12642 InputArguments i=68 i=12660 i=297 FileHandle i=7 -1 i=297 Position i=9 -1 LastUpdateTime i=68 i=12642 OpenWithMasks i=12664 i=12665 i=12642 InputArguments i=68 i=12663 i=297 Masks i=7 -1 OutputArguments i=68 i=12663 i=297 FileHandle i=7 -1 CloseAndUpdate i=14160 i=12667 i=12642 InputArguments i=68 i=12666 i=297 FileHandle i=7 -1 OutputArguments i=68 i=12666 i=297 ApplyChangesRequired i=1 -1 AddCertificate i=12669 i=12642 InputArguments i=68 i=12668 i=297 Certificate i=15 -1 i=297 IsTrustedCertificate i=1 -1 RemoveCertificate i=12671 i=12642 InputArguments i=68 i=12670 i=297 Thumbprint i=12 -1 i=297 IsTrustedCertificate i=1 -1 CertificateTypes i=68 i=14156 DefaultHttpsGroup i=14089 i=14121 i=12555 i=14053 TrustList i=14090 i=14091 i=14092 i=14093 i=14095 i=14098 i=14100 i=14103 i=14105 i=14108 i=14110 i=14111 i=14114 i=14117 i=14119 i=12522 i=14088 Size i=68 i=14089 Writable i=68 i=14089 UserWritable i=68 i=14089 OpenCount i=68 i=14089 Open i=14096 i=14097 i=14089 InputArguments i=68 i=14095 i=297 Mode i=3 -1 OutputArguments i=68 i=14095 i=297 FileHandle i=7 -1 Close i=14099 i=14089 InputArguments i=68 i=14098 i=297 FileHandle i=7 -1 Read i=14101 i=14102 i=14089 InputArguments i=68 i=14100 i=297 FileHandle i=7 -1 i=297 Length i=6 -1 OutputArguments i=68 i=14100 i=297 Data i=15 -1 Write i=14104 i=14089 InputArguments i=68 i=14103 i=297 FileHandle i=7 -1 i=297 Data i=15 -1 GetPosition i=14106 i=14107 i=14089 InputArguments i=68 i=14105 i=297 FileHandle i=7 -1 OutputArguments i=68 i=14105 i=297 Position i=9 -1 SetPosition i=14109 i=14089 InputArguments i=68 i=14108 i=297 FileHandle i=7 -1 i=297 Position i=9 -1 LastUpdateTime i=68 i=14089 OpenWithMasks i=14112 i=14113 i=14089 InputArguments i=68 i=14111 i=297 Masks i=7 -1 OutputArguments i=68 i=14111 i=297 FileHandle i=7 -1 CloseAndUpdate i=14115 i=14116 i=14089 InputArguments i=68 i=14114 i=297 FileHandle i=7 -1 OutputArguments i=68 i=14114 i=297 ApplyChangesRequired i=1 -1 AddCertificate i=14118 i=14089 InputArguments i=68 i=14117 i=297 Certificate i=15 -1 i=297 IsTrustedCertificate i=1 -1 RemoveCertificate i=14120 i=14089 InputArguments i=68 i=14119 i=297 Thumbprint i=12 -1 i=297 IsTrustedCertificate i=1 -1 CertificateTypes i=68 i=14088 DefaultUserTokenGroup i=14123 i=14155 i=12555 i=14053 TrustList i=14124 i=14125 i=14126 i=14127 i=14129 i=14132 i=14134 i=14137 i=14139 i=14142 i=14144 i=14145 i=14148 i=14151 i=14153 i=12522 i=14122 Size i=68 i=14123 Writable i=68 i=14123 UserWritable i=68 i=14123 OpenCount i=68 i=14123 Open i=14130 i=14131 i=14123 InputArguments i=68 i=14129 i=297 Mode i=3 -1 OutputArguments i=68 i=14129 i=297 FileHandle i=7 -1 Close i=14133 i=14123 InputArguments i=68 i=14132 i=297 FileHandle i=7 -1 Read i=14135 i=14136 i=14123 InputArguments i=68 i=14134 i=297 FileHandle i=7 -1 i=297 Length i=6 -1 OutputArguments i=68 i=14134 i=297 Data i=15 -1 Write i=14138 i=14123 InputArguments i=68 i=14137 i=297 FileHandle i=7 -1 i=297 Data i=15 -1 GetPosition i=14140 i=14141 i=14123 InputArguments i=68 i=14139 i=297 FileHandle i=7 -1 OutputArguments i=68 i=14139 i=297 Position i=9 -1 SetPosition i=14143 i=14123 InputArguments i=68 i=14142 i=297 FileHandle i=7 -1 i=297 Position i=9 -1 LastUpdateTime i=68 i=14123 OpenWithMasks i=14146 i=14147 i=14123 InputArguments i=68 i=14145 i=297 Masks i=7 -1 OutputArguments i=68 i=14145 i=297 FileHandle i=7 -1 CloseAndUpdate i=14149 i=14150 i=14123 InputArguments i=68 i=14148 i=297 FileHandle i=7 -1 OutputArguments i=68 i=14148 i=297 ApplyChangesRequired i=1 -1 AddCertificate i=14152 i=14123 InputArguments i=68 i=14151 i=297 Certificate i=15 -1 i=297 IsTrustedCertificate i=1 -1 RemoveCertificate i=14154 i=14123 InputArguments i=68 i=14153 i=297 Thumbprint i=12 -1 i=297 IsTrustedCertificate i=1 -1 CertificateTypes i=68 i=14122 ServerCapabilities i=68 i=12637 SupportedPrivateKeyFormats i=68 i=12637 MaxTrustListSize i=68 i=12637 MulticastDnsEnabled i=68 i=12637 UpdateCertificate i=13738 i=13739 i=12637 InputArguments i=68 i=13737 i=297 CertificateGroupId i=17 -1 i=297 CertificateTypeId i=17 -1 i=297 Certificate i=15 -1 i=297 IssuerCertificates i=15 1 0 i=297 PrivateKeyFormat i=12 -1 i=297 PrivateKey i=15 -1 OutputArguments i=68 i=13737 i=297 ApplyChangesRequired i=1 -1 ApplyChanges i=12637 CreateSigningRequest i=12738 i=12739 i=12637 InputArguments i=68 i=12737 i=297 CertificateGroupId i=17 -1 i=297 CertificateTypeId i=17 -1 i=297 SubjectName i=12 -1 i=297 RegeneratePrivateKey i=1 -1 i=297 Nonce i=15 -1 OutputArguments i=68 i=12737 i=297 CertificateRequest i=15 -1 GetRejectedList i=12778 i=12637 OutputArguments i=68 i=12777 i=297 Certificates i=15 1 0 KeyCredentialConfigurationFolderType i=17511 i=17522 i=61 <ServiceName> i=17512 i=17513 i=18001 i=11508 i=17496 ResourceUri i=68 i=78 i=17511 ProfileUri i=68 i=78 i=17511 CreateCredential i=17523 i=17524 i=80 i=17496 InputArguments i=68 i=78 i=17522 i=297 ResourceUri i=12 -1 i=297 ProfileUri i=12 -1 i=297 EndpointUrls i=12 1 0 OutputArguments i=68 i=78 i=17522 i=297 CredentialNodeId i=17 -1 KeyCredentialConfiguration i=12637 i=17496 KeyCredentialConfigurationType i=18069 i=18165 i=18004 i=18005 i=17534 i=18006 i=18008 i=58 ResourceUri i=68 i=78 i=18001 ProfileUri i=68 i=78 i=18001 EndpointUrls i=68 i=80 i=18001 ServiceStatus i=68 i=80 i=18001 GetEncryptingKey i=17535 i=17536 i=80 i=18001 InputArguments i=68 i=78 i=17534 i=297 CredentialId i=12 -1 i=297 RequestedSecurityPolicyUri i=12 -1 OutputArguments i=68 i=78 i=17534 i=297 PublicKey i=15 -1 i=297 RevisedSecurityPolicyUri i=17 -1 UpdateCredential i=18007 i=80 i=18001 InputArguments i=68 i=78 i=18006 i=297 CredentialId i=12 -1 i=297 CredentialSecret i=15 -1 i=297 CertificateThumbprint i=12 -1 i=297 SecurityPolicyUri i=12 -1 DeleteCredential i=80 i=18001 KeyCredentialAuditEventType i=18028 i=2127 ResourceUri i=68 i=78 i=18011 KeyCredentialUpdatedAuditEventType i=18011 KeyCredentialDeletedAuditEventType i=18011 AuthorizationServicesConfigurationFolderType i=23557 i=61 <ServiceName> i=23558 i=23559 i=23560 i=17852 i=11508 i=23556 ServiceUri i=68 i=78 i=23557 ServiceCertificate i=68 i=78 i=23557 IssuerEndpointUrl i=68 i=78 i=23557 AuthorizationServices i=12637 i=61 AuthorizationServiceConfigurationType i=18072 i=17860 i=18073 i=58 ServiceUri i=68 i=78 i=17852 ServiceCertificate i=68 i=78 i=17852 IssuerEndpointUrl i=68 i=78 i=17852 AggregateConfigurationType i=11188 i=11189 i=11190 i=11191 i=58 TreatUncertainAsBad i=68 i=78 i=11187 PercentDataBad i=68 i=78 i=11187 PercentDataGood i=68 i=78 i=11187 UseSlopedExtrapolation i=68 i=78 i=11187 Interpolative i=2340 Average i=2340 TimeAverage i=2340 TimeAverage2 i=2340 Total i=2340 Total2 i=2340 Minimum i=2340 Maximum i=2340 MinimumActualTime i=2340 MaximumActualTime i=2340 Range i=2340 Minimum2 i=2340 Maximum2 i=2340 MinimumActualTime2 i=2340 MaximumActualTime2 i=2340 Range2 i=2340 AnnotationCount i=2340 Count i=2340 DurationInStateZero i=2340 DurationInStateNonZero i=2340 NumberOfTransitions i=2340 Start i=2340 End i=2340 Delta i=2340 StartBound i=2340 EndBound i=2340 DeltaBounds i=2340 DurationGood i=2340 DurationBad i=2340 PercentGood i=2340 PercentBad i=2340 WorstQuality i=2340 WorstQuality2 i=2340 StandardDeviationSample i=2340 StandardDeviationPopulation i=2340 VarianceSample i=2340 VariancePopulation i=2340 DataTypeSchemaHeader i=22 DataTypeDescription i=22 StructureDescription i=14525 EnumDescription i=14525 SimpleTypeDescription i=14525 UABinaryFileDataType i=15534 PubSubState i=14648 i=29 EnumStrings i=68 i=14647 Disabled Paused Operational Error PreOperational DataSetMetaDataType i=15534 FieldMetaData i=22 DataSetFieldFlags i=15577 i=5 OptionSetValues i=68 i=15904 PromotedField ConfigurationVersionDataType i=22 PublishedDataSetDataType i=22 PublishedDataSetSourceDataType i=22 PublishedVariableDataType i=22 PublishedDataItemsDataType i=15580 PublishedEventsDataType i=15580 DataSetFieldContentMask i=15584 i=7 OptionSetValues i=68 i=15583 StatusCode SourceTimestamp ServerTimestamp SourcePicoSeconds ServerPicoSeconds RawData DataSetWriterDataType i=22 DataSetWriterTransportDataType i=22 DataSetWriterMessageDataType i=22 PubSubGroupDataType i=22 WriterGroupDataType i=15609 WriterGroupTransportDataType i=22 WriterGroupMessageDataType i=22 PubSubConnectionDataType i=22 ConnectionTransportDataType i=22 NetworkAddressDataType i=22 NetworkAddressUrlDataType i=15502 ReaderGroupDataType i=15609 ReaderGroupTransportDataType i=22 ReaderGroupMessageDataType i=22 DataSetReaderDataType i=22 DataSetReaderTransportDataType i=22 DataSetReaderMessageDataType i=22 SubscribedDataSetDataType i=22 TargetVariablesDataType i=15630 FieldTargetDataType i=22 OverrideValueHandling i=15875 i=29 EnumStrings i=68 i=15874 Disabled LastUsableValue OverrideValue SubscribedDataSetMirrorDataType i=15630 PubSubConfigurationDataType i=22 DataSetOrderingType i=15641 i=29 EnumStrings i=68 i=20408 Undefined AscendingWriterId AscendingWriterIdSingle UadpNetworkMessageContentMask i=15643 i=7 OptionSetValues i=68 i=15642 PublisherId GroupHeader WriterGroupId GroupVersion NetworkMessageNumber SequenceNumber PayloadHeader Timestamp PicoSeconds DataSetClassId PromotedFields UadpWriterGroupMessageDataType i=15616 UadpDataSetMessageContentMask i=15647 i=7 OptionSetValues i=68 i=15646 Timestamp PicoSeconds Status MajorVersion MinorVersion SequenceNumber UadpDataSetWriterMessageDataType i=15605 UadpDataSetReaderMessageDataType i=15629 JsonNetworkMessageContentMask i=15655 i=7 OptionSetValues i=68 i=15654 NetworkMessageHeader DataSetMessageHeader SingleDataSetMessage PublisherId DataSetClassId ReplyTo JsonWriterGroupMessageDataType i=15616 JsonDataSetMessageContentMask i=15659 i=7 OptionSetValues i=68 i=15658 DataSetWriterId MetaDataVersion SequenceNumber Timestamp Status MessageType JsonDataSetWriterMessageDataType i=15605 JsonDataSetReaderMessageDataType i=15629 DatagramConnectionTransportDataType i=15618 DatagramWriterGroupTransportDataType i=15611 BrokerConnectionTransportDataType i=15618 BrokerTransportQualityOfService i=15009 i=29 EnumStrings i=68 i=15008 NotSpecified BestEffort AtLeastOnce AtMostOnce ExactlyOnce BrokerWriterGroupTransportDataType i=15611 BrokerDataSetWriterTransportDataType i=15598 BrokerDataSetReaderTransportDataType i=15628 PubSubKeyServiceType i=15907 i=15910 i=15913 i=58 GetSecurityKeys i=15908 i=15909 i=80 i=15906 InputArguments i=68 i=78 i=15907 i=297 SecurityGroupId i=12 -1 i=297 StartingTokenId i=288 -1 i=297 RequestedKeyCount i=7 -1 OutputArguments i=68 i=78 i=15907 i=297 SecurityPolicyUri i=12 -1 i=297 FirstTokenId i=288 -1 i=297 Keys i=15 1 0 i=297 TimeToNextKey i=290 -1 i=297 KeyLifetime i=290 -1 GetSecurityGroup i=15911 i=15912 i=80 i=15906 InputArguments i=68 i=78 i=15910 i=297 SecurityGroupId i=12 -1 OutputArguments i=68 i=78 i=15910 i=297 SecurityGroupNodeId i=17 -1 SecurityGroups i=15914 i=15917 i=15452 i=80 i=15906 AddSecurityGroup i=15915 i=15916 i=78 i=15913 InputArguments i=68 i=78 i=15914 i=297 SecurityGroupName i=12 -1 i=297 KeyLifetime i=290 -1 i=297 SecurityPolicyUri i=12 -1 i=297 MaxFutureKeyCount i=7 -1 i=297 MaxPastKeyCount i=7 -1 OutputArguments i=68 i=78 i=15914 i=297 SecurityGroupId i=12 -1 i=297 SecurityGroupNodeId i=17 -1 RemoveSecurityGroup i=15918 i=78 i=15913 InputArguments i=68 i=78 i=15917 i=297 SecurityGroupNodeId i=17 -1 SecurityGroupFolderType i=15453 i=15459 i=15461 i=15464 i=61 <SecurityGroupFolderName> i=15454 i=15457 i=15452 i=11508 i=15452 AddSecurityGroup i=15455 i=15456 i=78 i=15453 InputArguments i=68 i=78 i=15454 i=297 SecurityGroupName i=12 -1 i=297 KeyLifetime i=290 -1 i=297 SecurityPolicyUri i=12 -1 i=297 MaxFutureKeyCount i=7 -1 i=297 MaxPastKeyCount i=7 -1 OutputArguments i=68 i=78 i=15454 i=297 SecurityGroupId i=12 -1 i=297 SecurityGroupNodeId i=17 -1 RemoveSecurityGroup i=15458 i=78 i=15453 InputArguments i=68 i=78 i=15457 i=297 SecurityGroupNodeId i=17 -1 <SecurityGroupName> i=15460 i=15010 i=15011 i=15012 i=15043 i=15471 i=11508 i=15452 SecurityGroupId i=68 i=78 i=15459 KeyLifetime i=68 i=78 i=15459 SecurityPolicyUri i=68 i=78 i=15459 MaxFutureKeyCount i=68 i=78 i=15459 MaxPastKeyCount i=68 i=78 i=15459 AddSecurityGroup i=15462 i=15463 i=78 i=15452 InputArguments i=68 i=78 i=15461 i=297 SecurityGroupName i=12 -1 i=297 KeyLifetime i=290 -1 i=297 SecurityPolicyUri i=12 -1 i=297 MaxFutureKeyCount i=7 -1 i=297 MaxPastKeyCount i=7 -1 OutputArguments i=68 i=78 i=15461 i=297 SecurityGroupId i=12 -1 i=297 SecurityGroupNodeId i=17 -1 RemoveSecurityGroup i=15465 i=78 i=15452 InputArguments i=68 i=78 i=15464 i=297 SecurityGroupNodeId i=17 -1 SecurityGroupType i=15472 i=15046 i=15047 i=15048 i=15056 i=58 SecurityGroupId i=68 i=78 i=15471 KeyLifetime i=68 i=78 i=15471 SecurityPolicyUri i=68 i=78 i=15471 MaxFutureKeyCount i=68 i=78 i=15471 MaxPastKeyCount i=68 i=78 i=15471 PublishSubscribeType i=14417 i=17296 i=16598 i=14432 i=14434 i=15844 i=18715 i=17479 i=15906 <ConnectionName> i=14418 i=17292 i=17478 i=14423 i=14419 i=14209 i=11508 i=14416 PublisherId i=68 i=78 i=14417 TransportProfileUri i=17706 i=16309 i=78 i=14417 Selections i=68 i=78 i=17292 ConnectionProperties i=68 i=78 i=14417 Address i=15533 i=21145 i=78 i=14417 NetworkInterface i=17503 i=16309 i=78 i=14423 Selections i=68 i=78 i=15533 Status i=14420 i=14643 i=78 i=14417 State i=63 i=78 i=14419 SetSecurityKeys i=17297 i=80 i=14416 InputArguments i=68 i=78 i=17296 i=297 SecurityGroupId i=12 -1 i=297 SecurityPolicyUri i=12 -1 i=297 CurrentTokenId i=288 -1 i=297 CurrentKey i=15 -1 i=297 FutureKeys i=15 1 0 i=297 TimeToNextKey i=290 -1 i=297 KeyLifetime i=290 -1 AddConnection i=16599 i=16600 i=80 i=14416 InputArguments i=68 i=78 i=16598 i=297 Configuration i=15617 -1 OutputArguments i=68 i=78 i=16598 i=297 ConnectionId i=17 -1 RemoveConnection i=14433 i=80 i=14416 InputArguments i=68 i=78 i=14432 i=297 ConnectionId i=17 -1 PublishedDataSets i=14477 i=78 i=14416 Status i=15845 i=14643 i=78 i=14416 State i=63 i=78 i=15844 Diagnostics i=18716 i=18717 i=18722 i=18727 i=18728 i=18729 i=18760 i=19732 i=80 i=14416 DiagnosticsLevel i=63 i=78 i=18715 TotalInformation i=18718 i=18719 i=18720 i=19725 i=78 i=18715 Active i=68 i=78 i=18717 Classification i=68 i=78 i=18717 DiagnosticsLevel i=68 i=78 i=18717 TotalError i=18723 i=18724 i=18725 i=19725 i=78 i=18715 Active i=68 i=78 i=18722 Classification i=68 i=78 i=18722 DiagnosticsLevel i=68 i=78 i=18722 Reset i=78 i=18715 SubError i=63 i=78 i=18715 Counters i=18730 i=18735 i=18740 i=18745 i=18750 i=18755 i=58 i=78 i=18715 StateError i=18731 i=18732 i=18733 i=19725 i=78 i=18729 Active i=68 i=78 i=18730 Classification i=68 i=78 i=18730 1 DiagnosticsLevel i=68 i=78 i=18730 0 StateOperationalByMethod i=18736 i=18737 i=18738 i=19725 i=78 i=18729 Active i=68 i=78 i=18735 Classification i=68 i=78 i=18735 0 DiagnosticsLevel i=68 i=78 i=18735 0 StateOperationalByParent i=18741 i=18742 i=18743 i=19725 i=78 i=18729 Active i=68 i=78 i=18740 Classification i=68 i=78 i=18740 0 DiagnosticsLevel i=68 i=78 i=18740 0 StateOperationalFromError i=18746 i=18747 i=18748 i=19725 i=78 i=18729 Active i=68 i=78 i=18745 Classification i=68 i=78 i=18745 0 DiagnosticsLevel i=68 i=78 i=18745 0 StatePausedByParent i=18751 i=18752 i=18753 i=19725 i=78 i=18729 Active i=68 i=78 i=18750 Classification i=68 i=78 i=18750 0 DiagnosticsLevel i=68 i=78 i=18750 0 StateDisabledByMethod i=18756 i=18757 i=18758 i=19725 i=78 i=18729 Active i=68 i=78 i=18755 Classification i=68 i=78 i=18755 0 DiagnosticsLevel i=68 i=78 i=18755 0 LiveValues i=18761 i=18763 i=18765 i=18767 i=58 i=78 i=18715 ConfiguredDataSetWriters i=18762 i=63 i=78 i=18760 DiagnosticsLevel i=68 i=78 i=18761 0 ConfiguredDataSetReaders i=18764 i=63 i=78 i=18760 DiagnosticsLevel i=68 i=78 i=18763 0 OperationalDataSetWriters i=18766 i=63 i=78 i=18760 DiagnosticsLevel i=68 i=78 i=18765 0 OperationalDataSetReaders i=18768 i=63 i=78 i=18760 DiagnosticsLevel i=68 i=78 i=18767 0 SupportedTransportProfiles i=68 i=78 i=14416 PublishSubscribe i=15215 i=15440 i=15443 i=17366 i=17369 i=17371 i=17405 i=17409 i=17481 i=2253 i=14416 GetSecurityKeys i=15216 i=15217 i=14443 InputArguments i=68 i=15215 i=297 SecurityGroupId i=12 -1 i=297 StartingTokenId i=288 -1 i=297 RequestedKeyCount i=7 -1 OutputArguments i=68 i=15215 i=297 SecurityPolicyUri i=12 -1 i=297 FirstTokenId i=288 -1 i=297 Keys i=15 1 0 i=297 TimeToNextKey i=290 -1 i=297 KeyLifetime i=290 -1 GetSecurityGroup i=15441 i=15442 i=14443 InputArguments i=68 i=15440 i=297 SecurityGroupId i=12 -1 OutputArguments i=68 i=15440 i=297 SecurityGroupNodeId i=17 -1 SecurityGroups i=15444 i=15447 i=15452 i=14443 AddSecurityGroup i=15445 i=15446 i=15443 InputArguments i=68 i=15444 i=297 SecurityGroupName i=12 -1 i=297 KeyLifetime i=290 -1 i=297 SecurityPolicyUri i=12 -1 i=297 MaxFutureKeyCount i=7 -1 i=297 MaxPastKeyCount i=7 -1 OutputArguments i=68 i=15444 i=297 SecurityGroupId i=12 -1 i=297 SecurityGroupNodeId i=17 -1 RemoveSecurityGroup i=15448 i=15443 InputArguments i=68 i=15447 i=297 SecurityGroupNodeId i=17 -1 AddConnection i=17367 i=17368 i=14443 InputArguments i=68 i=17366 i=297 Configuration i=15617 -1 OutputArguments i=68 i=17366 i=297 ConnectionId i=17 -1 RemoveConnection i=17370 i=14443 InputArguments i=68 i=17369 i=297 ConnectionId i=17 -1 PublishedDataSets i=14477 i=14443 Status i=17406 i=14643 i=14443 State i=63 i=17405 Diagnostics i=17410 i=17411 i=17416 i=17421 i=17422 i=17423 i=17457 i=19732 i=14443 DiagnosticsLevel i=63 i=17409 TotalInformation i=17412 i=17413 i=17414 i=19725 i=17409 Active i=68 i=17411 Classification i=68 i=17411 DiagnosticsLevel i=68 i=17411 TotalError i=17417 i=17418 i=17419 i=19725 i=17409 Active i=68 i=17416 Classification i=68 i=17416 DiagnosticsLevel i=68 i=17416 Reset i=17409 SubError i=63 i=17409 Counters i=17424 i=17431 i=17436 i=17441 i=17446 i=17451 i=58 i=17409 StateError i=17425 i=17426 i=17429 i=19725 i=17423 Active i=68 i=17424 Classification i=68 i=17424 1 DiagnosticsLevel i=68 i=17424 0 StateOperationalByMethod i=17432 i=17433 i=17434 i=19725 i=17423 Active i=68 i=17431 Classification i=68 i=17431 0 DiagnosticsLevel i=68 i=17431 0 StateOperationalByParent i=17437 i=17438 i=17439 i=19725 i=17423 Active i=68 i=17436 Classification i=68 i=17436 0 DiagnosticsLevel i=68 i=17436 0 StateOperationalFromError i=17442 i=17443 i=17444 i=19725 i=17423 Active i=68 i=17441 Classification i=68 i=17441 0 DiagnosticsLevel i=68 i=17441 0 StatePausedByParent i=17447 i=17448 i=17449 i=19725 i=17423 Active i=68 i=17446 Classification i=68 i=17446 0 DiagnosticsLevel i=68 i=17446 0 StateDisabledByMethod i=17452 i=17453 i=17454 i=19725 i=17423 Active i=68 i=17451 Classification i=68 i=17451 0 DiagnosticsLevel i=68 i=17451 0 LiveValues i=17458 i=17460 i=17462 i=17464 i=58 i=17409 ConfiguredDataSetWriters i=17459 i=63 i=17457 DiagnosticsLevel i=68 i=17458 0 ConfiguredDataSetReaders i=17461 i=63 i=17457 DiagnosticsLevel i=68 i=17460 0 OperationalDataSetWriters i=17463 i=63 i=17457 DiagnosticsLevel i=68 i=17462 0 OperationalDataSetReaders i=17466 i=63 i=17457 DiagnosticsLevel i=68 i=17464 0 SupportedTransportProfiles i=68 i=14443 HasPubSubConnection i=47 PubSubConnectionOf PublishedDataSetType i=15222 i=14519 i=15229 i=16759 i=15481 i=58 <DataSetWriterName> i=16720 i=16721 i=17482 i=15223 i=15298 i=11508 i=14509 DataSetWriterId i=68 i=78 i=15222 DataSetFieldContentMask i=68 i=78 i=15222 DataSetWriterProperties i=68 i=78 i=15222 Status i=15224 i=14643 i=78 i=15222 State i=63 i=78 i=15223 ConfigurationVersion i=68 i=78 i=14509 DataSetMetaData i=68 i=78 i=14509 DataSetClassId i=68 i=80 i=14509 ExtensionFields i=15482 i=15485 i=15489 i=80 i=14509 AddExtensionField i=15483 i=15484 i=78 i=15481 InputArguments i=68 i=78 i=15482 i=297 FieldName i=20 -1 i=297 FieldValue i=24 -2 OutputArguments i=68 i=78 i=15482 i=297 FieldId i=17 -1 RemoveExtensionField i=15486 i=78 i=15481 InputArguments i=68 i=78 i=15485 i=297 FieldId i=17 -1 ExtensionFieldsType i=15490 i=15491 i=15494 i=58 <ExtensionFieldName> i=68 i=11508 i=15489 AddExtensionField i=15492 i=15493 i=78 i=15489 InputArguments i=68 i=78 i=15491 i=297 FieldName i=20 -1 i=297 FieldValue i=24 -2 OutputArguments i=68 i=78 i=15491 i=297 FieldId i=17 -1 RemoveExtensionField i=15495 i=78 i=15489 InputArguments i=68 i=78 i=15494 i=297 FieldId i=17 -1 DataSetToWriter i=33 WriterToDataSet PublishedDataItemsType i=14548 i=14555 i=14558 i=14509 PublishedData i=68 i=78 i=14534 AddVariables i=14556 i=14557 i=80 i=14534 InputArguments i=68 i=78 i=14555 i=297 ConfigurationVersion i=14593 -1 i=297 FieldNameAliases i=12 1 0 i=297 PromotedFields i=1 1 0 i=297 VariablesToAdd i=14273 1 0 OutputArguments i=68 i=78 i=14555 i=297 NewConfigurationVersion i=14593 -1 i=297 AddResults i=19 1 0 RemoveVariables i=14559 i=14560 i=80 i=14534 InputArguments i=68 i=78 i=14558 i=297 ConfigurationVersion i=14593 -1 i=297 VariablesToRemove i=7 1 0 OutputArguments i=68 i=78 i=14558 i=297 NewConfigurationVersion i=14593 -1 i=297 RemoveResults i=19 1 0 PublishedEventsType i=14586 i=14587 i=14588 i=15052 i=14509 EventNotifier i=68 i=78 i=14572 SelectedFields i=68 i=78 i=14572 Filter i=68 i=78 i=14572 ModifyFieldSelection i=15053 i=15517 i=80 i=14572 InputArguments i=68 i=78 i=15052 i=297 ConfigurationVersion i=14593 -1 i=297 FieldNameAliases i=12 1 0 i=297 PromotedFields i=1 1 0 i=297 SelectedFields i=601 1 0 OutputArguments i=68 i=78 i=15052 i=297 NewConfigurationVersion i=14593 -1 DataSetFolderType i=14478 i=14487 i=14493 i=14496 i=16935 i=16960 i=14499 i=16994 i=16997 i=61 <DataSetFolderName> i=14479 i=14482 i=16842 i=16881 i=14485 i=16884 i=16923 i=14477 i=11508 i=14477 AddPublishedDataItems i=14480 i=14481 i=80 i=14478 InputArguments i=68 i=78 i=14479 i=297 Name i=12 -1 i=297 FieldNameAliases i=12 1 0 i=297 FieldFlags i=15904 1 0 i=297 VariablesToAdd i=14273 1 0 OutputArguments i=68 i=78 i=14479 i=297 DataSetNodeId i=17 -1 i=297 ConfigurationVersion i=14593 -1 i=297 AddResults i=19 1 0 AddPublishedEvents i=14483 i=14484 i=80 i=14478 InputArguments i=68 i=78 i=14482 i=297 Name i=12 -1 i=297 EventNotifier i=17 -1 i=297 FieldNameAliases i=12 1 0 i=297 FieldFlags i=15904 1 0 i=297 SelectedFields i=601 1 0 i=297 Filter i=586 -1 OutputArguments i=68 i=78 i=14482 i=297 ConfigurationVersion i=14593 -1 i=297 DataSetNodeId i=17 -1 AddPublishedDataItemsTemplate i=16843 i=16853 i=80 i=14478 InputArguments i=68 i=78 i=16842 i=297 Name i=12 -1 i=297 DataSetMetaData i=14523 -1 i=297 VariablesToAdd i=14273 1 0 OutputArguments i=68 i=78 i=16842 i=297 DataSetNodeId i=17 -1 i=297 AddResults i=19 1 0 AddPublishedEventsTemplate i=16882 i=16883 i=80 i=14478 InputArguments i=68 i=78 i=16881 i=297 Name i=12 -1 i=297 DataSetMetaData i=14523 -1 i=297 EventNotifier i=17 -1 i=297 SelectedFields i=601 1 0 i=297 Filter i=586 -1 OutputArguments i=68 i=78 i=16881 i=297 DataSetNodeId i=17 -1 RemovePublishedDataSet i=14486 i=80 i=14478 InputArguments i=68 i=78 i=14485 i=297 DataSetNodeId i=17 -1 AddDataSetFolder i=16894 i=16922 i=80 i=14478 InputArguments i=68 i=78 i=16884 i=297 Name i=12 -1 OutputArguments i=68 i=78 i=16884 i=297 DataSetFolderNodeId i=17 -1 RemoveDataSetFolder i=16924 i=80 i=14478 InputArguments i=68 i=78 i=16923 i=297 DataSetFolderNodeId i=17 -1 <PublishedDataSetName> i=14489 i=15221 i=14509 i=11508 i=14477 ConfigurationVersion i=68 i=78 i=14487 DataSetMetaData i=68 i=78 i=14487 AddPublishedDataItems i=14494 i=14495 i=80 i=14477 InputArguments i=68 i=78 i=14493 i=297 Name i=12 -1 i=297 FieldNameAliases i=12 1 0 i=297 FieldFlags i=15904 1 0 i=297 VariablesToAdd i=14273 1 0 OutputArguments i=68 i=78 i=14493 i=297 DataSetNodeId i=17 -1 i=297 ConfigurationVersion i=14593 -1 i=297 AddResults i=19 1 0 AddPublishedEvents i=14497 i=14498 i=80 i=14477 InputArguments i=68 i=78 i=14496 i=297 Name i=12 -1 i=297 EventNotifier i=17 -1 i=297 FieldNameAliases i=12 1 0 i=297 FieldFlags i=15904 1 0 i=297 SelectedFields i=601 1 0 i=297 Filter i=586 -1 OutputArguments i=68 i=78 i=14496 i=297 ConfigurationVersion i=14593 -1 i=297 DataSetNodeId i=17 -1 AddPublishedDataItemsTemplate i=16958 i=16959 i=80 i=14477 InputArguments i=68 i=78 i=16935 i=297 Name i=12 -1 i=297 DataSetMetaData i=14523 -1 i=297 VariablesToAdd i=14273 1 0 OutputArguments i=68 i=78 i=16935 i=297 DataSetNodeId i=17 -1 i=297 AddResults i=19 1 0 AddPublishedEventsTemplate i=16961 i=16971 i=80 i=14477 InputArguments i=68 i=78 i=16960 i=297 Name i=12 -1 i=297 DataSetMetaData i=14523 -1 i=297 EventNotifier i=17 -1 i=297 SelectedFields i=601 1 0 i=297 Filter i=586 -1 OutputArguments i=68 i=78 i=16960 i=297 DataSetNodeId i=17 -1 RemovePublishedDataSet i=14500 i=80 i=14477 InputArguments i=68 i=78 i=14499 i=297 DataSetNodeId i=17 -1 AddDataSetFolder i=16995 i=16996 i=80 i=14477 InputArguments i=68 i=78 i=16994 i=297 Name i=12 -1 OutputArguments i=68 i=78 i=16994 i=297 DataSetFolderNodeId i=17 -1 RemoveDataSetFolder i=17007 i=80 i=14477 InputArguments i=68 i=78 i=16997 i=297 DataSetFolderNodeId i=17 -1 PubSubConnectionType i=14595 i=17306 i=17485 i=14221 i=17203 i=17310 i=17325 i=14600 i=19241 i=17427 i=17465 i=14225 i=58 PublisherId i=68 i=78 i=14209 TransportProfileUri i=17710 i=16309 i=78 i=14209 Selections i=68 i=78 i=17306 ConnectionProperties i=68 i=78 i=14209 Address i=17202 i=21145 i=78 i=14209 NetworkInterface i=17576 i=16309 i=78 i=14221 Selections i=68 i=78 i=17202 TransportSettings i=17721 i=80 i=14209 <WriterGroupName> i=17311 i=17204 i=17486 i=17314 i=17214 i=17318 i=17319 i=17321 i=17322 i=17558 i=17725 i=11508 i=14209 SecurityMode i=68 i=78 i=17310 MaxNetworkMessageSize i=68 i=78 i=17310 GroupProperties i=68 i=78 i=17310 Status i=17315 i=14643 i=78 i=17310 State i=63 i=78 i=17314 WriterGroupId i=68 i=78 i=17310 PublishingInterval i=68 i=78 i=17310 KeepAliveTime i=68 i=78 i=17310 Priority i=68 i=78 i=17310 LocaleIds i=68 i=78 i=17310 HeaderLayoutUri i=68 i=78 i=17310 <ReaderGroupName> i=17326 i=17302 i=17487 i=17329 i=17999 i=11508 i=14209 SecurityMode i=68 i=78 i=17325 MaxNetworkMessageSize i=68 i=78 i=17325 GroupProperties i=68 i=78 i=17325 Status i=17330 i=14643 i=78 i=17325 State i=63 i=78 i=17329 Status i=14601 i=14643 i=78 i=14209 State i=63 i=78 i=14600 Diagnostics i=19242 i=19243 i=19248 i=19253 i=19254 i=19255 i=19286 i=19786 i=80 i=14209 DiagnosticsLevel i=63 i=78 i=19241 TotalInformation i=19244 i=19245 i=19246 i=19725 i=78 i=19241 Active i=68 i=78 i=19243 Classification i=68 i=78 i=19243 DiagnosticsLevel i=68 i=78 i=19243 TotalError i=19249 i=19250 i=19251 i=19725 i=78 i=19241 Active i=68 i=78 i=19248 Classification i=68 i=78 i=19248 DiagnosticsLevel i=68 i=78 i=19248 Reset i=78 i=19241 SubError i=63 i=78 i=19241 Counters i=19256 i=19261 i=19266 i=19271 i=19276 i=19281 i=58 i=78 i=19241 StateError i=19257 i=19258 i=19259 i=19725 i=78 i=19255 Active i=68 i=78 i=19256 Classification i=68 i=78 i=19256 1 DiagnosticsLevel i=68 i=78 i=19256 0 StateOperationalByMethod i=19262 i=19263 i=19264 i=19725 i=78 i=19255 Active i=68 i=78 i=19261 Classification i=68 i=78 i=19261 0 DiagnosticsLevel i=68 i=78 i=19261 0 StateOperationalByParent i=19267 i=19268 i=19269 i=19725 i=78 i=19255 Active i=68 i=78 i=19266 Classification i=68 i=78 i=19266 0 DiagnosticsLevel i=68 i=78 i=19266 0 StateOperationalFromError i=19272 i=19273 i=19274 i=19725 i=78 i=19255 Active i=68 i=78 i=19271 Classification i=68 i=78 i=19271 0 DiagnosticsLevel i=68 i=78 i=19271 0 StatePausedByParent i=19277 i=19278 i=19279 i=19725 i=78 i=19255 Active i=68 i=78 i=19276 Classification i=68 i=78 i=19276 0 DiagnosticsLevel i=68 i=78 i=19276 0 StateDisabledByMethod i=19282 i=19283 i=19284 i=19725 i=78 i=19255 Active i=68 i=78 i=19281 Classification i=68 i=78 i=19281 0 DiagnosticsLevel i=68 i=78 i=19281 0 LiveValues i=19287 i=58 i=78 i=19241 ResolvedAddress i=19288 i=63 i=78 i=19286 DiagnosticsLevel i=68 i=78 i=19287 0 AddWriterGroup i=17428 i=17456 i=80 i=14209 InputArguments i=68 i=78 i=17427 i=297 Configuration i=15480 -1 OutputArguments i=68 i=78 i=17427 i=297 GroupId i=17 -1 AddReaderGroup i=17507 i=17508 i=80 i=14209 InputArguments i=68 i=78 i=17465 i=297 Configuration i=15520 -1 OutputArguments i=68 i=78 i=17465 i=297 GroupId i=17 -1 RemoveGroup i=14226 i=80 i=14209 InputArguments i=68 i=78 i=14225 i=297 GroupId i=17 -1 ConnectionTransportType i=58 PubSubGroupType i=15926 i=15927 i=15928 i=17724 i=17488 i=15265 i=58 SecurityMode i=68 i=78 i=14232 SecurityGroupId i=68 i=80 i=14232 SecurityKeyServices i=68 i=80 i=14232 MaxNetworkMessageSize i=68 i=78 i=14232 GroupProperties i=68 i=78 i=14232 Status i=15266 i=14643 i=78 i=14232 State i=63 i=78 i=15265 WriterGroupType i=17736 i=17737 i=17738 i=17739 i=17740 i=17559 i=17741 i=17742 i=17743 i=17812 i=17969 i=17992 i=14232 WriterGroupId i=68 i=78 i=17725 PublishingInterval i=68 i=78 i=17725 KeepAliveTime i=68 i=78 i=17725 Priority i=68 i=78 i=17725 LocaleIds i=68 i=78 i=17725 HeaderLayoutUri i=68 i=78 i=17725 TransportSettings i=17997 i=80 i=17725 MessageSettings i=17998 i=80 i=17725 <DataSetWriterName> i=17744 i=17745 i=17490 i=17749 i=15298 i=11508 i=17725 DataSetWriterId i=68 i=78 i=17743 DataSetFieldContentMask i=68 i=78 i=17743 DataSetWriterProperties i=68 i=78 i=17743 Status i=17750 i=14643 i=78 i=17743 State i=63 i=78 i=17749 Diagnostics i=17813 i=17814 i=17819 i=17824 i=17825 i=17826 i=17858 i=19834 i=80 i=17725 DiagnosticsLevel i=63 i=78 i=17812 TotalInformation i=17815 i=17816 i=17817 i=19725 i=78 i=17812 Active i=68 i=78 i=17814 Classification i=68 i=78 i=17814 DiagnosticsLevel i=68 i=78 i=17814 TotalError i=17820 i=17821 i=17822 i=19725 i=78 i=17812 Active i=68 i=78 i=17819 Classification i=68 i=78 i=17819 DiagnosticsLevel i=68 i=78 i=17819 Reset i=78 i=17812 SubError i=63 i=78 i=17812 Counters i=17827 i=17832 i=17837 i=17842 i=17847 i=17853 i=17859 i=17874 i=17900 i=58 i=78 i=17812 StateError i=17828 i=17829 i=17830 i=19725 i=78 i=17826 Active i=68 i=78 i=17827 Classification i=68 i=78 i=17827 1 DiagnosticsLevel i=68 i=78 i=17827 0 StateOperationalByMethod i=17833 i=17834 i=17835 i=19725 i=78 i=17826 Active i=68 i=78 i=17832 Classification i=68 i=78 i=17832 0 DiagnosticsLevel i=68 i=78 i=17832 0 StateOperationalByParent i=17838 i=17839 i=17840 i=19725 i=78 i=17826 Active i=68 i=78 i=17837 Classification i=68 i=78 i=17837 0 DiagnosticsLevel i=68 i=78 i=17837 0 StateOperationalFromError i=17843 i=17844 i=17845 i=19725 i=78 i=17826 Active i=68 i=78 i=17842 Classification i=68 i=78 i=17842 0 DiagnosticsLevel i=68 i=78 i=17842 0 StatePausedByParent i=17848 i=17849 i=17850 i=19725 i=78 i=17826 Active i=68 i=78 i=17847 Classification i=68 i=78 i=17847 0 DiagnosticsLevel i=68 i=78 i=17847 0 StateDisabledByMethod i=17854 i=17855 i=17856 i=19725 i=78 i=17826 Active i=68 i=78 i=17853 Classification i=68 i=78 i=17853 0 DiagnosticsLevel i=68 i=78 i=17853 0 SentNetworkMessages i=17864 i=17871 i=17872 i=19725 i=78 i=17826 Active i=68 i=78 i=17859 Classification i=68 i=78 i=17859 0 DiagnosticsLevel i=68 i=78 i=17859 0 FailedTransmissions i=17878 i=17885 i=17892 i=19725 i=78 i=17826 Active i=68 i=78 i=17874 Classification i=68 i=78 i=17874 1 DiagnosticsLevel i=68 i=78 i=17874 0 EncryptionErrors i=17901 i=17902 i=17903 i=19725 i=78 i=17826 Active i=68 i=78 i=17900 Classification i=68 i=78 i=17900 1 DiagnosticsLevel i=68 i=78 i=17900 1 LiveValues i=17913 i=17927 i=58 i=78 i=17812 ConfiguredDataSetWriters i=17920 i=63 i=78 i=17858 DiagnosticsLevel i=68 i=78 i=17913 0 OperationalDataSetWriters i=17934 i=63 i=78 i=17858 DiagnosticsLevel i=68 i=78 i=17927 0 AddDataSetWriter i=17976 i=17987 i=80 i=17725 InputArguments i=68 i=78 i=17969 i=297 Configuration i=15597 -1 OutputArguments i=68 i=78 i=17969 i=297 DataSetWriterNodeId i=17 -1 RemoveDataSetWriter i=17993 i=80 i=17725 InputArguments i=68 i=78 i=17992 i=297 DataSetWriterNodeId i=17 -1 HasDataSetWriter i=47 IsWriterInGroup HasWriterGroup i=47 IsWriterGroupOf WriterGroupTransportType i=58 WriterGroupMessageType i=58 ReaderGroupType i=18076 i=21015 i=21080 i=21081 i=21082 i=21085 i=14232 <DataSetReaderName> i=18077 i=18078 i=18079 i=18080 i=18081 i=18082 i=17560 i=17562 i=17492 i=18088 i=21006 i=15306 i=11508 i=17999 PublisherId i=68 i=78 i=18076 WriterGroupId i=68 i=78 i=18076 DataSetWriterId i=68 i=78 i=18076 DataSetMetaData i=68 i=78 i=18076 DataSetFieldContentMask i=68 i=78 i=18076 MessageReceiveTimeout i=68 i=78 i=18076 KeyFrameCount i=68 i=78 i=18076 HeaderLayoutUri i=68 i=78 i=18076 DataSetReaderProperties i=68 i=78 i=18076 Status i=18089 i=14643 i=78 i=18076 State i=63 i=78 i=18088 SubscribedDataSet i=15108 i=78 i=18076 Diagnostics i=21016 i=21017 i=21022 i=21027 i=21028 i=21029 i=21060 i=19903 i=80 i=17999 DiagnosticsLevel i=63 i=78 i=21015 TotalInformation i=21018 i=21019 i=21020 i=19725 i=78 i=21015 Active i=68 i=78 i=21017 Classification i=68 i=78 i=21017 DiagnosticsLevel i=68 i=78 i=21017 TotalError i=21023 i=21024 i=21025 i=19725 i=78 i=21015 Active i=68 i=78 i=21022 Classification i=68 i=78 i=21022 DiagnosticsLevel i=68 i=78 i=21022 Reset i=78 i=21015 SubError i=63 i=78 i=21015 Counters i=21030 i=21035 i=21040 i=21045 i=21050 i=21055 i=21061 i=58 i=78 i=21015 StateError i=21031 i=21032 i=21033 i=19725 i=78 i=21029 Active i=68 i=78 i=21030 Classification i=68 i=78 i=21030 1 DiagnosticsLevel i=68 i=78 i=21030 0 StateOperationalByMethod i=21036 i=21037 i=21038 i=19725 i=78 i=21029 Active i=68 i=78 i=21035 Classification i=68 i=78 i=21035 0 DiagnosticsLevel i=68 i=78 i=21035 0 StateOperationalByParent i=21041 i=21042 i=21043 i=19725 i=78 i=21029 Active i=68 i=78 i=21040 Classification i=68 i=78 i=21040 0 DiagnosticsLevel i=68 i=78 i=21040 0 StateOperationalFromError i=21046 i=21047 i=21048 i=19725 i=78 i=21029 Active i=68 i=78 i=21045 Classification i=68 i=78 i=21045 0 DiagnosticsLevel i=68 i=78 i=21045 0 StatePausedByParent i=21051 i=21052 i=21053 i=19725 i=78 i=21029 Active i=68 i=78 i=21050 Classification i=68 i=78 i=21050 0 DiagnosticsLevel i=68 i=78 i=21050 0 StateDisabledByMethod i=21056 i=21057 i=21058 i=19725 i=78 i=21029 Active i=68 i=78 i=21055 Classification i=68 i=78 i=21055 0 DiagnosticsLevel i=68 i=78 i=21055 0 ReceivedNetworkMessages i=21062 i=21063 i=21064 i=19725 i=78 i=21029 Active i=68 i=78 i=21061 Classification i=68 i=78 i=21061 0 DiagnosticsLevel i=68 i=78 i=21061 0 LiveValues i=21076 i=21078 i=58 i=78 i=21015 ConfiguredDataSetReaders i=21077 i=63 i=78 i=21060 DiagnosticsLevel i=68 i=78 i=21076 0 OperationalDataSetReaders i=21079 i=63 i=78 i=21060 DiagnosticsLevel i=68 i=78 i=21078 0 TransportSettings i=21090 i=80 i=17999 MessageSettings i=21091 i=80 i=17999 AddDataSetReader i=21083 i=21084 i=80 i=17999 InputArguments i=68 i=78 i=21082 i=297 Configuration i=15623 -1 OutputArguments i=68 i=78 i=21082 i=297 DataSetReaderNodeId i=17 -1 RemoveDataSetReader i=21086 i=80 i=17999 InputArguments i=68 i=78 i=21085 i=297 DataSetReaderNodeId i=17 -1 HasDataSetReader i=47 IsReaderInGroup HasReaderGroup i=47 IsReaderGroupOf ReaderGroupTransportType i=58 ReaderGroupMessageType i=58 DataSetWriterType i=21092 i=21093 i=21094 i=17493 i=15303 i=21095 i=15299 i=19550 i=58 DataSetWriterId i=68 i=78 i=15298 DataSetFieldContentMask i=68 i=78 i=15298 KeyFrameCount i=68 i=80 i=15298 DataSetWriterProperties i=68 i=78 i=15298 TransportSettings i=15305 i=80 i=15298 MessageSettings i=21096 i=80 i=15298 Status i=15300 i=14643 i=78 i=15298 State i=63 i=78 i=15299 Diagnostics i=19551 i=19552 i=19557 i=19562 i=19563 i=19564 i=19595 i=19968 i=80 i=15298 DiagnosticsLevel i=63 i=78 i=19550 TotalInformation i=19553 i=19554 i=19555 i=19725 i=78 i=19550 Active i=68 i=78 i=19552 Classification i=68 i=78 i=19552 DiagnosticsLevel i=68 i=78 i=19552 TotalError i=19558 i=19559 i=19560 i=19725 i=78 i=19550 Active i=68 i=78 i=19557 Classification i=68 i=78 i=19557 DiagnosticsLevel i=68 i=78 i=19557 Reset i=78 i=19550 SubError i=63 i=78 i=19550 Counters i=19565 i=19570 i=19575 i=19580 i=19585 i=19590 i=19596 i=58 i=78 i=19550 StateError i=19566 i=19567 i=19568 i=19725 i=78 i=19564 Active i=68 i=78 i=19565 Classification i=68 i=78 i=19565 1 DiagnosticsLevel i=68 i=78 i=19565 0 StateOperationalByMethod i=19571 i=19572 i=19573 i=19725 i=78 i=19564 Active i=68 i=78 i=19570 Classification i=68 i=78 i=19570 0 DiagnosticsLevel i=68 i=78 i=19570 0 StateOperationalByParent i=19576 i=19577 i=19578 i=19725 i=78 i=19564 Active i=68 i=78 i=19575 Classification i=68 i=78 i=19575 0 DiagnosticsLevel i=68 i=78 i=19575 0 StateOperationalFromError i=19581 i=19582 i=19583 i=19725 i=78 i=19564 Active i=68 i=78 i=19580 Classification i=68 i=78 i=19580 0 DiagnosticsLevel i=68 i=78 i=19580 0 StatePausedByParent i=19586 i=19587 i=19588 i=19725 i=78 i=19564 Active i=68 i=78 i=19585 Classification i=68 i=78 i=19585 0 DiagnosticsLevel i=68 i=78 i=19585 0 StateDisabledByMethod i=19591 i=19592 i=19593 i=19725 i=78 i=19564 Active i=68 i=78 i=19590 Classification i=68 i=78 i=19590 0 DiagnosticsLevel i=68 i=78 i=19590 0 FailedDataSetMessages i=19597 i=19598 i=19599 i=19725 i=78 i=19564 Active i=68 i=78 i=19596 Classification i=68 i=78 i=19596 1 DiagnosticsLevel i=68 i=78 i=19596 0 LiveValues i=58 i=78 i=19550 DataSetWriterTransportType i=58 DataSetWriterMessageType i=58 DataSetReaderType i=21097 i=21098 i=21099 i=21100 i=21101 i=21102 i=17563 i=17564 i=15932 i=15933 i=15934 i=17494 i=15311 i=21103 i=15307 i=19609 i=15316 i=17386 i=17389 i=58 PublisherId i=68 i=78 i=15306 WriterGroupId i=68 i=78 i=15306 DataSetWriterId i=68 i=78 i=15306 DataSetMetaData i=68 i=78 i=15306 DataSetFieldContentMask i=68 i=78 i=15306 MessageReceiveTimeout i=68 i=78 i=15306 KeyFrameCount i=68 i=78 i=15306 HeaderLayoutUri i=68 i=78 i=15306 SecurityMode i=68 i=80 i=15306 SecurityGroupId i=68 i=80 i=15306 SecurityKeyServices i=68 i=80 i=15306 DataSetReaderProperties i=68 i=78 i=15306 TransportSettings i=15319 i=80 i=15306 MessageSettings i=21104 i=80 i=15306 Status i=15308 i=14643 i=78 i=15306 State i=63 i=78 i=15307 Diagnostics i=19610 i=19611 i=19616 i=19621 i=19622 i=19623 i=19654 i=20027 i=80 i=15306 DiagnosticsLevel i=63 i=78 i=19609 TotalInformation i=19612 i=19613 i=19614 i=19725 i=78 i=19609 Active i=68 i=78 i=19611 Classification i=68 i=78 i=19611 DiagnosticsLevel i=68 i=78 i=19611 TotalError i=19617 i=19618 i=19619 i=19725 i=78 i=19609 Active i=68 i=78 i=19616 Classification i=68 i=78 i=19616 DiagnosticsLevel i=68 i=78 i=19616 Reset i=78 i=19609 SubError i=63 i=78 i=19609 Counters i=19624 i=19629 i=19634 i=19639 i=19644 i=19649 i=19655 i=58 i=78 i=19609 StateError i=19625 i=19626 i=19627 i=19725 i=78 i=19623 Active i=68 i=78 i=19624 Classification i=68 i=78 i=19624 1 DiagnosticsLevel i=68 i=78 i=19624 0 StateOperationalByMethod i=19630 i=19631 i=19632 i=19725 i=78 i=19623 Active i=68 i=78 i=19629 Classification i=68 i=78 i=19629 0 DiagnosticsLevel i=68 i=78 i=19629 0 StateOperationalByParent i=19635 i=19636 i=19637 i=19725 i=78 i=19623 Active i=68 i=78 i=19634 Classification i=68 i=78 i=19634 0 DiagnosticsLevel i=68 i=78 i=19634 0 StateOperationalFromError i=19640 i=19641 i=19642 i=19725 i=78 i=19623 Active i=68 i=78 i=19639 Classification i=68 i=78 i=19639 0 DiagnosticsLevel i=68 i=78 i=19639 0 StatePausedByParent i=19645 i=19646 i=19647 i=19725 i=78 i=19623 Active i=68 i=78 i=19644 Classification i=68 i=78 i=19644 0 DiagnosticsLevel i=68 i=78 i=19644 0 StateDisabledByMethod i=19650 i=19651 i=19652 i=19725 i=78 i=19623 Active i=68 i=78 i=19649 Classification i=68 i=78 i=19649 0 DiagnosticsLevel i=68 i=78 i=19649 0 FailedDataSetMessages i=19656 i=19657 i=19658 i=19725 i=78 i=19623 Active i=68 i=78 i=19655 Classification i=68 i=78 i=19655 1 DiagnosticsLevel i=68 i=78 i=19655 0 LiveValues i=58 i=78 i=19609 SubscribedDataSet i=15108 i=78 i=15306 CreateTargetVariables i=17387 i=17388 i=80 i=15306 InputArguments i=68 i=78 i=17386 i=297 ConfigurationVersion i=14593 -1 i=297 TargetVariablesToAdd i=14744 1 0 OutputArguments i=68 i=78 i=17386 i=297 AddResults i=19 1 0 CreateDataSetMirror i=17390 i=17391 i=80 i=15306 InputArguments i=68 i=78 i=17389 i=297 ParentNodeName i=12 -1 i=297 RolePermissions i=96 1 0 OutputArguments i=68 i=78 i=17389 i=297 ParentNodeId i=17 -1 DataSetReaderTransportType i=58 DataSetReaderMessageType i=58 SubscribedDataSetType i=58 TargetVariablesType i=15114 i=15115 i=15118 i=15108 TargetVariables i=68 i=78 i=15111 AddTargetVariables i=15116 i=15117 i=80 i=15111 InputArguments i=68 i=78 i=15115 i=297 ConfigurationVersion i=14593 -1 i=297 TargetVariablesToAdd i=14744 1 0 OutputArguments i=68 i=78 i=15115 i=297 AddResults i=19 1 0 RemoveTargetVariables i=15119 i=15120 i=80 i=15111 InputArguments i=68 i=78 i=15118 i=297 ConfigurationVersion i=14593 -1 i=297 TargetsToRemove i=7 1 0 OutputArguments i=68 i=78 i=15118 i=297 RemoveResults i=19 1 0 SubscribedDataSetMirrorType i=15108 PubSubStatusType i=14644 i=14645 i=14646 i=58 State i=63 i=78 i=14643 Enable i=80 i=14643 Disable i=80 i=14643 PubSubDiagnosticsType i=19678 i=19679 i=19684 i=19689 i=19690 i=19691 i=19722 i=58 DiagnosticsLevel i=63 i=78 i=19677 TotalInformation i=19680 i=19681 i=19682 i=19725 i=78 i=19677 Active i=68 i=78 i=19679 Classification i=68 i=78 i=19679 DiagnosticsLevel i=68 i=78 i=19679 TotalError i=19685 i=19686 i=19687 i=19725 i=78 i=19677 Active i=68 i=78 i=19684 Classification i=68 i=78 i=19684 DiagnosticsLevel i=68 i=78 i=19684 Reset i=78 i=19677 SubError i=63 i=78 i=19677 Counters i=19692 i=19697 i=19702 i=19707 i=19712 i=19717 i=58 i=78 i=19677 StateError i=19693 i=19694 i=19695 i=19725 i=78 i=19691 Active i=68 i=78 i=19692 Classification i=68 i=78 i=19692 1 DiagnosticsLevel i=68 i=78 i=19692 0 StateOperationalByMethod i=19698 i=19699 i=19700 i=19725 i=78 i=19691 Active i=68 i=78 i=19697 Classification i=68 i=78 i=19697 0 DiagnosticsLevel i=68 i=78 i=19697 0 StateOperationalByParent i=19703 i=19704 i=19705 i=19725 i=78 i=19691 Active i=68 i=78 i=19702 Classification i=68 i=78 i=19702 0 DiagnosticsLevel i=68 i=78 i=19702 0 StateOperationalFromError i=19708 i=19709 i=19710 i=19725 i=78 i=19691 Active i=68 i=78 i=19707 Classification i=68 i=78 i=19707 0 DiagnosticsLevel i=68 i=78 i=19707 0 StatePausedByParent i=19713 i=19714 i=19715 i=19725 i=78 i=19691 Active i=68 i=78 i=19712 Classification i=68 i=78 i=19712 0 DiagnosticsLevel i=68 i=78 i=19712 0 StateDisabledByMethod i=19718 i=19719 i=19720 i=19725 i=78 i=19691 Active i=68 i=78 i=19717 Classification i=68 i=78 i=19717 0 DiagnosticsLevel i=68 i=78 i=19717 0 LiveValues i=58 i=78 i=19677 DiagnosticsLevel i=19724 i=29 EnumStrings i=68 i=19723 Basic Advanced Info Log Debug PubSubDiagnosticsCounterType i=19726 i=19727 i=19728 i=19729 i=63 Active i=68 i=78 i=19725 Classification i=68 i=78 i=19725 DiagnosticsLevel i=68 i=78 i=19725 TimeFirstChange i=68 i=80 i=19725 PubSubDiagnosticsCounterClassification i=19731 i=29 EnumStrings i=68 i=19730 Information Error PubSubDiagnosticsRootType i=19777 i=19677 LiveValues i=19778 i=19780 i=19782 i=19784 i=58 i=78 i=19732 ConfiguredDataSetWriters i=19779 i=63 i=78 i=19777 DiagnosticsLevel i=68 i=78 i=19778 0 ConfiguredDataSetReaders i=19781 i=63 i=78 i=19777 DiagnosticsLevel i=68 i=78 i=19780 0 OperationalDataSetWriters i=19783 i=63 i=78 i=19777 DiagnosticsLevel i=68 i=78 i=19782 0 OperationalDataSetReaders i=19785 i=63 i=78 i=19777 DiagnosticsLevel i=68 i=78 i=19784 0 PubSubDiagnosticsConnectionType i=19831 i=19677 LiveValues i=19832 i=58 i=78 i=19786 ResolvedAddress i=19833 i=63 i=78 i=19831 DiagnosticsLevel i=68 i=78 i=19832 0 PubSubDiagnosticsWriterGroupType i=19848 i=19879 i=19677 Counters i=19880 i=19885 i=19890 i=58 i=78 i=19834 SentNetworkMessages i=19881 i=19882 i=19883 i=19725 i=78 i=19848 Active i=68 i=78 i=19880 Classification i=68 i=78 i=19880 0 DiagnosticsLevel i=68 i=78 i=19880 0 FailedTransmissions i=19886 i=19887 i=19888 i=19725 i=78 i=19848 Active i=68 i=78 i=19885 Classification i=68 i=78 i=19885 1 DiagnosticsLevel i=68 i=78 i=19885 0 EncryptionErrors i=19891 i=19892 i=19893 i=19725 i=78 i=19848 Active i=68 i=78 i=19890 Classification i=68 i=78 i=19890 1 DiagnosticsLevel i=68 i=78 i=19890 1 LiveValues i=19895 i=19897 i=19899 i=19901 i=58 i=78 i=19834 ConfiguredDataSetWriters i=19896 i=63 i=78 i=19879 DiagnosticsLevel i=68 i=78 i=19895 0 OperationalDataSetWriters i=19898 i=63 i=78 i=19879 DiagnosticsLevel i=68 i=78 i=19897 0 SecurityTokenID i=19900 i=63 i=80 i=19879 DiagnosticsLevel i=68 i=78 i=19899 2 TimeToNextTokenID i=19902 i=63 i=80 i=19879 DiagnosticsLevel i=68 i=78 i=19901 2 PubSubDiagnosticsReaderGroupType i=19917 i=19948 i=19677 Counters i=19949 i=19954 i=19959 i=58 i=78 i=19903 ReceivedNetworkMessages i=19950 i=19951 i=19952 i=19725 i=78 i=19917 Active i=68 i=78 i=19949 Classification i=68 i=78 i=19949 0 DiagnosticsLevel i=68 i=78 i=19949 0 ReceivedInvalidNetworkMessages i=19955 i=19956 i=19957 i=19725 i=80 i=19917 Active i=68 i=78 i=19954 Classification i=68 i=78 i=19954 1 DiagnosticsLevel i=68 i=78 i=19954 1 DecryptionErrors i=19960 i=19961 i=19962 i=19725 i=80 i=19917 Active i=68 i=78 i=19959 Classification i=68 i=78 i=19959 1 DiagnosticsLevel i=68 i=78 i=19959 1 LiveValues i=19964 i=19966 i=58 i=78 i=19903 ConfiguredDataSetReaders i=19965 i=63 i=78 i=19948 DiagnosticsLevel i=68 i=78 i=19964 0 OperationalDataSetReaders i=19967 i=63 i=78 i=19948 DiagnosticsLevel i=68 i=78 i=19966 0 PubSubDiagnosticsDataSetWriterType i=19982 i=20013 i=19677 Counters i=20014 i=58 i=78 i=19968 FailedDataSetMessages i=20015 i=20016 i=20017 i=19725 i=78 i=19982 Active i=68 i=78 i=20014 Classification i=68 i=78 i=20014 1 DiagnosticsLevel i=68 i=78 i=20014 0 LiveValues i=20019 i=20021 i=20023 i=20025 i=58 i=78 i=19968 MessageSequenceNumber i=20020 i=63 i=80 i=20013 DiagnosticsLevel i=68 i=78 i=20019 2 StatusCode i=20022 i=63 i=80 i=20013 DiagnosticsLevel i=68 i=78 i=20021 2 MajorVersion i=20024 i=63 i=80 i=20013 DiagnosticsLevel i=68 i=78 i=20023 2 MinorVersion i=20026 i=63 i=80 i=20013 DiagnosticsLevel i=68 i=78 i=20025 2 PubSubDiagnosticsDataSetReaderType i=20041 i=20072 i=19677 Counters i=20073 i=20078 i=58 i=78 i=20027 FailedDataSetMessages i=20074 i=20075 i=20076 i=19725 i=78 i=20041 Active i=68 i=78 i=20073 Classification i=68 i=78 i=20073 1 DiagnosticsLevel i=68 i=78 i=20073 0 DecryptionErrors i=20079 i=20080 i=20081 i=19725 i=80 i=20041 Active i=68 i=78 i=20078 Classification i=68 i=78 i=20078 1 DiagnosticsLevel i=68 i=78 i=20078 1 LiveValues i=20083 i=20085 i=20087 i=20089 i=20091 i=20093 i=58 i=78 i=20027 MessageSequenceNumber i=20084 i=63 i=80 i=20072 DiagnosticsLevel i=68 i=78 i=20083 2 StatusCode i=20086 i=63 i=80 i=20072 DiagnosticsLevel i=68 i=78 i=20085 2 MajorVersion i=20088 i=63 i=80 i=20072 DiagnosticsLevel i=68 i=78 i=20087 2 MinorVersion i=20090 i=63 i=80 i=20072 DiagnosticsLevel i=68 i=78 i=20089 2 SecurityTokenID i=20092 i=63 i=80 i=20072 DiagnosticsLevel i=68 i=78 i=20091 2 TimeToNextTokenID i=20094 i=63 i=80 i=20072 DiagnosticsLevel i=68 i=78 i=20093 2 PubSubStatusEventType i=15545 i=15546 i=15547 i=2130 ConnectionId i=68 i=78 i=15535 GroupId i=68 i=78 i=15535 State i=68 i=78 i=15535 PubSubTransportLimitsExceedEventType i=15561 i=15562 i=15535 Actual i=68 i=78 i=15548 Maximum i=68 i=78 i=15548 PubSubCommunicationFailureEventType i=15576 i=15535 Error i=68 i=78 i=15563 UadpWriterGroupMessageType i=21106 i=21107 i=21108 i=21109 i=21110 i=17998 GroupVersion i=68 i=78 i=21105 DataSetOrdering i=68 i=78 i=21105 NetworkMessageContentMask i=68 i=78 i=21105 SamplingOffset i=68 i=80 i=21105 PublishingOffset i=68 i=78 i=21105 UadpDataSetWriterMessageType i=21112 i=21113 i=21114 i=21115 i=21096 DataSetMessageContentMask i=68 i=78 i=21111 ConfiguredSize i=68 i=78 i=21111 NetworkMessageNumber i=68 i=78 i=21111 DataSetOffset i=68 i=78 i=21111 UadpDataSetReaderMessageType i=21117 i=21119 i=17477 i=21120 i=21121 i=21122 i=21123 i=21124 i=21125 i=21104 GroupVersion i=68 i=78 i=21116 NetworkMessageNumber i=68 i=78 i=21116 DataSetOffset i=68 i=78 i=21116 DataSetClassId i=68 i=78 i=21116 NetworkMessageContentMask i=68 i=78 i=21116 DataSetMessageContentMask i=68 i=78 i=21116 PublishingInterval i=68 i=78 i=21116 ProcessingOffset i=68 i=78 i=21116 ReceiveOffset i=68 i=78 i=21116 JsonWriterGroupMessageType i=21127 i=17998 NetworkMessageContentMask i=68 i=78 i=21126 JsonDataSetWriterMessageType i=21129 i=21096 DataSetMessageContentMask i=68 i=78 i=21128 JsonDataSetReaderMessageType i=21131 i=21132 i=21104 NetworkMessageContentMask i=68 i=78 i=21130 DataSetMessageContentMask i=68 i=78 i=21130 DatagramConnectionTransportType i=15072 i=17721 DiscoveryAddress i=15154 i=21145 i=78 i=15064 NetworkInterface i=17579 i=16309 i=78 i=15072 Selections i=68 i=78 i=15154 DatagramWriterGroupTransportType i=21134 i=21135 i=17997 MessageRepeatCount i=68 i=80 i=21133 MessageRepeatDelay i=68 i=80 i=21133 BrokerConnectionTransportType i=15156 i=15178 i=17721 ResourceUri i=68 i=78 i=15155 AuthenticationProfileUri i=68 i=78 i=15155 BrokerWriterGroupTransportType i=21137 i=15246 i=15247 i=15249 i=17997 QueueName i=68 i=78 i=21136 ResourceUri i=68 i=78 i=21136 AuthenticationProfileUri i=68 i=78 i=21136 RequestedDeliveryGuarantee i=68 i=78 i=21136 BrokerDataSetWriterTransportType i=21139 i=21140 i=15250 i=15251 i=15330 i=21141 i=15305 QueueName i=68 i=78 i=21138 MetaDataQueueName i=68 i=78 i=21138 ResourceUri i=68 i=78 i=21138 AuthenticationProfileUri i=68 i=78 i=21138 RequestedDeliveryGuarantee i=68 i=78 i=21138 MetaDataUpdateTime i=68 i=78 i=21138 BrokerDataSetReaderTransportType i=21143 i=15334 i=15419 i=15420 i=21144 i=15319 QueueName i=68 i=78 i=21142 ResourceUri i=68 i=78 i=21142 AuthenticationProfileUri i=68 i=78 i=21142 RequestedDeliveryGuarantee i=68 i=78 i=21142 MetaDataQueueName i=68 i=78 i=21142 NetworkAddressType i=21146 i=58 NetworkInterface i=17582 i=16309 i=78 i=21145 Selections i=68 i=78 i=21146 NetworkAddressUrlType i=21149 i=21145 Url i=63 i=78 i=21147 AliasNameType i=58 AliasNameCategoryType i=23457 i=23458 i=23462 i=61 <Alias> i=23455 i=11508 i=23456 <SubAliasNameCategories> i=23459 i=23456 i=11508 i=23456 FindAlias i=23460 i=23461 i=78 i=23458 InputArguments i=68 i=78 i=23459 i=297 AliasNameSearchPattern i=12 -1 i=297 ReferenceTypeFilter i=17 -1 OutputArguments i=68 i=78 i=23459 i=297 AliasNodeList i=23468 1 0 FindAlias i=23463 i=23464 i=78 i=23456 InputArguments i=68 i=78 i=23462 i=297 AliasNameSearchPattern i=12 -1 i=297 ReferenceTypeFilter i=17 -1 OutputArguments i=68 i=78 i=23462 i=297 AliasNodeList i=23468 1 0 AliasNameDataType i=22 AliasFor i=32 HasAlias Aliases i=23476 i=85 i=23456 FindAlias i=23477 i=23478 i=23470 InputArguments i=68 i=23476 i=297 AliasNameSearchPattern i=12 -1 i=297 ReferenceTypeFilter i=17 -1 OutputArguments i=68 i=23476 i=297 AliasNodeList i=23468 1 0 TagVariables i=23485 i=23470 i=23456 FindAlias i=23486 i=23487 i=23479 InputArguments i=68 i=23485 i=297 AliasNameSearchPattern i=12 -1 i=297 ReferenceTypeFilter i=17 -1 OutputArguments i=68 i=23485 i=297 AliasNodeList i=23468 1 0 Topics i=23494 i=23470 i=23456 FindAlias i=23495 i=23496 i=23488 InputArguments i=68 i=23494 i=297 AliasNameSearchPattern i=12 -1 i=297 ReferenceTypeFilter i=17 -1 OutputArguments i=68 i=23494 i=297 AliasNodeList i=23468 1 0 MultiStateDictionaryEntryDiscreteBaseType i=19082 i=19083 i=11238 EnumDictionaryEntries i=68 i=78 i=19077 ValueAsDictionaryEntries i=68 i=80 i=19077 MultiStateDictionaryEntryDiscreteType i=19090 i=19077 ValueAsDictionaryEntries i=68 i=78 i=19084 IIetfBaseNetworkInterfaceType i=24149 i=24150 i=24151 i=24152 i=17602 AdminStatus i=63 i=78 i=24148 OperStatus i=63 i=78 i=24148 PhysAddress i=63 i=80 i=24148 Speed i=24157 i=17497 i=78 i=24148 EngineeringUnits i=68 i=78 i=24152 i=888 http://www.opcfoundation.org/UA/units/un/cefact 4337968 en bit/s en bit per second IIeeeBaseEthernetPortType i=24159 i=24165 i=24166 i=17602 Speed i=24164 i=17497 i=78 i=24158 EngineeringUnits i=68 i=78 i=24159 i=888 http://www.opcfoundation.org/UA/units/un/cefact 4534832 en Mbit/s en megabit per second Duplex i=63 i=78 i=24158 MaxFrameLength i=63 i=78 i=24158 IIeeeAutoNegotiationStatusType i=24234 i=17602 NegotiationStatus i=63 i=78 i=24233 IBaseEthernetCapabilitiesType i=24168 i=17602 VlanTagCapable i=63 i=78 i=24167 ISrClassType i=24170 i=24171 i=24172 i=17602 Id i=63 i=78 i=24169 Priority i=63 i=78 i=24169 Vid i=63 i=78 i=24169 IIeeeBaseTsnStreamType i=24174 i=24175 i=24176 i=24177 i=24178 i=17602 StreamId i=63 i=78 i=24173 StreamName i=63 i=78 i=24173 State i=63 i=78 i=24173 AccumulatedLatency i=63 i=80 i=24173 SrClassId i=63 i=80 i=24173 IIeeeBaseTsnTrafficSpecificationType i=24180 i=24181 i=24182 i=17602 MaxIntervalFrames i=63 i=78 i=24179 MaxFrameSize i=63 i=78 i=24179 Interval i=63 i=78 i=24179 IIeeeBaseTsnStatusStreamType i=24184 i=24185 i=24186 i=24187 i=17602 TalkerStatus i=63 i=80 i=24183 ListenerStatus i=63 i=80 i=24183 FailureCode i=63 i=78 i=24183 FailureSystemIdentifier i=63 i=78 i=24183 IIeeeTsnInterfaceConfigurationType i=24189 i=24190 i=17602 MacAddress i=63 i=78 i=24188 InterfaceName i=63 i=80 i=24188 IIeeeTsnInterfaceConfigurationTalkerType i=24194 i=24188 TimeAwareOffset i=63 i=80 i=24191 IIeeeTsnInterfaceConfigurationListenerType i=24198 i=24188 ReceiveOffset i=63 i=80 i=24195 IIeeeTsnMacAddressType i=24200 i=24201 i=17602 DestinationAddress i=63 i=78 i=24199 SourceAddress i=63 i=80 i=24199 IIeeeTsnVlanTagType i=24203 i=24204 i=17602 VlanId i=63 i=78 i=24202 PriorityCodePoint i=63 i=78 i=24202 IPriorityMappingEntryType i=24206 i=24207 i=24208 i=24209 i=17602 MappingUri i=63 i=78 i=24205 PriorityLabel i=63 i=78 i=24205 PriorityValue_PCP i=63 i=80 i=24205 PriorityValue_DSCP i=63 i=80 i=24205 Duplex i=24235 i=29 Full duplex. Half duplex. Link is currently disconnected or initializing. EnumValues i=68 i=24210 i=7616 0 Full Full duplex. i=7616 1 Half Half duplex. i=7616 2 Unknown Link is currently disconnected or initializing. InterfaceAdminStatus i=24236 i=29 Ready to pass packets. Not ready to pass packets and not in some test mode. In some test mode. EnumValues i=68 i=24212 i=7616 0 Up Ready to pass packets. i=7616 1 Down Not ready to pass packets and not in some test mode. i=7616 2 Testing In some test mode. InterfaceOperStatus i=24237 i=29 Ready to pass packets. The interface does not pass any packets. In some test mode. No operational packets can be passed. Status cannot be determined for some reason. Waiting for some external event. Some component (typically hardware) is missing. Down due to state of lower-layer interface(s). EnumValues i=68 i=24214 i=7616 0 Up Ready to pass packets. i=7616 1 Down The interface does not pass any packets. i=7616 2 Testing In some test mode. No operational packets can be passed. i=7616 3 Unknown Status cannot be determined for some reason. i=7616 4 Dormant Waiting for some external event. i=7616 5 NotPresent Some component (typically hardware) is missing. i=7616 6 LowerLayerDown Down due to state of lower-layer interface(s). NegotiationStatus i=24238 i=29 The auto-negotiation protocol is running and negotiation is currently in-progress. The auto-negotiation protocol has completed successfully. The auto-negotiation protocol has failed. The auto-negotiation status is not currently known, this could be because it is still negotiating or the protocol cannot run (e.g., if no medium is present). No auto-negotiation is executed. The auto-negotiation function is either not supported on this interface or has not been enabled. EnumValues i=68 i=24216 i=7616 0 InProgress The auto-negotiation protocol is running and negotiation is currently in-progress. i=7616 1 Complete The auto-negotiation protocol has completed successfully. i=7616 2 Failed The auto-negotiation protocol has failed. i=7616 3 Unknown The auto-negotiation status is not currently known, this could be because it is still negotiating or the protocol cannot run (e.g., if no medium is present). i=7616 4 NoNegotiation No auto-negotiation is executed. The auto-negotiation function is either not supported on this interface or has not been enabled. TsnFailureCode i=24239 i=29 No failure Insufficient bandwidth Insufficient bridge resources Insufficient bandwidth for Traffic Class StreamID in use by another Talker Stream destination address already in use Stream pre-empted by higher rank Reported latency has changed Egress port is not AVBCapable Use a different destination address Out of MSRP resources Out of MMRP resources Cannot store destination address Requested priority is not an SR Class priority MaxFrameSize is too large for media MaxFanInPorts limit has been reached Changes in FirstValue for a registered StreamID VLAN is blocked on this egress port (Registration Forbidden) VLAN tagging is disabled on this egress port (untagged set) SR class priority mismatch Enhanced feature cannot be propagated to original Port MaxLatency exceeded Nearest Bridge cannot provide network identification for stream transformation Stream transformation not supported Stream identification type not supported for stream transformation Enhanced feature cannot be supported without a CNC EnumValues i=68 i=24218 i=7616 0 NoFailure No failure i=7616 1 InsufficientBandwidth Insufficient bandwidth i=7616 2 InsufficientResources Insufficient bridge resources i=7616 3 InsufficientTrafficClassBandwidth Insufficient bandwidth for Traffic Class i=7616 4 StreamIdInUse StreamID in use by another Talker i=7616 5 StreamDestinationAddressInUse Stream destination address already in use i=7616 6 StreamPreemptedByHigherRank Stream pre-empted by higher rank i=7616 7 LatencyHasChanged Reported latency has changed i=7616 8 EgressPortNotAvbCapable Egress port is not AVBCapable i=7616 9 UseDifferentDestinationAddress Use a different destination address i=7616 10 OutOfMsrpResources Out of MSRP resources i=7616 11 OutOfMmrpResources Out of MMRP resources i=7616 12 CannotStoreDestinationAddress Cannot store destination address i=7616 13 PriorityIsNotAnSrcClass Requested priority is not an SR Class priority i=7616 14 MaxFrameSizeTooLarge MaxFrameSize is too large for media i=7616 15 MaxFanInPortsLimitReached MaxFanInPorts limit has been reached i=7616 16 FirstValueChangedForStreamId Changes in FirstValue for a registered StreamID i=7616 17 VlanBlockedOnEgress VLAN is blocked on this egress port (Registration Forbidden) i=7616 18 VlanTaggingDisabledOnEgress VLAN tagging is disabled on this egress port (untagged set) i=7616 19 SrClassPriorityMismatch SR class priority mismatch i=7616 20 FeatureNotPropagated Enhanced feature cannot be propagated to original Port i=7616 21 MaxLatencyExceeded MaxLatency exceeded i=7616 22 BridgeDoesNotProvideNetworkId Nearest Bridge cannot provide network identification for stream transformation i=7616 23 StreamTransformNotSupported Stream transformation not supported i=7616 24 StreamIdTypeNotSupported Stream identification type not supported for stream transformation i=7616 25 FeatureNotSupported Enhanced feature cannot be supported without a CNC TsnStreamState i=24240 i=29 The related TSN Stream is currently disabled. The related TSN Stream is in the process of receiving configuration parameters from the TSN Control Layer. The related TSN Stream has successfully received and applied the configuration from the TSN Control Layer. The related TSN Stream is not fully operational as long as local preconditions (e.g. synchronization state) are not valid. The related TSN Stream object is configured and all other required preconditions (e.g. synchronization state) for sending / receiving data are valid. The related TSN Stream object is in an error state. EnumValues i=68 i=24220 i=7616 0 Disabled The related TSN Stream is currently disabled. i=7616 1 Configuring The related TSN Stream is in the process of receiving configuration parameters from the TSN Control Layer. i=7616 2 Ready The related TSN Stream has successfully received and applied the configuration from the TSN Control Layer. The related TSN Stream is not fully operational as long as local preconditions (e.g. synchronization state) are not valid. i=7616 3 Operational The related TSN Stream object is configured and all other required preconditions (e.g. synchronization state) for sending / receiving data are valid. i=7616 4 Error The related TSN Stream object is in an error state. TsnTalkerStatus i=24241 i=29 No Talker detected. Talker ready (configured). Talker failed. EnumValues i=68 i=24222 i=7616 0 None No Talker detected. i=7616 1 Ready Talker ready (configured). i=7616 2 Failed Talker failed. TsnListenerStatus i=24242 i=29 No Listener detected. Listener ready (configured). One or more Listeners ready, and one or more Listeners failed. Listener failed. EnumValues i=68 i=24224 i=7616 0 None No Listener detected. i=7616 1 Ready Listener ready (configured). i=7616 2 PartialFailed One or more Listeners ready, and one or more Listeners failed. i=7616 3 Failed Listener failed. UnsignedRationalNumber i=22 Resources i=2253 i=61 Communication i=24226 i=61 MappingTables i=24227 i=61 NetworkInterfaces i=24227 i=61 Streams i=24227 i=61 TalkerStreams i=24230 i=61 ListenerStreams i=24230 i=61 IdType i=7591 i=29 The identifier is a numeric value. 0 is a null value. The identifier is a string value. An empty string is a null value. The identifier is a 16 byte structure. 16 zero bytes is a null value. The identifier is an array of bytes. A zero length array is a null value. EnumStrings i=68 i=256 Numeric String Guid Opaque NodeClass i=11878 i=29 No classes are selected. The node is an object. The node is a variable. The node is a method. The node is an object type. The node is an variable type. The node is a reference type. The node is a data type. The node is a view. EnumValues i=68 i=257 i=7616 0 Unspecified No classes are selected. i=7616 1 Object The node is an object. i=7616 2 Variable The node is a variable. i=7616 4 Method The node is a method. i=7616 8 ObjectType The node is an object type. i=7616 16 VariableType The node is an variable type. i=7616 32 ReferenceType The node is a reference type. i=7616 64 DataType The node is a data type. i=7616 128 View The node is a view. PermissionType i=15030 i=7 OptionSetValues i=68 i=94 Browse ReadRolePermissions WriteAttribute WriteRolePermissions WriteHistorizing Read Write ReadHistory InsertHistory ModifyHistory DeleteHistory ReceiveEvents Call AddReference RemoveReference DeleteNode AddNode AccessLevelType i=15032 i=3 OptionSetValues i=68 i=15031 CurrentRead CurrentWrite HistoryRead HistoryWrite SemanticChange StatusWrite TimestampWrite AccessLevelExType i=15407 i=7 OptionSetValues i=68 i=15406 CurrentRead CurrentWrite HistoryRead HistoryWrite SemanticChange StatusWrite TimestampWrite Reserved NonatomicRead NonatomicWrite WriteFullArrayOnly NoSubDataTypes EventNotifierType i=15034 i=3 OptionSetValues i=68 i=15033 SubscribeToEvents Reserved HistoryRead HistoryWrite AccessRestrictionType i=15035 i=5 OptionSetValues i=68 i=95 SigningRequired EncryptionRequired SessionRequired ApplyRestrictionsToBrowse RolePermissionType i=22 DataTypeDefinition i=22 StructureType i=14528 i=29 EnumStrings i=68 i=98 Structure StructureWithOptionalFields Union StructureWithSubtypedValues UnionWithSubtypedValues StructureField i=22 StructureDefinition i=97 EnumDefinition i=97 Argument i=22 EnumValueType i=22 EnumField i=7594 OptionSet i=22 NormalizedString i=12 DecimalString i=12 DurationString i=12 TimeString i=12 DateString i=12 Duration i=11 UtcTime i=13 Time i=12 Date i=13 LocaleId i=12 TimeZoneDataType i=22 Index i=7 IntegerId i=7 ApplicationType i=7597 i=29 The application is a server. The application is a client. The application is a client and a server. The application is a discovery server. EnumStrings i=68 i=307 Server Client ClientAndServer DiscoveryServer ApplicationDescription i=22 VersionTime i=7 ServerOnNetwork i=22 ApplicationInstanceCertificate i=15 MessageSecurityMode i=7595 i=29 An invalid mode. No security is used. The message is signed. The message is signed and encrypted. EnumStrings i=68 i=302 Invalid None Sign SignAndEncrypt UserTokenType i=7596 i=29 An anonymous user. A user identified by a user name and password. A user identified by an X509 certificate. A user identified by WS-Security XML token. EnumStrings i=68 i=303 Anonymous UserName Certificate IssuedToken UserTokenPolicy i=22 EndpointDescription i=22 RegisteredServer i=22 DiscoveryConfiguration i=22 MdnsDiscoveryConfiguration i=12890 SecurityTokenRequestType i=7598 i=29 The channel is being created. The channel is being renewed. EnumStrings i=68 i=315 Issue Renew SignedSoftwareCertificate i=22 SessionAuthenticationToken i=17 UserIdentityToken i=22 AnonymousIdentityToken i=316 UserNameIdentityToken i=316 X509IdentityToken i=316 IssuedIdentityToken i=316 NodeAttributesMask i=11881 i=29 No attribuites provided. The access level attribute is specified. The array dimensions attribute is specified. The browse name attribute is specified. The contains no loops attribute is specified. The data type attribute is specified. The description attribute is specified. The display name attribute is specified. The event notifier attribute is specified. The executable attribute is specified. The historizing attribute is specified. The inverse name attribute is specified. The is abstract attribute is specified. The minimum sampling interval attribute is specified. The node class attribute is specified. The node id attribute is specified. The symmetric attribute is specified. The user access level attribute is specified. The user executable attribute is specified. The user write mask attribute is specified. The value rank attribute is specified. The write mask attribute is specified. The value attribute is specified. The write mask attribute is specified. The write mask attribute is specified. The write mask attribute is specified. All attributes are specified. All base attributes are specified. All object attributes are specified. All object type attributes are specified. All variable attributes are specified. All variable type attributes are specified. All method attributes are specified. All reference type attributes are specified. All view attributes are specified. EnumValues i=68 i=348 i=7616 0 None No attribuites provided. i=7616 1 AccessLevel The access level attribute is specified. i=7616 2 ArrayDimensions The array dimensions attribute is specified. i=7616 4 BrowseName The browse name attribute is specified. i=7616 8 ContainsNoLoops The contains no loops attribute is specified. i=7616 16 DataType The data type attribute is specified. i=7616 32 Description The description attribute is specified. i=7616 64 DisplayName The display name attribute is specified. i=7616 128 EventNotifier The event notifier attribute is specified. i=7616 256 Executable The executable attribute is specified. i=7616 512 Historizing The historizing attribute is specified. i=7616 1024 InverseName The inverse name attribute is specified. i=7616 2048 IsAbstract The is abstract attribute is specified. i=7616 4096 MinimumSamplingInterval The minimum sampling interval attribute is specified. i=7616 8192 NodeClass The node class attribute is specified. i=7616 16384 NodeId The node id attribute is specified. i=7616 32768 Symmetric The symmetric attribute is specified. i=7616 65536 UserAccessLevel The user access level attribute is specified. i=7616 131072 UserExecutable The user executable attribute is specified. i=7616 262144 UserWriteMask The user write mask attribute is specified. i=7616 524288 ValueRank The value rank attribute is specified. i=7616 1048576 WriteMask The write mask attribute is specified. i=7616 2097152 Value The value attribute is specified. i=7616 4194304 DataTypeDefinition The write mask attribute is specified. i=7616 8388608 RolePermissions The write mask attribute is specified. i=7616 16777216 AccessRestrictions The write mask attribute is specified. i=7616 33554431 All All attributes are specified. i=7616 26501220 BaseNode All base attributes are specified. i=7616 26501348 Object All object attributes are specified. i=7616 26503268 ObjectType All object type attributes are specified. i=7616 26571383 Variable All variable attributes are specified. i=7616 28600438 VariableType All variable type attributes are specified. i=7616 26632548 Method All method attributes are specified. i=7616 26537060 ReferenceType All reference type attributes are specified. i=7616 26501356 View All view attributes are specified. AddNodesItem i=22 AddReferencesItem i=22 DeleteNodesItem i=22 DeleteReferencesItem i=22 AttributeWriteMask i=15036 i=7 The access level attribute is writable. The array dimensions attribute is writable. The browse name attribute is writable. The contains no loops attribute is writable. The data type attribute is writable. The description attribute is writable. The display name attribute is writable. The event notifier attribute is writable. The executable attribute is writable. The historizing attribute is writable. The inverse name attribute is writable. The is abstract attribute is writable. The minimum sampling interval attribute is writable. The node class attribute is writable. The node id attribute is writable. The symmetric attribute is writable. The user access level attribute is writable. The user executable attribute is writable. The user write mask attribute is writable. The value rank attribute is writable. The write mask attribute is writable. The value attribute is writable. The DataTypeDefinition attribute is writable. The RolePermissions attribute is writable. The AccessRestrictions attribute is writable. The AccessLevelEx attribute is writable. OptionSetValues i=68 i=347 AccessLevel ArrayDimensions BrowseName ContainsNoLoops DataType Description DisplayName EventNotifier Executable Historizing InverseName IsAbstract MinimumSamplingInterval NodeClass NodeId Symmetric UserAccessLevel UserExecutable UserWriteMask ValueRank WriteMask ValueForVariableType DataTypeDefinition RolePermissions AccessRestrictions AccessLevelEx ContinuationPoint i=15 RelativePathElement i=22 RelativePath i=22 Counter i=7 NumericRange i=12 EndpointConfiguration i=22 FilterOperator i=7605 i=29 EnumStrings i=68 i=576 Equals IsNull GreaterThan LessThan GreaterThanOrEqual LessThanOrEqual Like Not Between InList And Or Cast InView OfType RelatedTo BitwiseAnd BitwiseOr ContentFilterElement i=22 ContentFilter i=22 FilterOperand i=22 ElementOperand i=589 LiteralOperand i=589 AttributeOperand i=589 SimpleAttributeOperand i=589 HistoryEvent i=22 HistoryUpdateType i=11884 i=29 EnumValues i=68 i=11234 i=7616 1 Insert i=7616 2 Replace i=7616 3 Update i=7616 4 Delete PerformUpdateType i=11885 i=29 EnumValues i=68 i=11293 i=7616 1 Insert i=7616 2 Replace i=7616 3 Update i=7616 4 Remove MonitoringFilter i=22 EventFilter i=719 AggregateConfiguration i=22 HistoryEventFieldList i=22 BuildInfo i=22 RedundancySupport i=7611 i=29 EnumStrings i=68 i=851 None Cold Warm Hot Transparent HotAndMirrored ServerState i=7612 i=29 EnumStrings i=68 i=852 Running Failed NoConfiguration Suspended Shutdown Test CommunicationFault Unknown RedundantServerDataType i=22 EndpointUrlListDataType i=22 NetworkGroupDataType i=22 SamplingIntervalDiagnosticsDataType i=22 ServerDiagnosticsSummaryDataType i=22 ServerStatusDataType i=22 SessionDiagnosticsDataType i=22 SessionSecurityDiagnosticsDataType i=22 ServiceCounterDataType i=22 StatusResult i=22 SubscriptionDiagnosticsDataType i=22 ModelChangeStructureDataType i=22 SemanticChangeStructureDataType i=22 Range i=22 EUInformation i=22 AxisScaleEnumeration i=12078 i=29 EnumStrings i=68 i=12077 Linear Log Ln ComplexNumberType i=22 DoubleComplexNumberType i=22 AxisInformation i=22 XVType i=22 ProgramDiagnosticDataType i=22 ProgramDiagnostic2DataType i=22 Annotation i=22 ExceptionDeviationFormat i=7614 i=29 EnumStrings i=68 i=890 AbsoluteValue PercentOfValue PercentOfRange PercentOfEURange Unknown Default Binary i=12756 i=12770 i=76 Default Binary i=14533 i=14873 i=76 Default Binary i=16313 i=17538 i=76 Default Binary i=17548 i=17550 i=76 Default Binary i=15528 i=15734 i=76 Default Binary i=18806 i=18824 i=76 Default Binary i=18807 i=18827 i=76 Default Binary i=18808 i=18830 i=76 Default Binary i=18809 i=18833 i=76 Default Binary i=18810 i=18836 i=76 Default Binary i=18811 i=18839 i=76 Default Binary i=18812 i=18842 i=76 Default Binary i=18813 i=18845 i=76 Default Binary i=18814 i=18848 i=76 Default Binary i=15634 i=15738 i=76 Default Binary i=23498 i=23514 i=76 Default Binary i=12554 i=12681 i=76 Default Binary i=15534 i=15741 i=76 Default Binary i=14525 i=14855 i=76 Default Binary i=15487 i=15599 i=76 Default Binary i=15488 i=15602 i=76 Default Binary i=15005 i=15501 i=76 Default Binary i=15006 i=15521 i=76 Default Binary i=14523 i=14849 i=76 Default Binary i=14524 i=14852 i=76 Default Binary i=14593 i=14876 i=76 Default Binary i=15578 i=15766 i=76 Default Binary i=15580 i=15769 i=76 Default Binary i=14273 i=14324 i=76 Default Binary i=15581 i=15772 i=76 Default Binary i=15582 i=15775 i=76 Default Binary i=15597 i=15778 i=76 Default Binary i=15598 i=15781 i=76 Default Binary i=15605 i=15784 i=76 Default Binary i=15609 i=15787 i=76 Default Binary i=15480 i=21156 i=76 Default Binary i=15611 i=15793 i=76 Default Binary i=15616 i=15854 i=76 Default Binary i=15617 i=15857 i=76 Default Binary i=15618 i=15860 i=76 Default Binary i=15502 i=21159 i=76 Default Binary i=15510 i=21162 i=76 Default Binary i=15520 i=21165 i=76 Default Binary i=15621 i=15866 i=76 Default Binary i=15622 i=15869 i=76 Default Binary i=15623 i=15872 i=76 Default Binary i=15628 i=15877 i=76 Default Binary i=15629 i=15880 i=76 Default Binary i=15630 i=15883 i=76 Default Binary i=15631 i=15886 i=76 Default Binary i=14744 i=21002 i=76 Default Binary i=15635 i=15889 i=76 Default Binary i=15530 i=21168 i=76 Default Binary i=15645 i=15895 i=76 Default Binary i=15652 i=15898 i=76 Default Binary i=15653 i=15919 i=76 Default Binary i=15657 i=15922 i=76 Default Binary i=15664 i=15925 i=76 Default Binary i=15665 i=15931 i=76 Default Binary i=17467 i=17469 i=76 Default Binary i=15532 i=21171 i=76 Default Binary i=15007 i=15524 i=76 Default Binary i=15667 i=15940 i=76 Default Binary i=15669 i=15943 i=76 Default Binary i=15670 i=15946 i=76 Default Binary i=23468 i=23502 i=76 Default Binary i=24107 i=24117 i=76 Default Binary i=96 i=16131 i=76 Default Binary i=97 i=18178 i=76 Default Binary i=101 i=18181 i=76 Default Binary i=99 i=18184 i=76 Default Binary i=100 i=18187 i=76 Default Binary i=296 i=7650 i=76 Default Binary i=7594 i=7656 i=76 Default Binary i=102 i=14870 i=76 Default Binary i=12755 i=12767 i=76 Default Binary i=8912 i=8914 i=76 Default Binary i=308 i=7665 i=76 Default Binary i=12189 i=12213 i=76 Default Binary i=304 i=7662 i=76 Default Binary i=312 i=7668 i=76 Default Binary i=432 i=7782 i=76 Default Binary i=12890 i=12902 i=76 Default Binary i=12891 i=12905 i=76 Default Binary i=344 i=7698 i=76 Default Binary i=316 i=7671 i=76 Default Binary i=319 i=7674 i=76 Default Binary i=322 i=7677 i=76 Default Binary i=325 i=7680 i=76 Default Binary i=938 i=7683 i=76 Default Binary i=376 i=7728 i=76 Default Binary i=379 i=7731 i=76 Default Binary i=382 i=7734 i=76 Default Binary i=385 i=7737 i=76 Default Binary i=537 i=12718 i=76 Default Binary i=540 i=12721 i=76 Default Binary i=331 i=7686 i=76 Default Binary i=583 i=7929 i=76 Default Binary i=586 i=7932 i=76 Default Binary i=589 i=7935 i=76 Default Binary i=592 i=7938 i=76 Default Binary i=595 i=7941 i=76 Default Binary i=598 i=7944 i=76 Default Binary i=601 i=7947 i=76 Default Binary i=659 i=8004 i=76 Default Binary i=719 i=8067 i=76 Default Binary i=725 i=8073 i=76 Default Binary i=948 i=8076 i=76 Default Binary i=920 i=8172 i=76 Default Binary i=338 i=7692 i=76 Default Binary i=853 i=8208 i=76 Default Binary i=11943 i=11959 i=76 Default Binary i=11944 i=11962 i=76 Default Binary i=856 i=8211 i=76 Default Binary i=859 i=8214 i=76 Default Binary i=862 i=8217 i=76 Default Binary i=865 i=8220 i=76 Default Binary i=868 i=8223 i=76 Default Binary i=871 i=8226 i=76 Default Binary i=299 i=7659 i=76 Default Binary i=874 i=8229 i=76 Default Binary i=877 i=8232 i=76 Default Binary i=897 i=8235 i=76 Default Binary i=884 i=8238 i=76 Default Binary i=887 i=8241 i=76 Default Binary i=12171 i=12183 i=76 Default Binary i=12172 i=12186 i=76 Default Binary i=12079 i=12091 i=76 Default Binary i=12080 i=12094 i=76 Default Binary i=894 i=8247 i=76 Default Binary i=24033 i=24035 i=76 Default Binary i=891 i=8244 i=76 Opc.Ua i=7619 i=15037 i=12770 i=14873 i=17538 i=17550 i=15734 i=18824 i=18827 i=18830 i=18833 i=18836 i=18839 i=18842 i=18845 i=18848 i=15738 i=23514 i=12681 i=15741 i=14855 i=15599 i=15602 i=15501 i=15521 i=14849 i=14852 i=14876 i=15766 i=15769 i=14324 i=15772 i=15775 i=15778 i=15781 i=15784 i=15787 i=21156 i=15793 i=15854 i=15857 i=15860 i=21159 i=21162 i=21165 i=15866 i=15869 i=15872 i=15877 i=15880 i=15883 i=15886 i=21002 i=15889 i=21168 i=15895 i=15898 i=15919 i=15922 i=15925 i=15931 i=17469 i=21171 i=15524 i=15940 i=15943 i=15946 i=23502 i=24117 i=16131 i=18178 i=18181 i=18184 i=18187 i=7650 i=7656 i=14870 i=12767 i=8914 i=7665 i=12213 i=7662 i=7668 i=7782 i=12902 i=12905 i=7698 i=7671 i=7674 i=7677 i=7680 i=7683 i=7728 i=7731 i=7734 i=7737 i=12718 i=12721 i=7686 i=7929 i=7932 i=7935 i=7938 i=7941 i=7944 i=7947 i=8004 i=8067 i=8073 i=8076 i=8172 i=7692 i=8208 i=11959 i=11962 i=8211 i=8214 i=8217 i=8220 i=8223 i=8226 i=7659 i=8229 i=8232 i=8235 i=8238 i=8241 i=12183 i=12186 i=12091 i=12094 i=8247 i=24035 i=8244 i=93 i=72 PG9wYzpUeXBlRGljdGlvbmFyeQ0KICB4bWxuczpvcGM9Imh0dHA6Ly9vcGNmb3VuZGF0aW9uLm9y Zy9CaW5hcnlTY2hlbWEvIg0KICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1M U2NoZW1hLWluc3RhbmNlIg0KICB4bWxuczp1YT0iaHR0cDovL29wY2ZvdW5kYXRpb24ub3JnL1VB LyINCiAgeG1sbnM6dG5zPSJodHRwOi8vb3BjZm91bmRhdGlvbi5vcmcvVUEvIg0KICBEZWZhdWx0 Qnl0ZU9yZGVyPSJMaXR0bGVFbmRpYW4iDQogIFRhcmdldE5hbWVzcGFjZT0iaHR0cDovL29wY2Zv dW5kYXRpb24ub3JnL1VBLyINCj4NCg0KICA8b3BjOkltcG9ydCBOYW1lc3BhY2U9Imh0dHA6Ly9v cGNmb3VuZGF0aW9uLm9yZy9CaW5hcnlTY2hlbWEvIiAvPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5 cGUgTmFtZT0iWG1sRWxlbWVudCI+DQogICAgPG9wYzpEb2N1bWVudGF0aW9uPkFuIFhNTCBlbGVt ZW50IGVuY29kZWQgYXMgYSBVVEYtOCBzdHJpbmcuPC9vcGM6RG9jdW1lbnRhdGlvbj4NCiAgICA8 b3BjOkZpZWxkIE5hbWU9Ikxlbmd0aCIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3Bj OkZpZWxkIE5hbWU9IlZhbHVlIiBUeXBlTmFtZT0ib3BjOkNoYXIiIExlbmd0aEZpZWxkPSJMZW5n dGgiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6RW51bWVyYXRlZFR5cGUg TmFtZT0iTm9kZUlkVHlwZSIgTGVuZ3RoSW5CaXRzPSI2Ij4NCiAgICA8b3BjOkRvY3VtZW50YXRp b24+VGhlIHBvc3NpYmxlIGVuY29kaW5ncyBmb3IgYSBOb2RlSWQgdmFsdWUuPC9vcGM6RG9jdW1l bnRhdGlvbj4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJUd29CeXRlIiBWYWx1ZT0i MCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJGb3VyQnl0ZSIgVmFsdWU9IjEi IC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iTnVtZXJpYyIgVmFsdWU9IjIiIC8+ DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iU3RyaW5nIiBWYWx1ZT0iMyIgLz4NCiAg ICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJHdWlkIiBWYWx1ZT0iNCIgLz4NCiAgICA8b3Bj OkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJCeXRlU3RyaW5nIiBWYWx1ZT0iNSIgLz4NCiAgPC9vcGM6 RW51bWVyYXRlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJUd29CeXRlTm9k ZUlkIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IklkZW50aWZpZXIiIFR5cGVOYW1lPSJvcGM6Qnl0 ZSIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBO YW1lPSJGb3VyQnl0ZU5vZGVJZCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOYW1lc3BhY2VJbmRl eCIgVHlwZU5hbWU9Im9wYzpCeXRlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iSWRlbnRpZmll ciIgVHlwZU5hbWU9Im9wYzpVSW50MTYiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQog IDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iTnVtZXJpY05vZGVJZCI+DQogICAgPG9wYzpGaWVs ZCBOYW1lPSJOYW1lc3BhY2VJbmRleCIgVHlwZU5hbWU9Im9wYzpVSW50MTYiIC8+DQogICAgPG9w YzpGaWVsZCBOYW1lPSJJZGVudGlmaWVyIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgPC9v cGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJTdHJpbmdO b2RlSWQiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTmFtZXNwYWNlSW5kZXgiIFR5cGVOYW1lPSJv cGM6VUludDE2IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iSWRlbnRpZmllciIgVHlwZU5hbWU9 Im9wYzpDaGFyQXJyYXkiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3Ry dWN0dXJlZFR5cGUgTmFtZT0iR3VpZE5vZGVJZCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOYW1l c3BhY2VJbmRleCIgVHlwZU5hbWU9Im9wYzpVSW50MTYiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1l PSJJZGVudGlmaWVyIiBUeXBlTmFtZT0ib3BjOkd1aWQiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRU eXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iQnl0ZVN0cmluZ05vZGVJZCI+DQog ICAgPG9wYzpGaWVsZCBOYW1lPSJOYW1lc3BhY2VJbmRleCIgVHlwZU5hbWU9Im9wYzpVSW50MTYi IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJJZGVudGlmaWVyIiBUeXBlTmFtZT0ib3BjOkJ5dGVT dHJpbmciIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5 cGUgTmFtZT0iTm9kZUlkIj4NCiAgICA8b3BjOkRvY3VtZW50YXRpb24+QW4gaWRlbnRpZmllciBm b3IgYSBub2RlIGluIGEgVUEgc2VydmVyIGFkZHJlc3Mgc3BhY2UuPC9vcGM6RG9jdW1lbnRhdGlv bj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vZGVJZFR5cGUiIFR5cGVOYW1lPSJ1YTpOb2RlSWRU eXBlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVzZXJ2ZWQxIiBUeXBlTmFtZT0ib3BjOkJp dCIgTGVuZ3RoPSIyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVHdvQnl0ZSIgVHlwZU5hbWU9 InVhOlR3b0J5dGVOb2RlSWQiIFN3aXRjaEZpZWxkPSJOb2RlSWRUeXBlIiBTd2l0Y2hWYWx1ZT0i MCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkZvdXJCeXRlIiBUeXBlTmFtZT0idWE6Rm91ckJ5 dGVOb2RlSWQiIFN3aXRjaEZpZWxkPSJOb2RlSWRUeXBlIiBTd2l0Y2hWYWx1ZT0iMSIgLz4NCiAg ICA8b3BjOkZpZWxkIE5hbWU9Ik51bWVyaWMiIFR5cGVOYW1lPSJ1YTpOdW1lcmljTm9kZUlkIiBT d2l0Y2hGaWVsZD0iTm9kZUlkVHlwZSIgU3dpdGNoVmFsdWU9IjIiIC8+DQogICAgPG9wYzpGaWVs ZCBOYW1lPSJTdHJpbmciIFR5cGVOYW1lPSJ1YTpTdHJpbmdOb2RlSWQiIFN3aXRjaEZpZWxkPSJO b2RlSWRUeXBlIiBTd2l0Y2hWYWx1ZT0iMyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ikd1aWQi IFR5cGVOYW1lPSJ1YTpHdWlkTm9kZUlkIiBTd2l0Y2hGaWVsZD0iTm9kZUlkVHlwZSIgU3dpdGNo VmFsdWU9IjQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJCeXRlU3RyaW5nIiBUeXBlTmFtZT0i dWE6Qnl0ZVN0cmluZ05vZGVJZCIgU3dpdGNoRmllbGQ9Ik5vZGVJZFR5cGUiIFN3aXRjaFZhbHVl PSI1IiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBl IE5hbWU9IkV4cGFuZGVkTm9kZUlkIj4NCiAgICA8b3BjOkRvY3VtZW50YXRpb24+QW4gaWRlbnRp ZmllciBmb3IgYSBub2RlIGluIGEgVUEgc2VydmVyIGFkZHJlc3Mgc3BhY2UgcXVhbGlmaWVkIHdp dGggYSBjb21wbGV0ZSBuYW1lc3BhY2Ugc3RyaW5nLjwvb3BjOkRvY3VtZW50YXRpb24+DQogICAg PG9wYzpGaWVsZCBOYW1lPSJOb2RlSWRUeXBlIiBUeXBlTmFtZT0idWE6Tm9kZUlkVHlwZSIgLz4N CiAgICA8b3BjOkZpZWxkIE5hbWU9IlNlcnZlckluZGV4U3BlY2lmaWVkIiBUeXBlTmFtZT0ib3Bj OkJpdCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5hbWVzcGFjZVVSSVNwZWNpZmllZCIgVHlw ZU5hbWU9Im9wYzpCaXQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJUd29CeXRlIiBUeXBlTmFt ZT0idWE6VHdvQnl0ZU5vZGVJZCIgU3dpdGNoRmllbGQ9Ik5vZGVJZFR5cGUiIFN3aXRjaFZhbHVl PSIwIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRm91ckJ5dGUiIFR5cGVOYW1lPSJ1YTpGb3Vy Qnl0ZU5vZGVJZCIgU3dpdGNoRmllbGQ9Ik5vZGVJZFR5cGUiIFN3aXRjaFZhbHVlPSIxIiAvPg0K ICAgIDxvcGM6RmllbGQgTmFtZT0iTnVtZXJpYyIgVHlwZU5hbWU9InVhOk51bWVyaWNOb2RlSWQi IFN3aXRjaEZpZWxkPSJOb2RlSWRUeXBlIiBTd2l0Y2hWYWx1ZT0iMiIgLz4NCiAgICA8b3BjOkZp ZWxkIE5hbWU9IlN0cmluZyIgVHlwZU5hbWU9InVhOlN0cmluZ05vZGVJZCIgU3dpdGNoRmllbGQ9 Ik5vZGVJZFR5cGUiIFN3aXRjaFZhbHVlPSIzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iR3Vp ZCIgVHlwZU5hbWU9InVhOkd1aWROb2RlSWQiIFN3aXRjaEZpZWxkPSJOb2RlSWRUeXBlIiBTd2l0 Y2hWYWx1ZT0iNCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkJ5dGVTdHJpbmciIFR5cGVOYW1l PSJ1YTpCeXRlU3RyaW5nTm9kZUlkIiBTd2l0Y2hGaWVsZD0iTm9kZUlkVHlwZSIgU3dpdGNoVmFs dWU9IjUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOYW1lc3BhY2VVUkkiIFR5cGVOYW1lPSJv cGM6Q2hhckFycmF5IiBTd2l0Y2hGaWVsZD0iTmFtZXNwYWNlVVJJU3BlY2lmaWVkIi8+DQogICAg PG9wYzpGaWVsZCBOYW1lPSJTZXJ2ZXJJbmRleCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIFN3aXRj aEZpZWxkPSJTZXJ2ZXJJbmRleFNwZWNpZmllZCIvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4N Cg0KICA8b3BjOk9wYXF1ZVR5cGUgTmFtZT0iU3RhdHVzQ29kZSIgTGVuZ3RoSW5CaXRzPSIzMiIg Qnl0ZU9yZGVyU2lnbmlmaWNhbnQ9InRydWUiPg0KICAgIDxvcGM6RG9jdW1lbnRhdGlvbj5BIDMy LWJpdCBzdGF0dXMgY29kZSB2YWx1ZS48L29wYzpEb2N1bWVudGF0aW9uPg0KICA8L29wYzpPcGFx dWVUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iRGlhZ25vc3RpY0luZm8iPg0K ICAgIDxvcGM6RG9jdW1lbnRhdGlvbj5BIHJlY3Vyc2l2ZSBzdHJ1Y3R1cmUgY29udGFpbmluZyBk aWFnbm9zdGljIGluZm9ybWF0aW9uIGFzc29jaWF0ZWQgd2l0aCBhIHN0YXR1cyBjb2RlLjwvb3Bj OkRvY3VtZW50YXRpb24+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTeW1ib2xpY0lkU3BlY2lmaWVk IiBUeXBlTmFtZT0ib3BjOkJpdCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5hbWVzcGFjZVVS SVNwZWNpZmllZCIgVHlwZU5hbWU9Im9wYzpCaXQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJM b2NhbGl6ZWRUZXh0U3BlY2lmaWVkIiBUeXBlTmFtZT0ib3BjOkJpdCIgLz4NCiAgICA8b3BjOkZp ZWxkIE5hbWU9IkxvY2FsZVNwZWNpZmllZCIgVHlwZU5hbWU9Im9wYzpCaXQiIC8+DQogICAgPG9w YzpGaWVsZCBOYW1lPSJBZGRpdGlvbmFsSW5mb1NwZWNpZmllZCIgVHlwZU5hbWU9Im9wYzpCaXQi IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJJbm5lclN0YXR1c0NvZGVTcGVjaWZpZWQiIFR5cGVO YW1lPSJvcGM6Qml0IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iSW5uZXJEaWFnbm9zdGljSW5m b1NwZWNpZmllZCIgVHlwZU5hbWU9Im9wYzpCaXQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJS ZXNlcnZlZDEiIFR5cGVOYW1lPSJvcGM6Qml0IiBMZW5ndGg9IjEiIC8+DQogICAgPG9wYzpGaWVs ZCBOYW1lPSJTeW1ib2xpY0lkIiBUeXBlTmFtZT0ib3BjOkludDMyIiBTd2l0Y2hGaWVsZD0iU3lt Ym9saWNJZFNwZWNpZmllZCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5hbWVzcGFjZVVSSSIg VHlwZU5hbWU9Im9wYzpJbnQzMiIgU3dpdGNoRmllbGQ9Ik5hbWVzcGFjZVVSSVNwZWNpZmllZCIg Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkxvY2FsZSIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgU3dp dGNoRmllbGQ9IkxvY2FsZVNwZWNpZmllZCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkxvY2Fs aXplZFRleHQiIFR5cGVOYW1lPSJvcGM6SW50MzIiIFN3aXRjaEZpZWxkPSJMb2NhbGl6ZWRUZXh0 U3BlY2lmaWVkIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQWRkaXRpb25hbEluZm8iIFR5cGVO YW1lPSJvcGM6Q2hhckFycmF5IiBTd2l0Y2hGaWVsZD0iQWRkaXRpb25hbEluZm9TcGVjaWZpZWQi IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJJbm5lclN0YXR1c0NvZGUiIFR5cGVOYW1lPSJ1YTpT dGF0dXNDb2RlIiBTd2l0Y2hGaWVsZD0iSW5uZXJTdGF0dXNDb2RlU3BlY2lmaWVkIiAvPg0KICAg IDxvcGM6RmllbGQgTmFtZT0iSW5uZXJEaWFnbm9zdGljSW5mbyIgVHlwZU5hbWU9InVhOkRpYWdu b3N0aWNJbmZvIiBTd2l0Y2hGaWVsZD0iSW5uZXJEaWFnbm9zdGljSW5mb1NwZWNpZmllZCIgLz4N CiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJR dWFsaWZpZWROYW1lIj4NCiAgICA8b3BjOkRvY3VtZW50YXRpb24+QSBzdHJpbmcgcXVhbGlmaWVk IHdpdGggYSBuYW1lc3BhY2UgaW5kZXguPC9vcGM6RG9jdW1lbnRhdGlvbj4NCiAgICA8b3BjOkZp ZWxkIE5hbWU9Ik5hbWVzcGFjZUluZGV4IiBUeXBlTmFtZT0ib3BjOlVJbnQxNiIgLz4NCiAgICA8 b3BjOkZpZWxkIE5hbWU9Ik5hbWUiIFR5cGVOYW1lPSJvcGM6Q2hhckFycmF5IiAvPg0KICA8L29w YzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkxvY2FsaXpl ZFRleHQiPg0KICAgIDxvcGM6RG9jdW1lbnRhdGlvbj5BIHN0cmluZyBxdWFsaWZpZWQgd2l0aCBh IG5hbWVzcGFjZSBpbmRleC48L29wYzpEb2N1bWVudGF0aW9uPg0KICAgIDxvcGM6RmllbGQgTmFt ZT0iTG9jYWxlU3BlY2lmaWVkIiBUeXBlTmFtZT0ib3BjOkJpdCIgLz4NCiAgICA8b3BjOkZpZWxk IE5hbWU9IlRleHRTcGVjaWZpZWQiIFR5cGVOYW1lPSJvcGM6Qml0IiAvPg0KICAgIDxvcGM6Rmll bGQgTmFtZT0iUmVzZXJ2ZWQxIiBUeXBlTmFtZT0ib3BjOkJpdCIgTGVuZ3RoPSI2IiAvPg0KICAg IDxvcGM6RmllbGQgTmFtZT0iTG9jYWxlIiBUeXBlTmFtZT0ib3BjOkNoYXJBcnJheSIgU3dpdGNo RmllbGQ9IkxvY2FsZVNwZWNpZmllZCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlRleHQiIFR5 cGVOYW1lPSJvcGM6Q2hhckFycmF5IiBTd2l0Y2hGaWVsZD0iVGV4dFNwZWNpZmllZCIgLz4NCiAg PC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJEYXRh VmFsdWUiPg0KICAgIDxvcGM6RG9jdW1lbnRhdGlvbj5BIHZhbHVlIHdpdGggYW4gYXNzb2NpYXRl ZCB0aW1lc3RhbXAsIGFuZCBxdWFsaXR5Ljwvb3BjOkRvY3VtZW50YXRpb24+DQogICAgPG9wYzpG aWVsZCBOYW1lPSJWYWx1ZVNwZWNpZmllZCIgVHlwZU5hbWU9Im9wYzpCaXQiIC8+DQogICAgPG9w YzpGaWVsZCBOYW1lPSJTdGF0dXNDb2RlU3BlY2lmaWVkIiBUeXBlTmFtZT0ib3BjOkJpdCIgLz4N CiAgICA8b3BjOkZpZWxkIE5hbWU9IlNvdXJjZVRpbWVzdGFtcFNwZWNpZmllZCIgVHlwZU5hbWU9 Im9wYzpCaXQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTZXJ2ZXJUaW1lc3RhbXBTcGVjaWZp ZWQiIFR5cGVOYW1lPSJvcGM6Qml0IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU291cmNlUGlj b3NlY29uZHNTcGVjaWZpZWQiIFR5cGVOYW1lPSJvcGM6Qml0IiAvPg0KICAgIDxvcGM6RmllbGQg TmFtZT0iU2VydmVyUGljb3NlY29uZHNTcGVjaWZpZWQiIFR5cGVOYW1lPSJvcGM6Qml0IiAvPg0K ICAgIDxvcGM6RmllbGQgTmFtZT0iUmVzZXJ2ZWQxIiBUeXBlTmFtZT0ib3BjOkJpdCIgTGVuZ3Ro PSIyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVmFsdWUiIFR5cGVOYW1lPSJ1YTpWYXJpYW50 IiBTd2l0Y2hGaWVsZD0iVmFsdWVTcGVjaWZpZWQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJT dGF0dXNDb2RlIiBUeXBlTmFtZT0idWE6U3RhdHVzQ29kZSIgU3dpdGNoRmllbGQ9IlN0YXR1c0Nv ZGVTcGVjaWZpZWQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTb3VyY2VUaW1lc3RhbXAiIFR5 cGVOYW1lPSJvcGM6RGF0ZVRpbWUiIFN3aXRjaEZpZWxkPSJTb3VyY2VUaW1lc3RhbXBTcGVjaWZp ZWQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTb3VyY2VQaWNvc2Vjb25kcyIgVHlwZU5hbWU9 Im9wYzpVSW50MTYiIFN3aXRjaEZpZWxkPSJTb3VyY2VQaWNvc2Vjb25kc1NwZWNpZmllZCIgLz4N CiAgICA8b3BjOkZpZWxkIE5hbWU9IlNlcnZlclRpbWVzdGFtcCIgVHlwZU5hbWU9Im9wYzpEYXRl VGltZSIgU3dpdGNoRmllbGQ9IlNlcnZlclRpbWVzdGFtcFNwZWNpZmllZCIgLz4NCiAgICA8b3Bj OkZpZWxkIE5hbWU9IlNlcnZlclBpY29zZWNvbmRzIiBUeXBlTmFtZT0ib3BjOlVJbnQxNiIgU3dp dGNoRmllbGQ9IlNlcnZlclBpY29zZWNvbmRzU3BlY2lmaWVkIiAvPg0KICA8L29wYzpTdHJ1Y3R1 cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkV4dGVuc2lvbk9iamVjdCI+ DQogICAgPG9wYzpEb2N1bWVudGF0aW9uPkEgc2VyaWFsaXplZCBvYmplY3QgcHJlZml4ZWQgd2l0 aCBpdHMgZGF0YSB0eXBlIGlkZW50aWZpZXIuPC9vcGM6RG9jdW1lbnRhdGlvbj4NCiAgICA8b3Bj OkZpZWxkIE5hbWU9IlR5cGVJZFNwZWNpZmllZCIgVHlwZU5hbWU9Im9wYzpCaXQiIC8+DQogICAg PG9wYzpGaWVsZCBOYW1lPSJCaW5hcnlCb2R5IiBUeXBlTmFtZT0ib3BjOkJpdCIgLz4NCiAgICA8 b3BjOkZpZWxkIE5hbWU9IlhtbEJvZHkiIFR5cGVOYW1lPSJvcGM6Qml0IiAvPg0KICAgIDxvcGM6 RmllbGQgTmFtZT0iUmVzZXJ2ZWQxIiBUeXBlTmFtZT0ib3BjOkJpdCIgTGVuZ3RoPSI1IiAvPg0K ICAgIDxvcGM6RmllbGQgTmFtZT0iVHlwZUlkIiBUeXBlTmFtZT0idWE6RXhwYW5kZWROb2RlSWQi IFN3aXRjaEZpZWxkPSJUeXBlSWRTcGVjaWZpZWQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJC b2R5TGVuZ3RoIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i Qm9keSIgVHlwZU5hbWU9Im9wYzpCeXRlIiBMZW5ndGhGaWVsZD0iQm9keUxlbmd0aCIgLz4NCiAg PC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJWYXJp YW50Ij4NCiAgICA8b3BjOkRvY3VtZW50YXRpb24+QSB1bmlvbiBvZiBzZXZlcmFsIHR5cGVzLjwv b3BjOkRvY3VtZW50YXRpb24+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJWYXJpYW50VHlwZSIgVHlw ZU5hbWU9Im9wYzpCaXQiIExlbmd0aD0iNiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkFycmF5 RGltZW5zaW9uc1NwZWNpZmllZCIgVHlwZU5hbWU9Im9wYzpCaXQiIExlbmd0aD0iMSIvPg0KICAg IDxvcGM6RmllbGQgTmFtZT0iQXJyYXlMZW5ndGhTcGVjaWZpZWQiIFR5cGVOYW1lPSJvcGM6Qml0 IiBMZW5ndGg9IjEiLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkFycmF5TGVuZ3RoIiBUeXBlTmFt ZT0ib3BjOkludDMyIiBTd2l0Y2hGaWVsZD0iQXJyYXlMZW5ndGhTcGVjaWZpZWQiIC8+DQogICAg PG9wYzpGaWVsZCBOYW1lPSJCb29sZWFuIiBUeXBlTmFtZT0ib3BjOkJvb2xlYW4iIExlbmd0aEZp ZWxkPSJBcnJheUxlbmd0aCIgU3dpdGNoRmllbGQ9IlZhcmlhbnRUeXBlIiBTd2l0Y2hWYWx1ZT0i MSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNCeXRlIiBUeXBlTmFtZT0ib3BjOlNCeXRlIiBM ZW5ndGhGaWVsZD0iQXJyYXlMZW5ndGgiIFN3aXRjaEZpZWxkPSJWYXJpYW50VHlwZSIgU3dpdGNo VmFsdWU9IjIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJCeXRlIiBUeXBlTmFtZT0ib3BjOkJ5 dGUiIExlbmd0aEZpZWxkPSJBcnJheUxlbmd0aCIgU3dpdGNoRmllbGQ9IlZhcmlhbnRUeXBlIiBT d2l0Y2hWYWx1ZT0iMyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkludDE2IiBUeXBlTmFtZT0i b3BjOkludDE2IiBMZW5ndGhGaWVsZD0iQXJyYXlMZW5ndGgiIFN3aXRjaEZpZWxkPSJWYXJpYW50 VHlwZSIgU3dpdGNoVmFsdWU9IjQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJVSW50MTYiIFR5 cGVOYW1lPSJvcGM6VUludDE2IiBMZW5ndGhGaWVsZD0iQXJyYXlMZW5ndGgiIFN3aXRjaEZpZWxk PSJWYXJpYW50VHlwZSIgU3dpdGNoVmFsdWU9IjUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJJ bnQzMiIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgTGVuZ3RoRmllbGQ9IkFycmF5TGVuZ3RoIiBTd2l0 Y2hGaWVsZD0iVmFyaWFudFR5cGUiIFN3aXRjaFZhbHVlPSI2IiAvPg0KICAgIDxvcGM6RmllbGQg TmFtZT0iVUludDMyIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgTGVuZ3RoRmllbGQ9IkFycmF5TGVu Z3RoIiBTd2l0Y2hGaWVsZD0iVmFyaWFudFR5cGUiIFN3aXRjaFZhbHVlPSI3IiAvPg0KICAgIDxv cGM6RmllbGQgTmFtZT0iSW50NjQiIFR5cGVOYW1lPSJvcGM6SW50NjQiIExlbmd0aEZpZWxkPSJB cnJheUxlbmd0aCIgU3dpdGNoRmllbGQ9IlZhcmlhbnRUeXBlIiBTd2l0Y2hWYWx1ZT0iOCIgLz4N CiAgICA8b3BjOkZpZWxkIE5hbWU9IlVJbnQ2NCIgVHlwZU5hbWU9Im9wYzpVSW50NjQiIExlbmd0 aEZpZWxkPSJBcnJheUxlbmd0aCIgU3dpdGNoRmllbGQ9IlZhcmlhbnRUeXBlIiBTd2l0Y2hWYWx1 ZT0iOSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkZsb2F0IiBUeXBlTmFtZT0ib3BjOkZsb2F0 IiBMZW5ndGhGaWVsZD0iQXJyYXlMZW5ndGgiIFN3aXRjaEZpZWxkPSJWYXJpYW50VHlwZSIgU3dp dGNoVmFsdWU9IjEwIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRG91YmxlIiBUeXBlTmFtZT0i b3BjOkRvdWJsZSIgTGVuZ3RoRmllbGQ9IkFycmF5TGVuZ3RoIiBTd2l0Y2hGaWVsZD0iVmFyaWFu dFR5cGUiIFN3aXRjaFZhbHVlPSIxMSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlN0cmluZyIg VHlwZU5hbWU9Im9wYzpDaGFyQXJyYXkiIExlbmd0aEZpZWxkPSJBcnJheUxlbmd0aCIgU3dpdGNo RmllbGQ9IlZhcmlhbnRUeXBlIiBTd2l0Y2hWYWx1ZT0iMTIiIC8+DQogICAgPG9wYzpGaWVsZCBO YW1lPSJEYXRlVGltZSIgVHlwZU5hbWU9Im9wYzpEYXRlVGltZSIgTGVuZ3RoRmllbGQ9IkFycmF5 TGVuZ3RoIiBTd2l0Y2hGaWVsZD0iVmFyaWFudFR5cGUiIFN3aXRjaFZhbHVlPSIxMyIgLz4NCiAg ICA8b3BjOkZpZWxkIE5hbWU9Ikd1aWQiIFR5cGVOYW1lPSJvcGM6R3VpZCIgTGVuZ3RoRmllbGQ9 IkFycmF5TGVuZ3RoIiBTd2l0Y2hGaWVsZD0iVmFyaWFudFR5cGUiIFN3aXRjaFZhbHVlPSIxNCIg Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkJ5dGVTdHJpbmciIFR5cGVOYW1lPSJvcGM6Qnl0ZVN0 cmluZyIgTGVuZ3RoRmllbGQ9IkFycmF5TGVuZ3RoIiBTd2l0Y2hGaWVsZD0iVmFyaWFudFR5cGUi IFN3aXRjaFZhbHVlPSIxNSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlhtbEVsZW1lbnQiIFR5 cGVOYW1lPSJ1YTpYbWxFbGVtZW50IiBMZW5ndGhGaWVsZD0iQXJyYXlMZW5ndGgiIFN3aXRjaEZp ZWxkPSJWYXJpYW50VHlwZSIgU3dpdGNoVmFsdWU9IjE2IiAvPg0KICAgIDxvcGM6RmllbGQgTmFt ZT0iTm9kZUlkIiBUeXBlTmFtZT0idWE6Tm9kZUlkIiBMZW5ndGhGaWVsZD0iQXJyYXlMZW5ndGgi IFN3aXRjaEZpZWxkPSJWYXJpYW50VHlwZSIgU3dpdGNoVmFsdWU9IjE3IiAvPg0KICAgIDxvcGM6 RmllbGQgTmFtZT0iRXhwYW5kZWROb2RlSWQiIFR5cGVOYW1lPSJ1YTpFeHBhbmRlZE5vZGVJZCIg TGVuZ3RoRmllbGQ9IkFycmF5TGVuZ3RoIiBTd2l0Y2hGaWVsZD0iVmFyaWFudFR5cGUiIFN3aXRj aFZhbHVlPSIxOCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlN0YXR1c0NvZGUiIFR5cGVOYW1l PSJ1YTpTdGF0dXNDb2RlIiBMZW5ndGhGaWVsZD0iQXJyYXlMZW5ndGgiIFN3aXRjaEZpZWxkPSJW YXJpYW50VHlwZSIgU3dpdGNoVmFsdWU9IjE5IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUXVh bGlmaWVkTmFtZSIgVHlwZU5hbWU9InVhOlF1YWxpZmllZE5hbWUiIExlbmd0aEZpZWxkPSJBcnJh eUxlbmd0aCIgU3dpdGNoRmllbGQ9IlZhcmlhbnRUeXBlIiBTd2l0Y2hWYWx1ZT0iMjAiIC8+DQog ICAgPG9wYzpGaWVsZCBOYW1lPSJMb2NhbGl6ZWRUZXh0IiBUeXBlTmFtZT0idWE6TG9jYWxpemVk VGV4dCIgTGVuZ3RoRmllbGQ9IkFycmF5TGVuZ3RoIiBTd2l0Y2hGaWVsZD0iVmFyaWFudFR5cGUi IFN3aXRjaFZhbHVlPSIyMSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkV4dGVuc2lvbk9iamVj dCIgVHlwZU5hbWU9InVhOkV4dGVuc2lvbk9iamVjdCIgTGVuZ3RoRmllbGQ9IkFycmF5TGVuZ3Ro IiBTd2l0Y2hGaWVsZD0iVmFyaWFudFR5cGUiIFN3aXRjaFZhbHVlPSIyMiIgLz4NCiAgICA8b3Bj OkZpZWxkIE5hbWU9IkRhdGFWYWx1ZSIgVHlwZU5hbWU9InVhOkRhdGFWYWx1ZSIgTGVuZ3RoRmll bGQ9IkFycmF5TGVuZ3RoIiBTd2l0Y2hGaWVsZD0iVmFyaWFudFR5cGUiIFN3aXRjaFZhbHVlPSIy MyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlZhcmlhbnQiIFR5cGVOYW1lPSJ1YTpWYXJpYW50 IiBMZW5ndGhGaWVsZD0iQXJyYXlMZW5ndGgiIFN3aXRjaEZpZWxkPSJWYXJpYW50VHlwZSIgU3dp dGNoVmFsdWU9IjI0IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGlhZ25vc3RpY0luZm8iIFR5 cGVOYW1lPSJ1YTpEaWFnbm9zdGljSW5mbyIgTGVuZ3RoRmllbGQ9IkFycmF5TGVuZ3RoIiBTd2l0 Y2hGaWVsZD0iVmFyaWFudFR5cGUiIFN3aXRjaFZhbHVlPSIyNSIgLz4NCiAgICA8b3BjOkZpZWxk IE5hbWU9Ik5vT2ZBcnJheURpbWVuc2lvbnMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIFN3aXRjaEZp ZWxkPSJBcnJheURpbWVuc2lvbnNTcGVjaWZpZWQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJB cnJheURpbWVuc2lvbnMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIExlbmd0aEZpZWxkPSJOb09mQXJy YXlEaW1lbnNpb25zIiBTd2l0Y2hGaWVsZD0iQXJyYXlEaW1lbnNpb25zU3BlY2lmaWVkIiAvPg0K ICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOkVudW1lcmF0ZWRUeXBlIE5hbWU9Ik5h bWluZ1J1bGVUeXBlIiBMZW5ndGhJbkJpdHM9IjMyIj4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1 ZSBOYW1lPSJNYW5kYXRvcnkiIFZhbHVlPSIxIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVl IE5hbWU9Ik9wdGlvbmFsIiBWYWx1ZT0iMiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBO YW1lPSJDb25zdHJhaW50IiBWYWx1ZT0iMyIgLz4NCiAgPC9vcGM6RW51bWVyYXRlZFR5cGU+DQog ICAgDQoNCiAgPG9wYzpFbnVtZXJhdGVkVHlwZSBOYW1lPSJFbnVtZXJhdGlvbiIgTGVuZ3RoSW5C aXRzPSIzMiI+DQogIDwvb3BjOkVudW1lcmF0ZWRUeXBlPg0KDQogIDxvcGM6T3BhcXVlVHlwZSBO YW1lPSJJbWFnZUJNUCI+DQogIDwvb3BjOk9wYXF1ZVR5cGU+DQoNCiAgPG9wYzpPcGFxdWVUeXBl IE5hbWU9IkltYWdlR0lGIj4NCiAgPC9vcGM6T3BhcXVlVHlwZT4NCg0KICA8b3BjOk9wYXF1ZVR5 cGUgTmFtZT0iSW1hZ2VKUEciPg0KICA8L29wYzpPcGFxdWVUeXBlPg0KDQogIDxvcGM6T3BhcXVl VHlwZSBOYW1lPSJJbWFnZVBORyI+DQogIDwvb3BjOk9wYXF1ZVR5cGU+DQoNCiAgPG9wYzpPcGFx dWVUeXBlIE5hbWU9IkF1ZGlvRGF0YVR5cGUiPg0KICA8L29wYzpPcGFxdWVUeXBlPg0KDQogIDxv cGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iVW5pb24iIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmpl Y3QiPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOk9wYXF1ZVR5cGUgTmFtZT0i Qml0RmllbGRNYXNrRGF0YVR5cGUiPg0KICA8L29wYzpPcGFxdWVUeXBlPg0KDQogIDxvcGM6U3Ry dWN0dXJlZFR5cGUgTmFtZT0iS2V5VmFsdWVQYWlyIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2Jq ZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IktleSIgVHlwZU5hbWU9InVhOlF1YWxpZmllZE5h bWUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJWYWx1ZSIgVHlwZU5hbWU9InVhOlZhcmlhbnQi IC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFt ZT0iQWRkaXRpb25hbFBhcmFtZXRlcnNUeXBlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0 Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZQYXJhbWV0ZXJzIiBUeXBlTmFtZT0ib3BjOklu dDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUGFyYW1ldGVycyIgVHlwZU5hbWU9InRuczpL ZXlWYWx1ZVBhaXIiIExlbmd0aEZpZWxkPSJOb09mUGFyYW1ldGVycyIgLz4NCiAgPC9vcGM6U3Ry dWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJFcGhlbWVyYWxLZXlU eXBlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 IlB1YmxpY0tleSIgVHlwZU5hbWU9Im9wYzpCeXRlU3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQg TmFtZT0iU2lnbmF0dXJlIiBUeXBlTmFtZT0ib3BjOkJ5dGVTdHJpbmciIC8+DQogIDwvb3BjOlN0 cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iRW5kcG9pbnRUeXBl IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkVu ZHBvaW50VXJsIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 IlNlY3VyaXR5TW9kZSIgVHlwZU5hbWU9InRuczpNZXNzYWdlU2VjdXJpdHlNb2RlIiAvPg0KICAg IDxvcGM6RmllbGQgTmFtZT0iU2VjdXJpdHlQb2xpY3lVcmkiIFR5cGVOYW1lPSJvcGM6U3RyaW5n IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVHJhbnNwb3J0UHJvZmlsZVVyaSIgVHlwZU5hbWU9 Im9wYzpTdHJpbmciIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0 dXJlZFR5cGUgTmFtZT0iUmF0aW9uYWxOdW1iZXIiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmpl Y3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTnVtZXJhdG9yIiBUeXBlTmFtZT0ib3BjOkludDMy IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGVub21pbmF0b3IiIFR5cGVOYW1lPSJvcGM6VUlu dDMyIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBl IE5hbWU9IlZlY3RvciIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogIDwvb3BjOlN0 cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iVGhyZWVEVmVjdG9y IiBCYXNlVHlwZT0idG5zOlZlY3RvciI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJYIiBUeXBlTmFt ZT0ib3BjOkRvdWJsZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlkiIFR5cGVOYW1lPSJvcGM6 RG91YmxlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iWiIgVHlwZU5hbWU9Im9wYzpEb3VibGUi IC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFt ZT0iQ2FydGVzaWFuQ29vcmRpbmF0ZXMiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0K ICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlRo cmVlRENhcnRlc2lhbkNvb3JkaW5hdGVzIiBCYXNlVHlwZT0idG5zOkNhcnRlc2lhbkNvb3JkaW5h dGVzIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlgiIFR5cGVOYW1lPSJvcGM6RG91YmxlIiAvPg0K ICAgIDxvcGM6RmllbGQgTmFtZT0iWSIgVHlwZU5hbWU9Im9wYzpEb3VibGUiIC8+DQogICAgPG9w YzpGaWVsZCBOYW1lPSJaIiBUeXBlTmFtZT0ib3BjOkRvdWJsZSIgLz4NCiAgPC9vcGM6U3RydWN0 dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJPcmllbnRhdGlvbiIgQmFz ZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQog IDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iVGhyZWVET3JpZW50YXRpb24iIEJhc2VUeXBlPSJ0 bnM6T3JpZW50YXRpb24iPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQSIgVHlwZU5hbWU9Im9wYzpE b3VibGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJCIiBUeXBlTmFtZT0ib3BjOkRvdWJsZSIg Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkMiIFR5cGVOYW1lPSJvcGM6RG91YmxlIiAvPg0KICA8 L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkZyYW1l IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+ DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJUaHJlZURGcmFtZSIgQmFzZVR5cGU9InRu czpGcmFtZSI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJDYXJ0ZXNpYW5Db29yZGluYXRlcyIgVHlw ZU5hbWU9InRuczpUaHJlZURDYXJ0ZXNpYW5Db29yZGluYXRlcyIgLz4NCiAgICA8b3BjOkZpZWxk IE5hbWU9Ik9yaWVudGF0aW9uIiBUeXBlTmFtZT0idG5zOlRocmVlRE9yaWVudGF0aW9uIiAvPg0K ICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOkVudW1lcmF0ZWRUeXBlIE5hbWU9Ik9w ZW5GaWxlTW9kZSIgTGVuZ3RoSW5CaXRzPSIzMiI+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUg TmFtZT0iUmVhZCIgVmFsdWU9IjEiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0i V3JpdGUiIFZhbHVlPSIyIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkVyYXNl RXhpc3RpbmciIFZhbHVlPSI0IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkFw cGVuZCIgVmFsdWU9IjgiIC8+DQogIDwvb3BjOkVudW1lcmF0ZWRUeXBlPg0KDQogIDxvcGM6RW51 bWVyYXRlZFR5cGUgTmFtZT0iSWRlbnRpdHlDcml0ZXJpYVR5cGUiIExlbmd0aEluQml0cz0iMzIi Pg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlVzZXJOYW1lIiBWYWx1ZT0iMSIgLz4N CiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJUaHVtYnByaW50IiBWYWx1ZT0iMiIgLz4N CiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJSb2xlIiBWYWx1ZT0iMyIgLz4NCiAgICA8 b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJHcm91cElkIiBWYWx1ZT0iNCIgLz4NCiAgICA8b3Bj OkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJBbm9ueW1vdXMiIFZhbHVlPSI1IiAvPg0KICAgIDxvcGM6 RW51bWVyYXRlZFZhbHVlIE5hbWU9IkF1dGhlbnRpY2F0ZWRVc2VyIiBWYWx1ZT0iNiIgLz4NCiAg ICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJBcHBsaWNhdGlvbiIgVmFsdWU9IjciIC8+DQog IDwvb3BjOkVudW1lcmF0ZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iSWRl bnRpdHlNYXBwaW5nUnVsZVR5cGUiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAg IDxvcGM6RmllbGQgTmFtZT0iQ3JpdGVyaWFUeXBlIiBUeXBlTmFtZT0idG5zOklkZW50aXR5Q3Jp dGVyaWFUeXBlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQ3JpdGVyaWEiIFR5cGVOYW1lPSJv cGM6U3RyaW5nIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVy ZWRUeXBlIE5hbWU9IkN1cnJlbmN5VW5pdFR5cGUiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmpl Y3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTnVtZXJpY0NvZGUiIFR5cGVOYW1lPSJvcGM6SW50 MTYiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJFeHBvbmVudCIgVHlwZU5hbWU9Im9wYzpTQnl0 ZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkFscGhhYmV0aWNDb2RlIiBUeXBlTmFtZT0ib3Bj OlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkN1cnJlbmN5IiBUeXBlTmFtZT0idWE6 TG9jYWxpemVkVGV4dCIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpFbnVt ZXJhdGVkVHlwZSBOYW1lPSJUcnVzdExpc3RNYXNrcyIgTGVuZ3RoSW5CaXRzPSIzMiI+DQogICAg PG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iTm9uZSIgVmFsdWU9IjAiIC8+DQogICAgPG9wYzpF bnVtZXJhdGVkVmFsdWUgTmFtZT0iVHJ1c3RlZENlcnRpZmljYXRlcyIgVmFsdWU9IjEiIC8+DQog ICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iVHJ1c3RlZENybHMiIFZhbHVlPSIyIiAvPg0K ICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9Iklzc3VlckNlcnRpZmljYXRlcyIgVmFsdWU9 IjQiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iSXNzdWVyQ3JscyIgVmFsdWU9 IjgiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iQWxsIiBWYWx1ZT0iMTUiIC8+ DQogIDwvb3BjOkVudW1lcmF0ZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0i VHJ1c3RMaXN0RGF0YVR5cGUiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxv cGM6RmllbGQgTmFtZT0iU3BlY2lmaWVkTGlzdHMiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0K ICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlRydXN0ZWRDZXJ0aWZpY2F0ZXMiIFR5cGVOYW1lPSJv cGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJUcnVzdGVkQ2VydGlmaWNhdGVzIiBU eXBlTmFtZT0ib3BjOkJ5dGVTdHJpbmciIExlbmd0aEZpZWxkPSJOb09mVHJ1c3RlZENlcnRpZmlj YXRlcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZUcnVzdGVkQ3JscyIgVHlwZU5hbWU9 Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlRydXN0ZWRDcmxzIiBUeXBlTmFt ZT0ib3BjOkJ5dGVTdHJpbmciIExlbmd0aEZpZWxkPSJOb09mVHJ1c3RlZENybHMiIC8+DQogICAg PG9wYzpGaWVsZCBOYW1lPSJOb09mSXNzdWVyQ2VydGlmaWNhdGVzIiBUeXBlTmFtZT0ib3BjOklu dDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iSXNzdWVyQ2VydGlmaWNhdGVzIiBUeXBlTmFt ZT0ib3BjOkJ5dGVTdHJpbmciIExlbmd0aEZpZWxkPSJOb09mSXNzdWVyQ2VydGlmaWNhdGVzIiAv Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZklzc3VlckNybHMiIFR5cGVOYW1lPSJvcGM6SW50 MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJJc3N1ZXJDcmxzIiBUeXBlTmFtZT0ib3BjOkJ5 dGVTdHJpbmciIExlbmd0aEZpZWxkPSJOb09mSXNzdWVyQ3JscyIgLz4NCiAgPC9vcGM6U3RydWN0 dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJEZWNpbWFsRGF0YVR5cGUi IEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2Nh bGUiIFR5cGVOYW1lPSJvcGM6SW50MTYiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJWYWx1ZSIg VHlwZU5hbWU9Im9wYzpCeXRlU3RyaW5nIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0K ICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkRhdGFUeXBlU2NoZW1hSGVhZGVyIiBCYXNlVHlw ZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZOYW1lc3Bh Y2VzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTmFtZXNw YWNlcyIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIExlbmd0aEZpZWxkPSJOb09mTmFtZXNwYWNlcyIg Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZTdHJ1Y3R1cmVEYXRhVHlwZXMiIFR5cGVOYW1l PSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTdHJ1Y3R1cmVEYXRhVHlwZXMi IFR5cGVOYW1lPSJ0bnM6U3RydWN0dXJlRGVzY3JpcHRpb24iIExlbmd0aEZpZWxkPSJOb09mU3Ry dWN0dXJlRGF0YVR5cGVzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkVudW1EYXRhVHlw ZXMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJFbnVtRGF0 YVR5cGVzIiBUeXBlTmFtZT0idG5zOkVudW1EZXNjcmlwdGlvbiIgTGVuZ3RoRmllbGQ9Ik5vT2ZF bnVtRGF0YVR5cGVzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlNpbXBsZURhdGFUeXBl cyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNpbXBsZURh dGFUeXBlcyIgVHlwZU5hbWU9InRuczpTaW1wbGVUeXBlRGVzY3JpcHRpb24iIExlbmd0aEZpZWxk PSJOb09mU2ltcGxlRGF0YVR5cGVzIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8 b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkRhdGFUeXBlRGVzY3JpcHRpb24iIEJhc2VUeXBlPSJ1 YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGF0YVR5cGVJZCIgVHlw ZU5hbWU9InVhOk5vZGVJZCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5hbWUiIFR5cGVOYW1l PSJ1YTpRdWFsaWZpZWROYW1lIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3Bj OlN0cnVjdHVyZWRUeXBlIE5hbWU9IlN0cnVjdHVyZURlc2NyaXB0aW9uIiBCYXNlVHlwZT0idG5z OkRhdGFUeXBlRGVzY3JpcHRpb24iPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGF0YVR5cGVJZCIg VHlwZU5hbWU9InVhOk5vZGVJZCIgU291cmNlVHlwZT0idG5zOkRhdGFUeXBlRGVzY3JpcHRpb24i IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOYW1lIiBUeXBlTmFtZT0idWE6UXVhbGlmaWVkTmFt ZSIgU291cmNlVHlwZT0idG5zOkRhdGFUeXBlRGVzY3JpcHRpb24iIC8+DQogICAgPG9wYzpGaWVs ZCBOYW1lPSJTdHJ1Y3R1cmVEZWZpbml0aW9uIiBUeXBlTmFtZT0idG5zOlN0cnVjdHVyZURlZmlu aXRpb24iIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5 cGUgTmFtZT0iRW51bURlc2NyaXB0aW9uIiBCYXNlVHlwZT0idG5zOkRhdGFUeXBlRGVzY3JpcHRp b24iPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGF0YVR5cGVJZCIgVHlwZU5hbWU9InVhOk5vZGVJ ZCIgU291cmNlVHlwZT0idG5zOkRhdGFUeXBlRGVzY3JpcHRpb24iIC8+DQogICAgPG9wYzpGaWVs ZCBOYW1lPSJOYW1lIiBUeXBlTmFtZT0idWE6UXVhbGlmaWVkTmFtZSIgU291cmNlVHlwZT0idG5z OkRhdGFUeXBlRGVzY3JpcHRpb24iIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJFbnVtRGVmaW5p dGlvbiIgVHlwZU5hbWU9InRuczpFbnVtRGVmaW5pdGlvbiIgLz4NCiAgICA8b3BjOkZpZWxkIE5h bWU9IkJ1aWx0SW5UeXBlIiBUeXBlTmFtZT0ib3BjOkJ5dGUiIC8+DQogIDwvb3BjOlN0cnVjdHVy ZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iU2ltcGxlVHlwZURlc2NyaXB0 aW9uIiBCYXNlVHlwZT0idG5zOkRhdGFUeXBlRGVzY3JpcHRpb24iPg0KICAgIDxvcGM6RmllbGQg TmFtZT0iRGF0YVR5cGVJZCIgVHlwZU5hbWU9InVhOk5vZGVJZCIgU291cmNlVHlwZT0idG5zOkRh dGFUeXBlRGVzY3JpcHRpb24iIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOYW1lIiBUeXBlTmFt ZT0idWE6UXVhbGlmaWVkTmFtZSIgU291cmNlVHlwZT0idG5zOkRhdGFUeXBlRGVzY3JpcHRpb24i IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJCYXNlRGF0YVR5cGUiIFR5cGVOYW1lPSJ1YTpOb2Rl SWQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJCdWlsdEluVHlwZSIgVHlwZU5hbWU9Im9wYzpC eXRlIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBl IE5hbWU9IlVBQmluYXJ5RmlsZURhdGFUeXBlIiBCYXNlVHlwZT0idG5zOkRhdGFUeXBlU2NoZW1h SGVhZGVyIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZOYW1lc3BhY2VzIiBUeXBlTmFtZT0i b3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTmFtZXNwYWNlcyIgVHlwZU5hbWU9 Im9wYzpTdHJpbmciIExlbmd0aEZpZWxkPSJOb09mTmFtZXNwYWNlcyIgLz4NCiAgICA8b3BjOkZp ZWxkIE5hbWU9Ik5vT2ZTdHJ1Y3R1cmVEYXRhVHlwZXMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+ DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTdHJ1Y3R1cmVEYXRhVHlwZXMiIFR5cGVOYW1lPSJ0bnM6 U3RydWN0dXJlRGVzY3JpcHRpb24iIExlbmd0aEZpZWxkPSJOb09mU3RydWN0dXJlRGF0YVR5cGVz IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkVudW1EYXRhVHlwZXMiIFR5cGVOYW1lPSJv cGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJFbnVtRGF0YVR5cGVzIiBUeXBlTmFt ZT0idG5zOkVudW1EZXNjcmlwdGlvbiIgTGVuZ3RoRmllbGQ9Ik5vT2ZFbnVtRGF0YVR5cGVzIiAv Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlNpbXBsZURhdGFUeXBlcyIgVHlwZU5hbWU9Im9w YzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNpbXBsZURhdGFUeXBlcyIgVHlwZU5h bWU9InRuczpTaW1wbGVUeXBlRGVzY3JpcHRpb24iIExlbmd0aEZpZWxkPSJOb09mU2ltcGxlRGF0 YVR5cGVzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2NoZW1hTG9jYXRpb24iIFR5cGVOYW1l PSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkZpbGVIZWFkZXIiIFR5 cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJGaWxlSGVhZGVyIiBU eXBlTmFtZT0idG5zOktleVZhbHVlUGFpciIgTGVuZ3RoRmllbGQ9Ik5vT2ZGaWxlSGVhZGVyIiAv Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQm9keSIgVHlwZU5hbWU9InVhOlZhcmlhbnQiIC8+DQog IDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6RW51bWVyYXRlZFR5cGUgTmFtZT0iUHVi U3ViU3RhdGUiIExlbmd0aEluQml0cz0iMzIiPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5h bWU9IkRpc2FibGVkIiBWYWx1ZT0iMCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1l PSJQYXVzZWQiIFZhbHVlPSIxIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9Ik9w ZXJhdGlvbmFsIiBWYWx1ZT0iMiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJF cnJvciIgVmFsdWU9IjMiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iUHJlT3Bl cmF0aW9uYWwiIFZhbHVlPSI0IiAvPg0KICA8L29wYzpFbnVtZXJhdGVkVHlwZT4NCg0KICA8b3Bj OlN0cnVjdHVyZWRUeXBlIE5hbWU9IkRhdGFTZXRNZXRhRGF0YVR5cGUiIEJhc2VUeXBlPSJ0bnM6 RGF0YVR5cGVTY2hlbWFIZWFkZXIiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZk5hbWVzcGFj ZXMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOYW1lc3Bh Y2VzIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgTGVuZ3RoRmllbGQ9Ik5vT2ZOYW1lc3BhY2VzIiAv Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlN0cnVjdHVyZURhdGFUeXBlcyIgVHlwZU5hbWU9 Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlN0cnVjdHVyZURhdGFUeXBlcyIg VHlwZU5hbWU9InRuczpTdHJ1Y3R1cmVEZXNjcmlwdGlvbiIgTGVuZ3RoRmllbGQ9Ik5vT2ZTdHJ1 Y3R1cmVEYXRhVHlwZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mRW51bURhdGFUeXBl cyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkVudW1EYXRh VHlwZXMiIFR5cGVOYW1lPSJ0bnM6RW51bURlc2NyaXB0aW9uIiBMZW5ndGhGaWVsZD0iTm9PZkVu dW1EYXRhVHlwZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mU2ltcGxlRGF0YVR5cGVz IiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2ltcGxlRGF0 YVR5cGVzIiBUeXBlTmFtZT0idG5zOlNpbXBsZVR5cGVEZXNjcmlwdGlvbiIgTGVuZ3RoRmllbGQ9 Ik5vT2ZTaW1wbGVEYXRhVHlwZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOYW1lIiBUeXBl TmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRlc2NyaXB0aW9uIiBU eXBlTmFtZT0idWE6TG9jYWxpemVkVGV4dCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZG aWVsZHMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJGaWVs ZHMiIFR5cGVOYW1lPSJ0bnM6RmllbGRNZXRhRGF0YSIgTGVuZ3RoRmllbGQ9Ik5vT2ZGaWVsZHMi IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEYXRhU2V0Q2xhc3NJZCIgVHlwZU5hbWU9Im9wYzpH dWlkIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQ29uZmlndXJhdGlvblZlcnNpb24iIFR5cGVO YW1lPSJ0bnM6Q29uZmlndXJhdGlvblZlcnNpb25EYXRhVHlwZSIgLz4NCiAgPC9vcGM6U3RydWN0 dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJGaWVsZE1ldGFEYXRhIiBC YXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5hbWUi IFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGVzY3JpcHRp b24iIFR5cGVOYW1lPSJ1YTpMb2NhbGl6ZWRUZXh0IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i RmllbGRGbGFncyIgVHlwZU5hbWU9InRuczpEYXRhU2V0RmllbGRGbGFncyIgLz4NCiAgICA8b3Bj OkZpZWxkIE5hbWU9IkJ1aWx0SW5UeXBlIiBUeXBlTmFtZT0ib3BjOkJ5dGUiIC8+DQogICAgPG9w YzpGaWVsZCBOYW1lPSJEYXRhVHlwZSIgVHlwZU5hbWU9InVhOk5vZGVJZCIgLz4NCiAgICA8b3Bj OkZpZWxkIE5hbWU9IlZhbHVlUmFuayIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3Bj OkZpZWxkIE5hbWU9Ik5vT2ZBcnJheURpbWVuc2lvbnMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+ DQogICAgPG9wYzpGaWVsZCBOYW1lPSJBcnJheURpbWVuc2lvbnMiIFR5cGVOYW1lPSJvcGM6VUlu dDMyIiBMZW5ndGhGaWVsZD0iTm9PZkFycmF5RGltZW5zaW9ucyIgLz4NCiAgICA8b3BjOkZpZWxk IE5hbWU9Ik1heFN0cmluZ0xlbmd0aCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9w YzpGaWVsZCBOYW1lPSJEYXRhU2V0RmllbGRJZCIgVHlwZU5hbWU9Im9wYzpHdWlkIiAvPg0KICAg IDxvcGM6RmllbGQgTmFtZT0iTm9PZlByb3BlcnRpZXMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+ DQogICAgPG9wYzpGaWVsZCBOYW1lPSJQcm9wZXJ0aWVzIiBUeXBlTmFtZT0idG5zOktleVZhbHVl UGFpciIgTGVuZ3RoRmllbGQ9Ik5vT2ZQcm9wZXJ0aWVzIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVk VHlwZT4NCg0KICA8b3BjOkVudW1lcmF0ZWRUeXBlIE5hbWU9IkRhdGFTZXRGaWVsZEZsYWdzIiBM ZW5ndGhJbkJpdHM9IjE2IiBJc09wdGlvblNldD0idHJ1ZSI+DQogICAgPG9wYzpFbnVtZXJhdGVk VmFsdWUgTmFtZT0iTm9uZSIgVmFsdWU9IjAiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUg TmFtZT0iUHJvbW90ZWRGaWVsZCIgVmFsdWU9IjEiIC8+DQogIDwvb3BjOkVudW1lcmF0ZWRUeXBl Pg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iQ29uZmlndXJhdGlvblZlcnNpb25EYXRh VHlwZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1l PSJNYWpvclZlcnNpb24iIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQg TmFtZT0iTWlub3JWZXJzaW9uIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgPC9vcGM6U3Ry dWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJQdWJsaXNoZWREYXRh U2V0RGF0YVR5cGUiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6Rmll bGQgTmFtZT0iTmFtZSIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogICAgPG9wYzpGaWVsZCBO YW1lPSJOb09mRGF0YVNldEZvbGRlciIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3Bj OkZpZWxkIE5hbWU9IkRhdGFTZXRGb2xkZXIiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiBMZW5ndGhG aWVsZD0iTm9PZkRhdGFTZXRGb2xkZXIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEYXRhU2V0 TWV0YURhdGEiIFR5cGVOYW1lPSJ0bnM6RGF0YVNldE1ldGFEYXRhVHlwZSIgLz4NCiAgICA8b3Bj OkZpZWxkIE5hbWU9Ik5vT2ZFeHRlbnNpb25GaWVsZHMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+ DQogICAgPG9wYzpGaWVsZCBOYW1lPSJFeHRlbnNpb25GaWVsZHMiIFR5cGVOYW1lPSJ0bnM6S2V5 VmFsdWVQYWlyIiBMZW5ndGhGaWVsZD0iTm9PZkV4dGVuc2lvbkZpZWxkcyIgLz4NCiAgICA8b3Bj OkZpZWxkIE5hbWU9IkRhdGFTZXRTb3VyY2UiIFR5cGVOYW1lPSJ0bnM6UHVibGlzaGVkRGF0YVNl dFNvdXJjZURhdGFUeXBlIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0 cnVjdHVyZWRUeXBlIE5hbWU9IlB1Ymxpc2hlZERhdGFTZXRTb3VyY2VEYXRhVHlwZSIgQmFzZVR5 cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxv cGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iUHVibGlzaGVkVmFyaWFibGVEYXRhVHlwZSIgQmFzZVR5 cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJQdWJsaXNoZWRW YXJpYWJsZSIgVHlwZU5hbWU9InVhOk5vZGVJZCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkF0 dHJpYnV0ZUlkIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 IlNhbXBsaW5nSW50ZXJ2YWxIaW50IiBUeXBlTmFtZT0ib3BjOkRvdWJsZSIgLz4NCiAgICA8b3Bj OkZpZWxkIE5hbWU9IkRlYWRiYW5kVHlwZSIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAg PG9wYzpGaWVsZCBOYW1lPSJEZWFkYmFuZFZhbHVlIiBUeXBlTmFtZT0ib3BjOkRvdWJsZSIgLz4N CiAgICA8b3BjOkZpZWxkIE5hbWU9IkluZGV4UmFuZ2UiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAv Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU3Vic3RpdHV0ZVZhbHVlIiBUeXBlTmFtZT0idWE6VmFy aWFudCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZNZXRhRGF0YVByb3BlcnRpZXMiIFR5 cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJNZXRhRGF0YVByb3Bl cnRpZXMiIFR5cGVOYW1lPSJ1YTpRdWFsaWZpZWROYW1lIiBMZW5ndGhGaWVsZD0iTm9PZk1ldGFE YXRhUHJvcGVydGllcyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1 Y3R1cmVkVHlwZSBOYW1lPSJQdWJsaXNoZWREYXRhSXRlbXNEYXRhVHlwZSIgQmFzZVR5cGU9InRu czpQdWJsaXNoZWREYXRhU2V0U291cmNlRGF0YVR5cGUiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i Tm9PZlB1Ymxpc2hlZERhdGEiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVs ZCBOYW1lPSJQdWJsaXNoZWREYXRhIiBUeXBlTmFtZT0idG5zOlB1Ymxpc2hlZFZhcmlhYmxlRGF0 YVR5cGUiIExlbmd0aEZpZWxkPSJOb09mUHVibGlzaGVkRGF0YSIgLz4NCiAgPC9vcGM6U3RydWN0 dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJQdWJsaXNoZWRFdmVudHNE YXRhVHlwZSIgQmFzZVR5cGU9InRuczpQdWJsaXNoZWREYXRhU2V0U291cmNlRGF0YVR5cGUiPg0K ICAgIDxvcGM6RmllbGQgTmFtZT0iRXZlbnROb3RpZmllciIgVHlwZU5hbWU9InVhOk5vZGVJZCIg Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZTZWxlY3RlZEZpZWxkcyIgVHlwZU5hbWU9Im9w YzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNlbGVjdGVkRmllbGRzIiBUeXBlTmFt ZT0idG5zOlNpbXBsZUF0dHJpYnV0ZU9wZXJhbmQiIExlbmd0aEZpZWxkPSJOb09mU2VsZWN0ZWRG aWVsZHMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJGaWx0ZXIiIFR5cGVOYW1lPSJ0bnM6Q29u dGVudEZpbHRlciIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpFbnVtZXJh dGVkVHlwZSBOYW1lPSJEYXRhU2V0RmllbGRDb250ZW50TWFzayIgTGVuZ3RoSW5CaXRzPSIzMiIg SXNPcHRpb25TZXQ9InRydWUiPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9Ik5vbmUi IFZhbHVlPSIwIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlN0YXR1c0NvZGUi IFZhbHVlPSIxIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlNvdXJjZVRpbWVz dGFtcCIgVmFsdWU9IjIiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iU2VydmVy VGltZXN0YW1wIiBWYWx1ZT0iNCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJT b3VyY2VQaWNvU2Vjb25kcyIgVmFsdWU9IjgiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUg TmFtZT0iU2VydmVyUGljb1NlY29uZHMiIFZhbHVlPSIxNiIgLz4NCiAgICA8b3BjOkVudW1lcmF0 ZWRWYWx1ZSBOYW1lPSJSYXdEYXRhIiBWYWx1ZT0iMzIiIC8+DQogIDwvb3BjOkVudW1lcmF0ZWRU eXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iRGF0YVNldFdyaXRlckRhdGFUeXBl IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5h bWUiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRW5hYmxl ZCIgVHlwZU5hbWU9Im9wYzpCb29sZWFuIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGF0YVNl dFdyaXRlcklkIiBUeXBlTmFtZT0ib3BjOlVJbnQxNiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 IkRhdGFTZXRGaWVsZENvbnRlbnRNYXNrIiBUeXBlTmFtZT0idG5zOkRhdGFTZXRGaWVsZENvbnRl bnRNYXNrIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iS2V5RnJhbWVDb3VudCIgVHlwZU5hbWU9 Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEYXRhU2V0TmFtZSIgVHlwZU5h bWU9Im9wYzpTdHJpbmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mRGF0YVNldFdyaXRl clByb3BlcnRpZXMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1l PSJEYXRhU2V0V3JpdGVyUHJvcGVydGllcyIgVHlwZU5hbWU9InRuczpLZXlWYWx1ZVBhaXIiIExl bmd0aEZpZWxkPSJOb09mRGF0YVNldFdyaXRlclByb3BlcnRpZXMiIC8+DQogICAgPG9wYzpGaWVs ZCBOYW1lPSJUcmFuc3BvcnRTZXR0aW5ncyIgVHlwZU5hbWU9InRuczpEYXRhU2V0V3JpdGVyVHJh bnNwb3J0RGF0YVR5cGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJNZXNzYWdlU2V0dGluZ3Mi IFR5cGVOYW1lPSJ0bnM6RGF0YVNldFdyaXRlck1lc3NhZ2VEYXRhVHlwZSIgLz4NCiAgPC9vcGM6 U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJEYXRhU2V0V3Jp dGVyVHJhbnNwb3J0RGF0YVR5cGUiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICA8 L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkRhdGFT ZXRXcml0ZXJNZXNzYWdlRGF0YVR5cGUiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0K ICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlB1 YlN1Ykdyb3VwRGF0YVR5cGUiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxv cGM6RmllbGQgTmFtZT0iTmFtZSIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogICAgPG9wYzpG aWVsZCBOYW1lPSJFbmFibGVkIiBUeXBlTmFtZT0ib3BjOkJvb2xlYW4iIC8+DQogICAgPG9wYzpG aWVsZCBOYW1lPSJTZWN1cml0eU1vZGUiIFR5cGVOYW1lPSJ0bnM6TWVzc2FnZVNlY3VyaXR5TW9k ZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNlY3VyaXR5R3JvdXBJZCIgVHlwZU5hbWU9Im9w YzpTdHJpbmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mU2VjdXJpdHlLZXlTZXJ2aWNl cyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNlY3VyaXR5 S2V5U2VydmljZXMiIFR5cGVOYW1lPSJ0bnM6RW5kcG9pbnREZXNjcmlwdGlvbiIgTGVuZ3RoRmll bGQ9Ik5vT2ZTZWN1cml0eUtleVNlcnZpY2VzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTWF4 TmV0d29ya01lc3NhZ2VTaXplIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZp ZWxkIE5hbWU9Ik5vT2ZHcm91cFByb3BlcnRpZXMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQog ICAgPG9wYzpGaWVsZCBOYW1lPSJHcm91cFByb3BlcnRpZXMiIFR5cGVOYW1lPSJ0bnM6S2V5VmFs dWVQYWlyIiBMZW5ndGhGaWVsZD0iTm9PZkdyb3VwUHJvcGVydGllcyIgLz4NCiAgPC9vcGM6U3Ry dWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJXcml0ZXJHcm91cERh dGFUeXBlIiBCYXNlVHlwZT0idG5zOlB1YlN1Ykdyb3VwRGF0YVR5cGUiPg0KICAgIDxvcGM6Rmll bGQgTmFtZT0iTmFtZSIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIFNvdXJjZVR5cGU9InRuczpQdWJT dWJHcm91cERhdGFUeXBlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRW5hYmxlZCIgVHlwZU5h bWU9Im9wYzpCb29sZWFuIiBTb3VyY2VUeXBlPSJ0bnM6UHViU3ViR3JvdXBEYXRhVHlwZSIgLz4N CiAgICA8b3BjOkZpZWxkIE5hbWU9IlNlY3VyaXR5TW9kZSIgVHlwZU5hbWU9InRuczpNZXNzYWdl U2VjdXJpdHlNb2RlIiBTb3VyY2VUeXBlPSJ0bnM6UHViU3ViR3JvdXBEYXRhVHlwZSIgLz4NCiAg ICA8b3BjOkZpZWxkIE5hbWU9IlNlY3VyaXR5R3JvdXBJZCIgVHlwZU5hbWU9Im9wYzpTdHJpbmci IFNvdXJjZVR5cGU9InRuczpQdWJTdWJHcm91cERhdGFUeXBlIiAvPg0KICAgIDxvcGM6RmllbGQg TmFtZT0iTm9PZlNlY3VyaXR5S2V5U2VydmljZXMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQog ICAgPG9wYzpGaWVsZCBOYW1lPSJTZWN1cml0eUtleVNlcnZpY2VzIiBUeXBlTmFtZT0idG5zOkVu ZHBvaW50RGVzY3JpcHRpb24iIExlbmd0aEZpZWxkPSJOb09mU2VjdXJpdHlLZXlTZXJ2aWNlcyIg Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik1heE5ldHdvcmtNZXNzYWdlU2l6ZSIgVHlwZU5hbWU9 Im9wYzpVSW50MzIiIFNvdXJjZVR5cGU9InRuczpQdWJTdWJHcm91cERhdGFUeXBlIiAvPg0KICAg IDxvcGM6RmllbGQgTmFtZT0iTm9PZkdyb3VwUHJvcGVydGllcyIgVHlwZU5hbWU9Im9wYzpJbnQz MiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ikdyb3VwUHJvcGVydGllcyIgVHlwZU5hbWU9InRu czpLZXlWYWx1ZVBhaXIiIExlbmd0aEZpZWxkPSJOb09mR3JvdXBQcm9wZXJ0aWVzIiAvPg0KICAg IDxvcGM6RmllbGQgTmFtZT0iV3JpdGVyR3JvdXBJZCIgVHlwZU5hbWU9Im9wYzpVSW50MTYiIC8+ DQogICAgPG9wYzpGaWVsZCBOYW1lPSJQdWJsaXNoaW5nSW50ZXJ2YWwiIFR5cGVOYW1lPSJvcGM6 RG91YmxlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iS2VlcEFsaXZlVGltZSIgVHlwZU5hbWU9 Im9wYzpEb3VibGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJQcmlvcml0eSIgVHlwZU5hbWU9 Im9wYzpCeXRlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkxvY2FsZUlkcyIgVHlwZU5h bWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkxvY2FsZUlkcyIgVHlwZU5h bWU9Im9wYzpTdHJpbmciIExlbmd0aEZpZWxkPSJOb09mTG9jYWxlSWRzIiAvPg0KICAgIDxvcGM6 RmllbGQgTmFtZT0iSGVhZGVyTGF5b3V0VXJpIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAg ICA8b3BjOkZpZWxkIE5hbWU9IlRyYW5zcG9ydFNldHRpbmdzIiBUeXBlTmFtZT0idG5zOldyaXRl ckdyb3VwVHJhbnNwb3J0RGF0YVR5cGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJNZXNzYWdl U2V0dGluZ3MiIFR5cGVOYW1lPSJ0bnM6V3JpdGVyR3JvdXBNZXNzYWdlRGF0YVR5cGUiIC8+DQog ICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mRGF0YVNldFdyaXRlcnMiIFR5cGVOYW1lPSJvcGM6SW50 MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEYXRhU2V0V3JpdGVycyIgVHlwZU5hbWU9InRu czpEYXRhU2V0V3JpdGVyRGF0YVR5cGUiIExlbmd0aEZpZWxkPSJOb09mRGF0YVNldFdyaXRlcnMi IC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFt ZT0iV3JpdGVyR3JvdXBUcmFuc3BvcnREYXRhVHlwZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9i amVjdCI+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUg TmFtZT0iV3JpdGVyR3JvdXBNZXNzYWdlRGF0YVR5cGUiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25P YmplY3QiPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBl IE5hbWU9IlB1YlN1YkNvbm5lY3Rpb25EYXRhVHlwZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9i amVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOYW1lIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIg Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkVuYWJsZWQiIFR5cGVOYW1lPSJvcGM6Qm9vbGVhbiIg Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlB1Ymxpc2hlcklkIiBUeXBlTmFtZT0idWE6VmFyaWFu dCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlRyYW5zcG9ydFByb2ZpbGVVcmkiIFR5cGVOYW1l PSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQWRkcmVzcyIgVHlwZU5hbWU9 InRuczpOZXR3b3JrQWRkcmVzc0RhdGFUeXBlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9P ZkNvbm5lY3Rpb25Qcm9wZXJ0aWVzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6 RmllbGQgTmFtZT0iQ29ubmVjdGlvblByb3BlcnRpZXMiIFR5cGVOYW1lPSJ0bnM6S2V5VmFsdWVQ YWlyIiBMZW5ndGhGaWVsZD0iTm9PZkNvbm5lY3Rpb25Qcm9wZXJ0aWVzIiAvPg0KICAgIDxvcGM6 RmllbGQgTmFtZT0iVHJhbnNwb3J0U2V0dGluZ3MiIFR5cGVOYW1lPSJ0bnM6Q29ubmVjdGlvblRy YW5zcG9ydERhdGFUeXBlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZldyaXRlckdyb3Vw cyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IldyaXRlckdy b3VwcyIgVHlwZU5hbWU9InRuczpXcml0ZXJHcm91cERhdGFUeXBlIiBMZW5ndGhGaWVsZD0iTm9P ZldyaXRlckdyb3VwcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZSZWFkZXJHcm91cHMi IFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZWFkZXJHcm91 cHMiIFR5cGVOYW1lPSJ0bnM6UmVhZGVyR3JvdXBEYXRhVHlwZSIgTGVuZ3RoRmllbGQ9Ik5vT2ZS ZWFkZXJHcm91cHMiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0 dXJlZFR5cGUgTmFtZT0iQ29ubmVjdGlvblRyYW5zcG9ydERhdGFUeXBlIiBCYXNlVHlwZT0idWE6 RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1 Y3R1cmVkVHlwZSBOYW1lPSJOZXR3b3JrQWRkcmVzc0RhdGFUeXBlIiBCYXNlVHlwZT0idWE6RXh0 ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5ldHdvcmtJbnRlcmZhY2UiIFR5 cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3Bj OlN0cnVjdHVyZWRUeXBlIE5hbWU9Ik5ldHdvcmtBZGRyZXNzVXJsRGF0YVR5cGUiIEJhc2VUeXBl PSJ0bnM6TmV0d29ya0FkZHJlc3NEYXRhVHlwZSI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOZXR3 b3JrSW50ZXJmYWNlIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgU291cmNlVHlwZT0idG5zOk5ldHdv cmtBZGRyZXNzRGF0YVR5cGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJVcmwiIFR5cGVOYW1l PSJvcGM6U3RyaW5nIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVj dHVyZWRUeXBlIE5hbWU9IlJlYWRlckdyb3VwRGF0YVR5cGUiIEJhc2VUeXBlPSJ0bnM6UHViU3Vi R3JvdXBEYXRhVHlwZSI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOYW1lIiBUeXBlTmFtZT0ib3Bj OlN0cmluZyIgU291cmNlVHlwZT0idG5zOlB1YlN1Ykdyb3VwRGF0YVR5cGUiIC8+DQogICAgPG9w YzpGaWVsZCBOYW1lPSJFbmFibGVkIiBUeXBlTmFtZT0ib3BjOkJvb2xlYW4iIFNvdXJjZVR5cGU9 InRuczpQdWJTdWJHcm91cERhdGFUeXBlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2VjdXJp dHlNb2RlIiBUeXBlTmFtZT0idG5zOk1lc3NhZ2VTZWN1cml0eU1vZGUiIFNvdXJjZVR5cGU9InRu czpQdWJTdWJHcm91cERhdGFUeXBlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2VjdXJpdHlH cm91cElkIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgU291cmNlVHlwZT0idG5zOlB1YlN1Ykdyb3Vw RGF0YVR5cGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mU2VjdXJpdHlLZXlTZXJ2aWNl cyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNlY3VyaXR5 S2V5U2VydmljZXMiIFR5cGVOYW1lPSJ0bnM6RW5kcG9pbnREZXNjcmlwdGlvbiIgTGVuZ3RoRmll bGQ9Ik5vT2ZTZWN1cml0eUtleVNlcnZpY2VzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTWF4 TmV0d29ya01lc3NhZ2VTaXplIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgU291cmNlVHlwZT0idG5z OlB1YlN1Ykdyb3VwRGF0YVR5cGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mR3JvdXBQ cm9wZXJ0aWVzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i R3JvdXBQcm9wZXJ0aWVzIiBUeXBlTmFtZT0idG5zOktleVZhbHVlUGFpciIgTGVuZ3RoRmllbGQ9 Ik5vT2ZHcm91cFByb3BlcnRpZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJUcmFuc3BvcnRT ZXR0aW5ncyIgVHlwZU5hbWU9InRuczpSZWFkZXJHcm91cFRyYW5zcG9ydERhdGFUeXBlIiAvPg0K ICAgIDxvcGM6RmllbGQgTmFtZT0iTWVzc2FnZVNldHRpbmdzIiBUeXBlTmFtZT0idG5zOlJlYWRl ckdyb3VwTWVzc2FnZURhdGFUeXBlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkRhdGFT ZXRSZWFkZXJzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i RGF0YVNldFJlYWRlcnMiIFR5cGVOYW1lPSJ0bnM6RGF0YVNldFJlYWRlckRhdGFUeXBlIiBMZW5n dGhGaWVsZD0iTm9PZkRhdGFTZXRSZWFkZXJzIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4N Cg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlJlYWRlckdyb3VwVHJhbnNwb3J0RGF0YVR5 cGUiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlw ZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlJlYWRlckdyb3VwTWVzc2FnZURhdGFU eXBlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgPC9vcGM6U3RydWN0dXJlZFR5 cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJEYXRhU2V0UmVhZGVyRGF0YVR5cGUi IEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTmFt ZSIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJFbmFibGVk IiBUeXBlTmFtZT0ib3BjOkJvb2xlYW4iIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJQdWJsaXNo ZXJJZCIgVHlwZU5hbWU9InVhOlZhcmlhbnQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJXcml0 ZXJHcm91cElkIiBUeXBlTmFtZT0ib3BjOlVJbnQxNiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 IkRhdGFTZXRXcml0ZXJJZCIgVHlwZU5hbWU9Im9wYzpVSW50MTYiIC8+DQogICAgPG9wYzpGaWVs ZCBOYW1lPSJEYXRhU2V0TWV0YURhdGEiIFR5cGVOYW1lPSJ0bnM6RGF0YVNldE1ldGFEYXRhVHlw ZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRhdGFTZXRGaWVsZENvbnRlbnRNYXNrIiBUeXBl TmFtZT0idG5zOkRhdGFTZXRGaWVsZENvbnRlbnRNYXNrIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt ZT0iTWVzc2FnZVJlY2VpdmVUaW1lb3V0IiBUeXBlTmFtZT0ib3BjOkRvdWJsZSIgLz4NCiAgICA8 b3BjOkZpZWxkIE5hbWU9IktleUZyYW1lQ291bnQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0K ICAgIDxvcGM6RmllbGQgTmFtZT0iSGVhZGVyTGF5b3V0VXJpIiBUeXBlTmFtZT0ib3BjOlN0cmlu ZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNlY3VyaXR5TW9kZSIgVHlwZU5hbWU9InRuczpN ZXNzYWdlU2VjdXJpdHlNb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2VjdXJpdHlHcm91 cElkIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZT ZWN1cml0eUtleVNlcnZpY2VzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6Rmll bGQgTmFtZT0iU2VjdXJpdHlLZXlTZXJ2aWNlcyIgVHlwZU5hbWU9InRuczpFbmRwb2ludERlc2Ny aXB0aW9uIiBMZW5ndGhGaWVsZD0iTm9PZlNlY3VyaXR5S2V5U2VydmljZXMiIC8+DQogICAgPG9w YzpGaWVsZCBOYW1lPSJOb09mRGF0YVNldFJlYWRlclByb3BlcnRpZXMiIFR5cGVOYW1lPSJvcGM6 SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEYXRhU2V0UmVhZGVyUHJvcGVydGllcyIg VHlwZU5hbWU9InRuczpLZXlWYWx1ZVBhaXIiIExlbmd0aEZpZWxkPSJOb09mRGF0YVNldFJlYWRl clByb3BlcnRpZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJUcmFuc3BvcnRTZXR0aW5ncyIg VHlwZU5hbWU9InRuczpEYXRhU2V0UmVhZGVyVHJhbnNwb3J0RGF0YVR5cGUiIC8+DQogICAgPG9w YzpGaWVsZCBOYW1lPSJNZXNzYWdlU2V0dGluZ3MiIFR5cGVOYW1lPSJ0bnM6RGF0YVNldFJlYWRl ck1lc3NhZ2VEYXRhVHlwZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlN1YnNjcmliZWREYXRh U2V0IiBUeXBlTmFtZT0idG5zOlN1YnNjcmliZWREYXRhU2V0RGF0YVR5cGUiIC8+DQogIDwvb3Bj OlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iRGF0YVNldFJl YWRlclRyYW5zcG9ydERhdGFUeXBlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAg PC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJEYXRh U2V0UmVhZGVyTWVzc2FnZURhdGFUeXBlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4N CiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJT dWJzY3JpYmVkRGF0YVNldERhdGFUeXBlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4N CiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJU YXJnZXRWYXJpYWJsZXNEYXRhVHlwZSIgQmFzZVR5cGU9InRuczpTdWJzY3JpYmVkRGF0YVNldERh dGFUeXBlIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZUYXJnZXRWYXJpYWJsZXMiIFR5cGVO YW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJUYXJnZXRWYXJpYWJsZXMi IFR5cGVOYW1lPSJ0bnM6RmllbGRUYXJnZXREYXRhVHlwZSIgTGVuZ3RoRmllbGQ9Ik5vT2ZUYXJn ZXRWYXJpYWJsZXMiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0 dXJlZFR5cGUgTmFtZT0iRmllbGRUYXJnZXREYXRhVHlwZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lv bk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEYXRhU2V0RmllbGRJZCIgVHlwZU5hbWU9 Im9wYzpHdWlkIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVjZWl2ZXJJbmRleFJhbmdlIiBU eXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlRhcmdldE5vZGVJ ZCIgVHlwZU5hbWU9InVhOk5vZGVJZCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkF0dHJpYnV0 ZUlkIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IldyaXRl SW5kZXhSYW5nZSIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1l PSJPdmVycmlkZVZhbHVlSGFuZGxpbmciIFR5cGVOYW1lPSJ0bnM6T3ZlcnJpZGVWYWx1ZUhhbmRs aW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iT3ZlcnJpZGVWYWx1ZSIgVHlwZU5hbWU9InVh OlZhcmlhbnQiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6RW51bWVyYXRl ZFR5cGUgTmFtZT0iT3ZlcnJpZGVWYWx1ZUhhbmRsaW5nIiBMZW5ndGhJbkJpdHM9IjMyIj4NCiAg ICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJEaXNhYmxlZCIgVmFsdWU9IjAiIC8+DQogICAg PG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iTGFzdFVzYWJsZVZhbHVlIiBWYWx1ZT0iMSIgLz4N CiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJPdmVycmlkZVZhbHVlIiBWYWx1ZT0iMiIg Lz4NCiAgPC9vcGM6RW51bWVyYXRlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1l PSJTdWJzY3JpYmVkRGF0YVNldE1pcnJvckRhdGFUeXBlIiBCYXNlVHlwZT0idG5zOlN1YnNjcmli ZWREYXRhU2V0RGF0YVR5cGUiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUGFyZW50Tm9kZU5hbWUi IFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlJvbGVQ ZXJtaXNzaW9ucyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 IlJvbGVQZXJtaXNzaW9ucyIgVHlwZU5hbWU9InRuczpSb2xlUGVybWlzc2lvblR5cGUiIExlbmd0 aEZpZWxkPSJOb09mUm9sZVBlcm1pc3Npb25zIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4N Cg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlB1YlN1YkNvbmZpZ3VyYXRpb25EYXRhVHlw ZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJO b09mUHVibGlzaGVkRGF0YVNldHMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpG aWVsZCBOYW1lPSJQdWJsaXNoZWREYXRhU2V0cyIgVHlwZU5hbWU9InRuczpQdWJsaXNoZWREYXRh U2V0RGF0YVR5cGUiIExlbmd0aEZpZWxkPSJOb09mUHVibGlzaGVkRGF0YVNldHMiIC8+DQogICAg PG9wYzpGaWVsZCBOYW1lPSJOb09mQ29ubmVjdGlvbnMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+ DQogICAgPG9wYzpGaWVsZCBOYW1lPSJDb25uZWN0aW9ucyIgVHlwZU5hbWU9InRuczpQdWJTdWJD b25uZWN0aW9uRGF0YVR5cGUiIExlbmd0aEZpZWxkPSJOb09mQ29ubmVjdGlvbnMiIC8+DQogICAg PG9wYzpGaWVsZCBOYW1lPSJFbmFibGVkIiBUeXBlTmFtZT0ib3BjOkJvb2xlYW4iIC8+DQogIDwv b3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6RW51bWVyYXRlZFR5cGUgTmFtZT0iRGF0YVNl dE9yZGVyaW5nVHlwZSIgTGVuZ3RoSW5CaXRzPSIzMiI+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFs dWUgTmFtZT0iVW5kZWZpbmVkIiBWYWx1ZT0iMCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1 ZSBOYW1lPSJBc2NlbmRpbmdXcml0ZXJJZCIgVmFsdWU9IjEiIC8+DQogICAgPG9wYzpFbnVtZXJh dGVkVmFsdWUgTmFtZT0iQXNjZW5kaW5nV3JpdGVySWRTaW5nbGUiIFZhbHVlPSIyIiAvPg0KICA8 L29wYzpFbnVtZXJhdGVkVHlwZT4NCg0KICA8b3BjOkVudW1lcmF0ZWRUeXBlIE5hbWU9IlVhZHBO ZXR3b3JrTWVzc2FnZUNvbnRlbnRNYXNrIiBMZW5ndGhJbkJpdHM9IjMyIiBJc09wdGlvblNldD0i dHJ1ZSI+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iTm9uZSIgVmFsdWU9IjAiIC8+ DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iUHVibGlzaGVySWQiIFZhbHVlPSIxIiAv Pg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9Ikdyb3VwSGVhZGVyIiBWYWx1ZT0iMiIg Lz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJXcml0ZXJHcm91cElkIiBWYWx1ZT0i NCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJHcm91cFZlcnNpb24iIFZhbHVl PSI4IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9Ik5ldHdvcmtNZXNzYWdlTnVt YmVyIiBWYWx1ZT0iMTYiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iU2VxdWVu Y2VOdW1iZXIiIFZhbHVlPSIzMiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJQ YXlsb2FkSGVhZGVyIiBWYWx1ZT0iNjQiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFt ZT0iVGltZXN0YW1wIiBWYWx1ZT0iMTI4IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5h bWU9IlBpY29TZWNvbmRzIiBWYWx1ZT0iMjU2IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVl IE5hbWU9IkRhdGFTZXRDbGFzc0lkIiBWYWx1ZT0iNTEyIiAvPg0KICAgIDxvcGM6RW51bWVyYXRl ZFZhbHVlIE5hbWU9IlByb21vdGVkRmllbGRzIiBWYWx1ZT0iMTAyNCIgLz4NCiAgPC9vcGM6RW51 bWVyYXRlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJVYWRwV3JpdGVyR3Jv dXBNZXNzYWdlRGF0YVR5cGUiIEJhc2VUeXBlPSJ0bnM6V3JpdGVyR3JvdXBNZXNzYWdlRGF0YVR5 cGUiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iR3JvdXBWZXJzaW9uIiBUeXBlTmFtZT0ib3BjOlVJ bnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRhdGFTZXRPcmRlcmluZyIgVHlwZU5hbWU9 InRuczpEYXRhU2V0T3JkZXJpbmdUeXBlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTmV0d29y a01lc3NhZ2VDb250ZW50TWFzayIgVHlwZU5hbWU9InRuczpVYWRwTmV0d29ya01lc3NhZ2VDb250 ZW50TWFzayIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNhbXBsaW5nT2Zmc2V0IiBUeXBlTmFt ZT0ib3BjOkRvdWJsZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZQdWJsaXNoaW5nT2Zm c2V0IiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUHVibGlz aGluZ09mZnNldCIgVHlwZU5hbWU9Im9wYzpEb3VibGUiIExlbmd0aEZpZWxkPSJOb09mUHVibGlz aGluZ09mZnNldCIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpFbnVtZXJh dGVkVHlwZSBOYW1lPSJVYWRwRGF0YVNldE1lc3NhZ2VDb250ZW50TWFzayIgTGVuZ3RoSW5CaXRz PSIzMiIgSXNPcHRpb25TZXQ9InRydWUiPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9 Ik5vbmUiIFZhbHVlPSIwIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlRpbWVz dGFtcCIgVmFsdWU9IjEiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iUGljb1Nl Y29uZHMiIFZhbHVlPSIyIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlN0YXR1 cyIgVmFsdWU9IjQiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iTWFqb3JWZXJz aW9uIiBWYWx1ZT0iOCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJNaW5vclZl cnNpb24iIFZhbHVlPSIxNiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJTZXF1 ZW5jZU51bWJlciIgVmFsdWU9IjMyIiAvPg0KICA8L29wYzpFbnVtZXJhdGVkVHlwZT4NCg0KICA8 b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlVhZHBEYXRhU2V0V3JpdGVyTWVzc2FnZURhdGFUeXBl IiBCYXNlVHlwZT0idG5zOkRhdGFTZXRXcml0ZXJNZXNzYWdlRGF0YVR5cGUiPg0KICAgIDxvcGM6 RmllbGQgTmFtZT0iRGF0YVNldE1lc3NhZ2VDb250ZW50TWFzayIgVHlwZU5hbWU9InRuczpVYWRw RGF0YVNldE1lc3NhZ2VDb250ZW50TWFzayIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkNvbmZp Z3VyZWRTaXplIiBUeXBlTmFtZT0ib3BjOlVJbnQxNiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 Ik5ldHdvcmtNZXNzYWdlTnVtYmVyIiBUeXBlTmFtZT0ib3BjOlVJbnQxNiIgLz4NCiAgICA8b3Bj OkZpZWxkIE5hbWU9IkRhdGFTZXRPZmZzZXQiIFR5cGVOYW1lPSJvcGM6VUludDE2IiAvPg0KICA8 L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlVhZHBE YXRhU2V0UmVhZGVyTWVzc2FnZURhdGFUeXBlIiBCYXNlVHlwZT0idG5zOkRhdGFTZXRSZWFkZXJN ZXNzYWdlRGF0YVR5cGUiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iR3JvdXBWZXJzaW9uIiBUeXBl TmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5ldHdvcmtNZXNzYWdl TnVtYmVyIiBUeXBlTmFtZT0ib3BjOlVJbnQxNiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRh dGFTZXRPZmZzZXQiIFR5cGVOYW1lPSJvcGM6VUludDE2IiAvPg0KICAgIDxvcGM6RmllbGQgTmFt ZT0iRGF0YVNldENsYXNzSWQiIFR5cGVOYW1lPSJvcGM6R3VpZCIgLz4NCiAgICA8b3BjOkZpZWxk IE5hbWU9Ik5ldHdvcmtNZXNzYWdlQ29udGVudE1hc2siIFR5cGVOYW1lPSJ0bnM6VWFkcE5ldHdv cmtNZXNzYWdlQ29udGVudE1hc2siIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEYXRhU2V0TWVz c2FnZUNvbnRlbnRNYXNrIiBUeXBlTmFtZT0idG5zOlVhZHBEYXRhU2V0TWVzc2FnZUNvbnRlbnRN YXNrIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUHVibGlzaGluZ0ludGVydmFsIiBUeXBlTmFt ZT0ib3BjOkRvdWJsZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlY2VpdmVPZmZzZXQiIFR5 cGVOYW1lPSJvcGM6RG91YmxlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUHJvY2Vzc2luZ09m ZnNldCIgVHlwZU5hbWU9Im9wYzpEb3VibGUiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0K DQogIDxvcGM6RW51bWVyYXRlZFR5cGUgTmFtZT0iSnNvbk5ldHdvcmtNZXNzYWdlQ29udGVudE1h c2siIExlbmd0aEluQml0cz0iMzIiIElzT3B0aW9uU2V0PSJ0cnVlIj4NCiAgICA8b3BjOkVudW1l cmF0ZWRWYWx1ZSBOYW1lPSJOb25lIiBWYWx1ZT0iMCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRW YWx1ZSBOYW1lPSJOZXR3b3JrTWVzc2FnZUhlYWRlciIgVmFsdWU9IjEiIC8+DQogICAgPG9wYzpF bnVtZXJhdGVkVmFsdWUgTmFtZT0iRGF0YVNldE1lc3NhZ2VIZWFkZXIiIFZhbHVlPSIyIiAvPg0K ICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlNpbmdsZURhdGFTZXRNZXNzYWdlIiBWYWx1 ZT0iNCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJQdWJsaXNoZXJJZCIgVmFs dWU9IjgiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iRGF0YVNldENsYXNzSWQi IFZhbHVlPSIxNiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJSZXBseVRvIiBW YWx1ZT0iMzIiIC8+DQogIDwvb3BjOkVudW1lcmF0ZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJl ZFR5cGUgTmFtZT0iSnNvbldyaXRlckdyb3VwTWVzc2FnZURhdGFUeXBlIiBCYXNlVHlwZT0idG5z OldyaXRlckdyb3VwTWVzc2FnZURhdGFUeXBlIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5ldHdv cmtNZXNzYWdlQ29udGVudE1hc2siIFR5cGVOYW1lPSJ0bnM6SnNvbk5ldHdvcmtNZXNzYWdlQ29u dGVudE1hc2siIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6RW51bWVyYXRl ZFR5cGUgTmFtZT0iSnNvbkRhdGFTZXRNZXNzYWdlQ29udGVudE1hc2siIExlbmd0aEluQml0cz0i MzIiIElzT3B0aW9uU2V0PSJ0cnVlIj4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJO b25lIiBWYWx1ZT0iMCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJEYXRhU2V0 V3JpdGVySWQiIFZhbHVlPSIxIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9Ik1l dGFEYXRhVmVyc2lvbiIgVmFsdWU9IjIiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFt ZT0iU2VxdWVuY2VOdW1iZXIiIFZhbHVlPSI0IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVl IE5hbWU9IlRpbWVzdGFtcCIgVmFsdWU9IjgiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUg TmFtZT0iU3RhdHVzIiBWYWx1ZT0iMTYiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFt ZT0iTWVzc2FnZVR5cGUiIFZhbHVlPSIzMiIgLz4NCiAgPC9vcGM6RW51bWVyYXRlZFR5cGU+DQoN CiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJKc29uRGF0YVNldFdyaXRlck1lc3NhZ2VEYXRh VHlwZSIgQmFzZVR5cGU9InRuczpEYXRhU2V0V3JpdGVyTWVzc2FnZURhdGFUeXBlIj4NCiAgICA8 b3BjOkZpZWxkIE5hbWU9IkRhdGFTZXRNZXNzYWdlQ29udGVudE1hc2siIFR5cGVOYW1lPSJ0bnM6 SnNvbkRhdGFTZXRNZXNzYWdlQ29udGVudE1hc2siIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBl Pg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iSnNvbkRhdGFTZXRSZWFkZXJNZXNzYWdl RGF0YVR5cGUiIEJhc2VUeXBlPSJ0bnM6RGF0YVNldFJlYWRlck1lc3NhZ2VEYXRhVHlwZSI+DQog ICAgPG9wYzpGaWVsZCBOYW1lPSJOZXR3b3JrTWVzc2FnZUNvbnRlbnRNYXNrIiBUeXBlTmFtZT0i dG5zOkpzb25OZXR3b3JrTWVzc2FnZUNvbnRlbnRNYXNrIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt ZT0iRGF0YVNldE1lc3NhZ2VDb250ZW50TWFzayIgVHlwZU5hbWU9InRuczpKc29uRGF0YVNldE1l c3NhZ2VDb250ZW50TWFzayIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpT dHJ1Y3R1cmVkVHlwZSBOYW1lPSJEYXRhZ3JhbUNvbm5lY3Rpb25UcmFuc3BvcnREYXRhVHlwZSIg QmFzZVR5cGU9InRuczpDb25uZWN0aW9uVHJhbnNwb3J0RGF0YVR5cGUiPg0KICAgIDxvcGM6Rmll bGQgTmFtZT0iRGlzY292ZXJ5QWRkcmVzcyIgVHlwZU5hbWU9InVhOkV4dGVuc2lvbk9iamVjdCIg Lz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1l PSJEYXRhZ3JhbVdyaXRlckdyb3VwVHJhbnNwb3J0RGF0YVR5cGUiIEJhc2VUeXBlPSJ0bnM6V3Jp dGVyR3JvdXBUcmFuc3BvcnREYXRhVHlwZSI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJNZXNzYWdl UmVwZWF0Q291bnQiIFR5cGVOYW1lPSJvcGM6Qnl0ZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 Ik1lc3NhZ2VSZXBlYXREZWxheSIgVHlwZU5hbWU9Im9wYzpEb3VibGUiIC8+DQogIDwvb3BjOlN0 cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iQnJva2VyQ29ubmVj dGlvblRyYW5zcG9ydERhdGFUeXBlIiBCYXNlVHlwZT0idG5zOkNvbm5lY3Rpb25UcmFuc3BvcnRE YXRhVHlwZSI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXNvdXJjZVVyaSIgVHlwZU5hbWU9Im9w YzpTdHJpbmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJBdXRoZW50aWNhdGlvblByb2ZpbGVV cmkiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0K ICA8b3BjOkVudW1lcmF0ZWRUeXBlIE5hbWU9IkJyb2tlclRyYW5zcG9ydFF1YWxpdHlPZlNlcnZp Y2UiIExlbmd0aEluQml0cz0iMzIiPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9Ik5v dFNwZWNpZmllZCIgVmFsdWU9IjAiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0i QmVzdEVmZm9ydCIgVmFsdWU9IjEiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0i QXRMZWFzdE9uY2UiIFZhbHVlPSIyIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9 IkF0TW9zdE9uY2UiIFZhbHVlPSIzIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9 IkV4YWN0bHlPbmNlIiBWYWx1ZT0iNCIgLz4NCiAgPC9vcGM6RW51bWVyYXRlZFR5cGU+DQoNCiAg PG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJCcm9rZXJXcml0ZXJHcm91cFRyYW5zcG9ydERhdGFU eXBlIiBCYXNlVHlwZT0idG5zOldyaXRlckdyb3VwVHJhbnNwb3J0RGF0YVR5cGUiPg0KICAgIDxv cGM6RmllbGQgTmFtZT0iUXVldWVOYW1lIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8 b3BjOkZpZWxkIE5hbWU9IlJlc291cmNlVXJpIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAg ICA8b3BjOkZpZWxkIE5hbWU9IkF1dGhlbnRpY2F0aW9uUHJvZmlsZVVyaSIgVHlwZU5hbWU9Im9w YzpTdHJpbmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXF1ZXN0ZWREZWxpdmVyeUd1YXJh bnRlZSIgVHlwZU5hbWU9InRuczpCcm9rZXJUcmFuc3BvcnRRdWFsaXR5T2ZTZXJ2aWNlIiAvPg0K ICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkJy b2tlckRhdGFTZXRXcml0ZXJUcmFuc3BvcnREYXRhVHlwZSIgQmFzZVR5cGU9InRuczpEYXRhU2V0 V3JpdGVyVHJhbnNwb3J0RGF0YVR5cGUiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUXVldWVOYW1l IiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlc291cmNl VXJpIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkF1dGhl bnRpY2F0aW9uUHJvZmlsZVVyaSIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogICAgPG9wYzpG aWVsZCBOYW1lPSJSZXF1ZXN0ZWREZWxpdmVyeUd1YXJhbnRlZSIgVHlwZU5hbWU9InRuczpCcm9r ZXJUcmFuc3BvcnRRdWFsaXR5T2ZTZXJ2aWNlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTWV0 YURhdGFRdWV1ZU5hbWUiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQg TmFtZT0iTWV0YURhdGFVcGRhdGVUaW1lIiBUeXBlTmFtZT0ib3BjOkRvdWJsZSIgLz4NCiAgPC9v cGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJCcm9rZXJE YXRhU2V0UmVhZGVyVHJhbnNwb3J0RGF0YVR5cGUiIEJhc2VUeXBlPSJ0bnM6RGF0YVNldFJlYWRl clRyYW5zcG9ydERhdGFUeXBlIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlF1ZXVlTmFtZSIgVHlw ZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXNvdXJjZVVyaSIg VHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJBdXRoZW50aWNh dGlvblByb2ZpbGVVcmkiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQg TmFtZT0iUmVxdWVzdGVkRGVsaXZlcnlHdWFyYW50ZWUiIFR5cGVOYW1lPSJ0bnM6QnJva2VyVHJh bnNwb3J0UXVhbGl0eU9mU2VydmljZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik1ldGFEYXRh UXVldWVOYW1lIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5 cGU+DQoNCiAgPG9wYzpFbnVtZXJhdGVkVHlwZSBOYW1lPSJEaWFnbm9zdGljc0xldmVsIiBMZW5n dGhJbkJpdHM9IjMyIj4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJCYXNpYyIgVmFs dWU9IjAiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iQWR2YW5jZWQiIFZhbHVl PSIxIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkluZm8iIFZhbHVlPSIyIiAv Pg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkxvZyIgVmFsdWU9IjMiIC8+DQogICAg PG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iRGVidWciIFZhbHVlPSI0IiAvPg0KICA8L29wYzpF bnVtZXJhdGVkVHlwZT4NCg0KICA8b3BjOkVudW1lcmF0ZWRUeXBlIE5hbWU9IlB1YlN1YkRpYWdu b3N0aWNzQ291bnRlckNsYXNzaWZpY2F0aW9uIiBMZW5ndGhJbkJpdHM9IjMyIj4NCiAgICA8b3Bj OkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJJbmZvcm1hdGlvbiIgVmFsdWU9IjAiIC8+DQogICAgPG9w YzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iRXJyb3IiIFZhbHVlPSIxIiAvPg0KICA8L29wYzpFbnVt ZXJhdGVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkFsaWFzTmFtZURhdGFU eXBlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 IkFsaWFzTmFtZSIgVHlwZU5hbWU9InVhOlF1YWxpZmllZE5hbWUiIC8+DQogICAgPG9wYzpGaWVs ZCBOYW1lPSJOb09mUmVmZXJlbmNlZE5vZGVzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAg IDxvcGM6RmllbGQgTmFtZT0iUmVmZXJlbmNlZE5vZGVzIiBUeXBlTmFtZT0idWE6RXhwYW5kZWRO b2RlSWQiIExlbmd0aEZpZWxkPSJOb09mUmVmZXJlbmNlZE5vZGVzIiAvPg0KICA8L29wYzpTdHJ1 Y3R1cmVkVHlwZT4NCg0KICA8b3BjOkVudW1lcmF0ZWRUeXBlIE5hbWU9IkR1cGxleCIgTGVuZ3Ro SW5CaXRzPSIzMiI+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iRnVsbCIgVmFsdWU9 IjAiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iSGFsZiIgVmFsdWU9IjEiIC8+ DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iVW5rbm93biIgVmFsdWU9IjIiIC8+DQog IDwvb3BjOkVudW1lcmF0ZWRUeXBlPg0KDQogIDxvcGM6RW51bWVyYXRlZFR5cGUgTmFtZT0iSW50 ZXJmYWNlQWRtaW5TdGF0dXMiIExlbmd0aEluQml0cz0iMzIiPg0KICAgIDxvcGM6RW51bWVyYXRl ZFZhbHVlIE5hbWU9IlVwIiBWYWx1ZT0iMCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBO YW1lPSJEb3duIiBWYWx1ZT0iMSIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJU ZXN0aW5nIiBWYWx1ZT0iMiIgLz4NCiAgPC9vcGM6RW51bWVyYXRlZFR5cGU+DQoNCiAgPG9wYzpF bnVtZXJhdGVkVHlwZSBOYW1lPSJJbnRlcmZhY2VPcGVyU3RhdHVzIiBMZW5ndGhJbkJpdHM9IjMy Ij4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJVcCIgVmFsdWU9IjAiIC8+DQogICAg PG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iRG93biIgVmFsdWU9IjEiIC8+DQogICAgPG9wYzpF bnVtZXJhdGVkVmFsdWUgTmFtZT0iVGVzdGluZyIgVmFsdWU9IjIiIC8+DQogICAgPG9wYzpFbnVt ZXJhdGVkVmFsdWUgTmFtZT0iVW5rbm93biIgVmFsdWU9IjMiIC8+DQogICAgPG9wYzpFbnVtZXJh dGVkVmFsdWUgTmFtZT0iRG9ybWFudCIgVmFsdWU9IjQiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVk VmFsdWUgTmFtZT0iTm90UHJlc2VudCIgVmFsdWU9IjUiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVk VmFsdWUgTmFtZT0iTG93ZXJMYXllckRvd24iIFZhbHVlPSI2IiAvPg0KICA8L29wYzpFbnVtZXJh dGVkVHlwZT4NCg0KICA8b3BjOkVudW1lcmF0ZWRUeXBlIE5hbWU9Ik5lZ290aWF0aW9uU3RhdHVz IiBMZW5ndGhJbkJpdHM9IjMyIj4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJJblBy b2dyZXNzIiBWYWx1ZT0iMCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJDb21w bGV0ZSIgVmFsdWU9IjEiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iRmFpbGVk IiBWYWx1ZT0iMiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJVbmtub3duIiBW YWx1ZT0iMyIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJOb05lZ290aWF0aW9u IiBWYWx1ZT0iNCIgLz4NCiAgPC9vcGM6RW51bWVyYXRlZFR5cGU+DQoNCiAgPG9wYzpFbnVtZXJh dGVkVHlwZSBOYW1lPSJUc25GYWlsdXJlQ29kZSIgTGVuZ3RoSW5CaXRzPSIzMiI+DQogICAgPG9w YzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iTm9GYWlsdXJlIiBWYWx1ZT0iMCIgLz4NCiAgICA8b3Bj OkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJJbnN1ZmZpY2llbnRCYW5kd2lkdGgiIFZhbHVlPSIxIiAv Pg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9Ikluc3VmZmljaWVudFJlc291cmNlcyIg VmFsdWU9IjIiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iSW5zdWZmaWNpZW50 VHJhZmZpY0NsYXNzQmFuZHdpZHRoIiBWYWx1ZT0iMyIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRW YWx1ZSBOYW1lPSJTdHJlYW1JZEluVXNlIiBWYWx1ZT0iNCIgLz4NCiAgICA8b3BjOkVudW1lcmF0 ZWRWYWx1ZSBOYW1lPSJTdHJlYW1EZXN0aW5hdGlvbkFkZHJlc3NJblVzZSIgVmFsdWU9IjUiIC8+ DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iU3RyZWFtUHJlZW1wdGVkQnlIaWdoZXJS YW5rIiBWYWx1ZT0iNiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJMYXRlbmN5 SGFzQ2hhbmdlZCIgVmFsdWU9IjciIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0i RWdyZXNzUG9ydE5vdEF2YkNhcGFibGUiIFZhbHVlPSI4IiAvPg0KICAgIDxvcGM6RW51bWVyYXRl ZFZhbHVlIE5hbWU9IlVzZURpZmZlcmVudERlc3RpbmF0aW9uQWRkcmVzcyIgVmFsdWU9IjkiIC8+ DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iT3V0T2ZNc3JwUmVzb3VyY2VzIiBWYWx1 ZT0iMTAiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iT3V0T2ZNbXJwUmVzb3Vy Y2VzIiBWYWx1ZT0iMTEiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iQ2Fubm90 U3RvcmVEZXN0aW5hdGlvbkFkZHJlc3MiIFZhbHVlPSIxMiIgLz4NCiAgICA8b3BjOkVudW1lcmF0 ZWRWYWx1ZSBOYW1lPSJQcmlvcml0eUlzTm90QW5TcmNDbGFzcyIgVmFsdWU9IjEzIiAvPg0KICAg IDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9Ik1heEZyYW1lU2l6ZVRvb0xhcmdlIiBWYWx1ZT0i MTQiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iTWF4RmFuSW5Qb3J0c0xpbWl0 UmVhY2hlZCIgVmFsdWU9IjE1IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkZp cnN0VmFsdWVDaGFuZ2VkRm9yU3RyZWFtSWQiIFZhbHVlPSIxNiIgLz4NCiAgICA8b3BjOkVudW1l cmF0ZWRWYWx1ZSBOYW1lPSJWbGFuQmxvY2tlZE9uRWdyZXNzIiBWYWx1ZT0iMTciIC8+DQogICAg PG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iVmxhblRhZ2dpbmdEaXNhYmxlZE9uRWdyZXNzIiBW YWx1ZT0iMTgiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iU3JDbGFzc1ByaW9y aXR5TWlzbWF0Y2giIFZhbHVlPSIxOSIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1l PSJGZWF0dXJlTm90UHJvcGFnYXRlZCIgVmFsdWU9IjIwIiAvPg0KICAgIDxvcGM6RW51bWVyYXRl ZFZhbHVlIE5hbWU9Ik1heExhdGVuY3lFeGNlZWRlZCIgVmFsdWU9IjIxIiAvPg0KICAgIDxvcGM6 RW51bWVyYXRlZFZhbHVlIE5hbWU9IkJyaWRnZURvZXNOb3RQcm92aWRlTmV0d29ya0lkIiBWYWx1 ZT0iMjIiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iU3RyZWFtVHJhbnNmb3Jt Tm90U3VwcG9ydGVkIiBWYWx1ZT0iMjMiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFt ZT0iU3RyZWFtSWRUeXBlTm90U3VwcG9ydGVkIiBWYWx1ZT0iMjQiIC8+DQogICAgPG9wYzpFbnVt ZXJhdGVkVmFsdWUgTmFtZT0iRmVhdHVyZU5vdFN1cHBvcnRlZCIgVmFsdWU9IjI1IiAvPg0KICA8 L29wYzpFbnVtZXJhdGVkVHlwZT4NCg0KICA8b3BjOkVudW1lcmF0ZWRUeXBlIE5hbWU9IlRzblN0 cmVhbVN0YXRlIiBMZW5ndGhJbkJpdHM9IjMyIj4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBO YW1lPSJEaXNhYmxlZCIgVmFsdWU9IjAiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFt ZT0iQ29uZmlndXJpbmciIFZhbHVlPSIxIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5h bWU9IlJlYWR5IiBWYWx1ZT0iMiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJP cGVyYXRpb25hbCIgVmFsdWU9IjMiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0i RXJyb3IiIFZhbHVlPSI0IiAvPg0KICA8L29wYzpFbnVtZXJhdGVkVHlwZT4NCg0KICA8b3BjOkVu dW1lcmF0ZWRUeXBlIE5hbWU9IlRzblRhbGtlclN0YXR1cyIgTGVuZ3RoSW5CaXRzPSIzMiI+DQog ICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iTm9uZSIgVmFsdWU9IjAiIC8+DQogICAgPG9w YzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iUmVhZHkiIFZhbHVlPSIxIiAvPg0KICAgIDxvcGM6RW51 bWVyYXRlZFZhbHVlIE5hbWU9IkZhaWxlZCIgVmFsdWU9IjIiIC8+DQogIDwvb3BjOkVudW1lcmF0 ZWRUeXBlPg0KDQogIDxvcGM6RW51bWVyYXRlZFR5cGUgTmFtZT0iVHNuTGlzdGVuZXJTdGF0dXMi IExlbmd0aEluQml0cz0iMzIiPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9Ik5vbmUi IFZhbHVlPSIwIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlJlYWR5IiBWYWx1 ZT0iMSIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJQYXJ0aWFsRmFpbGVkIiBW YWx1ZT0iMiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJGYWlsZWQiIFZhbHVl PSIzIiAvPg0KICA8L29wYzpFbnVtZXJhdGVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBl IE5hbWU9IlVuc2lnbmVkUmF0aW9uYWxOdW1iZXIiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmpl Y3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTnVtZXJhdG9yIiBUeXBlTmFtZT0ib3BjOlVJbnQz MiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRlbm9taW5hdG9yIiBUeXBlTmFtZT0ib3BjOlVJ bnQzMiIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpFbnVtZXJhdGVkVHlw ZSBOYW1lPSJJZFR5cGUiIExlbmd0aEluQml0cz0iMzIiPg0KICAgIDxvcGM6RW51bWVyYXRlZFZh bHVlIE5hbWU9Ik51bWVyaWMiIFZhbHVlPSIwIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVl IE5hbWU9IlN0cmluZyIgVmFsdWU9IjEiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFt ZT0iR3VpZCIgVmFsdWU9IjIiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iT3Bh cXVlIiBWYWx1ZT0iMyIgLz4NCiAgPC9vcGM6RW51bWVyYXRlZFR5cGU+DQoNCiAgPG9wYzpFbnVt ZXJhdGVkVHlwZSBOYW1lPSJOb2RlQ2xhc3MiIExlbmd0aEluQml0cz0iMzIiPg0KICAgIDxvcGM6 RW51bWVyYXRlZFZhbHVlIE5hbWU9IlVuc3BlY2lmaWVkIiBWYWx1ZT0iMCIgLz4NCiAgICA8b3Bj OkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJPYmplY3QiIFZhbHVlPSIxIiAvPg0KICAgIDxvcGM6RW51 bWVyYXRlZFZhbHVlIE5hbWU9IlZhcmlhYmxlIiBWYWx1ZT0iMiIgLz4NCiAgICA8b3BjOkVudW1l cmF0ZWRWYWx1ZSBOYW1lPSJNZXRob2QiIFZhbHVlPSI0IiAvPg0KICAgIDxvcGM6RW51bWVyYXRl ZFZhbHVlIE5hbWU9Ik9iamVjdFR5cGUiIFZhbHVlPSI4IiAvPg0KICAgIDxvcGM6RW51bWVyYXRl ZFZhbHVlIE5hbWU9IlZhcmlhYmxlVHlwZSIgVmFsdWU9IjE2IiAvPg0KICAgIDxvcGM6RW51bWVy YXRlZFZhbHVlIE5hbWU9IlJlZmVyZW5jZVR5cGUiIFZhbHVlPSIzMiIgLz4NCiAgICA8b3BjOkVu dW1lcmF0ZWRWYWx1ZSBOYW1lPSJEYXRhVHlwZSIgVmFsdWU9IjY0IiAvPg0KICAgIDxvcGM6RW51 bWVyYXRlZFZhbHVlIE5hbWU9IlZpZXciIFZhbHVlPSIxMjgiIC8+DQogIDwvb3BjOkVudW1lcmF0 ZWRUeXBlPg0KDQogIDxvcGM6RW51bWVyYXRlZFR5cGUgTmFtZT0iUGVybWlzc2lvblR5cGUiIExl bmd0aEluQml0cz0iMzIiIElzT3B0aW9uU2V0PSJ0cnVlIj4NCiAgICA8b3BjOkVudW1lcmF0ZWRW YWx1ZSBOYW1lPSJOb25lIiBWYWx1ZT0iMCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBO YW1lPSJCcm93c2UiIFZhbHVlPSIxIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9 IlJlYWRSb2xlUGVybWlzc2lvbnMiIFZhbHVlPSIyIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZh bHVlIE5hbWU9IldyaXRlQXR0cmlidXRlIiBWYWx1ZT0iNCIgLz4NCiAgICA8b3BjOkVudW1lcmF0 ZWRWYWx1ZSBOYW1lPSJXcml0ZVJvbGVQZXJtaXNzaW9ucyIgVmFsdWU9IjgiIC8+DQogICAgPG9w YzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iV3JpdGVIaXN0b3JpemluZyIgVmFsdWU9IjE2IiAvPg0K ICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlJlYWQiIFZhbHVlPSIzMiIgLz4NCiAgICA8 b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJXcml0ZSIgVmFsdWU9IjY0IiAvPg0KICAgIDxvcGM6 RW51bWVyYXRlZFZhbHVlIE5hbWU9IlJlYWRIaXN0b3J5IiBWYWx1ZT0iMTI4IiAvPg0KICAgIDxv cGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9Ikluc2VydEhpc3RvcnkiIFZhbHVlPSIyNTYiIC8+DQog ICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iTW9kaWZ5SGlzdG9yeSIgVmFsdWU9IjUxMiIg Lz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJEZWxldGVIaXN0b3J5IiBWYWx1ZT0i MTAyNCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJSZWNlaXZlRXZlbnRzIiBW YWx1ZT0iMjA0OCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJDYWxsIiBWYWx1 ZT0iNDA5NiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJBZGRSZWZlcmVuY2Ui IFZhbHVlPSI4MTkyIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlJlbW92ZVJl ZmVyZW5jZSIgVmFsdWU9IjE2Mzg0IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9 IkRlbGV0ZU5vZGUiIFZhbHVlPSIzMjc2OCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBO YW1lPSJBZGROb2RlIiBWYWx1ZT0iNjU1MzYiIC8+DQogIDwvb3BjOkVudW1lcmF0ZWRUeXBlPg0K DQogIDxvcGM6RW51bWVyYXRlZFR5cGUgTmFtZT0iQWNjZXNzTGV2ZWxUeXBlIiBMZW5ndGhJbkJp dHM9IjgiIElzT3B0aW9uU2V0PSJ0cnVlIj4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1l PSJOb25lIiBWYWx1ZT0iMCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJDdXJy ZW50UmVhZCIgVmFsdWU9IjEiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iQ3Vy cmVudFdyaXRlIiBWYWx1ZT0iMiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJI aXN0b3J5UmVhZCIgVmFsdWU9IjQiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0i SGlzdG9yeVdyaXRlIiBWYWx1ZT0iOCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1l PSJTZW1hbnRpY0NoYW5nZSIgVmFsdWU9IjE2IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVl IE5hbWU9IlN0YXR1c1dyaXRlIiBWYWx1ZT0iMzIiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFs dWUgTmFtZT0iVGltZXN0YW1wV3JpdGUiIFZhbHVlPSI2NCIgLz4NCiAgPC9vcGM6RW51bWVyYXRl ZFR5cGU+DQoNCiAgPG9wYzpFbnVtZXJhdGVkVHlwZSBOYW1lPSJBY2Nlc3NMZXZlbEV4VHlwZSIg TGVuZ3RoSW5CaXRzPSIzMiIgSXNPcHRpb25TZXQ9InRydWUiPg0KICAgIDxvcGM6RW51bWVyYXRl ZFZhbHVlIE5hbWU9Ik5vbmUiIFZhbHVlPSIwIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVl IE5hbWU9IkN1cnJlbnRSZWFkIiBWYWx1ZT0iMSIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1 ZSBOYW1lPSJDdXJyZW50V3JpdGUiIFZhbHVlPSIyIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZh bHVlIE5hbWU9Ikhpc3RvcnlSZWFkIiBWYWx1ZT0iNCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRW YWx1ZSBOYW1lPSJIaXN0b3J5V3JpdGUiIFZhbHVlPSI4IiAvPg0KICAgIDxvcGM6RW51bWVyYXRl ZFZhbHVlIE5hbWU9IlNlbWFudGljQ2hhbmdlIiBWYWx1ZT0iMTYiIC8+DQogICAgPG9wYzpFbnVt ZXJhdGVkVmFsdWUgTmFtZT0iU3RhdHVzV3JpdGUiIFZhbHVlPSIzMiIgLz4NCiAgICA8b3BjOkVu dW1lcmF0ZWRWYWx1ZSBOYW1lPSJUaW1lc3RhbXBXcml0ZSIgVmFsdWU9IjY0IiAvPg0KICAgIDxv cGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9Ik5vbmF0b21pY1JlYWQiIFZhbHVlPSIyNTYiIC8+DQog ICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iTm9uYXRvbWljV3JpdGUiIFZhbHVlPSI1MTIi IC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iV3JpdGVGdWxsQXJyYXlPbmx5IiBW YWx1ZT0iMTAyNCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJOb1N1YkRhdGFU eXBlcyIgVmFsdWU9IjIwNDgiIC8+DQogIDwvb3BjOkVudW1lcmF0ZWRUeXBlPg0KDQogIDxvcGM6 RW51bWVyYXRlZFR5cGUgTmFtZT0iRXZlbnROb3RpZmllclR5cGUiIExlbmd0aEluQml0cz0iOCIg SXNPcHRpb25TZXQ9InRydWUiPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9Ik5vbmUi IFZhbHVlPSIwIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlN1YnNjcmliZVRv RXZlbnRzIiBWYWx1ZT0iMSIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJIaXN0 b3J5UmVhZCIgVmFsdWU9IjQiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iSGlz dG9yeVdyaXRlIiBWYWx1ZT0iOCIgLz4NCiAgPC9vcGM6RW51bWVyYXRlZFR5cGU+DQoNCiAgPG9w YzpFbnVtZXJhdGVkVHlwZSBOYW1lPSJBY2Nlc3NSZXN0cmljdGlvblR5cGUiIExlbmd0aEluQml0 cz0iMTYiIElzT3B0aW9uU2V0PSJ0cnVlIj4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1l PSJOb25lIiBWYWx1ZT0iMCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJTaWdu aW5nUmVxdWlyZWQiIFZhbHVlPSIxIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9 IkVuY3J5cHRpb25SZXF1aXJlZCIgVmFsdWU9IjIiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFs dWUgTmFtZT0iU2Vzc2lvblJlcXVpcmVkIiBWYWx1ZT0iNCIgLz4NCiAgICA8b3BjOkVudW1lcmF0 ZWRWYWx1ZSBOYW1lPSJBcHBseVJlc3RyaWN0aW9uc1RvQnJvd3NlIiBWYWx1ZT0iOCIgLz4NCiAg PC9vcGM6RW51bWVyYXRlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJSb2xl UGVybWlzc2lvblR5cGUiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6 RmllbGQgTmFtZT0iUm9sZUlkIiBUeXBlTmFtZT0idWE6Tm9kZUlkIiAvPg0KICAgIDxvcGM6Rmll bGQgTmFtZT0iUGVybWlzc2lvbnMiIFR5cGVOYW1lPSJ0bnM6UGVybWlzc2lvblR5cGUiIC8+DQog IDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iRGF0 YVR5cGVEZWZpbml0aW9uIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgPC9vcGM6 U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpFbnVtZXJhdGVkVHlwZSBOYW1lPSJTdHJ1Y3R1cmVU eXBlIiBMZW5ndGhJbkJpdHM9IjMyIj4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJT dHJ1Y3R1cmUiIFZhbHVlPSIwIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlN0 cnVjdHVyZVdpdGhPcHRpb25hbEZpZWxkcyIgVmFsdWU9IjEiIC8+DQogICAgPG9wYzpFbnVtZXJh dGVkVmFsdWUgTmFtZT0iVW5pb24iIFZhbHVlPSIyIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZh bHVlIE5hbWU9IlN0cnVjdHVyZVdpdGhTdWJ0eXBlZFZhbHVlcyIgVmFsdWU9IjMiIC8+DQogICAg PG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iVW5pb25XaXRoU3VidHlwZWRWYWx1ZXMiIFZhbHVl PSI0IiAvPg0KICA8L29wYzpFbnVtZXJhdGVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBl IE5hbWU9IlN0cnVjdHVyZUZpZWxkIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAg ICA8b3BjOkZpZWxkIE5hbWU9Ik5hbWUiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxv cGM6RmllbGQgTmFtZT0iRGVzY3JpcHRpb24iIFR5cGVOYW1lPSJ1YTpMb2NhbGl6ZWRUZXh0IiAv Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGF0YVR5cGUiIFR5cGVOYW1lPSJ1YTpOb2RlSWQiIC8+ DQogICAgPG9wYzpGaWVsZCBOYW1lPSJWYWx1ZVJhbmsiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+ DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mQXJyYXlEaW1lbnNpb25zIiBUeXBlTmFtZT0ib3Bj OkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQXJyYXlEaW1lbnNpb25zIiBUeXBlTmFt ZT0ib3BjOlVJbnQzMiIgTGVuZ3RoRmllbGQ9Ik5vT2ZBcnJheURpbWVuc2lvbnMiIC8+DQogICAg PG9wYzpGaWVsZCBOYW1lPSJNYXhTdHJpbmdMZW5ndGgiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAv Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iSXNPcHRpb25hbCIgVHlwZU5hbWU9Im9wYzpCb29sZWFu IiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5h bWU9IlN0cnVjdHVyZURlZmluaXRpb24iIEJhc2VUeXBlPSJ0bnM6RGF0YVR5cGVEZWZpbml0aW9u Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRlZmF1bHRFbmNvZGluZ0lkIiBUeXBlTmFtZT0idWE6 Tm9kZUlkIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQmFzZURhdGFUeXBlIiBUeXBlTmFtZT0i dWE6Tm9kZUlkIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU3RydWN0dXJlVHlwZSIgVHlwZU5h bWU9InRuczpTdHJ1Y3R1cmVUeXBlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkZpZWxk cyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkZpZWxkcyIg VHlwZU5hbWU9InRuczpTdHJ1Y3R1cmVGaWVsZCIgTGVuZ3RoRmllbGQ9Ik5vT2ZGaWVsZHMiIC8+ DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0i RW51bURlZmluaXRpb24iIEJhc2VUeXBlPSJ0bnM6RGF0YVR5cGVEZWZpbml0aW9uIj4NCiAgICA8 b3BjOkZpZWxkIE5hbWU9Ik5vT2ZGaWVsZHMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAg PG9wYzpGaWVsZCBOYW1lPSJGaWVsZHMiIFR5cGVOYW1lPSJ0bnM6RW51bUZpZWxkIiBMZW5ndGhG aWVsZD0iTm9PZkZpZWxkcyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpT dHJ1Y3R1cmVkVHlwZSBOYW1lPSJOb2RlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4N CiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vZGVJZCIgVHlwZU5hbWU9InVhOk5vZGVJZCIgLz4NCiAg ICA8b3BjOkZpZWxkIE5hbWU9Ik5vZGVDbGFzcyIgVHlwZU5hbWU9InRuczpOb2RlQ2xhc3MiIC8+ DQogICAgPG9wYzpGaWVsZCBOYW1lPSJCcm93c2VOYW1lIiBUeXBlTmFtZT0idWE6UXVhbGlmaWVk TmFtZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRpc3BsYXlOYW1lIiBUeXBlTmFtZT0idWE6 TG9jYWxpemVkVGV4dCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRlc2NyaXB0aW9uIiBUeXBl TmFtZT0idWE6TG9jYWxpemVkVGV4dCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IldyaXRlTWFz ayIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJVc2VyV3Jp dGVNYXNrIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5v T2ZSb2xlUGVybWlzc2lvbnMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVs ZCBOYW1lPSJSb2xlUGVybWlzc2lvbnMiIFR5cGVOYW1lPSJ0bnM6Um9sZVBlcm1pc3Npb25UeXBl IiBMZW5ndGhGaWVsZD0iTm9PZlJvbGVQZXJtaXNzaW9ucyIgLz4NCiAgICA8b3BjOkZpZWxkIE5h bWU9Ik5vT2ZVc2VyUm9sZVBlcm1pc3Npb25zIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAg IDxvcGM6RmllbGQgTmFtZT0iVXNlclJvbGVQZXJtaXNzaW9ucyIgVHlwZU5hbWU9InRuczpSb2xl UGVybWlzc2lvblR5cGUiIExlbmd0aEZpZWxkPSJOb09mVXNlclJvbGVQZXJtaXNzaW9ucyIgLz4N CiAgICA8b3BjOkZpZWxkIE5hbWU9IkFjY2Vzc1Jlc3RyaWN0aW9ucyIgVHlwZU5hbWU9Im9wYzpV SW50MTYiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mUmVmZXJlbmNlcyIgVHlwZU5hbWU9 Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlZmVyZW5jZXMiIFR5cGVOYW1l PSJ0bnM6UmVmZXJlbmNlTm9kZSIgTGVuZ3RoRmllbGQ9Ik5vT2ZSZWZlcmVuY2VzIiAvPg0KICA8 L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9Ikluc3Rh bmNlTm9kZSIgQmFzZVR5cGU9InRuczpOb2RlIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vZGVJ ZCIgVHlwZU5hbWU9InVhOk5vZGVJZCIgU291cmNlVHlwZT0idG5zOk5vZGUiIC8+DQogICAgPG9w YzpGaWVsZCBOYW1lPSJOb2RlQ2xhc3MiIFR5cGVOYW1lPSJ0bnM6Tm9kZUNsYXNzIiBTb3VyY2VU eXBlPSJ0bnM6Tm9kZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkJyb3dzZU5hbWUiIFR5cGVO YW1lPSJ1YTpRdWFsaWZpZWROYW1lIiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZSIgLz4NCiAgICA8b3Bj OkZpZWxkIE5hbWU9IkRpc3BsYXlOYW1lIiBUeXBlTmFtZT0idWE6TG9jYWxpemVkVGV4dCIgU291 cmNlVHlwZT0idG5zOk5vZGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEZXNjcmlwdGlvbiIg VHlwZU5hbWU9InVhOkxvY2FsaXplZFRleHQiIFNvdXJjZVR5cGU9InRuczpOb2RlIiAvPg0KICAg IDxvcGM6RmllbGQgTmFtZT0iV3JpdGVNYXNrIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgU291cmNl VHlwZT0idG5zOk5vZGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJVc2VyV3JpdGVNYXNrIiBU eXBlTmFtZT0ib3BjOlVJbnQzMiIgU291cmNlVHlwZT0idG5zOk5vZGUiIC8+DQogICAgPG9wYzpG aWVsZCBOYW1lPSJOb09mUm9sZVBlcm1pc3Npb25zIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0K ICAgIDxvcGM6RmllbGQgTmFtZT0iUm9sZVBlcm1pc3Npb25zIiBUeXBlTmFtZT0idG5zOlJvbGVQ ZXJtaXNzaW9uVHlwZSIgTGVuZ3RoRmllbGQ9Ik5vT2ZSb2xlUGVybWlzc2lvbnMiIC8+DQogICAg PG9wYzpGaWVsZCBOYW1lPSJOb09mVXNlclJvbGVQZXJtaXNzaW9ucyIgVHlwZU5hbWU9Im9wYzpJ bnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlVzZXJSb2xlUGVybWlzc2lvbnMiIFR5cGVO YW1lPSJ0bnM6Um9sZVBlcm1pc3Npb25UeXBlIiBMZW5ndGhGaWVsZD0iTm9PZlVzZXJSb2xlUGVy bWlzc2lvbnMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJBY2Nlc3NSZXN0cmljdGlvbnMiIFR5 cGVOYW1lPSJvcGM6VUludDE2IiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZSIgLz4NCiAgICA8b3BjOkZp ZWxkIE5hbWU9Ik5vT2ZSZWZlcmVuY2VzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxv cGM6RmllbGQgTmFtZT0iUmVmZXJlbmNlcyIgVHlwZU5hbWU9InRuczpSZWZlcmVuY2VOb2RlIiBM ZW5ndGhGaWVsZD0iTm9PZlJlZmVyZW5jZXMiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0K DQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iVHlwZU5vZGUiIEJhc2VUeXBlPSJ0bnM6Tm9k ZSI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb2RlSWQiIFR5cGVOYW1lPSJ1YTpOb2RlSWQiIFNv dXJjZVR5cGU9InRuczpOb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9kZUNsYXNzIiBU eXBlTmFtZT0idG5zOk5vZGVDbGFzcyIgU291cmNlVHlwZT0idG5zOk5vZGUiIC8+DQogICAgPG9w YzpGaWVsZCBOYW1lPSJCcm93c2VOYW1lIiBUeXBlTmFtZT0idWE6UXVhbGlmaWVkTmFtZSIgU291 cmNlVHlwZT0idG5zOk5vZGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEaXNwbGF5TmFtZSIg VHlwZU5hbWU9InVhOkxvY2FsaXplZFRleHQiIFNvdXJjZVR5cGU9InRuczpOb2RlIiAvPg0KICAg IDxvcGM6RmllbGQgTmFtZT0iRGVzY3JpcHRpb24iIFR5cGVOYW1lPSJ1YTpMb2NhbGl6ZWRUZXh0 IiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IldyaXRlTWFz ayIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIFNvdXJjZVR5cGU9InRuczpOb2RlIiAvPg0KICAgIDxv cGM6RmllbGQgTmFtZT0iVXNlcldyaXRlTWFzayIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIFNvdXJj ZVR5cGU9InRuczpOb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlJvbGVQZXJtaXNz aW9ucyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJvbGVQ ZXJtaXNzaW9ucyIgVHlwZU5hbWU9InRuczpSb2xlUGVybWlzc2lvblR5cGUiIExlbmd0aEZpZWxk PSJOb09mUm9sZVBlcm1pc3Npb25zIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlVzZXJS b2xlUGVybWlzc2lvbnMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBO YW1lPSJVc2VyUm9sZVBlcm1pc3Npb25zIiBUeXBlTmFtZT0idG5zOlJvbGVQZXJtaXNzaW9uVHlw ZSIgTGVuZ3RoRmllbGQ9Ik5vT2ZVc2VyUm9sZVBlcm1pc3Npb25zIiAvPg0KICAgIDxvcGM6Rmll bGQgTmFtZT0iQWNjZXNzUmVzdHJpY3Rpb25zIiBUeXBlTmFtZT0ib3BjOlVJbnQxNiIgU291cmNl VHlwZT0idG5zOk5vZGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mUmVmZXJlbmNlcyIg VHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlZmVyZW5jZXMi IFR5cGVOYW1lPSJ0bnM6UmVmZXJlbmNlTm9kZSIgTGVuZ3RoRmllbGQ9Ik5vT2ZSZWZlcmVuY2Vz IiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5h bWU9Ik9iamVjdE5vZGUiIEJhc2VUeXBlPSJ0bnM6SW5zdGFuY2VOb2RlIj4NCiAgICA8b3BjOkZp ZWxkIE5hbWU9Ik5vZGVJZCIgVHlwZU5hbWU9InVhOk5vZGVJZCIgU291cmNlVHlwZT0idG5zOk5v ZGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb2RlQ2xhc3MiIFR5cGVOYW1lPSJ0bnM6Tm9k ZUNsYXNzIiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkJy b3dzZU5hbWUiIFR5cGVOYW1lPSJ1YTpRdWFsaWZpZWROYW1lIiBTb3VyY2VUeXBlPSJ0bnM6Tm9k ZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRpc3BsYXlOYW1lIiBUeXBlTmFtZT0idWE6TG9j YWxpemVkVGV4dCIgU291cmNlVHlwZT0idG5zOk5vZGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1l PSJEZXNjcmlwdGlvbiIgVHlwZU5hbWU9InVhOkxvY2FsaXplZFRleHQiIFNvdXJjZVR5cGU9InRu czpOb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iV3JpdGVNYXNrIiBUeXBlTmFtZT0ib3Bj OlVJbnQzMiIgU291cmNlVHlwZT0idG5zOk5vZGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJV c2VyV3JpdGVNYXNrIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgU291cmNlVHlwZT0idG5zOk5vZGUi IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mUm9sZVBlcm1pc3Npb25zIiBUeXBlTmFtZT0i b3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUm9sZVBlcm1pc3Npb25zIiBUeXBl TmFtZT0idG5zOlJvbGVQZXJtaXNzaW9uVHlwZSIgTGVuZ3RoRmllbGQ9Ik5vT2ZSb2xlUGVybWlz c2lvbnMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mVXNlclJvbGVQZXJtaXNzaW9ucyIg VHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlVzZXJSb2xlUGVy bWlzc2lvbnMiIFR5cGVOYW1lPSJ0bnM6Um9sZVBlcm1pc3Npb25UeXBlIiBMZW5ndGhGaWVsZD0i Tm9PZlVzZXJSb2xlUGVybWlzc2lvbnMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJBY2Nlc3NS ZXN0cmljdGlvbnMiIFR5cGVOYW1lPSJvcGM6VUludDE2IiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZSIg Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZSZWZlcmVuY2VzIiBUeXBlTmFtZT0ib3BjOklu dDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVmZXJlbmNlcyIgVHlwZU5hbWU9InRuczpS ZWZlcmVuY2VOb2RlIiBMZW5ndGhGaWVsZD0iTm9PZlJlZmVyZW5jZXMiIC8+DQogICAgPG9wYzpG aWVsZCBOYW1lPSJFdmVudE5vdGlmaWVyIiBUeXBlTmFtZT0ib3BjOkJ5dGUiIC8+DQogIDwvb3Bj OlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iT2JqZWN0VHlw ZU5vZGUiIEJhc2VUeXBlPSJ0bnM6VHlwZU5vZGUiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9k ZUlkIiBUeXBlTmFtZT0idWE6Tm9kZUlkIiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZSIgLz4NCiAgICA8 b3BjOkZpZWxkIE5hbWU9Ik5vZGVDbGFzcyIgVHlwZU5hbWU9InRuczpOb2RlQ2xhc3MiIFNvdXJj ZVR5cGU9InRuczpOb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQnJvd3NlTmFtZSIgVHlw ZU5hbWU9InVhOlF1YWxpZmllZE5hbWUiIFNvdXJjZVR5cGU9InRuczpOb2RlIiAvPg0KICAgIDxv cGM6RmllbGQgTmFtZT0iRGlzcGxheU5hbWUiIFR5cGVOYW1lPSJ1YTpMb2NhbGl6ZWRUZXh0IiBT b3VyY2VUeXBlPSJ0bnM6Tm9kZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRlc2NyaXB0aW9u IiBUeXBlTmFtZT0idWE6TG9jYWxpemVkVGV4dCIgU291cmNlVHlwZT0idG5zOk5vZGUiIC8+DQog ICAgPG9wYzpGaWVsZCBOYW1lPSJXcml0ZU1hc2siIFR5cGVOYW1lPSJvcGM6VUludDMyIiBTb3Vy Y2VUeXBlPSJ0bnM6Tm9kZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlVzZXJXcml0ZU1hc2si IFR5cGVOYW1lPSJvcGM6VUludDMyIiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZSIgLz4NCiAgICA8b3Bj OkZpZWxkIE5hbWU9Ik5vT2ZSb2xlUGVybWlzc2lvbnMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+ DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSb2xlUGVybWlzc2lvbnMiIFR5cGVOYW1lPSJ0bnM6Um9s ZVBlcm1pc3Npb25UeXBlIiBMZW5ndGhGaWVsZD0iTm9PZlJvbGVQZXJtaXNzaW9ucyIgLz4NCiAg ICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZVc2VyUm9sZVBlcm1pc3Npb25zIiBUeXBlTmFtZT0ib3Bj OkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVXNlclJvbGVQZXJtaXNzaW9ucyIgVHlw ZU5hbWU9InRuczpSb2xlUGVybWlzc2lvblR5cGUiIExlbmd0aEZpZWxkPSJOb09mVXNlclJvbGVQ ZXJtaXNzaW9ucyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkFjY2Vzc1Jlc3RyaWN0aW9ucyIg VHlwZU5hbWU9Im9wYzpVSW50MTYiIFNvdXJjZVR5cGU9InRuczpOb2RlIiAvPg0KICAgIDxvcGM6 RmllbGQgTmFtZT0iTm9PZlJlZmVyZW5jZXMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAg PG9wYzpGaWVsZCBOYW1lPSJSZWZlcmVuY2VzIiBUeXBlTmFtZT0idG5zOlJlZmVyZW5jZU5vZGUi IExlbmd0aEZpZWxkPSJOb09mUmVmZXJlbmNlcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Iklz QWJzdHJhY3QiIFR5cGVOYW1lPSJvcGM6Qm9vbGVhbiIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5 cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJWYXJpYWJsZU5vZGUiIEJhc2VUeXBl PSJ0bnM6SW5zdGFuY2VOb2RlIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vZGVJZCIgVHlwZU5h bWU9InVhOk5vZGVJZCIgU291cmNlVHlwZT0idG5zOk5vZGUiIC8+DQogICAgPG9wYzpGaWVsZCBO YW1lPSJOb2RlQ2xhc3MiIFR5cGVOYW1lPSJ0bnM6Tm9kZUNsYXNzIiBTb3VyY2VUeXBlPSJ0bnM6 Tm9kZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkJyb3dzZU5hbWUiIFR5cGVOYW1lPSJ1YTpR dWFsaWZpZWROYW1lIiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5h bWU9IkRpc3BsYXlOYW1lIiBUeXBlTmFtZT0idWE6TG9jYWxpemVkVGV4dCIgU291cmNlVHlwZT0i dG5zOk5vZGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEZXNjcmlwdGlvbiIgVHlwZU5hbWU9 InVhOkxvY2FsaXplZFRleHQiIFNvdXJjZVR5cGU9InRuczpOb2RlIiAvPg0KICAgIDxvcGM6Rmll bGQgTmFtZT0iV3JpdGVNYXNrIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgU291cmNlVHlwZT0idG5z Ok5vZGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJVc2VyV3JpdGVNYXNrIiBUeXBlTmFtZT0i b3BjOlVJbnQzMiIgU291cmNlVHlwZT0idG5zOk5vZGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1l PSJOb09mUm9sZVBlcm1pc3Npb25zIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6 RmllbGQgTmFtZT0iUm9sZVBlcm1pc3Npb25zIiBUeXBlTmFtZT0idG5zOlJvbGVQZXJtaXNzaW9u VHlwZSIgTGVuZ3RoRmllbGQ9Ik5vT2ZSb2xlUGVybWlzc2lvbnMiIC8+DQogICAgPG9wYzpGaWVs ZCBOYW1lPSJOb09mVXNlclJvbGVQZXJtaXNzaW9ucyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4N CiAgICA8b3BjOkZpZWxkIE5hbWU9IlVzZXJSb2xlUGVybWlzc2lvbnMiIFR5cGVOYW1lPSJ0bnM6 Um9sZVBlcm1pc3Npb25UeXBlIiBMZW5ndGhGaWVsZD0iTm9PZlVzZXJSb2xlUGVybWlzc2lvbnMi IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJBY2Nlc3NSZXN0cmljdGlvbnMiIFR5cGVOYW1lPSJv cGM6VUludDE2IiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 Ik5vT2ZSZWZlcmVuY2VzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQg TmFtZT0iUmVmZXJlbmNlcyIgVHlwZU5hbWU9InRuczpSZWZlcmVuY2VOb2RlIiBMZW5ndGhGaWVs ZD0iTm9PZlJlZmVyZW5jZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJWYWx1ZSIgVHlwZU5h bWU9InVhOlZhcmlhbnQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEYXRhVHlwZSIgVHlwZU5h bWU9InVhOk5vZGVJZCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlZhbHVlUmFuayIgVHlwZU5h bWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZBcnJheURpbWVuc2lv bnMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJBcnJheURp bWVuc2lvbnMiIFR5cGVOYW1lPSJvcGM6VUludDMyIiBMZW5ndGhGaWVsZD0iTm9PZkFycmF5RGlt ZW5zaW9ucyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkFjY2Vzc0xldmVsIiBUeXBlTmFtZT0i b3BjOkJ5dGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJVc2VyQWNjZXNzTGV2ZWwiIFR5cGVO YW1lPSJvcGM6Qnl0ZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik1pbmltdW1TYW1wbGluZ0lu dGVydmFsIiBUeXBlTmFtZT0ib3BjOkRvdWJsZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ikhp c3Rvcml6aW5nIiBUeXBlTmFtZT0ib3BjOkJvb2xlYW4iIC8+DQogICAgPG9wYzpGaWVsZCBOYW1l PSJBY2Nlc3NMZXZlbEV4IiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgPC9vcGM6U3RydWN0 dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJWYXJpYWJsZVR5cGVOb2Rl IiBCYXNlVHlwZT0idG5zOlR5cGVOb2RlIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vZGVJZCIg VHlwZU5hbWU9InVhOk5vZGVJZCIgU291cmNlVHlwZT0idG5zOk5vZGUiIC8+DQogICAgPG9wYzpG aWVsZCBOYW1lPSJOb2RlQ2xhc3MiIFR5cGVOYW1lPSJ0bnM6Tm9kZUNsYXNzIiBTb3VyY2VUeXBl PSJ0bnM6Tm9kZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkJyb3dzZU5hbWUiIFR5cGVOYW1l PSJ1YTpRdWFsaWZpZWROYW1lIiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZSIgLz4NCiAgICA8b3BjOkZp ZWxkIE5hbWU9IkRpc3BsYXlOYW1lIiBUeXBlTmFtZT0idWE6TG9jYWxpemVkVGV4dCIgU291cmNl VHlwZT0idG5zOk5vZGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEZXNjcmlwdGlvbiIgVHlw ZU5hbWU9InVhOkxvY2FsaXplZFRleHQiIFNvdXJjZVR5cGU9InRuczpOb2RlIiAvPg0KICAgIDxv cGM6RmllbGQgTmFtZT0iV3JpdGVNYXNrIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgU291cmNlVHlw ZT0idG5zOk5vZGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJVc2VyV3JpdGVNYXNrIiBUeXBl TmFtZT0ib3BjOlVJbnQzMiIgU291cmNlVHlwZT0idG5zOk5vZGUiIC8+DQogICAgPG9wYzpGaWVs ZCBOYW1lPSJOb09mUm9sZVBlcm1pc3Npb25zIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAg IDxvcGM6RmllbGQgTmFtZT0iUm9sZVBlcm1pc3Npb25zIiBUeXBlTmFtZT0idG5zOlJvbGVQZXJt aXNzaW9uVHlwZSIgTGVuZ3RoRmllbGQ9Ik5vT2ZSb2xlUGVybWlzc2lvbnMiIC8+DQogICAgPG9w YzpGaWVsZCBOYW1lPSJOb09mVXNlclJvbGVQZXJtaXNzaW9ucyIgVHlwZU5hbWU9Im9wYzpJbnQz MiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlVzZXJSb2xlUGVybWlzc2lvbnMiIFR5cGVOYW1l PSJ0bnM6Um9sZVBlcm1pc3Npb25UeXBlIiBMZW5ndGhGaWVsZD0iTm9PZlVzZXJSb2xlUGVybWlz c2lvbnMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJBY2Nlc3NSZXN0cmljdGlvbnMiIFR5cGVO YW1lPSJvcGM6VUludDE2IiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZSIgLz4NCiAgICA8b3BjOkZpZWxk IE5hbWU9Ik5vT2ZSZWZlcmVuY2VzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6 RmllbGQgTmFtZT0iUmVmZXJlbmNlcyIgVHlwZU5hbWU9InRuczpSZWZlcmVuY2VOb2RlIiBMZW5n dGhGaWVsZD0iTm9PZlJlZmVyZW5jZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJWYWx1ZSIg VHlwZU5hbWU9InVhOlZhcmlhbnQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEYXRhVHlwZSIg VHlwZU5hbWU9InVhOk5vZGVJZCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlZhbHVlUmFuayIg VHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZBcnJheURp bWVuc2lvbnMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJB cnJheURpbWVuc2lvbnMiIFR5cGVOYW1lPSJvcGM6VUludDMyIiBMZW5ndGhGaWVsZD0iTm9PZkFy cmF5RGltZW5zaW9ucyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IklzQWJzdHJhY3QiIFR5cGVO YW1lPSJvcGM6Qm9vbGVhbiIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpT dHJ1Y3R1cmVkVHlwZSBOYW1lPSJSZWZlcmVuY2VUeXBlTm9kZSIgQmFzZVR5cGU9InRuczpUeXBl Tm9kZSI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb2RlSWQiIFR5cGVOYW1lPSJ1YTpOb2RlSWQi IFNvdXJjZVR5cGU9InRuczpOb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9kZUNsYXNz IiBUeXBlTmFtZT0idG5zOk5vZGVDbGFzcyIgU291cmNlVHlwZT0idG5zOk5vZGUiIC8+DQogICAg PG9wYzpGaWVsZCBOYW1lPSJCcm93c2VOYW1lIiBUeXBlTmFtZT0idWE6UXVhbGlmaWVkTmFtZSIg U291cmNlVHlwZT0idG5zOk5vZGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEaXNwbGF5TmFt ZSIgVHlwZU5hbWU9InVhOkxvY2FsaXplZFRleHQiIFNvdXJjZVR5cGU9InRuczpOb2RlIiAvPg0K ICAgIDxvcGM6RmllbGQgTmFtZT0iRGVzY3JpcHRpb24iIFR5cGVOYW1lPSJ1YTpMb2NhbGl6ZWRU ZXh0IiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IldyaXRl TWFzayIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIFNvdXJjZVR5cGU9InRuczpOb2RlIiAvPg0KICAg IDxvcGM6RmllbGQgTmFtZT0iVXNlcldyaXRlTWFzayIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIFNv dXJjZVR5cGU9InRuczpOb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlJvbGVQZXJt aXNzaW9ucyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJv bGVQZXJtaXNzaW9ucyIgVHlwZU5hbWU9InRuczpSb2xlUGVybWlzc2lvblR5cGUiIExlbmd0aEZp ZWxkPSJOb09mUm9sZVBlcm1pc3Npb25zIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlVz ZXJSb2xlUGVybWlzc2lvbnMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVs ZCBOYW1lPSJVc2VyUm9sZVBlcm1pc3Npb25zIiBUeXBlTmFtZT0idG5zOlJvbGVQZXJtaXNzaW9u VHlwZSIgTGVuZ3RoRmllbGQ9Ik5vT2ZVc2VyUm9sZVBlcm1pc3Npb25zIiAvPg0KICAgIDxvcGM6 RmllbGQgTmFtZT0iQWNjZXNzUmVzdHJpY3Rpb25zIiBUeXBlTmFtZT0ib3BjOlVJbnQxNiIgU291 cmNlVHlwZT0idG5zOk5vZGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mUmVmZXJlbmNl cyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlZmVyZW5j ZXMiIFR5cGVOYW1lPSJ0bnM6UmVmZXJlbmNlTm9kZSIgTGVuZ3RoRmllbGQ9Ik5vT2ZSZWZlcmVu Y2VzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iSXNBYnN0cmFjdCIgVHlwZU5hbWU9Im9wYzpC b29sZWFuIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU3ltbWV0cmljIiBUeXBlTmFtZT0ib3Bj OkJvb2xlYW4iIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJJbnZlcnNlTmFtZSIgVHlwZU5hbWU9 InVhOkxvY2FsaXplZFRleHQiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6 U3RydWN0dXJlZFR5cGUgTmFtZT0iTWV0aG9kTm9kZSIgQmFzZVR5cGU9InRuczpJbnN0YW5jZU5v ZGUiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9kZUlkIiBUeXBlTmFtZT0idWE6Tm9kZUlkIiBT b3VyY2VUeXBlPSJ0bnM6Tm9kZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vZGVDbGFzcyIg VHlwZU5hbWU9InRuczpOb2RlQ2xhc3MiIFNvdXJjZVR5cGU9InRuczpOb2RlIiAvPg0KICAgIDxv cGM6RmllbGQgTmFtZT0iQnJvd3NlTmFtZSIgVHlwZU5hbWU9InVhOlF1YWxpZmllZE5hbWUiIFNv dXJjZVR5cGU9InRuczpOb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGlzcGxheU5hbWUi IFR5cGVOYW1lPSJ1YTpMb2NhbGl6ZWRUZXh0IiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZSIgLz4NCiAg ICA8b3BjOkZpZWxkIE5hbWU9IkRlc2NyaXB0aW9uIiBUeXBlTmFtZT0idWE6TG9jYWxpemVkVGV4 dCIgU291cmNlVHlwZT0idG5zOk5vZGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJXcml0ZU1h c2siIFR5cGVOYW1lPSJvcGM6VUludDMyIiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZSIgLz4NCiAgICA8 b3BjOkZpZWxkIE5hbWU9IlVzZXJXcml0ZU1hc2siIFR5cGVOYW1lPSJvcGM6VUludDMyIiBTb3Vy Y2VUeXBlPSJ0bnM6Tm9kZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZSb2xlUGVybWlz c2lvbnMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSb2xl UGVybWlzc2lvbnMiIFR5cGVOYW1lPSJ0bnM6Um9sZVBlcm1pc3Npb25UeXBlIiBMZW5ndGhGaWVs ZD0iTm9PZlJvbGVQZXJtaXNzaW9ucyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZVc2Vy Um9sZVBlcm1pc3Npb25zIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQg TmFtZT0iVXNlclJvbGVQZXJtaXNzaW9ucyIgVHlwZU5hbWU9InRuczpSb2xlUGVybWlzc2lvblR5 cGUiIExlbmd0aEZpZWxkPSJOb09mVXNlclJvbGVQZXJtaXNzaW9ucyIgLz4NCiAgICA8b3BjOkZp ZWxkIE5hbWU9IkFjY2Vzc1Jlc3RyaWN0aW9ucyIgVHlwZU5hbWU9Im9wYzpVSW50MTYiIFNvdXJj ZVR5cGU9InRuczpOb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlJlZmVyZW5jZXMi IFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZWZlcmVuY2Vz IiBUeXBlTmFtZT0idG5zOlJlZmVyZW5jZU5vZGUiIExlbmd0aEZpZWxkPSJOb09mUmVmZXJlbmNl cyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkV4ZWN1dGFibGUiIFR5cGVOYW1lPSJvcGM6Qm9v bGVhbiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlVzZXJFeGVjdXRhYmxlIiBUeXBlTmFtZT0i b3BjOkJvb2xlYW4iIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0 dXJlZFR5cGUgTmFtZT0iVmlld05vZGUiIEJhc2VUeXBlPSJ0bnM6SW5zdGFuY2VOb2RlIj4NCiAg ICA8b3BjOkZpZWxkIE5hbWU9Ik5vZGVJZCIgVHlwZU5hbWU9InVhOk5vZGVJZCIgU291cmNlVHlw ZT0idG5zOk5vZGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb2RlQ2xhc3MiIFR5cGVOYW1l PSJ0bnM6Tm9kZUNsYXNzIiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZSIgLz4NCiAgICA8b3BjOkZpZWxk IE5hbWU9IkJyb3dzZU5hbWUiIFR5cGVOYW1lPSJ1YTpRdWFsaWZpZWROYW1lIiBTb3VyY2VUeXBl PSJ0bnM6Tm9kZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRpc3BsYXlOYW1lIiBUeXBlTmFt ZT0idWE6TG9jYWxpemVkVGV4dCIgU291cmNlVHlwZT0idG5zOk5vZGUiIC8+DQogICAgPG9wYzpG aWVsZCBOYW1lPSJEZXNjcmlwdGlvbiIgVHlwZU5hbWU9InVhOkxvY2FsaXplZFRleHQiIFNvdXJj ZVR5cGU9InRuczpOb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iV3JpdGVNYXNrIiBUeXBl TmFtZT0ib3BjOlVJbnQzMiIgU291cmNlVHlwZT0idG5zOk5vZGUiIC8+DQogICAgPG9wYzpGaWVs ZCBOYW1lPSJVc2VyV3JpdGVNYXNrIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgU291cmNlVHlwZT0i dG5zOk5vZGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mUm9sZVBlcm1pc3Npb25zIiBU eXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUm9sZVBlcm1pc3Np b25zIiBUeXBlTmFtZT0idG5zOlJvbGVQZXJtaXNzaW9uVHlwZSIgTGVuZ3RoRmllbGQ9Ik5vT2ZS b2xlUGVybWlzc2lvbnMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mVXNlclJvbGVQZXJt aXNzaW9ucyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlVz ZXJSb2xlUGVybWlzc2lvbnMiIFR5cGVOYW1lPSJ0bnM6Um9sZVBlcm1pc3Npb25UeXBlIiBMZW5n dGhGaWVsZD0iTm9PZlVzZXJSb2xlUGVybWlzc2lvbnMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1l PSJBY2Nlc3NSZXN0cmljdGlvbnMiIFR5cGVOYW1lPSJvcGM6VUludDE2IiBTb3VyY2VUeXBlPSJ0 bnM6Tm9kZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZSZWZlcmVuY2VzIiBUeXBlTmFt ZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVmZXJlbmNlcyIgVHlwZU5h bWU9InRuczpSZWZlcmVuY2VOb2RlIiBMZW5ndGhGaWVsZD0iTm9PZlJlZmVyZW5jZXMiIC8+DQog ICAgPG9wYzpGaWVsZCBOYW1lPSJDb250YWluc05vTG9vcHMiIFR5cGVOYW1lPSJvcGM6Qm9vbGVh biIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkV2ZW50Tm90aWZpZXIiIFR5cGVOYW1lPSJvcGM6 Qnl0ZSIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlw ZSBOYW1lPSJEYXRhVHlwZU5vZGUiIEJhc2VUeXBlPSJ0bnM6VHlwZU5vZGUiPg0KICAgIDxvcGM6 RmllbGQgTmFtZT0iTm9kZUlkIiBUeXBlTmFtZT0idWE6Tm9kZUlkIiBTb3VyY2VUeXBlPSJ0bnM6 Tm9kZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vZGVDbGFzcyIgVHlwZU5hbWU9InRuczpO b2RlQ2xhc3MiIFNvdXJjZVR5cGU9InRuczpOb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i QnJvd3NlTmFtZSIgVHlwZU5hbWU9InVhOlF1YWxpZmllZE5hbWUiIFNvdXJjZVR5cGU9InRuczpO b2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGlzcGxheU5hbWUiIFR5cGVOYW1lPSJ1YTpM b2NhbGl6ZWRUZXh0IiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5h bWU9IkRlc2NyaXB0aW9uIiBUeXBlTmFtZT0idWE6TG9jYWxpemVkVGV4dCIgU291cmNlVHlwZT0i dG5zOk5vZGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJXcml0ZU1hc2siIFR5cGVOYW1lPSJv cGM6VUludDMyIiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 IlVzZXJXcml0ZU1hc2siIFR5cGVOYW1lPSJvcGM6VUludDMyIiBTb3VyY2VUeXBlPSJ0bnM6Tm9k ZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZSb2xlUGVybWlzc2lvbnMiIFR5cGVOYW1l PSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSb2xlUGVybWlzc2lvbnMiIFR5 cGVOYW1lPSJ0bnM6Um9sZVBlcm1pc3Npb25UeXBlIiBMZW5ndGhGaWVsZD0iTm9PZlJvbGVQZXJt aXNzaW9ucyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZVc2VyUm9sZVBlcm1pc3Npb25z IiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVXNlclJvbGVQ ZXJtaXNzaW9ucyIgVHlwZU5hbWU9InRuczpSb2xlUGVybWlzc2lvblR5cGUiIExlbmd0aEZpZWxk PSJOb09mVXNlclJvbGVQZXJtaXNzaW9ucyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkFjY2Vz c1Jlc3RyaWN0aW9ucyIgVHlwZU5hbWU9Im9wYzpVSW50MTYiIFNvdXJjZVR5cGU9InRuczpOb2Rl IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlJlZmVyZW5jZXMiIFR5cGVOYW1lPSJvcGM6 SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZWZlcmVuY2VzIiBUeXBlTmFtZT0idG5z OlJlZmVyZW5jZU5vZGUiIExlbmd0aEZpZWxkPSJOb09mUmVmZXJlbmNlcyIgLz4NCiAgICA8b3Bj OkZpZWxkIE5hbWU9IklzQWJzdHJhY3QiIFR5cGVOYW1lPSJvcGM6Qm9vbGVhbiIgLz4NCiAgICA8 b3BjOkZpZWxkIE5hbWU9IkRhdGFUeXBlRGVmaW5pdGlvbiIgVHlwZU5hbWU9InVhOkV4dGVuc2lv bk9iamVjdCIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVk VHlwZSBOYW1lPSJSZWZlcmVuY2VOb2RlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4N CiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlZmVyZW5jZVR5cGVJZCIgVHlwZU5hbWU9InVhOk5vZGVJ ZCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IklzSW52ZXJzZSIgVHlwZU5hbWU9Im9wYzpCb29s ZWFuIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVGFyZ2V0SWQiIFR5cGVOYW1lPSJ1YTpFeHBh bmRlZE5vZGVJZCIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1 cmVkVHlwZSBOYW1lPSJBcmd1bWVudCIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQog ICAgPG9wYzpGaWVsZCBOYW1lPSJOYW1lIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8 b3BjOkZpZWxkIE5hbWU9IkRhdGFUeXBlIiBUeXBlTmFtZT0idWE6Tm9kZUlkIiAvPg0KICAgIDxv cGM6RmllbGQgTmFtZT0iVmFsdWVSYW5rIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxv cGM6RmllbGQgTmFtZT0iTm9PZkFycmF5RGltZW5zaW9ucyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIg Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkFycmF5RGltZW5zaW9ucyIgVHlwZU5hbWU9Im9wYzpV SW50MzIiIExlbmd0aEZpZWxkPSJOb09mQXJyYXlEaW1lbnNpb25zIiAvPg0KICAgIDxvcGM6Rmll bGQgTmFtZT0iRGVzY3JpcHRpb24iIFR5cGVOYW1lPSJ1YTpMb2NhbGl6ZWRUZXh0IiAvPg0KICA8 L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkVudW1W YWx1ZVR5cGUiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQg TmFtZT0iVmFsdWUiIFR5cGVOYW1lPSJvcGM6SW50NjQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1l PSJEaXNwbGF5TmFtZSIgVHlwZU5hbWU9InVhOkxvY2FsaXplZFRleHQiIC8+DQogICAgPG9wYzpG aWVsZCBOYW1lPSJEZXNjcmlwdGlvbiIgVHlwZU5hbWU9InVhOkxvY2FsaXplZFRleHQiIC8+DQog IDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iRW51 bUZpZWxkIiBCYXNlVHlwZT0idG5zOkVudW1WYWx1ZVR5cGUiPg0KICAgIDxvcGM6RmllbGQgTmFt ZT0iVmFsdWUiIFR5cGVOYW1lPSJvcGM6SW50NjQiIFNvdXJjZVR5cGU9InRuczpFbnVtVmFsdWVU eXBlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGlzcGxheU5hbWUiIFR5cGVOYW1lPSJ1YTpM b2NhbGl6ZWRUZXh0IiBTb3VyY2VUeXBlPSJ0bnM6RW51bVZhbHVlVHlwZSIgLz4NCiAgICA8b3Bj OkZpZWxkIE5hbWU9IkRlc2NyaXB0aW9uIiBUeXBlTmFtZT0idWE6TG9jYWxpemVkVGV4dCIgU291 cmNlVHlwZT0idG5zOkVudW1WYWx1ZVR5cGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOYW1l IiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAg PG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJPcHRpb25TZXQiIEJhc2VUeXBlPSJ1YTpFeHRlbnNp b25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVmFsdWUiIFR5cGVOYW1lPSJvcGM6Qnl0 ZVN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlZhbGlkQml0cyIgVHlwZU5hbWU9Im9w YzpCeXRlU3RyaW5nIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOk9wYXF1 ZVR5cGUgTmFtZT0iTm9ybWFsaXplZFN0cmluZyI+DQogIDwvb3BjOk9wYXF1ZVR5cGU+DQoNCiAg PG9wYzpPcGFxdWVUeXBlIE5hbWU9IkRlY2ltYWxTdHJpbmciPg0KICA8L29wYzpPcGFxdWVUeXBl Pg0KDQogIDxvcGM6T3BhcXVlVHlwZSBOYW1lPSJEdXJhdGlvblN0cmluZyI+DQogIDwvb3BjOk9w YXF1ZVR5cGU+DQoNCiAgPG9wYzpPcGFxdWVUeXBlIE5hbWU9IlRpbWVTdHJpbmciPg0KICA8L29w YzpPcGFxdWVUeXBlPg0KDQogIDxvcGM6T3BhcXVlVHlwZSBOYW1lPSJEYXRlU3RyaW5nIj4NCiAg PC9vcGM6T3BhcXVlVHlwZT4NCg0KICA8b3BjOk9wYXF1ZVR5cGUgTmFtZT0iRHVyYXRpb24iPg0K ICA8L29wYzpPcGFxdWVUeXBlPg0KDQogIDxvcGM6T3BhcXVlVHlwZSBOYW1lPSJVdGNUaW1lIj4N CiAgPC9vcGM6T3BhcXVlVHlwZT4NCg0KICA8b3BjOk9wYXF1ZVR5cGUgTmFtZT0iVGltZSI+DQog IDwvb3BjOk9wYXF1ZVR5cGU+DQoNCiAgPG9wYzpPcGFxdWVUeXBlIE5hbWU9IkRhdGUiPg0KICA8 L29wYzpPcGFxdWVUeXBlPg0KDQogIDxvcGM6T3BhcXVlVHlwZSBOYW1lPSJMb2NhbGVJZCI+DQog IDwvb3BjOk9wYXF1ZVR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJUaW1lWm9u ZURhdGFUeXBlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxk IE5hbWU9Ik9mZnNldCIgVHlwZU5hbWU9Im9wYzpJbnQxNiIgLz4NCiAgICA8b3BjOkZpZWxkIE5h bWU9IkRheWxpZ2h0U2F2aW5nSW5PZmZzZXQiIFR5cGVOYW1lPSJvcGM6Qm9vbGVhbiIgLz4NCiAg PC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpPcGFxdWVUeXBlIE5hbWU9IkluZGV4Ij4N CiAgPC9vcGM6T3BhcXVlVHlwZT4NCg0KICA8b3BjOk9wYXF1ZVR5cGUgTmFtZT0iSW50ZWdlcklk Ij4NCiAgPC9vcGM6T3BhcXVlVHlwZT4NCg0KICA8b3BjOkVudW1lcmF0ZWRUeXBlIE5hbWU9IkFw cGxpY2F0aW9uVHlwZSIgTGVuZ3RoSW5CaXRzPSIzMiI+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFs dWUgTmFtZT0iU2VydmVyIiBWYWx1ZT0iMCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBO YW1lPSJDbGllbnQiIFZhbHVlPSIxIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9 IkNsaWVudEFuZFNlcnZlciIgVmFsdWU9IjIiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUg TmFtZT0iRGlzY292ZXJ5U2VydmVyIiBWYWx1ZT0iMyIgLz4NCiAgPC9vcGM6RW51bWVyYXRlZFR5 cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJBcHBsaWNhdGlvbkRlc2NyaXB0aW9u IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkFw cGxpY2F0aW9uVXJpIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5h bWU9IlByb2R1Y3RVcmkiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQg TmFtZT0iQXBwbGljYXRpb25OYW1lIiBUeXBlTmFtZT0idWE6TG9jYWxpemVkVGV4dCIgLz4NCiAg ICA8b3BjOkZpZWxkIE5hbWU9IkFwcGxpY2F0aW9uVHlwZSIgVHlwZU5hbWU9InRuczpBcHBsaWNh dGlvblR5cGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJHYXRld2F5U2VydmVyVXJpIiBUeXBl TmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRpc2NvdmVyeVByb2Zp bGVVcmkiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9P ZkRpc2NvdmVyeVVybHMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBO YW1lPSJEaXNjb3ZlcnlVcmxzIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgTGVuZ3RoRmllbGQ9Ik5v T2ZEaXNjb3ZlcnlVcmxzIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0 cnVjdHVyZWRUeXBlIE5hbWU9IlJlcXVlc3RIZWFkZXIiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25P YmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQXV0aGVudGljYXRpb25Ub2tlbiIgVHlwZU5h bWU9InVhOk5vZGVJZCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlRpbWVzdGFtcCIgVHlwZU5h bWU9Im9wYzpEYXRlVGltZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlcXVlc3RIYW5kbGUi IFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmV0dXJuRGlh Z25vc3RpY3MiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i QXVkaXRFbnRyeUlkIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5h bWU9IlRpbWVvdXRIaW50IiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxk IE5hbWU9IkFkZGl0aW9uYWxIZWFkZXIiIFR5cGVOYW1lPSJ1YTpFeHRlbnNpb25PYmplY3QiIC8+ DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0i UmVzcG9uc2VIZWFkZXIiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6 RmllbGQgTmFtZT0iVGltZXN0YW1wIiBUeXBlTmFtZT0ib3BjOkRhdGVUaW1lIiAvPg0KICAgIDxv cGM6RmllbGQgTmFtZT0iUmVxdWVzdEhhbmRsZSIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQog ICAgPG9wYzpGaWVsZCBOYW1lPSJTZXJ2aWNlUmVzdWx0IiBUeXBlTmFtZT0idWE6U3RhdHVzQ29k ZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNlcnZpY2VEaWFnbm9zdGljcyIgVHlwZU5hbWU9 InVhOkRpYWdub3N0aWNJbmZvIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlN0cmluZ1Rh YmxlIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU3RyaW5n VGFibGUiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiBMZW5ndGhGaWVsZD0iTm9PZlN0cmluZ1RhYmxl IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQWRkaXRpb25hbEhlYWRlciIgVHlwZU5hbWU9InVh OkV4dGVuc2lvbk9iamVjdCIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpP cGFxdWVUeXBlIE5hbWU9IlZlcnNpb25UaW1lIj4NCiAgPC9vcGM6T3BhcXVlVHlwZT4NCg0KICA8 b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlNlcnZpY2VGYXVsdCIgQmFzZVR5cGU9InVhOkV4dGVu c2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXNwb25zZUhlYWRlciIgVHlwZU5h bWU9InRuczpSZXNwb25zZUhlYWRlciIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAg PG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJTZXNzaW9ubGVzc0ludm9rZVJlcXVlc3RUeXBlIiBC YXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlVyaXNW ZXJzaW9uIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5v T2ZOYW1lc3BhY2VVcmlzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQg TmFtZT0iTmFtZXNwYWNlVXJpcyIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIExlbmd0aEZpZWxkPSJO b09mTmFtZXNwYWNlVXJpcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZTZXJ2ZXJVcmlz IiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2VydmVyVXJp cyIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIExlbmd0aEZpZWxkPSJOb09mU2VydmVyVXJpcyIgLz4N CiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZMb2NhbGVJZHMiIFR5cGVOYW1lPSJvcGM6SW50MzIi IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJMb2NhbGVJZHMiIFR5cGVOYW1lPSJvcGM6U3RyaW5n IiBMZW5ndGhGaWVsZD0iTm9PZkxvY2FsZUlkcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNl cnZpY2VJZCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBl Pg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iU2Vzc2lvbmxlc3NJbnZva2VSZXNwb25z ZVR5cGUiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFt ZT0iTm9PZk5hbWVzcGFjZVVyaXMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpG aWVsZCBOYW1lPSJOYW1lc3BhY2VVcmlzIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgTGVuZ3RoRmll bGQ9Ik5vT2ZOYW1lc3BhY2VVcmlzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlNlcnZl clVyaXMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTZXJ2 ZXJVcmlzIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgTGVuZ3RoRmllbGQ9Ik5vT2ZTZXJ2ZXJVcmlz IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2VydmljZUlkIiBUeXBlTmFtZT0ib3BjOlVJbnQz MiIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBO YW1lPSJGaW5kU2VydmVyc1JlcXVlc3QiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0K ICAgIDxvcGM6RmllbGQgTmFtZT0iUmVxdWVzdEhlYWRlciIgVHlwZU5hbWU9InRuczpSZXF1ZXN0 SGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRW5kcG9pbnRVcmwiIFR5cGVOYW1lPSJv cGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkxvY2FsZUlkcyIgVHlwZU5h bWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkxvY2FsZUlkcyIgVHlwZU5h bWU9Im9wYzpTdHJpbmciIExlbmd0aEZpZWxkPSJOb09mTG9jYWxlSWRzIiAvPg0KICAgIDxvcGM6 RmllbGQgTmFtZT0iTm9PZlNlcnZlclVyaXMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAg PG9wYzpGaWVsZCBOYW1lPSJTZXJ2ZXJVcmlzIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgTGVuZ3Ro RmllbGQ9Ik5vT2ZTZXJ2ZXJVcmlzIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8 b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkZpbmRTZXJ2ZXJzUmVzcG9uc2UiIEJhc2VUeXBlPSJ1 YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVzcG9uc2VIZWFkZXIi IFR5cGVOYW1lPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJO b09mU2VydmVycyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 IlNlcnZlcnMiIFR5cGVOYW1lPSJ0bnM6QXBwbGljYXRpb25EZXNjcmlwdGlvbiIgTGVuZ3RoRmll bGQ9Ik5vT2ZTZXJ2ZXJzIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0 cnVjdHVyZWRUeXBlIE5hbWU9IlNlcnZlck9uTmV0d29yayIgQmFzZVR5cGU9InVhOkV4dGVuc2lv bk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZWNvcmRJZCIgVHlwZU5hbWU9Im9wYzpV SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTZXJ2ZXJOYW1lIiBUeXBlTmFtZT0ib3Bj OlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRpc2NvdmVyeVVybCIgVHlwZU5hbWU9 Im9wYzpTdHJpbmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mU2VydmVyQ2FwYWJpbGl0 aWVzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2VydmVy Q2FwYWJpbGl0aWVzIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgTGVuZ3RoRmllbGQ9Ik5vT2ZTZXJ2 ZXJDYXBhYmlsaXRpZXMiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3Ry dWN0dXJlZFR5cGUgTmFtZT0iRmluZFNlcnZlcnNPbk5ldHdvcmtSZXF1ZXN0IiBCYXNlVHlwZT0i dWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlcXVlc3RIZWFkZXIi IFR5cGVOYW1lPSJ0bnM6UmVxdWVzdEhlYWRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlN0 YXJ0aW5nUmVjb3JkSWQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQg TmFtZT0iTWF4UmVjb3Jkc1RvUmV0dXJuIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8 b3BjOkZpZWxkIE5hbWU9Ik5vT2ZTZXJ2ZXJDYXBhYmlsaXR5RmlsdGVyIiBUeXBlTmFtZT0ib3Bj OkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2VydmVyQ2FwYWJpbGl0eUZpbHRlciIg VHlwZU5hbWU9Im9wYzpTdHJpbmciIExlbmd0aEZpZWxkPSJOb09mU2VydmVyQ2FwYWJpbGl0eUZp bHRlciIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlw ZSBOYW1lPSJGaW5kU2VydmVyc09uTmV0d29ya1Jlc3BvbnNlIiBCYXNlVHlwZT0idWE6RXh0ZW5z aW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlc3BvbnNlSGVhZGVyIiBUeXBlTmFt ZT0idG5zOlJlc3BvbnNlSGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTGFzdENvdW50 ZXJSZXNldFRpbWUiIFR5cGVOYW1lPSJvcGM6RGF0ZVRpbWUiIC8+DQogICAgPG9wYzpGaWVsZCBO YW1lPSJOb09mU2VydmVycyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxk IE5hbWU9IlNlcnZlcnMiIFR5cGVOYW1lPSJ0bnM6U2VydmVyT25OZXR3b3JrIiBMZW5ndGhGaWVs ZD0iTm9PZlNlcnZlcnMiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6T3Bh cXVlVHlwZSBOYW1lPSJBcHBsaWNhdGlvbkluc3RhbmNlQ2VydGlmaWNhdGUiPg0KICA8L29wYzpP cGFxdWVUeXBlPg0KDQogIDxvcGM6RW51bWVyYXRlZFR5cGUgTmFtZT0iTWVzc2FnZVNlY3VyaXR5 TW9kZSIgTGVuZ3RoSW5CaXRzPSIzMiI+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0i SW52YWxpZCIgVmFsdWU9IjAiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iTm9u ZSIgVmFsdWU9IjEiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iU2lnbiIgVmFs dWU9IjIiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iU2lnbkFuZEVuY3J5cHQi IFZhbHVlPSIzIiAvPg0KICA8L29wYzpFbnVtZXJhdGVkVHlwZT4NCg0KICA8b3BjOkVudW1lcmF0 ZWRUeXBlIE5hbWU9IlVzZXJUb2tlblR5cGUiIExlbmd0aEluQml0cz0iMzIiPg0KICAgIDxvcGM6 RW51bWVyYXRlZFZhbHVlIE5hbWU9IkFub255bW91cyIgVmFsdWU9IjAiIC8+DQogICAgPG9wYzpF bnVtZXJhdGVkVmFsdWUgTmFtZT0iVXNlck5hbWUiIFZhbHVlPSIxIiAvPg0KICAgIDxvcGM6RW51 bWVyYXRlZFZhbHVlIE5hbWU9IkNlcnRpZmljYXRlIiBWYWx1ZT0iMiIgLz4NCiAgICA8b3BjOkVu dW1lcmF0ZWRWYWx1ZSBOYW1lPSJJc3N1ZWRUb2tlbiIgVmFsdWU9IjMiIC8+DQogIDwvb3BjOkVu dW1lcmF0ZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iVXNlclRva2VuUG9s aWN5IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 IlBvbGljeUlkIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 IlRva2VuVHlwZSIgVHlwZU5hbWU9InRuczpVc2VyVG9rZW5UeXBlIiAvPg0KICAgIDxvcGM6Rmll bGQgTmFtZT0iSXNzdWVkVG9rZW5UeXBlIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8 b3BjOkZpZWxkIE5hbWU9Iklzc3VlckVuZHBvaW50VXJsIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIg Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNlY3VyaXR5UG9saWN5VXJpIiBUeXBlTmFtZT0ib3Bj OlN0cmluZyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVk VHlwZSBOYW1lPSJFbmRwb2ludERlc2NyaXB0aW9uIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2Jq ZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkVuZHBvaW50VXJsIiBUeXBlTmFtZT0ib3BjOlN0 cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNlcnZlciIgVHlwZU5hbWU9InRuczpBcHBs aWNhdGlvbkRlc2NyaXB0aW9uIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2VydmVyQ2VydGlm aWNhdGUiIFR5cGVOYW1lPSJvcGM6Qnl0ZVN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 IlNlY3VyaXR5TW9kZSIgVHlwZU5hbWU9InRuczpNZXNzYWdlU2VjdXJpdHlNb2RlIiAvPg0KICAg IDxvcGM6RmllbGQgTmFtZT0iU2VjdXJpdHlQb2xpY3lVcmkiIFR5cGVOYW1lPSJvcGM6U3RyaW5n IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlVzZXJJZGVudGl0eVRva2VucyIgVHlwZU5h bWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlVzZXJJZGVudGl0eVRva2Vu cyIgVHlwZU5hbWU9InRuczpVc2VyVG9rZW5Qb2xpY3kiIExlbmd0aEZpZWxkPSJOb09mVXNlcklk ZW50aXR5VG9rZW5zIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVHJhbnNwb3J0UHJvZmlsZVVy aSIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTZWN1cml0 eUxldmVsIiBUeXBlTmFtZT0ib3BjOkJ5dGUiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0K DQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iR2V0RW5kcG9pbnRzUmVxdWVzdCIgQmFzZVR5 cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXF1ZXN0SGVh ZGVyIiBUeXBlTmFtZT0idG5zOlJlcXVlc3RIZWFkZXIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1l PSJFbmRwb2ludFVybCIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogICAgPG9wYzpGaWVsZCBO YW1lPSJOb09mTG9jYWxlSWRzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6Rmll bGQgTmFtZT0iTG9jYWxlSWRzIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgTGVuZ3RoRmllbGQ9Ik5v T2ZMb2NhbGVJZHMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mUHJvZmlsZVVyaXMiIFR5 cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJQcm9maWxlVXJpcyIg VHlwZU5hbWU9Im9wYzpTdHJpbmciIExlbmd0aEZpZWxkPSJOb09mUHJvZmlsZVVyaXMiIC8+DQog IDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iR2V0 RW5kcG9pbnRzUmVzcG9uc2UiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxv cGM6RmllbGQgTmFtZT0iUmVzcG9uc2VIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVzcG9uc2VIZWFk ZXIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mRW5kcG9pbnRzIiBUeXBlTmFtZT0ib3Bj OkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRW5kcG9pbnRzIiBUeXBlTmFtZT0idG5z OkVuZHBvaW50RGVzY3JpcHRpb24iIExlbmd0aEZpZWxkPSJOb09mRW5kcG9pbnRzIiAvPg0KICA8 L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlJlZ2lz dGVyZWRTZXJ2ZXIiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6Rmll bGQgTmFtZT0iU2VydmVyVXJpIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZp ZWxkIE5hbWU9IlByb2R1Y3RVcmkiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6 RmllbGQgTmFtZT0iTm9PZlNlcnZlck5hbWVzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAg IDxvcGM6RmllbGQgTmFtZT0iU2VydmVyTmFtZXMiIFR5cGVOYW1lPSJ1YTpMb2NhbGl6ZWRUZXh0 IiBMZW5ndGhGaWVsZD0iTm9PZlNlcnZlck5hbWVzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i U2VydmVyVHlwZSIgVHlwZU5hbWU9InRuczpBcHBsaWNhdGlvblR5cGUiIC8+DQogICAgPG9wYzpG aWVsZCBOYW1lPSJHYXRld2F5U2VydmVyVXJpIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAg ICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZEaXNjb3ZlcnlVcmxzIiBUeXBlTmFtZT0ib3BjOkludDMy IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGlzY292ZXJ5VXJscyIgVHlwZU5hbWU9Im9wYzpT dHJpbmciIExlbmd0aEZpZWxkPSJOb09mRGlzY292ZXJ5VXJscyIgLz4NCiAgICA8b3BjOkZpZWxk IE5hbWU9IlNlbWFwaG9yZUZpbGVQYXRoIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8 b3BjOkZpZWxkIE5hbWU9IklzT25saW5lIiBUeXBlTmFtZT0ib3BjOkJvb2xlYW4iIC8+DQogIDwv b3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iUmVnaXN0 ZXJTZXJ2ZXJSZXF1ZXN0IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3Bj OkZpZWxkIE5hbWU9IlJlcXVlc3RIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVxdWVzdEhlYWRlciIg Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNlcnZlciIgVHlwZU5hbWU9InRuczpSZWdpc3RlcmVk U2VydmVyIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRU eXBlIE5hbWU9IlJlZ2lzdGVyU2VydmVyUmVzcG9uc2UiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25P YmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVzcG9uc2VIZWFkZXIiIFR5cGVOYW1lPSJ0 bnM6UmVzcG9uc2VIZWFkZXIiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6 U3RydWN0dXJlZFR5cGUgTmFtZT0iRGlzY292ZXJ5Q29uZmlndXJhdGlvbiIgQmFzZVR5cGU9InVh OkV4dGVuc2lvbk9iamVjdCI+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3Ry dWN0dXJlZFR5cGUgTmFtZT0iTWRuc0Rpc2NvdmVyeUNvbmZpZ3VyYXRpb24iIEJhc2VUeXBlPSJ0 bnM6RGlzY292ZXJ5Q29uZmlndXJhdGlvbiI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJNZG5zU2Vy dmVyTmFtZSIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJO b09mU2VydmVyQ2FwYWJpbGl0aWVzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6 RmllbGQgTmFtZT0iU2VydmVyQ2FwYWJpbGl0aWVzIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgTGVu Z3RoRmllbGQ9Ik5vT2ZTZXJ2ZXJDYXBhYmlsaXRpZXMiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRU eXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iUmVnaXN0ZXJTZXJ2ZXIyUmVxdWVz dCIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJS ZXF1ZXN0SGVhZGVyIiBUeXBlTmFtZT0idG5zOlJlcXVlc3RIZWFkZXIiIC8+DQogICAgPG9wYzpG aWVsZCBOYW1lPSJTZXJ2ZXIiIFR5cGVOYW1lPSJ0bnM6UmVnaXN0ZXJlZFNlcnZlciIgLz4NCiAg ICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZEaXNjb3ZlcnlDb25maWd1cmF0aW9uIiBUeXBlTmFtZT0i b3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGlzY292ZXJ5Q29uZmlndXJhdGlv biIgVHlwZU5hbWU9InVhOkV4dGVuc2lvbk9iamVjdCIgTGVuZ3RoRmllbGQ9Ik5vT2ZEaXNjb3Zl cnlDb25maWd1cmF0aW9uIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0 cnVjdHVyZWRUeXBlIE5hbWU9IlJlZ2lzdGVyU2VydmVyMlJlc3BvbnNlIiBCYXNlVHlwZT0idWE6 RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlc3BvbnNlSGVhZGVyIiBU eXBlTmFtZT0idG5zOlJlc3BvbnNlSGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9P ZkNvbmZpZ3VyYXRpb25SZXN1bHRzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6 RmllbGQgTmFtZT0iQ29uZmlndXJhdGlvblJlc3VsdHMiIFR5cGVOYW1lPSJ1YTpTdGF0dXNDb2Rl IiBMZW5ndGhGaWVsZD0iTm9PZkNvbmZpZ3VyYXRpb25SZXN1bHRzIiAvPg0KICAgIDxvcGM6Rmll bGQgTmFtZT0iTm9PZkRpYWdub3N0aWNJbmZvcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAg ICA8b3BjOkZpZWxkIE5hbWU9IkRpYWdub3N0aWNJbmZvcyIgVHlwZU5hbWU9InVhOkRpYWdub3N0 aWNJbmZvIiBMZW5ndGhGaWVsZD0iTm9PZkRpYWdub3N0aWNJbmZvcyIgLz4NCiAgPC9vcGM6U3Ry dWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpFbnVtZXJhdGVkVHlwZSBOYW1lPSJTZWN1cml0eVRva2Vu UmVxdWVzdFR5cGUiIExlbmd0aEluQml0cz0iMzIiPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVl IE5hbWU9Iklzc3VlIiBWYWx1ZT0iMCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1l PSJSZW5ldyIgVmFsdWU9IjEiIC8+DQogIDwvb3BjOkVudW1lcmF0ZWRUeXBlPg0KDQogIDxvcGM6 U3RydWN0dXJlZFR5cGUgTmFtZT0iQ2hhbm5lbFNlY3VyaXR5VG9rZW4iIEJhc2VUeXBlPSJ1YTpF eHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQ2hhbm5lbElkIiBUeXBlTmFt ZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlRva2VuSWQiIFR5cGVOYW1l PSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQ3JlYXRlZEF0IiBUeXBlTmFt ZT0ib3BjOkRhdGVUaW1lIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmV2aXNlZExpZmV0aW1l IiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAg PG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJPcGVuU2VjdXJlQ2hhbm5lbFJlcXVlc3QiIEJhc2VU eXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVxdWVzdEhl YWRlciIgVHlwZU5hbWU9InRuczpSZXF1ZXN0SGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt ZT0iQ2xpZW50UHJvdG9jb2xWZXJzaW9uIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8 b3BjOkZpZWxkIE5hbWU9IlJlcXVlc3RUeXBlIiBUeXBlTmFtZT0idG5zOlNlY3VyaXR5VG9rZW5S ZXF1ZXN0VHlwZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNlY3VyaXR5TW9kZSIgVHlwZU5h bWU9InRuczpNZXNzYWdlU2VjdXJpdHlNb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQ2xp ZW50Tm9uY2UiIFR5cGVOYW1lPSJvcGM6Qnl0ZVN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5h bWU9IlJlcXVlc3RlZExpZmV0aW1lIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgPC9vcGM6 U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJPcGVuU2VjdXJl Q2hhbm5lbFJlc3BvbnNlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3Bj OkZpZWxkIE5hbWU9IlJlc3BvbnNlSGVhZGVyIiBUeXBlTmFtZT0idG5zOlJlc3BvbnNlSGVhZGVy IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2VydmVyUHJvdG9jb2xWZXJzaW9uIiBUeXBlTmFt ZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNlY3VyaXR5VG9rZW4iIFR5 cGVOYW1lPSJ0bnM6Q2hhbm5lbFNlY3VyaXR5VG9rZW4iIC8+DQogICAgPG9wYzpGaWVsZCBOYW1l PSJTZXJ2ZXJOb25jZSIgVHlwZU5hbWU9Im9wYzpCeXRlU3RyaW5nIiAvPg0KICA8L29wYzpTdHJ1 Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkNsb3NlU2VjdXJlQ2hh bm5lbFJlcXVlc3QiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6Rmll bGQgTmFtZT0iUmVxdWVzdEhlYWRlciIgVHlwZU5hbWU9InRuczpSZXF1ZXN0SGVhZGVyIiAvPg0K ICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkNs b3NlU2VjdXJlQ2hhbm5lbFJlc3BvbnNlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4N CiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlc3BvbnNlSGVhZGVyIiBUeXBlTmFtZT0idG5zOlJlc3Bv bnNlSGVhZGVyIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVy ZWRUeXBlIE5hbWU9IlNpZ25lZFNvZnR3YXJlQ2VydGlmaWNhdGUiIEJhc2VUeXBlPSJ1YTpFeHRl bnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQ2VydGlmaWNhdGVEYXRhIiBUeXBl TmFtZT0ib3BjOkJ5dGVTdHJpbmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTaWduYXR1cmUi IFR5cGVOYW1lPSJvcGM6Qnl0ZVN0cmluZyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoN CiAgPG9wYzpPcGFxdWVUeXBlIE5hbWU9IlNlc3Npb25BdXRoZW50aWNhdGlvblRva2VuIj4NCiAg PC9vcGM6T3BhcXVlVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlNpZ25hdHVy ZURhdGEiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFt ZT0iQWxnb3JpdGhtIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5h bWU9IlNpZ25hdHVyZSIgVHlwZU5hbWU9Im9wYzpCeXRlU3RyaW5nIiAvPg0KICA8L29wYzpTdHJ1 Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkNyZWF0ZVNlc3Npb25S ZXF1ZXN0IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5h bWU9IlJlcXVlc3RIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVxdWVzdEhlYWRlciIgLz4NCiAgICA8 b3BjOkZpZWxkIE5hbWU9IkNsaWVudERlc2NyaXB0aW9uIiBUeXBlTmFtZT0idG5zOkFwcGxpY2F0 aW9uRGVzY3JpcHRpb24iIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTZXJ2ZXJVcmkiIFR5cGVO YW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRW5kcG9pbnRVcmwiIFR5 cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2Vzc2lvbk5hbWUi IFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQ2xpZW50Tm9u Y2UiIFR5cGVOYW1lPSJvcGM6Qnl0ZVN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkNs aWVudENlcnRpZmljYXRlIiBUeXBlTmFtZT0ib3BjOkJ5dGVTdHJpbmciIC8+DQogICAgPG9wYzpG aWVsZCBOYW1lPSJSZXF1ZXN0ZWRTZXNzaW9uVGltZW91dCIgVHlwZU5hbWU9Im9wYzpEb3VibGUi IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJNYXhSZXNwb25zZU1lc3NhZ2VTaXplIiBUeXBlTmFt ZT0ib3BjOlVJbnQzMiIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1 Y3R1cmVkVHlwZSBOYW1lPSJDcmVhdGVTZXNzaW9uUmVzcG9uc2UiIEJhc2VUeXBlPSJ1YTpFeHRl bnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVzcG9uc2VIZWFkZXIiIFR5cGVO YW1lPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTZXNzaW9u SWQiIFR5cGVOYW1lPSJ1YTpOb2RlSWQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJBdXRoZW50 aWNhdGlvblRva2VuIiBUeXBlTmFtZT0idWE6Tm9kZUlkIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt ZT0iUmV2aXNlZFNlc3Npb25UaW1lb3V0IiBUeXBlTmFtZT0ib3BjOkRvdWJsZSIgLz4NCiAgICA8 b3BjOkZpZWxkIE5hbWU9IlNlcnZlck5vbmNlIiBUeXBlTmFtZT0ib3BjOkJ5dGVTdHJpbmciIC8+ DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTZXJ2ZXJDZXJ0aWZpY2F0ZSIgVHlwZU5hbWU9Im9wYzpC eXRlU3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlNlcnZlckVuZHBvaW50cyIg VHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNlcnZlckVuZHBv aW50cyIgVHlwZU5hbWU9InRuczpFbmRwb2ludERlc2NyaXB0aW9uIiBMZW5ndGhGaWVsZD0iTm9P ZlNlcnZlckVuZHBvaW50cyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZTZXJ2ZXJTb2Z0 d2FyZUNlcnRpZmljYXRlcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxk IE5hbWU9IlNlcnZlclNvZnR3YXJlQ2VydGlmaWNhdGVzIiBUeXBlTmFtZT0idG5zOlNpZ25lZFNv ZnR3YXJlQ2VydGlmaWNhdGUiIExlbmd0aEZpZWxkPSJOb09mU2VydmVyU29mdHdhcmVDZXJ0aWZp Y2F0ZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTZXJ2ZXJTaWduYXR1cmUiIFR5cGVOYW1l PSJ0bnM6U2lnbmF0dXJlRGF0YSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik1heFJlcXVlc3RN ZXNzYWdlU2l6ZSIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRU eXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iVXNlcklkZW50aXR5VG9rZW4iIEJh c2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUG9saWN5 SWQiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0K ICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkFub255bW91c0lkZW50aXR5VG9rZW4iIEJhc2VU eXBlPSJ0bnM6VXNlcklkZW50aXR5VG9rZW4iPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUG9saWN5 SWQiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiBTb3VyY2VUeXBlPSJ0bnM6VXNlcklkZW50aXR5VG9r ZW4iIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUg TmFtZT0iVXNlck5hbWVJZGVudGl0eVRva2VuIiBCYXNlVHlwZT0idG5zOlVzZXJJZGVudGl0eVRv a2VuIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlBvbGljeUlkIiBUeXBlTmFtZT0ib3BjOlN0cmlu ZyIgU291cmNlVHlwZT0idG5zOlVzZXJJZGVudGl0eVRva2VuIiAvPg0KICAgIDxvcGM6RmllbGQg TmFtZT0iVXNlck5hbWUiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQg TmFtZT0iUGFzc3dvcmQiIFR5cGVOYW1lPSJvcGM6Qnl0ZVN0cmluZyIgLz4NCiAgICA8b3BjOkZp ZWxkIE5hbWU9IkVuY3J5cHRpb25BbGdvcml0aG0iIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0K ICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9Ilg1 MDlJZGVudGl0eVRva2VuIiBCYXNlVHlwZT0idG5zOlVzZXJJZGVudGl0eVRva2VuIj4NCiAgICA8 b3BjOkZpZWxkIE5hbWU9IlBvbGljeUlkIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgU291cmNlVHlw ZT0idG5zOlVzZXJJZGVudGl0eVRva2VuIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQ2VydGlm aWNhdGVEYXRhIiBUeXBlTmFtZT0ib3BjOkJ5dGVTdHJpbmciIC8+DQogIDwvb3BjOlN0cnVjdHVy ZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iSXNzdWVkSWRlbnRpdHlUb2tl biIgQmFzZVR5cGU9InRuczpVc2VySWRlbnRpdHlUb2tlbiI+DQogICAgPG9wYzpGaWVsZCBOYW1l PSJQb2xpY3lJZCIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIFNvdXJjZVR5cGU9InRuczpVc2VySWRl bnRpdHlUb2tlbiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlRva2VuRGF0YSIgVHlwZU5hbWU9 Im9wYzpCeXRlU3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRW5jcnlwdGlvbkFsZ29y aXRobSIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0K DQogIDxvcGM6T3BhcXVlVHlwZSBOYW1lPSJSc2FFbmNyeXB0ZWRTZWNyZXQiPg0KICA8L29wYzpP cGFxdWVUeXBlPg0KDQogIDxvcGM6T3BhcXVlVHlwZSBOYW1lPSJFY2NFbmNyeXB0ZWRTZWNyZXQi Pg0KICA8L29wYzpPcGFxdWVUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iQWN0 aXZhdGVTZXNzaW9uUmVxdWVzdCIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAg PG9wYzpGaWVsZCBOYW1lPSJSZXF1ZXN0SGVhZGVyIiBUeXBlTmFtZT0idG5zOlJlcXVlc3RIZWFk ZXIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJDbGllbnRTaWduYXR1cmUiIFR5cGVOYW1lPSJ0 bnM6U2lnbmF0dXJlRGF0YSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZDbGllbnRTb2Z0 d2FyZUNlcnRpZmljYXRlcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxk IE5hbWU9IkNsaWVudFNvZnR3YXJlQ2VydGlmaWNhdGVzIiBUeXBlTmFtZT0idG5zOlNpZ25lZFNv ZnR3YXJlQ2VydGlmaWNhdGUiIExlbmd0aEZpZWxkPSJOb09mQ2xpZW50U29mdHdhcmVDZXJ0aWZp Y2F0ZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mTG9jYWxlSWRzIiBUeXBlTmFtZT0i b3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTG9jYWxlSWRzIiBUeXBlTmFtZT0i b3BjOlN0cmluZyIgTGVuZ3RoRmllbGQ9Ik5vT2ZMb2NhbGVJZHMiIC8+DQogICAgPG9wYzpGaWVs ZCBOYW1lPSJVc2VySWRlbnRpdHlUb2tlbiIgVHlwZU5hbWU9InVhOkV4dGVuc2lvbk9iamVjdCIg Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlVzZXJUb2tlblNpZ25hdHVyZSIgVHlwZU5hbWU9InRu czpTaWduYXR1cmVEYXRhIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0 cnVjdHVyZWRUeXBlIE5hbWU9IkFjdGl2YXRlU2Vzc2lvblJlc3BvbnNlIiBCYXNlVHlwZT0idWE6 RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlc3BvbnNlSGVhZGVyIiBU eXBlTmFtZT0idG5zOlJlc3BvbnNlSGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2Vy dmVyTm9uY2UiIFR5cGVOYW1lPSJvcGM6Qnl0ZVN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5h bWU9Ik5vT2ZSZXN1bHRzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQg TmFtZT0iUmVzdWx0cyIgVHlwZU5hbWU9InVhOlN0YXR1c0NvZGUiIExlbmd0aEZpZWxkPSJOb09m UmVzdWx0cyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZEaWFnbm9zdGljSW5mb3MiIFR5 cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEaWFnbm9zdGljSW5m b3MiIFR5cGVOYW1lPSJ1YTpEaWFnbm9zdGljSW5mbyIgTGVuZ3RoRmllbGQ9Ik5vT2ZEaWFnbm9z dGljSW5mb3MiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJl ZFR5cGUgTmFtZT0iQ2xvc2VTZXNzaW9uUmVxdWVzdCIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9i amVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXF1ZXN0SGVhZGVyIiBUeXBlTmFtZT0idG5z OlJlcXVlc3RIZWFkZXIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEZWxldGVTdWJzY3JpcHRp b25zIiBUeXBlTmFtZT0ib3BjOkJvb2xlYW4iIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0K DQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iQ2xvc2VTZXNzaW9uUmVzcG9uc2UiIEJhc2VU eXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVzcG9uc2VI ZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIC8+DQogIDwvb3BjOlN0cnVjdHVy ZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iQ2FuY2VsUmVxdWVzdCIgQmFz ZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXF1ZXN0 SGVhZGVyIiBUeXBlTmFtZT0idG5zOlJlcXVlc3RIZWFkZXIiIC8+DQogICAgPG9wYzpGaWVsZCBO YW1lPSJSZXF1ZXN0SGFuZGxlIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgPC9vcGM6U3Ry dWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJDYW5jZWxSZXNwb25z ZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJS ZXNwb25zZUhlYWRlciIgVHlwZU5hbWU9InRuczpSZXNwb25zZUhlYWRlciIgLz4NCiAgICA8b3Bj OkZpZWxkIE5hbWU9IkNhbmNlbENvdW50IiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgPC9v cGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpFbnVtZXJhdGVkVHlwZSBOYW1lPSJOb2RlQXR0 cmlidXRlc01hc2siIExlbmd0aEluQml0cz0iMzIiPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVl IE5hbWU9Ik5vbmUiIFZhbHVlPSIwIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9 IkFjY2Vzc0xldmVsIiBWYWx1ZT0iMSIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1l PSJBcnJheURpbWVuc2lvbnMiIFZhbHVlPSIyIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVl IE5hbWU9IkJyb3dzZU5hbWUiIFZhbHVlPSI0IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVl IE5hbWU9IkNvbnRhaW5zTm9Mb29wcyIgVmFsdWU9IjgiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVk VmFsdWUgTmFtZT0iRGF0YVR5cGUiIFZhbHVlPSIxNiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRW YWx1ZSBOYW1lPSJEZXNjcmlwdGlvbiIgVmFsdWU9IjMyIiAvPg0KICAgIDxvcGM6RW51bWVyYXRl ZFZhbHVlIE5hbWU9IkRpc3BsYXlOYW1lIiBWYWx1ZT0iNjQiIC8+DQogICAgPG9wYzpFbnVtZXJh dGVkVmFsdWUgTmFtZT0iRXZlbnROb3RpZmllciIgVmFsdWU9IjEyOCIgLz4NCiAgICA8b3BjOkVu dW1lcmF0ZWRWYWx1ZSBOYW1lPSJFeGVjdXRhYmxlIiBWYWx1ZT0iMjU2IiAvPg0KICAgIDxvcGM6 RW51bWVyYXRlZFZhbHVlIE5hbWU9Ikhpc3Rvcml6aW5nIiBWYWx1ZT0iNTEyIiAvPg0KICAgIDxv cGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkludmVyc2VOYW1lIiBWYWx1ZT0iMTAyNCIgLz4NCiAg ICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJJc0Fic3RyYWN0IiBWYWx1ZT0iMjA0OCIgLz4N CiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJNaW5pbXVtU2FtcGxpbmdJbnRlcnZhbCIg VmFsdWU9IjQwOTYiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iTm9kZUNsYXNz IiBWYWx1ZT0iODE5MiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJOb2RlSWQi IFZhbHVlPSIxNjM4NCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJTeW1tZXRy aWMiIFZhbHVlPSIzMjc2OCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJVc2Vy QWNjZXNzTGV2ZWwiIFZhbHVlPSI2NTUzNiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBO YW1lPSJVc2VyRXhlY3V0YWJsZSIgVmFsdWU9IjEzMTA3MiIgLz4NCiAgICA8b3BjOkVudW1lcmF0 ZWRWYWx1ZSBOYW1lPSJVc2VyV3JpdGVNYXNrIiBWYWx1ZT0iMjYyMTQ0IiAvPg0KICAgIDxvcGM6 RW51bWVyYXRlZFZhbHVlIE5hbWU9IlZhbHVlUmFuayIgVmFsdWU9IjUyNDI4OCIgLz4NCiAgICA8 b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJXcml0ZU1hc2siIFZhbHVlPSIxMDQ4NTc2IiAvPg0K ICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlZhbHVlIiBWYWx1ZT0iMjA5NzE1MiIgLz4N CiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJEYXRhVHlwZURlZmluaXRpb24iIFZhbHVl PSI0MTk0MzA0IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlJvbGVQZXJtaXNz aW9ucyIgVmFsdWU9IjgzODg2MDgiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0i QWNjZXNzUmVzdHJpY3Rpb25zIiBWYWx1ZT0iMTY3NzcyMTYiIC8+DQogICAgPG9wYzpFbnVtZXJh dGVkVmFsdWUgTmFtZT0iQWxsIiBWYWx1ZT0iMzM1NTQ0MzEiIC8+DQogICAgPG9wYzpFbnVtZXJh dGVkVmFsdWUgTmFtZT0iQmFzZU5vZGUiIFZhbHVlPSIyNjUwMTIyMCIgLz4NCiAgICA8b3BjOkVu dW1lcmF0ZWRWYWx1ZSBOYW1lPSJPYmplY3QiIFZhbHVlPSIyNjUwMTM0OCIgLz4NCiAgICA8b3Bj OkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJPYmplY3RUeXBlIiBWYWx1ZT0iMjY1MDMyNjgiIC8+DQog ICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iVmFyaWFibGUiIFZhbHVlPSIyNjU3MTM4MyIg Lz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJWYXJpYWJsZVR5cGUiIFZhbHVlPSIy ODYwMDQzOCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJNZXRob2QiIFZhbHVl PSIyNjYzMjU0OCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJSZWZlcmVuY2VU eXBlIiBWYWx1ZT0iMjY1MzcwNjAiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0i VmlldyIgVmFsdWU9IjI2NTAxMzU2IiAvPg0KICA8L29wYzpFbnVtZXJhdGVkVHlwZT4NCg0KICA8 b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9Ik5vZGVBdHRyaWJ1dGVzIiBCYXNlVHlwZT0idWE6RXh0 ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNwZWNpZmllZEF0dHJpYnV0ZXMi IFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGlzcGxheU5h bWUiIFR5cGVOYW1lPSJ1YTpMb2NhbGl6ZWRUZXh0IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i RGVzY3JpcHRpb24iIFR5cGVOYW1lPSJ1YTpMb2NhbGl6ZWRUZXh0IiAvPg0KICAgIDxvcGM6Rmll bGQgTmFtZT0iV3JpdGVNYXNrIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZp ZWxkIE5hbWU9IlVzZXJXcml0ZU1hc2siIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICA8L29w YzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9Ik9iamVjdEF0 dHJpYnV0ZXMiIEJhc2VUeXBlPSJ0bnM6Tm9kZUF0dHJpYnV0ZXMiPg0KICAgIDxvcGM6RmllbGQg TmFtZT0iU3BlY2lmaWVkQXR0cmlidXRlcyIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIFNvdXJjZVR5 cGU9InRuczpOb2RlQXR0cmlidXRlcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRpc3BsYXlO YW1lIiBUeXBlTmFtZT0idWE6TG9jYWxpemVkVGV4dCIgU291cmNlVHlwZT0idG5zOk5vZGVBdHRy aWJ1dGVzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGVzY3JpcHRpb24iIFR5cGVOYW1lPSJ1 YTpMb2NhbGl6ZWRUZXh0IiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZUF0dHJpYnV0ZXMiIC8+DQogICAg PG9wYzpGaWVsZCBOYW1lPSJXcml0ZU1hc2siIFR5cGVOYW1lPSJvcGM6VUludDMyIiBTb3VyY2VU eXBlPSJ0bnM6Tm9kZUF0dHJpYnV0ZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJVc2VyV3Jp dGVNYXNrIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgU291cmNlVHlwZT0idG5zOk5vZGVBdHRyaWJ1 dGVzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRXZlbnROb3RpZmllciIgVHlwZU5hbWU9Im9w YzpCeXRlIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRU eXBlIE5hbWU9IlZhcmlhYmxlQXR0cmlidXRlcyIgQmFzZVR5cGU9InRuczpOb2RlQXR0cmlidXRl cyI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTcGVjaWZpZWRBdHRyaWJ1dGVzIiBUeXBlTmFtZT0i b3BjOlVJbnQzMiIgU291cmNlVHlwZT0idG5zOk5vZGVBdHRyaWJ1dGVzIiAvPg0KICAgIDxvcGM6 RmllbGQgTmFtZT0iRGlzcGxheU5hbWUiIFR5cGVOYW1lPSJ1YTpMb2NhbGl6ZWRUZXh0IiBTb3Vy Y2VUeXBlPSJ0bnM6Tm9kZUF0dHJpYnV0ZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEZXNj cmlwdGlvbiIgVHlwZU5hbWU9InVhOkxvY2FsaXplZFRleHQiIFNvdXJjZVR5cGU9InRuczpOb2Rl QXR0cmlidXRlcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IldyaXRlTWFzayIgVHlwZU5hbWU9 Im9wYzpVSW50MzIiIFNvdXJjZVR5cGU9InRuczpOb2RlQXR0cmlidXRlcyIgLz4NCiAgICA8b3Bj OkZpZWxkIE5hbWU9IlVzZXJXcml0ZU1hc2siIFR5cGVOYW1lPSJvcGM6VUludDMyIiBTb3VyY2VU eXBlPSJ0bnM6Tm9kZUF0dHJpYnV0ZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJWYWx1ZSIg VHlwZU5hbWU9InVhOlZhcmlhbnQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEYXRhVHlwZSIg VHlwZU5hbWU9InVhOk5vZGVJZCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlZhbHVlUmFuayIg VHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZBcnJheURp bWVuc2lvbnMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJB cnJheURpbWVuc2lvbnMiIFR5cGVOYW1lPSJvcGM6VUludDMyIiBMZW5ndGhGaWVsZD0iTm9PZkFy cmF5RGltZW5zaW9ucyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkFjY2Vzc0xldmVsIiBUeXBl TmFtZT0ib3BjOkJ5dGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJVc2VyQWNjZXNzTGV2ZWwi IFR5cGVOYW1lPSJvcGM6Qnl0ZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik1pbmltdW1TYW1w bGluZ0ludGVydmFsIiBUeXBlTmFtZT0ib3BjOkRvdWJsZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5h bWU9Ikhpc3Rvcml6aW5nIiBUeXBlTmFtZT0ib3BjOkJvb2xlYW4iIC8+DQogIDwvb3BjOlN0cnVj dHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iTWV0aG9kQXR0cmlidXRl cyIgQmFzZVR5cGU9InRuczpOb2RlQXR0cmlidXRlcyI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJT cGVjaWZpZWRBdHRyaWJ1dGVzIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgU291cmNlVHlwZT0idG5z Ok5vZGVBdHRyaWJ1dGVzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGlzcGxheU5hbWUiIFR5 cGVOYW1lPSJ1YTpMb2NhbGl6ZWRUZXh0IiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZUF0dHJpYnV0ZXMi IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEZXNjcmlwdGlvbiIgVHlwZU5hbWU9InVhOkxvY2Fs aXplZFRleHQiIFNvdXJjZVR5cGU9InRuczpOb2RlQXR0cmlidXRlcyIgLz4NCiAgICA8b3BjOkZp ZWxkIE5hbWU9IldyaXRlTWFzayIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIFNvdXJjZVR5cGU9InRu czpOb2RlQXR0cmlidXRlcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlVzZXJXcml0ZU1hc2si IFR5cGVOYW1lPSJvcGM6VUludDMyIiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZUF0dHJpYnV0ZXMiIC8+ DQogICAgPG9wYzpGaWVsZCBOYW1lPSJFeGVjdXRhYmxlIiBUeXBlTmFtZT0ib3BjOkJvb2xlYW4i IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJVc2VyRXhlY3V0YWJsZSIgVHlwZU5hbWU9Im9wYzpC b29sZWFuIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRU eXBlIE5hbWU9Ik9iamVjdFR5cGVBdHRyaWJ1dGVzIiBCYXNlVHlwZT0idG5zOk5vZGVBdHRyaWJ1 dGVzIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNwZWNpZmllZEF0dHJpYnV0ZXMiIFR5cGVOYW1l PSJvcGM6VUludDMyIiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZUF0dHJpYnV0ZXMiIC8+DQogICAgPG9w YzpGaWVsZCBOYW1lPSJEaXNwbGF5TmFtZSIgVHlwZU5hbWU9InVhOkxvY2FsaXplZFRleHQiIFNv dXJjZVR5cGU9InRuczpOb2RlQXR0cmlidXRlcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRl c2NyaXB0aW9uIiBUeXBlTmFtZT0idWE6TG9jYWxpemVkVGV4dCIgU291cmNlVHlwZT0idG5zOk5v ZGVBdHRyaWJ1dGVzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iV3JpdGVNYXNrIiBUeXBlTmFt ZT0ib3BjOlVJbnQzMiIgU291cmNlVHlwZT0idG5zOk5vZGVBdHRyaWJ1dGVzIiAvPg0KICAgIDxv cGM6RmllbGQgTmFtZT0iVXNlcldyaXRlTWFzayIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIFNvdXJj ZVR5cGU9InRuczpOb2RlQXR0cmlidXRlcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IklzQWJz dHJhY3QiIFR5cGVOYW1lPSJvcGM6Qm9vbGVhbiIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+ DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJWYXJpYWJsZVR5cGVBdHRyaWJ1dGVzIiBC YXNlVHlwZT0idG5zOk5vZGVBdHRyaWJ1dGVzIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNwZWNp ZmllZEF0dHJpYnV0ZXMiIFR5cGVOYW1lPSJvcGM6VUludDMyIiBTb3VyY2VUeXBlPSJ0bnM6Tm9k ZUF0dHJpYnV0ZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEaXNwbGF5TmFtZSIgVHlwZU5h bWU9InVhOkxvY2FsaXplZFRleHQiIFNvdXJjZVR5cGU9InRuczpOb2RlQXR0cmlidXRlcyIgLz4N CiAgICA8b3BjOkZpZWxkIE5hbWU9IkRlc2NyaXB0aW9uIiBUeXBlTmFtZT0idWE6TG9jYWxpemVk VGV4dCIgU291cmNlVHlwZT0idG5zOk5vZGVBdHRyaWJ1dGVzIiAvPg0KICAgIDxvcGM6RmllbGQg TmFtZT0iV3JpdGVNYXNrIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgU291cmNlVHlwZT0idG5zOk5v ZGVBdHRyaWJ1dGVzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVXNlcldyaXRlTWFzayIgVHlw ZU5hbWU9Im9wYzpVSW50MzIiIFNvdXJjZVR5cGU9InRuczpOb2RlQXR0cmlidXRlcyIgLz4NCiAg ICA8b3BjOkZpZWxkIE5hbWU9IlZhbHVlIiBUeXBlTmFtZT0idWE6VmFyaWFudCIgLz4NCiAgICA8 b3BjOkZpZWxkIE5hbWU9IkRhdGFUeXBlIiBUeXBlTmFtZT0idWE6Tm9kZUlkIiAvPg0KICAgIDxv cGM6RmllbGQgTmFtZT0iVmFsdWVSYW5rIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxv cGM6RmllbGQgTmFtZT0iTm9PZkFycmF5RGltZW5zaW9ucyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIg Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkFycmF5RGltZW5zaW9ucyIgVHlwZU5hbWU9Im9wYzpV SW50MzIiIExlbmd0aEZpZWxkPSJOb09mQXJyYXlEaW1lbnNpb25zIiAvPg0KICAgIDxvcGM6Rmll bGQgTmFtZT0iSXNBYnN0cmFjdCIgVHlwZU5hbWU9Im9wYzpCb29sZWFuIiAvPg0KICA8L29wYzpT dHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlJlZmVyZW5jZVR5 cGVBdHRyaWJ1dGVzIiBCYXNlVHlwZT0idG5zOk5vZGVBdHRyaWJ1dGVzIj4NCiAgICA8b3BjOkZp ZWxkIE5hbWU9IlNwZWNpZmllZEF0dHJpYnV0ZXMiIFR5cGVOYW1lPSJvcGM6VUludDMyIiBTb3Vy Y2VUeXBlPSJ0bnM6Tm9kZUF0dHJpYnV0ZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEaXNw bGF5TmFtZSIgVHlwZU5hbWU9InVhOkxvY2FsaXplZFRleHQiIFNvdXJjZVR5cGU9InRuczpOb2Rl QXR0cmlidXRlcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRlc2NyaXB0aW9uIiBUeXBlTmFt ZT0idWE6TG9jYWxpemVkVGV4dCIgU291cmNlVHlwZT0idG5zOk5vZGVBdHRyaWJ1dGVzIiAvPg0K ICAgIDxvcGM6RmllbGQgTmFtZT0iV3JpdGVNYXNrIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgU291 cmNlVHlwZT0idG5zOk5vZGVBdHRyaWJ1dGVzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVXNl cldyaXRlTWFzayIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIFNvdXJjZVR5cGU9InRuczpOb2RlQXR0 cmlidXRlcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IklzQWJzdHJhY3QiIFR5cGVOYW1lPSJv cGM6Qm9vbGVhbiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlN5bW1ldHJpYyIgVHlwZU5hbWU9 Im9wYzpCb29sZWFuIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iSW52ZXJzZU5hbWUiIFR5cGVO YW1lPSJ1YTpMb2NhbGl6ZWRUZXh0IiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8 b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkRhdGFUeXBlQXR0cmlidXRlcyIgQmFzZVR5cGU9InRu czpOb2RlQXR0cmlidXRlcyI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTcGVjaWZpZWRBdHRyaWJ1 dGVzIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgU291cmNlVHlwZT0idG5zOk5vZGVBdHRyaWJ1dGVz IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGlzcGxheU5hbWUiIFR5cGVOYW1lPSJ1YTpMb2Nh bGl6ZWRUZXh0IiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZUF0dHJpYnV0ZXMiIC8+DQogICAgPG9wYzpG aWVsZCBOYW1lPSJEZXNjcmlwdGlvbiIgVHlwZU5hbWU9InVhOkxvY2FsaXplZFRleHQiIFNvdXJj ZVR5cGU9InRuczpOb2RlQXR0cmlidXRlcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IldyaXRl TWFzayIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIFNvdXJjZVR5cGU9InRuczpOb2RlQXR0cmlidXRl cyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlVzZXJXcml0ZU1hc2siIFR5cGVOYW1lPSJvcGM6 VUludDMyIiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZUF0dHJpYnV0ZXMiIC8+DQogICAgPG9wYzpGaWVs ZCBOYW1lPSJJc0Fic3RyYWN0IiBUeXBlTmFtZT0ib3BjOkJvb2xlYW4iIC8+DQogIDwvb3BjOlN0 cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iVmlld0F0dHJpYnV0 ZXMiIEJhc2VUeXBlPSJ0bnM6Tm9kZUF0dHJpYnV0ZXMiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i U3BlY2lmaWVkQXR0cmlidXRlcyIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIFNvdXJjZVR5cGU9InRu czpOb2RlQXR0cmlidXRlcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRpc3BsYXlOYW1lIiBU eXBlTmFtZT0idWE6TG9jYWxpemVkVGV4dCIgU291cmNlVHlwZT0idG5zOk5vZGVBdHRyaWJ1dGVz IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGVzY3JpcHRpb24iIFR5cGVOYW1lPSJ1YTpMb2Nh bGl6ZWRUZXh0IiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZUF0dHJpYnV0ZXMiIC8+DQogICAgPG9wYzpG aWVsZCBOYW1lPSJXcml0ZU1hc2siIFR5cGVOYW1lPSJvcGM6VUludDMyIiBTb3VyY2VUeXBlPSJ0 bnM6Tm9kZUF0dHJpYnV0ZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJVc2VyV3JpdGVNYXNr IiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgU291cmNlVHlwZT0idG5zOk5vZGVBdHRyaWJ1dGVzIiAv Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQ29udGFpbnNOb0xvb3BzIiBUeXBlTmFtZT0ib3BjOkJv b2xlYW4iIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJFdmVudE5vdGlmaWVyIiBUeXBlTmFtZT0i b3BjOkJ5dGUiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJl ZFR5cGUgTmFtZT0iR2VuZXJpY0F0dHJpYnV0ZVZhbHVlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9u T2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkF0dHJpYnV0ZUlkIiBUeXBlTmFtZT0ib3Bj OlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlZhbHVlIiBUeXBlTmFtZT0idWE6VmFy aWFudCIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlw ZSBOYW1lPSJHZW5lcmljQXR0cmlidXRlcyIgQmFzZVR5cGU9InRuczpOb2RlQXR0cmlidXRlcyI+ DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTcGVjaWZpZWRBdHRyaWJ1dGVzIiBUeXBlTmFtZT0ib3Bj OlVJbnQzMiIgU291cmNlVHlwZT0idG5zOk5vZGVBdHRyaWJ1dGVzIiAvPg0KICAgIDxvcGM6Rmll bGQgTmFtZT0iRGlzcGxheU5hbWUiIFR5cGVOYW1lPSJ1YTpMb2NhbGl6ZWRUZXh0IiBTb3VyY2VU eXBlPSJ0bnM6Tm9kZUF0dHJpYnV0ZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEZXNjcmlw dGlvbiIgVHlwZU5hbWU9InVhOkxvY2FsaXplZFRleHQiIFNvdXJjZVR5cGU9InRuczpOb2RlQXR0 cmlidXRlcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IldyaXRlTWFzayIgVHlwZU5hbWU9Im9w YzpVSW50MzIiIFNvdXJjZVR5cGU9InRuczpOb2RlQXR0cmlidXRlcyIgLz4NCiAgICA8b3BjOkZp ZWxkIE5hbWU9IlVzZXJXcml0ZU1hc2siIFR5cGVOYW1lPSJvcGM6VUludDMyIiBTb3VyY2VUeXBl PSJ0bnM6Tm9kZUF0dHJpYnV0ZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mQXR0cmli dXRlVmFsdWVzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i QXR0cmlidXRlVmFsdWVzIiBUeXBlTmFtZT0idG5zOkdlbmVyaWNBdHRyaWJ1dGVWYWx1ZSIgTGVu Z3RoRmllbGQ9Ik5vT2ZBdHRyaWJ1dGVWYWx1ZXMiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBl Pg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iQWRkTm9kZXNJdGVtIiBCYXNlVHlwZT0i dWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlBhcmVudE5vZGVJZCIg VHlwZU5hbWU9InVhOkV4cGFuZGVkTm9kZUlkIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVm ZXJlbmNlVHlwZUlkIiBUeXBlTmFtZT0idWE6Tm9kZUlkIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt ZT0iUmVxdWVzdGVkTmV3Tm9kZUlkIiBUeXBlTmFtZT0idWE6RXhwYW5kZWROb2RlSWQiIC8+DQog ICAgPG9wYzpGaWVsZCBOYW1lPSJCcm93c2VOYW1lIiBUeXBlTmFtZT0idWE6UXVhbGlmaWVkTmFt ZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vZGVDbGFzcyIgVHlwZU5hbWU9InRuczpOb2Rl Q2xhc3MiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb2RlQXR0cmlidXRlcyIgVHlwZU5hbWU9 InVhOkV4dGVuc2lvbk9iamVjdCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlR5cGVEZWZpbml0 aW9uIiBUeXBlTmFtZT0idWE6RXhwYW5kZWROb2RlSWQiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRU eXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iQWRkTm9kZXNSZXN1bHQiIEJhc2VU eXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU3RhdHVzQ29k ZSIgVHlwZU5hbWU9InVhOlN0YXR1c0NvZGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJBZGRl ZE5vZGVJZCIgVHlwZU5hbWU9InVhOk5vZGVJZCIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+ DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJBZGROb2Rlc1JlcXVlc3QiIEJhc2VUeXBl PSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVxdWVzdEhlYWRl ciIgVHlwZU5hbWU9InRuczpSZXF1ZXN0SGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i Tm9PZk5vZGVzVG9BZGQiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBO YW1lPSJOb2Rlc1RvQWRkIiBUeXBlTmFtZT0idG5zOkFkZE5vZGVzSXRlbSIgTGVuZ3RoRmllbGQ9 Ik5vT2ZOb2Rlc1RvQWRkIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0 cnVjdHVyZWRUeXBlIE5hbWU9IkFkZE5vZGVzUmVzcG9uc2UiIEJhc2VUeXBlPSJ1YTpFeHRlbnNp b25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVzcG9uc2VIZWFkZXIiIFR5cGVOYW1l PSJ0bnM6UmVzcG9uc2VIZWFkZXIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mUmVzdWx0 cyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlc3VsdHMi IFR5cGVOYW1lPSJ0bnM6QWRkTm9kZXNSZXN1bHQiIExlbmd0aEZpZWxkPSJOb09mUmVzdWx0cyIg Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZEaWFnbm9zdGljSW5mb3MiIFR5cGVOYW1lPSJv cGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEaWFnbm9zdGljSW5mb3MiIFR5cGVO YW1lPSJ1YTpEaWFnbm9zdGljSW5mbyIgTGVuZ3RoRmllbGQ9Ik5vT2ZEaWFnbm9zdGljSW5mb3Mi IC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFt ZT0iQWRkUmVmZXJlbmNlc0l0ZW0iIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAg IDxvcGM6RmllbGQgTmFtZT0iU291cmNlTm9kZUlkIiBUeXBlTmFtZT0idWE6Tm9kZUlkIiAvPg0K ICAgIDxvcGM6RmllbGQgTmFtZT0iUmVmZXJlbmNlVHlwZUlkIiBUeXBlTmFtZT0idWE6Tm9kZUlk IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iSXNGb3J3YXJkIiBUeXBlTmFtZT0ib3BjOkJvb2xl YW4iIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJUYXJnZXRTZXJ2ZXJVcmkiIFR5cGVOYW1lPSJv cGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVGFyZ2V0Tm9kZUlkIiBUeXBlTmFt ZT0idWE6RXhwYW5kZWROb2RlSWQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJUYXJnZXROb2Rl Q2xhc3MiIFR5cGVOYW1lPSJ0bnM6Tm9kZUNsYXNzIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlw ZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkFkZFJlZmVyZW5jZXNSZXF1ZXN0IiBC YXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlcXVl c3RIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVxdWVzdEhlYWRlciIgLz4NCiAgICA8b3BjOkZpZWxk IE5hbWU9Ik5vT2ZSZWZlcmVuY2VzVG9BZGQiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAg PG9wYzpGaWVsZCBOYW1lPSJSZWZlcmVuY2VzVG9BZGQiIFR5cGVOYW1lPSJ0bnM6QWRkUmVmZXJl bmNlc0l0ZW0iIExlbmd0aEZpZWxkPSJOb09mUmVmZXJlbmNlc1RvQWRkIiAvPg0KICA8L29wYzpT dHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkFkZFJlZmVyZW5j ZXNSZXNwb25zZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVs ZCBOYW1lPSJSZXNwb25zZUhlYWRlciIgVHlwZU5hbWU9InRuczpSZXNwb25zZUhlYWRlciIgLz4N CiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZSZXN1bHRzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAv Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVzdWx0cyIgVHlwZU5hbWU9InVhOlN0YXR1c0NvZGUi IExlbmd0aEZpZWxkPSJOb09mUmVzdWx0cyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZE aWFnbm9zdGljSW5mb3MiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBO YW1lPSJEaWFnbm9zdGljSW5mb3MiIFR5cGVOYW1lPSJ1YTpEaWFnbm9zdGljSW5mbyIgTGVuZ3Ro RmllbGQ9Ik5vT2ZEaWFnbm9zdGljSW5mb3MiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0K DQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iRGVsZXRlTm9kZXNJdGVtIiBCYXNlVHlwZT0i dWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vZGVJZCIgVHlwZU5h bWU9InVhOk5vZGVJZCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRlbGV0ZVRhcmdldFJlZmVy ZW5jZXMiIFR5cGVOYW1lPSJvcGM6Qm9vbGVhbiIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+ DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJEZWxldGVOb2Rlc1JlcXVlc3QiIEJhc2VU eXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVxdWVzdEhl YWRlciIgVHlwZU5hbWU9InRuczpSZXF1ZXN0SGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt ZT0iTm9PZk5vZGVzVG9EZWxldGUiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpG aWVsZCBOYW1lPSJOb2Rlc1RvRGVsZXRlIiBUeXBlTmFtZT0idG5zOkRlbGV0ZU5vZGVzSXRlbSIg TGVuZ3RoRmllbGQ9Ik5vT2ZOb2Rlc1RvRGVsZXRlIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlw ZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkRlbGV0ZU5vZGVzUmVzcG9uc2UiIEJh c2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVzcG9u c2VIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIC8+DQogICAgPG9wYzpGaWVs ZCBOYW1lPSJOb09mUmVzdWx0cyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZp ZWxkIE5hbWU9IlJlc3VsdHMiIFR5cGVOYW1lPSJ1YTpTdGF0dXNDb2RlIiBMZW5ndGhGaWVsZD0i Tm9PZlJlc3VsdHMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mRGlhZ25vc3RpY0luZm9z IiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGlhZ25vc3Rp Y0luZm9zIiBUeXBlTmFtZT0idWE6RGlhZ25vc3RpY0luZm8iIExlbmd0aEZpZWxkPSJOb09mRGlh Z25vc3RpY0luZm9zIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVj dHVyZWRUeXBlIE5hbWU9IkRlbGV0ZVJlZmVyZW5jZXNJdGVtIiBCYXNlVHlwZT0idWE6RXh0ZW5z aW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNvdXJjZU5vZGVJZCIgVHlwZU5hbWU9 InVhOk5vZGVJZCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlZmVyZW5jZVR5cGVJZCIgVHlw ZU5hbWU9InVhOk5vZGVJZCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IklzRm9yd2FyZCIgVHlw ZU5hbWU9Im9wYzpCb29sZWFuIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVGFyZ2V0Tm9kZUlk IiBUeXBlTmFtZT0idWE6RXhwYW5kZWROb2RlSWQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJE ZWxldGVCaWRpcmVjdGlvbmFsIiBUeXBlTmFtZT0ib3BjOkJvb2xlYW4iIC8+DQogIDwvb3BjOlN0 cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iRGVsZXRlUmVmZXJl bmNlc1JlcXVlc3QiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6Rmll bGQgTmFtZT0iUmVxdWVzdEhlYWRlciIgVHlwZU5hbWU9InRuczpSZXF1ZXN0SGVhZGVyIiAvPg0K ICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlJlZmVyZW5jZXNUb0RlbGV0ZSIgVHlwZU5hbWU9Im9w YzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlZmVyZW5jZXNUb0RlbGV0ZSIgVHlw ZU5hbWU9InRuczpEZWxldGVSZWZlcmVuY2VzSXRlbSIgTGVuZ3RoRmllbGQ9Ik5vT2ZSZWZlcmVu Y2VzVG9EZWxldGUiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0 dXJlZFR5cGUgTmFtZT0iRGVsZXRlUmVmZXJlbmNlc1Jlc3BvbnNlIiBCYXNlVHlwZT0idWE6RXh0 ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlc3BvbnNlSGVhZGVyIiBUeXBl TmFtZT0idG5zOlJlc3BvbnNlSGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlJl c3VsdHMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXN1 bHRzIiBUeXBlTmFtZT0idWE6U3RhdHVzQ29kZSIgTGVuZ3RoRmllbGQ9Ik5vT2ZSZXN1bHRzIiAv Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkRpYWdub3N0aWNJbmZvcyIgVHlwZU5hbWU9Im9w YzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRpYWdub3N0aWNJbmZvcyIgVHlwZU5h bWU9InVhOkRpYWdub3N0aWNJbmZvIiBMZW5ndGhGaWVsZD0iTm9PZkRpYWdub3N0aWNJbmZvcyIg Lz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpFbnVtZXJhdGVkVHlwZSBOYW1l PSJBdHRyaWJ1dGVXcml0ZU1hc2siIExlbmd0aEluQml0cz0iMzIiIElzT3B0aW9uU2V0PSJ0cnVl Ij4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJOb25lIiBWYWx1ZT0iMCIgLz4NCiAg ICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJBY2Nlc3NMZXZlbCIgVmFsdWU9IjEiIC8+DQog ICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iQXJyYXlEaW1lbnNpb25zIiBWYWx1ZT0iMiIg Lz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJCcm93c2VOYW1lIiBWYWx1ZT0iNCIg Lz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJDb250YWluc05vTG9vcHMiIFZhbHVl PSI4IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkRhdGFUeXBlIiBWYWx1ZT0i MTYiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iRGVzY3JpcHRpb24iIFZhbHVl PSIzMiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJEaXNwbGF5TmFtZSIgVmFs dWU9IjY0IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkV2ZW50Tm90aWZpZXIi IFZhbHVlPSIxMjgiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iRXhlY3V0YWJs ZSIgVmFsdWU9IjI1NiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJIaXN0b3Jp emluZyIgVmFsdWU9IjUxMiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJJbnZl cnNlTmFtZSIgVmFsdWU9IjEwMjQiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0i SXNBYnN0cmFjdCIgVmFsdWU9IjIwNDgiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFt ZT0iTWluaW11bVNhbXBsaW5nSW50ZXJ2YWwiIFZhbHVlPSI0MDk2IiAvPg0KICAgIDxvcGM6RW51 bWVyYXRlZFZhbHVlIE5hbWU9Ik5vZGVDbGFzcyIgVmFsdWU9IjgxOTIiIC8+DQogICAgPG9wYzpF bnVtZXJhdGVkVmFsdWUgTmFtZT0iTm9kZUlkIiBWYWx1ZT0iMTYzODQiIC8+DQogICAgPG9wYzpF bnVtZXJhdGVkVmFsdWUgTmFtZT0iU3ltbWV0cmljIiBWYWx1ZT0iMzI3NjgiIC8+DQogICAgPG9w YzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iVXNlckFjY2Vzc0xldmVsIiBWYWx1ZT0iNjU1MzYiIC8+ DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iVXNlckV4ZWN1dGFibGUiIFZhbHVlPSIx MzEwNzIiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iVXNlcldyaXRlTWFzayIg VmFsdWU9IjI2MjE0NCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJWYWx1ZVJh bmsiIFZhbHVlPSI1MjQyODgiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iV3Jp dGVNYXNrIiBWYWx1ZT0iMTA0ODU3NiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1l PSJWYWx1ZUZvclZhcmlhYmxlVHlwZSIgVmFsdWU9IjIwOTcxNTIiIC8+DQogICAgPG9wYzpFbnVt ZXJhdGVkVmFsdWUgTmFtZT0iRGF0YVR5cGVEZWZpbml0aW9uIiBWYWx1ZT0iNDE5NDMwNCIgLz4N CiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJSb2xlUGVybWlzc2lvbnMiIFZhbHVlPSI4 Mzg4NjA4IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkFjY2Vzc1Jlc3RyaWN0 aW9ucyIgVmFsdWU9IjE2Nzc3MjE2IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9 IkFjY2Vzc0xldmVsRXgiIFZhbHVlPSIzMzU1NDQzMiIgLz4NCiAgPC9vcGM6RW51bWVyYXRlZFR5 cGU+DQoNCiAgPG9wYzpFbnVtZXJhdGVkVHlwZSBOYW1lPSJCcm93c2VEaXJlY3Rpb24iIExlbmd0 aEluQml0cz0iMzIiPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkZvcndhcmQiIFZh bHVlPSIwIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkludmVyc2UiIFZhbHVl PSIxIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkJvdGgiIFZhbHVlPSIyIiAv Pg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkludmFsaWQiIFZhbHVlPSIzIiAvPg0K ICA8L29wYzpFbnVtZXJhdGVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlZp ZXdEZXNjcmlwdGlvbiIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpG aWVsZCBOYW1lPSJWaWV3SWQiIFR5cGVOYW1lPSJ1YTpOb2RlSWQiIC8+DQogICAgPG9wYzpGaWVs ZCBOYW1lPSJUaW1lc3RhbXAiIFR5cGVOYW1lPSJvcGM6RGF0ZVRpbWUiIC8+DQogICAgPG9wYzpG aWVsZCBOYW1lPSJWaWV3VmVyc2lvbiIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogIDwvb3Bj OlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iQnJvd3NlRGVz Y3JpcHRpb24iIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQg TmFtZT0iTm9kZUlkIiBUeXBlTmFtZT0idWE6Tm9kZUlkIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt ZT0iQnJvd3NlRGlyZWN0aW9uIiBUeXBlTmFtZT0idG5zOkJyb3dzZURpcmVjdGlvbiIgLz4NCiAg ICA8b3BjOkZpZWxkIE5hbWU9IlJlZmVyZW5jZVR5cGVJZCIgVHlwZU5hbWU9InVhOk5vZGVJZCIg Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkluY2x1ZGVTdWJ0eXBlcyIgVHlwZU5hbWU9Im9wYzpC b29sZWFuIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9kZUNsYXNzTWFzayIgVHlwZU5hbWU9 Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXN1bHRNYXNrIiBUeXBlTmFt ZT0ib3BjOlVJbnQzMiIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpFbnVt ZXJhdGVkVHlwZSBOYW1lPSJCcm93c2VSZXN1bHRNYXNrIiBMZW5ndGhJbkJpdHM9IjMyIj4NCiAg ICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJOb25lIiBWYWx1ZT0iMCIgLz4NCiAgICA8b3Bj OkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJSZWZlcmVuY2VUeXBlSWQiIFZhbHVlPSIxIiAvPg0KICAg IDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IklzRm9yd2FyZCIgVmFsdWU9IjIiIC8+DQogICAg PG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iTm9kZUNsYXNzIiBWYWx1ZT0iNCIgLz4NCiAgICA8 b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJCcm93c2VOYW1lIiBWYWx1ZT0iOCIgLz4NCiAgICA8 b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJEaXNwbGF5TmFtZSIgVmFsdWU9IjE2IiAvPg0KICAg IDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlR5cGVEZWZpbml0aW9uIiBWYWx1ZT0iMzIiIC8+ DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iQWxsIiBWYWx1ZT0iNjMiIC8+DQogICAg PG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iUmVmZXJlbmNlVHlwZUluZm8iIFZhbHVlPSIzIiAv Pg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlRhcmdldEluZm8iIFZhbHVlPSI2MCIg Lz4NCiAgPC9vcGM6RW51bWVyYXRlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1l PSJSZWZlcmVuY2VEZXNjcmlwdGlvbiIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQog ICAgPG9wYzpGaWVsZCBOYW1lPSJSZWZlcmVuY2VUeXBlSWQiIFR5cGVOYW1lPSJ1YTpOb2RlSWQi IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJJc0ZvcndhcmQiIFR5cGVOYW1lPSJvcGM6Qm9vbGVh biIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vZGVJZCIgVHlwZU5hbWU9InVhOkV4cGFuZGVk Tm9kZUlkIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQnJvd3NlTmFtZSIgVHlwZU5hbWU9InVh OlF1YWxpZmllZE5hbWUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEaXNwbGF5TmFtZSIgVHlw ZU5hbWU9InVhOkxvY2FsaXplZFRleHQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb2RlQ2xh c3MiIFR5cGVOYW1lPSJ0bnM6Tm9kZUNsYXNzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVHlw ZURlZmluaXRpb24iIFR5cGVOYW1lPSJ1YTpFeHBhbmRlZE5vZGVJZCIgLz4NCiAgPC9vcGM6U3Ry dWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpPcGFxdWVUeXBlIE5hbWU9IkNvbnRpbnVhdGlvblBvaW50 Ij4NCiAgPC9vcGM6T3BhcXVlVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkJy b3dzZVJlc3VsdCIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVs ZCBOYW1lPSJTdGF0dXNDb2RlIiBUeXBlTmFtZT0idWE6U3RhdHVzQ29kZSIgLz4NCiAgICA8b3Bj OkZpZWxkIE5hbWU9IkNvbnRpbnVhdGlvblBvaW50IiBUeXBlTmFtZT0ib3BjOkJ5dGVTdHJpbmci IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mUmVmZXJlbmNlcyIgVHlwZU5hbWU9Im9wYzpJ bnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlZmVyZW5jZXMiIFR5cGVOYW1lPSJ0bnM6 UmVmZXJlbmNlRGVzY3JpcHRpb24iIExlbmd0aEZpZWxkPSJOb09mUmVmZXJlbmNlcyIgLz4NCiAg PC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJCcm93 c2VSZXF1ZXN0IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxk IE5hbWU9IlJlcXVlc3RIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVxdWVzdEhlYWRlciIgLz4NCiAg ICA8b3BjOkZpZWxkIE5hbWU9IlZpZXciIFR5cGVOYW1lPSJ0bnM6Vmlld0Rlc2NyaXB0aW9uIiAv Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVxdWVzdGVkTWF4UmVmZXJlbmNlc1Blck5vZGUiIFR5 cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZk5vZGVzVG9C cm93c2UiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb2Rl c1RvQnJvd3NlIiBUeXBlTmFtZT0idG5zOkJyb3dzZURlc2NyaXB0aW9uIiBMZW5ndGhGaWVsZD0i Tm9PZk5vZGVzVG9Ccm93c2UiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6 U3RydWN0dXJlZFR5cGUgTmFtZT0iQnJvd3NlUmVzcG9uc2UiIEJhc2VUeXBlPSJ1YTpFeHRlbnNp b25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVzcG9uc2VIZWFkZXIiIFR5cGVOYW1l PSJ0bnM6UmVzcG9uc2VIZWFkZXIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mUmVzdWx0 cyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlc3VsdHMi IFR5cGVOYW1lPSJ0bnM6QnJvd3NlUmVzdWx0IiBMZW5ndGhGaWVsZD0iTm9PZlJlc3VsdHMiIC8+ DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mRGlhZ25vc3RpY0luZm9zIiBUeXBlTmFtZT0ib3Bj OkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGlhZ25vc3RpY0luZm9zIiBUeXBlTmFt ZT0idWE6RGlhZ25vc3RpY0luZm8iIExlbmd0aEZpZWxkPSJOb09mRGlhZ25vc3RpY0luZm9zIiAv Pg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9 IkJyb3dzZU5leHRSZXF1ZXN0IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8 b3BjOkZpZWxkIE5hbWU9IlJlcXVlc3RIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVxdWVzdEhlYWRl ciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlbGVhc2VDb250aW51YXRpb25Qb2ludHMiIFR5 cGVOYW1lPSJvcGM6Qm9vbGVhbiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZDb250aW51 YXRpb25Qb2ludHMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1l PSJDb250aW51YXRpb25Qb2ludHMiIFR5cGVOYW1lPSJvcGM6Qnl0ZVN0cmluZyIgTGVuZ3RoRmll bGQ9Ik5vT2ZDb250aW51YXRpb25Qb2ludHMiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0K DQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iQnJvd3NlTmV4dFJlc3BvbnNlIiBCYXNlVHlw ZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlc3BvbnNlSGVh ZGVyIiBUeXBlTmFtZT0idG5zOlJlc3BvbnNlSGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt ZT0iTm9PZlJlc3VsdHMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBO YW1lPSJSZXN1bHRzIiBUeXBlTmFtZT0idG5zOkJyb3dzZVJlc3VsdCIgTGVuZ3RoRmllbGQ9Ik5v T2ZSZXN1bHRzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkRpYWdub3N0aWNJbmZvcyIg VHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRpYWdub3N0aWNJ bmZvcyIgVHlwZU5hbWU9InVhOkRpYWdub3N0aWNJbmZvIiBMZW5ndGhGaWVsZD0iTm9PZkRpYWdu b3N0aWNJbmZvcyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1 cmVkVHlwZSBOYW1lPSJSZWxhdGl2ZVBhdGhFbGVtZW50IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9u T2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlZmVyZW5jZVR5cGVJZCIgVHlwZU5hbWU9 InVhOk5vZGVJZCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IklzSW52ZXJzZSIgVHlwZU5hbWU9 Im9wYzpCb29sZWFuIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iSW5jbHVkZVN1YnR5cGVzIiBU eXBlTmFtZT0ib3BjOkJvb2xlYW4iIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJUYXJnZXROYW1l IiBUeXBlTmFtZT0idWE6UXVhbGlmaWVkTmFtZSIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+ DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJSZWxhdGl2ZVBhdGgiIEJhc2VUeXBlPSJ1 YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkVsZW1lbnRzIiBU eXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRWxlbWVudHMiIFR5 cGVOYW1lPSJ0bnM6UmVsYXRpdmVQYXRoRWxlbWVudCIgTGVuZ3RoRmllbGQ9Ik5vT2ZFbGVtZW50 cyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBO YW1lPSJCcm93c2VQYXRoIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3Bj OkZpZWxkIE5hbWU9IlN0YXJ0aW5nTm9kZSIgVHlwZU5hbWU9InVhOk5vZGVJZCIgLz4NCiAgICA8 b3BjOkZpZWxkIE5hbWU9IlJlbGF0aXZlUGF0aCIgVHlwZU5hbWU9InRuczpSZWxhdGl2ZVBhdGgi IC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFt ZT0iQnJvd3NlUGF0aFRhcmdldCIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAg PG9wYzpGaWVsZCBOYW1lPSJUYXJnZXRJZCIgVHlwZU5hbWU9InVhOkV4cGFuZGVkTm9kZUlkIiAv Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVtYWluaW5nUGF0aEluZGV4IiBUeXBlTmFtZT0ib3Bj OlVJbnQzMiIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVk VHlwZSBOYW1lPSJCcm93c2VQYXRoUmVzdWx0IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0 Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlN0YXR1c0NvZGUiIFR5cGVOYW1lPSJ1YTpTdGF0dXND b2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlRhcmdldHMiIFR5cGVOYW1lPSJvcGM6 SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJUYXJnZXRzIiBUeXBlTmFtZT0idG5zOkJy b3dzZVBhdGhUYXJnZXQiIExlbmd0aEZpZWxkPSJOb09mVGFyZ2V0cyIgLz4NCiAgPC9vcGM6U3Ry dWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJUcmFuc2xhdGVCcm93 c2VQYXRoc1RvTm9kZUlkc1JlcXVlc3QiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0K ICAgIDxvcGM6RmllbGQgTmFtZT0iUmVxdWVzdEhlYWRlciIgVHlwZU5hbWU9InRuczpSZXF1ZXN0 SGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkJyb3dzZVBhdGhzIiBUeXBlTmFt ZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQnJvd3NlUGF0aHMiIFR5cGVO YW1lPSJ0bnM6QnJvd3NlUGF0aCIgTGVuZ3RoRmllbGQ9Ik5vT2ZCcm93c2VQYXRocyIgLz4NCiAg PC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJUcmFu c2xhdGVCcm93c2VQYXRoc1RvTm9kZUlkc1Jlc3BvbnNlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9u T2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlc3BvbnNlSGVhZGVyIiBUeXBlTmFtZT0i dG5zOlJlc3BvbnNlSGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlJlc3VsdHMi IFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXN1bHRzIiBU eXBlTmFtZT0idG5zOkJyb3dzZVBhdGhSZXN1bHQiIExlbmd0aEZpZWxkPSJOb09mUmVzdWx0cyIg Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZEaWFnbm9zdGljSW5mb3MiIFR5cGVOYW1lPSJv cGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEaWFnbm9zdGljSW5mb3MiIFR5cGVO YW1lPSJ1YTpEaWFnbm9zdGljSW5mbyIgTGVuZ3RoRmllbGQ9Ik5vT2ZEaWFnbm9zdGljSW5mb3Mi IC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFt ZT0iUmVnaXN0ZXJOb2Rlc1JlcXVlc3QiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0K ICAgIDxvcGM6RmllbGQgTmFtZT0iUmVxdWVzdEhlYWRlciIgVHlwZU5hbWU9InRuczpSZXF1ZXN0 SGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZk5vZGVzVG9SZWdpc3RlciIgVHlw ZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vZGVzVG9SZWdpc3Rl ciIgVHlwZU5hbWU9InVhOk5vZGVJZCIgTGVuZ3RoRmllbGQ9Ik5vT2ZOb2Rlc1RvUmVnaXN0ZXIi IC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFt ZT0iUmVnaXN0ZXJOb2Rlc1Jlc3BvbnNlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4N CiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlc3BvbnNlSGVhZGVyIiBUeXBlTmFtZT0idG5zOlJlc3Bv bnNlSGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlJlZ2lzdGVyZWROb2RlSWRz IiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVnaXN0ZXJl ZE5vZGVJZHMiIFR5cGVOYW1lPSJ1YTpOb2RlSWQiIExlbmd0aEZpZWxkPSJOb09mUmVnaXN0ZXJl ZE5vZGVJZHMiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJl ZFR5cGUgTmFtZT0iVW5yZWdpc3Rlck5vZGVzUmVxdWVzdCIgQmFzZVR5cGU9InVhOkV4dGVuc2lv bk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXF1ZXN0SGVhZGVyIiBUeXBlTmFtZT0i dG5zOlJlcXVlc3RIZWFkZXIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mTm9kZXNUb1Vu cmVnaXN0ZXIiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJO b2Rlc1RvVW5yZWdpc3RlciIgVHlwZU5hbWU9InVhOk5vZGVJZCIgTGVuZ3RoRmllbGQ9Ik5vT2ZO b2Rlc1RvVW5yZWdpc3RlciIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpT dHJ1Y3R1cmVkVHlwZSBOYW1lPSJVbnJlZ2lzdGVyTm9kZXNSZXNwb25zZSIgQmFzZVR5cGU9InVh OkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXNwb25zZUhlYWRlciIg VHlwZU5hbWU9InRuczpSZXNwb25zZUhlYWRlciIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+ DQoNCiAgPG9wYzpPcGFxdWVUeXBlIE5hbWU9IkNvdW50ZXIiPg0KICA8L29wYzpPcGFxdWVUeXBl Pg0KDQogIDxvcGM6T3BhcXVlVHlwZSBOYW1lPSJOdW1lcmljUmFuZ2UiPg0KICA8L29wYzpPcGFx dWVUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iRW5kcG9pbnRDb25maWd1cmF0 aW9uIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 Ik9wZXJhdGlvblRpbWVvdXQiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVs ZCBOYW1lPSJVc2VCaW5hcnlFbmNvZGluZyIgVHlwZU5hbWU9Im9wYzpCb29sZWFuIiAvPg0KICAg IDxvcGM6RmllbGQgTmFtZT0iTWF4U3RyaW5nTGVuZ3RoIiBUeXBlTmFtZT0ib3BjOkludDMyIiAv Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTWF4Qnl0ZVN0cmluZ0xlbmd0aCIgVHlwZU5hbWU9Im9w YzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik1heEFycmF5TGVuZ3RoIiBUeXBlTmFt ZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTWF4TWVzc2FnZVNpemUiIFR5 cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJNYXhCdWZmZXJTaXpl IiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQ2hhbm5lbExp ZmV0aW1lIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2Vj dXJpdHlUb2tlbkxpZmV0aW1lIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICA8L29wYzpTdHJ1 Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlF1ZXJ5RGF0YURlc2Ny aXB0aW9uIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5h bWU9IlJlbGF0aXZlUGF0aCIgVHlwZU5hbWU9InRuczpSZWxhdGl2ZVBhdGgiIC8+DQogICAgPG9w YzpGaWVsZCBOYW1lPSJBdHRyaWJ1dGVJZCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAg PG9wYzpGaWVsZCBOYW1lPSJJbmRleFJhbmdlIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAg PC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJOb2Rl VHlwZURlc2NyaXB0aW9uIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3Bj OkZpZWxkIE5hbWU9IlR5cGVEZWZpbml0aW9uTm9kZSIgVHlwZU5hbWU9InVhOkV4cGFuZGVkTm9k ZUlkIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iSW5jbHVkZVN1YlR5cGVzIiBUeXBlTmFtZT0i b3BjOkJvb2xlYW4iIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mRGF0YVRvUmV0dXJuIiBU eXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGF0YVRvUmV0dXJu IiBUeXBlTmFtZT0idG5zOlF1ZXJ5RGF0YURlc2NyaXB0aW9uIiBMZW5ndGhGaWVsZD0iTm9PZkRh dGFUb1JldHVybiIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpFbnVtZXJh dGVkVHlwZSBOYW1lPSJGaWx0ZXJPcGVyYXRvciIgTGVuZ3RoSW5CaXRzPSIzMiI+DQogICAgPG9w YzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iRXF1YWxzIiBWYWx1ZT0iMCIgLz4NCiAgICA8b3BjOkVu dW1lcmF0ZWRWYWx1ZSBOYW1lPSJJc051bGwiIFZhbHVlPSIxIiAvPg0KICAgIDxvcGM6RW51bWVy YXRlZFZhbHVlIE5hbWU9IkdyZWF0ZXJUaGFuIiBWYWx1ZT0iMiIgLz4NCiAgICA8b3BjOkVudW1l cmF0ZWRWYWx1ZSBOYW1lPSJMZXNzVGhhbiIgVmFsdWU9IjMiIC8+DQogICAgPG9wYzpFbnVtZXJh dGVkVmFsdWUgTmFtZT0iR3JlYXRlclRoYW5PckVxdWFsIiBWYWx1ZT0iNCIgLz4NCiAgICA8b3Bj OkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJMZXNzVGhhbk9yRXF1YWwiIFZhbHVlPSI1IiAvPg0KICAg IDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9Ikxpa2UiIFZhbHVlPSI2IiAvPg0KICAgIDxvcGM6 RW51bWVyYXRlZFZhbHVlIE5hbWU9Ik5vdCIgVmFsdWU9IjciIC8+DQogICAgPG9wYzpFbnVtZXJh dGVkVmFsdWUgTmFtZT0iQmV0d2VlbiIgVmFsdWU9IjgiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVk VmFsdWUgTmFtZT0iSW5MaXN0IiBWYWx1ZT0iOSIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1 ZSBOYW1lPSJBbmQiIFZhbHVlPSIxMCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1l PSJPciIgVmFsdWU9IjExIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkNhc3Qi IFZhbHVlPSIxMiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJJblZpZXciIFZh bHVlPSIxMyIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJPZlR5cGUiIFZhbHVl PSIxNCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJSZWxhdGVkVG8iIFZhbHVl PSIxNSIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJCaXR3aXNlQW5kIiBWYWx1 ZT0iMTYiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iQml0d2lzZU9yIiBWYWx1 ZT0iMTciIC8+DQogIDwvb3BjOkVudW1lcmF0ZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5 cGUgTmFtZT0iUXVlcnlEYXRhU2V0IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAg ICA8b3BjOkZpZWxkIE5hbWU9Ik5vZGVJZCIgVHlwZU5hbWU9InVhOkV4cGFuZGVkTm9kZUlkIiAv Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVHlwZURlZmluaXRpb25Ob2RlIiBUeXBlTmFtZT0idWE6 RXhwYW5kZWROb2RlSWQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mVmFsdWVzIiBUeXBl TmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVmFsdWVzIiBUeXBlTmFt ZT0idWE6VmFyaWFudCIgTGVuZ3RoRmllbGQ9Ik5vT2ZWYWx1ZXMiIC8+DQogIDwvb3BjOlN0cnVj dHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iTm9kZVJlZmVyZW5jZSIg QmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb2Rl SWQiIFR5cGVOYW1lPSJ1YTpOb2RlSWQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZWZlcmVu Y2VUeXBlSWQiIFR5cGVOYW1lPSJ1YTpOb2RlSWQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJJ c0ZvcndhcmQiIFR5cGVOYW1lPSJvcGM6Qm9vbGVhbiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 Ik5vT2ZSZWZlcmVuY2VkTm9kZUlkcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3Bj OkZpZWxkIE5hbWU9IlJlZmVyZW5jZWROb2RlSWRzIiBUeXBlTmFtZT0idWE6Tm9kZUlkIiBMZW5n dGhGaWVsZD0iTm9PZlJlZmVyZW5jZWROb2RlSWRzIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlw ZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkNvbnRlbnRGaWx0ZXJFbGVtZW50IiBC YXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkZpbHRl ck9wZXJhdG9yIiBUeXBlTmFtZT0idG5zOkZpbHRlck9wZXJhdG9yIiAvPg0KICAgIDxvcGM6Rmll bGQgTmFtZT0iTm9PZkZpbHRlck9wZXJhbmRzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAg IDxvcGM6RmllbGQgTmFtZT0iRmlsdGVyT3BlcmFuZHMiIFR5cGVOYW1lPSJ1YTpFeHRlbnNpb25P YmplY3QiIExlbmd0aEZpZWxkPSJOb09mRmlsdGVyT3BlcmFuZHMiIC8+DQogIDwvb3BjOlN0cnVj dHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iQ29udGVudEZpbHRlciIg QmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09m RWxlbWVudHMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJF bGVtZW50cyIgVHlwZU5hbWU9InRuczpDb250ZW50RmlsdGVyRWxlbWVudCIgTGVuZ3RoRmllbGQ9 Ik5vT2ZFbGVtZW50cyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1 Y3R1cmVkVHlwZSBOYW1lPSJGaWx0ZXJPcGVyYW5kIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2Jq ZWN0Ij4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBO YW1lPSJFbGVtZW50T3BlcmFuZCIgQmFzZVR5cGU9InRuczpGaWx0ZXJPcGVyYW5kIj4NCiAgICA8 b3BjOkZpZWxkIE5hbWU9IkluZGV4IiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgPC9vcGM6 U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJMaXRlcmFsT3Bl cmFuZCIgQmFzZVR5cGU9InRuczpGaWx0ZXJPcGVyYW5kIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 IlZhbHVlIiBUeXBlTmFtZT0idWE6VmFyaWFudCIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+ DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJBdHRyaWJ1dGVPcGVyYW5kIiBCYXNlVHlw ZT0idG5zOkZpbHRlck9wZXJhbmQiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9kZUlkIiBUeXBl TmFtZT0idWE6Tm9kZUlkIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQWxpYXMiIFR5cGVOYW1l PSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQnJvd3NlUGF0aCIgVHlwZU5h bWU9InRuczpSZWxhdGl2ZVBhdGgiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJBdHRyaWJ1dGVJ ZCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJJbmRleFJh bmdlIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoN CiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJTaW1wbGVBdHRyaWJ1dGVPcGVyYW5kIiBCYXNl VHlwZT0idG5zOkZpbHRlck9wZXJhbmQiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVHlwZURlZmlu aXRpb25JZCIgVHlwZU5hbWU9InVhOk5vZGVJZCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5v T2ZCcm93c2VQYXRoIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt ZT0iQnJvd3NlUGF0aCIgVHlwZU5hbWU9InVhOlF1YWxpZmllZE5hbWUiIExlbmd0aEZpZWxkPSJO b09mQnJvd3NlUGF0aCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkF0dHJpYnV0ZUlkIiBUeXBl TmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkluZGV4UmFuZ2UiIFR5 cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3Bj OlN0cnVjdHVyZWRUeXBlIE5hbWU9IkNvbnRlbnRGaWx0ZXJFbGVtZW50UmVzdWx0IiBCYXNlVHlw ZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlN0YXR1c0NvZGUi IFR5cGVOYW1lPSJ1YTpTdGF0dXNDb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZk9w ZXJhbmRTdGF0dXNDb2RlcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxk IE5hbWU9Ik9wZXJhbmRTdGF0dXNDb2RlcyIgVHlwZU5hbWU9InVhOlN0YXR1c0NvZGUiIExlbmd0 aEZpZWxkPSJOb09mT3BlcmFuZFN0YXR1c0NvZGVzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i Tm9PZk9wZXJhbmREaWFnbm9zdGljSW5mb3MiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAg PG9wYzpGaWVsZCBOYW1lPSJPcGVyYW5kRGlhZ25vc3RpY0luZm9zIiBUeXBlTmFtZT0idWE6RGlh Z25vc3RpY0luZm8iIExlbmd0aEZpZWxkPSJOb09mT3BlcmFuZERpYWdub3N0aWNJbmZvcyIgLz4N CiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJD b250ZW50RmlsdGVyUmVzdWx0IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8 b3BjOkZpZWxkIE5hbWU9Ik5vT2ZFbGVtZW50UmVzdWx0cyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIg Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkVsZW1lbnRSZXN1bHRzIiBUeXBlTmFtZT0idG5zOkNv bnRlbnRGaWx0ZXJFbGVtZW50UmVzdWx0IiBMZW5ndGhGaWVsZD0iTm9PZkVsZW1lbnRSZXN1bHRz IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkVsZW1lbnREaWFnbm9zdGljSW5mb3MiIFR5 cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJFbGVtZW50RGlhZ25v c3RpY0luZm9zIiBUeXBlTmFtZT0idWE6RGlhZ25vc3RpY0luZm8iIExlbmd0aEZpZWxkPSJOb09m RWxlbWVudERpYWdub3N0aWNJbmZvcyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAg PG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJQYXJzaW5nUmVzdWx0IiBCYXNlVHlwZT0idWE6RXh0 ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlN0YXR1c0NvZGUiIFR5cGVOYW1l PSJ1YTpTdGF0dXNDb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkRhdGFTdGF0dXND b2RlcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRhdGFT dGF0dXNDb2RlcyIgVHlwZU5hbWU9InVhOlN0YXR1c0NvZGUiIExlbmd0aEZpZWxkPSJOb09mRGF0 YVN0YXR1c0NvZGVzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkRhdGFEaWFnbm9zdGlj SW5mb3MiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEYXRh RGlhZ25vc3RpY0luZm9zIiBUeXBlTmFtZT0idWE6RGlhZ25vc3RpY0luZm8iIExlbmd0aEZpZWxk PSJOb09mRGF0YURpYWdub3N0aWNJbmZvcyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoN CiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJRdWVyeUZpcnN0UmVxdWVzdCIgQmFzZVR5cGU9 InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXF1ZXN0SGVhZGVy IiBUeXBlTmFtZT0idG5zOlJlcXVlc3RIZWFkZXIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJW aWV3IiBUeXBlTmFtZT0idG5zOlZpZXdEZXNjcmlwdGlvbiIgLz4NCiAgICA8b3BjOkZpZWxkIE5h bWU9Ik5vT2ZOb2RlVHlwZXMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVs ZCBOYW1lPSJOb2RlVHlwZXMiIFR5cGVOYW1lPSJ0bnM6Tm9kZVR5cGVEZXNjcmlwdGlvbiIgTGVu Z3RoRmllbGQ9Ik5vT2ZOb2RlVHlwZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJGaWx0ZXIi IFR5cGVOYW1lPSJ0bnM6Q29udGVudEZpbHRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik1h eERhdGFTZXRzVG9SZXR1cm4iIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6Rmll bGQgTmFtZT0iTWF4UmVmZXJlbmNlc1RvUmV0dXJuIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4N CiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJR dWVyeUZpcnN0UmVzcG9uc2UiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxv cGM6RmllbGQgTmFtZT0iUmVzcG9uc2VIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVzcG9uc2VIZWFk ZXIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mUXVlcnlEYXRhU2V0cyIgVHlwZU5hbWU9 Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlF1ZXJ5RGF0YVNldHMiIFR5cGVO YW1lPSJ0bnM6UXVlcnlEYXRhU2V0IiBMZW5ndGhGaWVsZD0iTm9PZlF1ZXJ5RGF0YVNldHMiIC8+ DQogICAgPG9wYzpGaWVsZCBOYW1lPSJDb250aW51YXRpb25Qb2ludCIgVHlwZU5hbWU9Im9wYzpC eXRlU3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlBhcnNpbmdSZXN1bHRzIiBU eXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUGFyc2luZ1Jlc3Vs dHMiIFR5cGVOYW1lPSJ0bnM6UGFyc2luZ1Jlc3VsdCIgTGVuZ3RoRmllbGQ9Ik5vT2ZQYXJzaW5n UmVzdWx0cyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZEaWFnbm9zdGljSW5mb3MiIFR5 cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEaWFnbm9zdGljSW5m b3MiIFR5cGVOYW1lPSJ1YTpEaWFnbm9zdGljSW5mbyIgTGVuZ3RoRmllbGQ9Ik5vT2ZEaWFnbm9z dGljSW5mb3MiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJGaWx0ZXJSZXN1bHQiIFR5cGVOYW1l PSJ0bnM6Q29udGVudEZpbHRlclJlc3VsdCIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoN CiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJRdWVyeU5leHRSZXF1ZXN0IiBCYXNlVHlwZT0i dWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlcXVlc3RIZWFkZXIi IFR5cGVOYW1lPSJ0bnM6UmVxdWVzdEhlYWRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJl bGVhc2VDb250aW51YXRpb25Qb2ludCIgVHlwZU5hbWU9Im9wYzpCb29sZWFuIiAvPg0KICAgIDxv cGM6RmllbGQgTmFtZT0iQ29udGludWF0aW9uUG9pbnQiIFR5cGVOYW1lPSJvcGM6Qnl0ZVN0cmlu ZyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBO YW1lPSJRdWVyeU5leHRSZXNwb25zZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQog ICAgPG9wYzpGaWVsZCBOYW1lPSJSZXNwb25zZUhlYWRlciIgVHlwZU5hbWU9InRuczpSZXNwb25z ZUhlYWRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZRdWVyeURhdGFTZXRzIiBUeXBl TmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUXVlcnlEYXRhU2V0cyIg VHlwZU5hbWU9InRuczpRdWVyeURhdGFTZXQiIExlbmd0aEZpZWxkPSJOb09mUXVlcnlEYXRhU2V0 cyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJldmlzZWRDb250aW51YXRpb25Qb2ludCIgVHlw ZU5hbWU9Im9wYzpCeXRlU3RyaW5nIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8 b3BjOkVudW1lcmF0ZWRUeXBlIE5hbWU9IlRpbWVzdGFtcHNUb1JldHVybiIgTGVuZ3RoSW5CaXRz PSIzMiI+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iU291cmNlIiBWYWx1ZT0iMCIg Lz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJTZXJ2ZXIiIFZhbHVlPSIxIiAvPg0K ICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkJvdGgiIFZhbHVlPSIyIiAvPg0KICAgIDxv cGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9Ik5laXRoZXIiIFZhbHVlPSIzIiAvPg0KICAgIDxvcGM6 RW51bWVyYXRlZFZhbHVlIE5hbWU9IkludmFsaWQiIFZhbHVlPSI0IiAvPg0KICA8L29wYzpFbnVt ZXJhdGVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlJlYWRWYWx1ZUlkIiBC YXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vZGVJ ZCIgVHlwZU5hbWU9InVhOk5vZGVJZCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkF0dHJpYnV0 ZUlkIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkluZGV4 UmFuZ2UiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGF0 YUVuY29kaW5nIiBUeXBlTmFtZT0idWE6UXVhbGlmaWVkTmFtZSIgLz4NCiAgPC9vcGM6U3RydWN0 dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJSZWFkUmVxdWVzdCIgQmFz ZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXF1ZXN0 SGVhZGVyIiBUeXBlTmFtZT0idG5zOlJlcXVlc3RIZWFkZXIiIC8+DQogICAgPG9wYzpGaWVsZCBO YW1lPSJNYXhBZ2UiIFR5cGVOYW1lPSJvcGM6RG91YmxlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt ZT0iVGltZXN0YW1wc1RvUmV0dXJuIiBUeXBlTmFtZT0idG5zOlRpbWVzdGFtcHNUb1JldHVybiIg Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZOb2Rlc1RvUmVhZCIgVHlwZU5hbWU9Im9wYzpJ bnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vZGVzVG9SZWFkIiBUeXBlTmFtZT0idG5z OlJlYWRWYWx1ZUlkIiBMZW5ndGhGaWVsZD0iTm9PZk5vZGVzVG9SZWFkIiAvPg0KICA8L29wYzpT dHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlJlYWRSZXNwb25z ZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJS ZXNwb25zZUhlYWRlciIgVHlwZU5hbWU9InRuczpSZXNwb25zZUhlYWRlciIgLz4NCiAgICA8b3Bj OkZpZWxkIE5hbWU9Ik5vT2ZSZXN1bHRzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxv cGM6RmllbGQgTmFtZT0iUmVzdWx0cyIgVHlwZU5hbWU9InVhOkRhdGFWYWx1ZSIgTGVuZ3RoRmll bGQ9Ik5vT2ZSZXN1bHRzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkRpYWdub3N0aWNJ bmZvcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRpYWdu b3N0aWNJbmZvcyIgVHlwZU5hbWU9InVhOkRpYWdub3N0aWNJbmZvIiBMZW5ndGhGaWVsZD0iTm9P ZkRpYWdub3N0aWNJbmZvcyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpT dHJ1Y3R1cmVkVHlwZSBOYW1lPSJIaXN0b3J5UmVhZFZhbHVlSWQiIEJhc2VUeXBlPSJ1YTpFeHRl bnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9kZUlkIiBUeXBlTmFtZT0idWE6 Tm9kZUlkIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iSW5kZXhSYW5nZSIgVHlwZU5hbWU9Im9w YzpTdHJpbmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEYXRhRW5jb2RpbmciIFR5cGVOYW1l PSJ1YTpRdWFsaWZpZWROYW1lIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQ29udGludWF0aW9u UG9pbnQiIFR5cGVOYW1lPSJvcGM6Qnl0ZVN0cmluZyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5 cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJIaXN0b3J5UmVhZFJlc3VsdCIgQmFz ZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTdGF0dXND b2RlIiBUeXBlTmFtZT0idWE6U3RhdHVzQ29kZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkNv bnRpbnVhdGlvblBvaW50IiBUeXBlTmFtZT0ib3BjOkJ5dGVTdHJpbmciIC8+DQogICAgPG9wYzpG aWVsZCBOYW1lPSJIaXN0b3J5RGF0YSIgVHlwZU5hbWU9InVhOkV4dGVuc2lvbk9iamVjdCIgLz4N CiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJI aXN0b3J5UmVhZERldGFpbHMiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICA8L29w YzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlJlYWRFdmVu dERldGFpbHMiIEJhc2VUeXBlPSJ0bnM6SGlzdG9yeVJlYWREZXRhaWxzIj4NCiAgICA8b3BjOkZp ZWxkIE5hbWU9Ik51bVZhbHVlc1Blck5vZGUiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAg IDxvcGM6RmllbGQgTmFtZT0iU3RhcnRUaW1lIiBUeXBlTmFtZT0ib3BjOkRhdGVUaW1lIiAvPg0K ICAgIDxvcGM6RmllbGQgTmFtZT0iRW5kVGltZSIgVHlwZU5hbWU9Im9wYzpEYXRlVGltZSIgLz4N CiAgICA8b3BjOkZpZWxkIE5hbWU9IkZpbHRlciIgVHlwZU5hbWU9InRuczpFdmVudEZpbHRlciIg Lz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1l PSJSZWFkUmF3TW9kaWZpZWREZXRhaWxzIiBCYXNlVHlwZT0idG5zOkhpc3RvcnlSZWFkRGV0YWls cyI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJJc1JlYWRNb2RpZmllZCIgVHlwZU5hbWU9Im9wYzpC b29sZWFuIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU3RhcnRUaW1lIiBUeXBlTmFtZT0ib3Bj OkRhdGVUaW1lIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRW5kVGltZSIgVHlwZU5hbWU9Im9w YzpEYXRlVGltZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik51bVZhbHVlc1Blck5vZGUiIFR5 cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmV0dXJuQm91bmRz IiBUeXBlTmFtZT0ib3BjOkJvb2xlYW4iIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQog IDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iUmVhZFByb2Nlc3NlZERldGFpbHMiIEJhc2VUeXBl PSJ0bnM6SGlzdG9yeVJlYWREZXRhaWxzIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlN0YXJ0VGlt ZSIgVHlwZU5hbWU9Im9wYzpEYXRlVGltZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkVuZFRp bWUiIFR5cGVOYW1lPSJvcGM6RGF0ZVRpbWUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJQcm9j ZXNzaW5nSW50ZXJ2YWwiIFR5cGVOYW1lPSJvcGM6RG91YmxlIiAvPg0KICAgIDxvcGM6RmllbGQg TmFtZT0iTm9PZkFnZ3JlZ2F0ZVR5cGUiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9w YzpGaWVsZCBOYW1lPSJBZ2dyZWdhdGVUeXBlIiBUeXBlTmFtZT0idWE6Tm9kZUlkIiBMZW5ndGhG aWVsZD0iTm9PZkFnZ3JlZ2F0ZVR5cGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJBZ2dyZWdh dGVDb25maWd1cmF0aW9uIiBUeXBlTmFtZT0idG5zOkFnZ3JlZ2F0ZUNvbmZpZ3VyYXRpb24iIC8+ DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0i UmVhZEF0VGltZURldGFpbHMiIEJhc2VUeXBlPSJ0bnM6SGlzdG9yeVJlYWREZXRhaWxzIj4NCiAg ICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZSZXFUaW1lcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4N CiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlcVRpbWVzIiBUeXBlTmFtZT0ib3BjOkRhdGVUaW1lIiBM ZW5ndGhGaWVsZD0iTm9PZlJlcVRpbWVzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVXNlU2lt cGxlQm91bmRzIiBUeXBlTmFtZT0ib3BjOkJvb2xlYW4iIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRU eXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iUmVhZEFubm90YXRpb25EYXRhRGV0 YWlscyIgQmFzZVR5cGU9InRuczpIaXN0b3J5UmVhZERldGFpbHMiPg0KICAgIDxvcGM6RmllbGQg TmFtZT0iTm9PZlJlcVRpbWVzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6Rmll bGQgTmFtZT0iUmVxVGltZXMiIFR5cGVOYW1lPSJvcGM6RGF0ZVRpbWUiIExlbmd0aEZpZWxkPSJO b09mUmVxVGltZXMiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0 dXJlZFR5cGUgTmFtZT0iSGlzdG9yeURhdGEiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3Qi Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkRhdGFWYWx1ZXMiIFR5cGVOYW1lPSJvcGM6SW50 MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEYXRhVmFsdWVzIiBUeXBlTmFtZT0idWE6RGF0 YVZhbHVlIiBMZW5ndGhGaWVsZD0iTm9PZkRhdGFWYWx1ZXMiIC8+DQogIDwvb3BjOlN0cnVjdHVy ZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iTW9kaWZpY2F0aW9uSW5mbyIg QmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJNb2Rp ZmljYXRpb25UaW1lIiBUeXBlTmFtZT0ib3BjOkRhdGVUaW1lIiAvPg0KICAgIDxvcGM6RmllbGQg TmFtZT0iVXBkYXRlVHlwZSIgVHlwZU5hbWU9InRuczpIaXN0b3J5VXBkYXRlVHlwZSIgLz4NCiAg ICA8b3BjOkZpZWxkIE5hbWU9IlVzZXJOYW1lIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAg PC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJIaXN0 b3J5TW9kaWZpZWREYXRhIiBCYXNlVHlwZT0idG5zOkhpc3RvcnlEYXRhIj4NCiAgICA8b3BjOkZp ZWxkIE5hbWU9Ik5vT2ZEYXRhVmFsdWVzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxv cGM6RmllbGQgTmFtZT0iRGF0YVZhbHVlcyIgVHlwZU5hbWU9InVhOkRhdGFWYWx1ZSIgTGVuZ3Ro RmllbGQ9Ik5vT2ZEYXRhVmFsdWVzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZk1vZGlm aWNhdGlvbkluZm9zIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt ZT0iTW9kaWZpY2F0aW9uSW5mb3MiIFR5cGVOYW1lPSJ0bnM6TW9kaWZpY2F0aW9uSW5mbyIgTGVu Z3RoRmllbGQ9Ik5vT2ZNb2RpZmljYXRpb25JbmZvcyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5 cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJIaXN0b3J5RXZlbnQiIEJhc2VUeXBl PSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkV2ZW50cyIg VHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkV2ZW50cyIgVHlw ZU5hbWU9InRuczpIaXN0b3J5RXZlbnRGaWVsZExpc3QiIExlbmd0aEZpZWxkPSJOb09mRXZlbnRz IiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5h bWU9Ikhpc3RvcnlSZWFkUmVxdWVzdCIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQog ICAgPG9wYzpGaWVsZCBOYW1lPSJSZXF1ZXN0SGVhZGVyIiBUeXBlTmFtZT0idG5zOlJlcXVlc3RI ZWFkZXIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJIaXN0b3J5UmVhZERldGFpbHMiIFR5cGVO YW1lPSJ1YTpFeHRlbnNpb25PYmplY3QiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJUaW1lc3Rh bXBzVG9SZXR1cm4iIFR5cGVOYW1lPSJ0bnM6VGltZXN0YW1wc1RvUmV0dXJuIiAvPg0KICAgIDxv cGM6RmllbGQgTmFtZT0iUmVsZWFzZUNvbnRpbnVhdGlvblBvaW50cyIgVHlwZU5hbWU9Im9wYzpC b29sZWFuIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZk5vZGVzVG9SZWFkIiBUeXBlTmFt ZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9kZXNUb1JlYWQiIFR5cGVO YW1lPSJ0bnM6SGlzdG9yeVJlYWRWYWx1ZUlkIiBMZW5ndGhGaWVsZD0iTm9PZk5vZGVzVG9SZWFk IiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5h bWU9Ikhpc3RvcnlSZWFkUmVzcG9uc2UiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0K ICAgIDxvcGM6RmllbGQgTmFtZT0iUmVzcG9uc2VIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVzcG9u c2VIZWFkZXIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mUmVzdWx0cyIgVHlwZU5hbWU9 Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlc3VsdHMiIFR5cGVOYW1lPSJ0 bnM6SGlzdG9yeVJlYWRSZXN1bHQiIExlbmd0aEZpZWxkPSJOb09mUmVzdWx0cyIgLz4NCiAgICA8 b3BjOkZpZWxkIE5hbWU9Ik5vT2ZEaWFnbm9zdGljSW5mb3MiIFR5cGVOYW1lPSJvcGM6SW50MzIi IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEaWFnbm9zdGljSW5mb3MiIFR5cGVOYW1lPSJ1YTpE aWFnbm9zdGljSW5mbyIgTGVuZ3RoRmllbGQ9Ik5vT2ZEaWFnbm9zdGljSW5mb3MiIC8+DQogIDwv b3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iV3JpdGVW YWx1ZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1l PSJOb2RlSWQiIFR5cGVOYW1lPSJ1YTpOb2RlSWQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJB dHRyaWJ1dGVJZCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1l PSJJbmRleFJhbmdlIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5h bWU9IlZhbHVlIiBUeXBlTmFtZT0idWE6RGF0YVZhbHVlIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVk VHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IldyaXRlUmVxdWVzdCIgQmFzZVR5 cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXF1ZXN0SGVh ZGVyIiBUeXBlTmFtZT0idG5zOlJlcXVlc3RIZWFkZXIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1l PSJOb09mTm9kZXNUb1dyaXRlIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6Rmll bGQgTmFtZT0iTm9kZXNUb1dyaXRlIiBUeXBlTmFtZT0idG5zOldyaXRlVmFsdWUiIExlbmd0aEZp ZWxkPSJOb09mTm9kZXNUb1dyaXRlIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8 b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IldyaXRlUmVzcG9uc2UiIEJhc2VUeXBlPSJ1YTpFeHRl bnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVzcG9uc2VIZWFkZXIiIFR5cGVO YW1lPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mUmVz dWx0cyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlc3Vs dHMiIFR5cGVOYW1lPSJ1YTpTdGF0dXNDb2RlIiBMZW5ndGhGaWVsZD0iTm9PZlJlc3VsdHMiIC8+ DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mRGlhZ25vc3RpY0luZm9zIiBUeXBlTmFtZT0ib3Bj OkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGlhZ25vc3RpY0luZm9zIiBUeXBlTmFt ZT0idWE6RGlhZ25vc3RpY0luZm8iIExlbmd0aEZpZWxkPSJOb09mRGlhZ25vc3RpY0luZm9zIiAv Pg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9 Ikhpc3RvcnlVcGRhdGVEZXRhaWxzIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAg ICA8b3BjOkZpZWxkIE5hbWU9Ik5vZGVJZCIgVHlwZU5hbWU9InVhOk5vZGVJZCIgLz4NCiAgPC9v cGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpFbnVtZXJhdGVkVHlwZSBOYW1lPSJIaXN0b3J5 VXBkYXRlVHlwZSIgTGVuZ3RoSW5CaXRzPSIzMiI+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUg TmFtZT0iSW5zZXJ0IiBWYWx1ZT0iMSIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1l PSJSZXBsYWNlIiBWYWx1ZT0iMiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJV cGRhdGUiIFZhbHVlPSIzIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkRlbGV0 ZSIgVmFsdWU9IjQiIC8+DQogIDwvb3BjOkVudW1lcmF0ZWRUeXBlPg0KDQogIDxvcGM6RW51bWVy YXRlZFR5cGUgTmFtZT0iUGVyZm9ybVVwZGF0ZVR5cGUiIExlbmd0aEluQml0cz0iMzIiPg0KICAg IDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9Ikluc2VydCIgVmFsdWU9IjEiIC8+DQogICAgPG9w YzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iUmVwbGFjZSIgVmFsdWU9IjIiIC8+DQogICAgPG9wYzpF bnVtZXJhdGVkVmFsdWUgTmFtZT0iVXBkYXRlIiBWYWx1ZT0iMyIgLz4NCiAgICA8b3BjOkVudW1l cmF0ZWRWYWx1ZSBOYW1lPSJSZW1vdmUiIFZhbHVlPSI0IiAvPg0KICA8L29wYzpFbnVtZXJhdGVk VHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlVwZGF0ZURhdGFEZXRhaWxzIiBC YXNlVHlwZT0idG5zOkhpc3RvcnlVcGRhdGVEZXRhaWxzIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 Ik5vZGVJZCIgVHlwZU5hbWU9InVhOk5vZGVJZCIgU291cmNlVHlwZT0idG5zOkhpc3RvcnlVcGRh dGVEZXRhaWxzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUGVyZm9ybUluc2VydFJlcGxhY2Ui IFR5cGVOYW1lPSJ0bnM6UGVyZm9ybVVwZGF0ZVR5cGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1l PSJOb09mVXBkYXRlVmFsdWVzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6Rmll bGQgTmFtZT0iVXBkYXRlVmFsdWVzIiBUeXBlTmFtZT0idWE6RGF0YVZhbHVlIiBMZW5ndGhGaWVs ZD0iTm9PZlVwZGF0ZVZhbHVlcyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9w YzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJVcGRhdGVTdHJ1Y3R1cmVEYXRhRGV0YWlscyIgQmFzZVR5 cGU9InRuczpIaXN0b3J5VXBkYXRlRGV0YWlscyI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb2Rl SWQiIFR5cGVOYW1lPSJ1YTpOb2RlSWQiIFNvdXJjZVR5cGU9InRuczpIaXN0b3J5VXBkYXRlRGV0 YWlscyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlBlcmZvcm1JbnNlcnRSZXBsYWNlIiBUeXBl TmFtZT0idG5zOlBlcmZvcm1VcGRhdGVUeXBlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9P ZlVwZGF0ZVZhbHVlcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5h bWU9IlVwZGF0ZVZhbHVlcyIgVHlwZU5hbWU9InVhOkRhdGFWYWx1ZSIgTGVuZ3RoRmllbGQ9Ik5v T2ZVcGRhdGVWYWx1ZXMiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3Ry dWN0dXJlZFR5cGUgTmFtZT0iVXBkYXRlRXZlbnREZXRhaWxzIiBCYXNlVHlwZT0idG5zOkhpc3Rv cnlVcGRhdGVEZXRhaWxzIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vZGVJZCIgVHlwZU5hbWU9 InVhOk5vZGVJZCIgU291cmNlVHlwZT0idG5zOkhpc3RvcnlVcGRhdGVEZXRhaWxzIiAvPg0KICAg IDxvcGM6RmllbGQgTmFtZT0iUGVyZm9ybUluc2VydFJlcGxhY2UiIFR5cGVOYW1lPSJ0bnM6UGVy Zm9ybVVwZGF0ZVR5cGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJGaWx0ZXIiIFR5cGVOYW1l PSJ0bnM6RXZlbnRGaWx0ZXIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mRXZlbnREYXRh IiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRXZlbnREYXRh IiBUeXBlTmFtZT0idG5zOkhpc3RvcnlFdmVudEZpZWxkTGlzdCIgTGVuZ3RoRmllbGQ9Ik5vT2ZF dmVudERhdGEiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJl ZFR5cGUgTmFtZT0iRGVsZXRlUmF3TW9kaWZpZWREZXRhaWxzIiBCYXNlVHlwZT0idG5zOkhpc3Rv cnlVcGRhdGVEZXRhaWxzIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vZGVJZCIgVHlwZU5hbWU9 InVhOk5vZGVJZCIgU291cmNlVHlwZT0idG5zOkhpc3RvcnlVcGRhdGVEZXRhaWxzIiAvPg0KICAg IDxvcGM6RmllbGQgTmFtZT0iSXNEZWxldGVNb2RpZmllZCIgVHlwZU5hbWU9Im9wYzpCb29sZWFu IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU3RhcnRUaW1lIiBUeXBlTmFtZT0ib3BjOkRhdGVU aW1lIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRW5kVGltZSIgVHlwZU5hbWU9Im9wYzpEYXRl VGltZSIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlw ZSBOYW1lPSJEZWxldGVBdFRpbWVEZXRhaWxzIiBCYXNlVHlwZT0idG5zOkhpc3RvcnlVcGRhdGVE ZXRhaWxzIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vZGVJZCIgVHlwZU5hbWU9InVhOk5vZGVJ ZCIgU291cmNlVHlwZT0idG5zOkhpc3RvcnlVcGRhdGVEZXRhaWxzIiAvPg0KICAgIDxvcGM6Rmll bGQgTmFtZT0iTm9PZlJlcVRpbWVzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6 RmllbGQgTmFtZT0iUmVxVGltZXMiIFR5cGVOYW1lPSJvcGM6RGF0ZVRpbWUiIExlbmd0aEZpZWxk PSJOb09mUmVxVGltZXMiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3Ry dWN0dXJlZFR5cGUgTmFtZT0iRGVsZXRlRXZlbnREZXRhaWxzIiBCYXNlVHlwZT0idG5zOkhpc3Rv cnlVcGRhdGVEZXRhaWxzIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vZGVJZCIgVHlwZU5hbWU9 InVhOk5vZGVJZCIgU291cmNlVHlwZT0idG5zOkhpc3RvcnlVcGRhdGVEZXRhaWxzIiAvPg0KICAg IDxvcGM6RmllbGQgTmFtZT0iTm9PZkV2ZW50SWRzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0K ICAgIDxvcGM6RmllbGQgTmFtZT0iRXZlbnRJZHMiIFR5cGVOYW1lPSJvcGM6Qnl0ZVN0cmluZyIg TGVuZ3RoRmllbGQ9Ik5vT2ZFdmVudElkcyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoN CiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJIaXN0b3J5VXBkYXRlUmVzdWx0IiBCYXNlVHlw ZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlN0YXR1c0NvZGUi IFR5cGVOYW1lPSJ1YTpTdGF0dXNDb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZk9w ZXJhdGlvblJlc3VsdHMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBO YW1lPSJPcGVyYXRpb25SZXN1bHRzIiBUeXBlTmFtZT0idWE6U3RhdHVzQ29kZSIgTGVuZ3RoRmll bGQ9Ik5vT2ZPcGVyYXRpb25SZXN1bHRzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkRp YWdub3N0aWNJbmZvcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5h bWU9IkRpYWdub3N0aWNJbmZvcyIgVHlwZU5hbWU9InVhOkRpYWdub3N0aWNJbmZvIiBMZW5ndGhG aWVsZD0iTm9PZkRpYWdub3N0aWNJbmZvcyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoN CiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJIaXN0b3J5VXBkYXRlUmVxdWVzdCIgQmFzZVR5 cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXF1ZXN0SGVh ZGVyIiBUeXBlTmFtZT0idG5zOlJlcXVlc3RIZWFkZXIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1l PSJOb09mSGlzdG9yeVVwZGF0ZURldGFpbHMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAg PG9wYzpGaWVsZCBOYW1lPSJIaXN0b3J5VXBkYXRlRGV0YWlscyIgVHlwZU5hbWU9InVhOkV4dGVu c2lvbk9iamVjdCIgTGVuZ3RoRmllbGQ9Ik5vT2ZIaXN0b3J5VXBkYXRlRGV0YWlscyIgLz4NCiAg PC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJIaXN0 b3J5VXBkYXRlUmVzcG9uc2UiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxv cGM6RmllbGQgTmFtZT0iUmVzcG9uc2VIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVzcG9uc2VIZWFk ZXIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mUmVzdWx0cyIgVHlwZU5hbWU9Im9wYzpJ bnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlc3VsdHMiIFR5cGVOYW1lPSJ0bnM6SGlz dG9yeVVwZGF0ZVJlc3VsdCIgTGVuZ3RoRmllbGQ9Ik5vT2ZSZXN1bHRzIiAvPg0KICAgIDxvcGM6 RmllbGQgTmFtZT0iTm9PZkRpYWdub3N0aWNJbmZvcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4N CiAgICA8b3BjOkZpZWxkIE5hbWU9IkRpYWdub3N0aWNJbmZvcyIgVHlwZU5hbWU9InVhOkRpYWdu b3N0aWNJbmZvIiBMZW5ndGhGaWVsZD0iTm9PZkRpYWdub3N0aWNJbmZvcyIgLz4NCiAgPC9vcGM6 U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJDYWxsTWV0aG9k UmVxdWVzdCIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBO YW1lPSJPYmplY3RJZCIgVHlwZU5hbWU9InVhOk5vZGVJZCIgLz4NCiAgICA8b3BjOkZpZWxkIE5h bWU9Ik1ldGhvZElkIiBUeXBlTmFtZT0idWE6Tm9kZUlkIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt ZT0iTm9PZklucHV0QXJndW1lbnRzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6 RmllbGQgTmFtZT0iSW5wdXRBcmd1bWVudHMiIFR5cGVOYW1lPSJ1YTpWYXJpYW50IiBMZW5ndGhG aWVsZD0iTm9PZklucHV0QXJndW1lbnRzIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0K ICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkNhbGxNZXRob2RSZXN1bHQiIEJhc2VUeXBlPSJ1 YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU3RhdHVzQ29kZSIgVHlw ZU5hbWU9InVhOlN0YXR1c0NvZGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mSW5wdXRB cmd1bWVudFJlc3VsdHMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBO YW1lPSJJbnB1dEFyZ3VtZW50UmVzdWx0cyIgVHlwZU5hbWU9InVhOlN0YXR1c0NvZGUiIExlbmd0 aEZpZWxkPSJOb09mSW5wdXRBcmd1bWVudFJlc3VsdHMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1l PSJOb09mSW5wdXRBcmd1bWVudERpYWdub3N0aWNJbmZvcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIg Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IklucHV0QXJndW1lbnREaWFnbm9zdGljSW5mb3MiIFR5 cGVOYW1lPSJ1YTpEaWFnbm9zdGljSW5mbyIgTGVuZ3RoRmllbGQ9Ik5vT2ZJbnB1dEFyZ3VtZW50 RGlhZ25vc3RpY0luZm9zIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZk91dHB1dEFyZ3Vt ZW50cyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik91dHB1 dEFyZ3VtZW50cyIgVHlwZU5hbWU9InVhOlZhcmlhbnQiIExlbmd0aEZpZWxkPSJOb09mT3V0cHV0 QXJndW1lbnRzIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVy ZWRUeXBlIE5hbWU9IkNhbGxSZXF1ZXN0IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4N CiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlcXVlc3RIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVxdWVz dEhlYWRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZNZXRob2RzVG9DYWxsIiBUeXBl TmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTWV0aG9kc1RvQ2FsbCIg VHlwZU5hbWU9InRuczpDYWxsTWV0aG9kUmVxdWVzdCIgTGVuZ3RoRmllbGQ9Ik5vT2ZNZXRob2Rz VG9DYWxsIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRU eXBlIE5hbWU9IkNhbGxSZXNwb25zZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQog ICAgPG9wYzpGaWVsZCBOYW1lPSJSZXNwb25zZUhlYWRlciIgVHlwZU5hbWU9InRuczpSZXNwb25z ZUhlYWRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZSZXN1bHRzIiBUeXBlTmFtZT0i b3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVzdWx0cyIgVHlwZU5hbWU9InRu czpDYWxsTWV0aG9kUmVzdWx0IiBMZW5ndGhGaWVsZD0iTm9PZlJlc3VsdHMiIC8+DQogICAgPG9w YzpGaWVsZCBOYW1lPSJOb09mRGlhZ25vc3RpY0luZm9zIiBUeXBlTmFtZT0ib3BjOkludDMyIiAv Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGlhZ25vc3RpY0luZm9zIiBUeXBlTmFtZT0idWE6RGlh Z25vc3RpY0luZm8iIExlbmd0aEZpZWxkPSJOb09mRGlhZ25vc3RpY0luZm9zIiAvPg0KICA8L29w YzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOkVudW1lcmF0ZWRUeXBlIE5hbWU9Ik1vbml0b3Jp bmdNb2RlIiBMZW5ndGhJbkJpdHM9IjMyIj4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1l PSJEaXNhYmxlZCIgVmFsdWU9IjAiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0i U2FtcGxpbmciIFZhbHVlPSIxIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlJl cG9ydGluZyIgVmFsdWU9IjIiIC8+DQogIDwvb3BjOkVudW1lcmF0ZWRUeXBlPg0KDQogIDxvcGM6 RW51bWVyYXRlZFR5cGUgTmFtZT0iRGF0YUNoYW5nZVRyaWdnZXIiIExlbmd0aEluQml0cz0iMzIi Pg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlN0YXR1cyIgVmFsdWU9IjAiIC8+DQog ICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iU3RhdHVzVmFsdWUiIFZhbHVlPSIxIiAvPg0K ICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlN0YXR1c1ZhbHVlVGltZXN0YW1wIiBWYWx1 ZT0iMiIgLz4NCiAgPC9vcGM6RW51bWVyYXRlZFR5cGU+DQoNCiAgPG9wYzpFbnVtZXJhdGVkVHlw ZSBOYW1lPSJEZWFkYmFuZFR5cGUiIExlbmd0aEluQml0cz0iMzIiPg0KICAgIDxvcGM6RW51bWVy YXRlZFZhbHVlIE5hbWU9Ik5vbmUiIFZhbHVlPSIwIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZh bHVlIE5hbWU9IkFic29sdXRlIiBWYWx1ZT0iMSIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1 ZSBOYW1lPSJQZXJjZW50IiBWYWx1ZT0iMiIgLz4NCiAgPC9vcGM6RW51bWVyYXRlZFR5cGU+DQoN CiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJNb25pdG9yaW5nRmlsdGVyIiBCYXNlVHlwZT0i dWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpT dHJ1Y3R1cmVkVHlwZSBOYW1lPSJEYXRhQ2hhbmdlRmlsdGVyIiBCYXNlVHlwZT0idG5zOk1vbml0 b3JpbmdGaWx0ZXIiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVHJpZ2dlciIgVHlwZU5hbWU9InRu czpEYXRhQ2hhbmdlVHJpZ2dlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRlYWRiYW5kVHlw ZSIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEZWFkYmFu ZFZhbHVlIiBUeXBlTmFtZT0ib3BjOkRvdWJsZSIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+ DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJFdmVudEZpbHRlciIgQmFzZVR5cGU9InRu czpNb25pdG9yaW5nRmlsdGVyIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZTZWxlY3RDbGF1 c2VzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2VsZWN0 Q2xhdXNlcyIgVHlwZU5hbWU9InRuczpTaW1wbGVBdHRyaWJ1dGVPcGVyYW5kIiBMZW5ndGhGaWVs ZD0iTm9PZlNlbGVjdENsYXVzZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJXaGVyZUNsYXVz ZSIgVHlwZU5hbWU9InRuczpDb250ZW50RmlsdGVyIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlw ZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkFnZ3JlZ2F0ZUNvbmZpZ3VyYXRpb24i IEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVXNl U2VydmVyQ2FwYWJpbGl0aWVzRGVmYXVsdHMiIFR5cGVOYW1lPSJvcGM6Qm9vbGVhbiIgLz4NCiAg ICA8b3BjOkZpZWxkIE5hbWU9IlRyZWF0VW5jZXJ0YWluQXNCYWQiIFR5cGVOYW1lPSJvcGM6Qm9v bGVhbiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlBlcmNlbnREYXRhQmFkIiBUeXBlTmFtZT0i b3BjOkJ5dGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJQZXJjZW50RGF0YUdvb2QiIFR5cGVO YW1lPSJvcGM6Qnl0ZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlVzZVNsb3BlZEV4dHJhcG9s YXRpb24iIFR5cGVOYW1lPSJvcGM6Qm9vbGVhbiIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+ DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJBZ2dyZWdhdGVGaWx0ZXIiIEJhc2VUeXBl PSJ0bnM6TW9uaXRvcmluZ0ZpbHRlciI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTdGFydFRpbWUi IFR5cGVOYW1lPSJvcGM6RGF0ZVRpbWUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJBZ2dyZWdh dGVUeXBlIiBUeXBlTmFtZT0idWE6Tm9kZUlkIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUHJv Y2Vzc2luZ0ludGVydmFsIiBUeXBlTmFtZT0ib3BjOkRvdWJsZSIgLz4NCiAgICA8b3BjOkZpZWxk IE5hbWU9IkFnZ3JlZ2F0ZUNvbmZpZ3VyYXRpb24iIFR5cGVOYW1lPSJ0bnM6QWdncmVnYXRlQ29u ZmlndXJhdGlvbiIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1 cmVkVHlwZSBOYW1lPSJNb25pdG9yaW5nRmlsdGVyUmVzdWx0IiBCYXNlVHlwZT0idWE6RXh0ZW5z aW9uT2JqZWN0Ij4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVk VHlwZSBOYW1lPSJFdmVudEZpbHRlclJlc3VsdCIgQmFzZVR5cGU9InRuczpNb25pdG9yaW5nRmls dGVyUmVzdWx0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZTZWxlY3RDbGF1c2VSZXN1bHRz IiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2VsZWN0Q2xh dXNlUmVzdWx0cyIgVHlwZU5hbWU9InVhOlN0YXR1c0NvZGUiIExlbmd0aEZpZWxkPSJOb09mU2Vs ZWN0Q2xhdXNlUmVzdWx0cyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZTZWxlY3RDbGF1 c2VEaWFnbm9zdGljSW5mb3MiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVs ZCBOYW1lPSJTZWxlY3RDbGF1c2VEaWFnbm9zdGljSW5mb3MiIFR5cGVOYW1lPSJ1YTpEaWFnbm9z dGljSW5mbyIgTGVuZ3RoRmllbGQ9Ik5vT2ZTZWxlY3RDbGF1c2VEaWFnbm9zdGljSW5mb3MiIC8+ DQogICAgPG9wYzpGaWVsZCBOYW1lPSJXaGVyZUNsYXVzZVJlc3VsdCIgVHlwZU5hbWU9InRuczpD b250ZW50RmlsdGVyUmVzdWx0IiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3Bj OlN0cnVjdHVyZWRUeXBlIE5hbWU9IkFnZ3JlZ2F0ZUZpbHRlclJlc3VsdCIgQmFzZVR5cGU9InRu czpNb25pdG9yaW5nRmlsdGVyUmVzdWx0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJldmlzZWRT dGFydFRpbWUiIFR5cGVOYW1lPSJvcGM6RGF0ZVRpbWUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1l PSJSZXZpc2VkUHJvY2Vzc2luZ0ludGVydmFsIiBUeXBlTmFtZT0ib3BjOkRvdWJsZSIgLz4NCiAg ICA8b3BjOkZpZWxkIE5hbWU9IlJldmlzZWRBZ2dyZWdhdGVDb25maWd1cmF0aW9uIiBUeXBlTmFt ZT0idG5zOkFnZ3JlZ2F0ZUNvbmZpZ3VyYXRpb24iIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBl Pg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iTW9uaXRvcmluZ1BhcmFtZXRlcnMiIEJh c2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQ2xpZW50 SGFuZGxlIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNh bXBsaW5nSW50ZXJ2YWwiIFR5cGVOYW1lPSJvcGM6RG91YmxlIiAvPg0KICAgIDxvcGM6RmllbGQg TmFtZT0iRmlsdGVyIiBUeXBlTmFtZT0idWE6RXh0ZW5zaW9uT2JqZWN0IiAvPg0KICAgIDxvcGM6 RmllbGQgTmFtZT0iUXVldWVTaXplIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3Bj OkZpZWxkIE5hbWU9IkRpc2NhcmRPbGRlc3QiIFR5cGVOYW1lPSJvcGM6Qm9vbGVhbiIgLz4NCiAg PC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJNb25p dG9yZWRJdGVtQ3JlYXRlUmVxdWVzdCIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQog ICAgPG9wYzpGaWVsZCBOYW1lPSJJdGVtVG9Nb25pdG9yIiBUeXBlTmFtZT0idG5zOlJlYWRWYWx1 ZUlkIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTW9uaXRvcmluZ01vZGUiIFR5cGVOYW1lPSJ0 bnM6TW9uaXRvcmluZ01vZGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXF1ZXN0ZWRQYXJh bWV0ZXJzIiBUeXBlTmFtZT0idG5zOk1vbml0b3JpbmdQYXJhbWV0ZXJzIiAvPg0KICA8L29wYzpT dHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9Ik1vbml0b3JlZEl0 ZW1DcmVhdGVSZXN1bHQiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6 RmllbGQgTmFtZT0iU3RhdHVzQ29kZSIgVHlwZU5hbWU9InVhOlN0YXR1c0NvZGUiIC8+DQogICAg PG9wYzpGaWVsZCBOYW1lPSJNb25pdG9yZWRJdGVtSWQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAv Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmV2aXNlZFNhbXBsaW5nSW50ZXJ2YWwiIFR5cGVOYW1l PSJvcGM6RG91YmxlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmV2aXNlZFF1ZXVlU2l6ZSIg VHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJGaWx0ZXJSZXN1 bHQiIFR5cGVOYW1lPSJ1YTpFeHRlbnNpb25PYmplY3QiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRU eXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iQ3JlYXRlTW9uaXRvcmVkSXRlbXNS ZXF1ZXN0IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5h bWU9IlJlcXVlc3RIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVxdWVzdEhlYWRlciIgLz4NCiAgICA8 b3BjOkZpZWxkIE5hbWU9IlN1YnNjcmlwdGlvbklkIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4N CiAgICA8b3BjOkZpZWxkIE5hbWU9IlRpbWVzdGFtcHNUb1JldHVybiIgVHlwZU5hbWU9InRuczpU aW1lc3RhbXBzVG9SZXR1cm4iIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mSXRlbXNUb0Ny ZWF0ZSIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ikl0ZW1z VG9DcmVhdGUiIFR5cGVOYW1lPSJ0bnM6TW9uaXRvcmVkSXRlbUNyZWF0ZVJlcXVlc3QiIExlbmd0 aEZpZWxkPSJOb09mSXRlbXNUb0NyZWF0ZSIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoN CiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJDcmVhdGVNb25pdG9yZWRJdGVtc1Jlc3BvbnNl IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJl c3BvbnNlSGVhZGVyIiBUeXBlTmFtZT0idG5zOlJlc3BvbnNlSGVhZGVyIiAvPg0KICAgIDxvcGM6 RmllbGQgTmFtZT0iTm9PZlJlc3VsdHMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9w YzpGaWVsZCBOYW1lPSJSZXN1bHRzIiBUeXBlTmFtZT0idG5zOk1vbml0b3JlZEl0ZW1DcmVhdGVS ZXN1bHQiIExlbmd0aEZpZWxkPSJOb09mUmVzdWx0cyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 Ik5vT2ZEaWFnbm9zdGljSW5mb3MiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpG aWVsZCBOYW1lPSJEaWFnbm9zdGljSW5mb3MiIFR5cGVOYW1lPSJ1YTpEaWFnbm9zdGljSW5mbyIg TGVuZ3RoRmllbGQ9Ik5vT2ZEaWFnbm9zdGljSW5mb3MiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRU eXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iTW9uaXRvcmVkSXRlbU1vZGlmeVJl cXVlc3QiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFt ZT0iTW9uaXRvcmVkSXRlbUlkIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZp ZWxkIE5hbWU9IlJlcXVlc3RlZFBhcmFtZXRlcnMiIFR5cGVOYW1lPSJ0bnM6TW9uaXRvcmluZ1Bh cmFtZXRlcnMiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJl ZFR5cGUgTmFtZT0iTW9uaXRvcmVkSXRlbU1vZGlmeVJlc3VsdCIgQmFzZVR5cGU9InVhOkV4dGVu c2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTdGF0dXNDb2RlIiBUeXBlTmFtZT0i dWE6U3RhdHVzQ29kZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJldmlzZWRTYW1wbGluZ0lu dGVydmFsIiBUeXBlTmFtZT0ib3BjOkRvdWJsZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJl dmlzZWRRdWV1ZVNpemUiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQg TmFtZT0iRmlsdGVyUmVzdWx0IiBUeXBlTmFtZT0idWE6RXh0ZW5zaW9uT2JqZWN0IiAvPg0KICA8 L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9Ik1vZGlm eU1vbml0b3JlZEl0ZW1zUmVxdWVzdCIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQog ICAgPG9wYzpGaWVsZCBOYW1lPSJSZXF1ZXN0SGVhZGVyIiBUeXBlTmFtZT0idG5zOlJlcXVlc3RI ZWFkZXIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTdWJzY3JpcHRpb25JZCIgVHlwZU5hbWU9 Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJUaW1lc3RhbXBzVG9SZXR1cm4i IFR5cGVOYW1lPSJ0bnM6VGltZXN0YW1wc1RvUmV0dXJuIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt ZT0iTm9PZkl0ZW1zVG9Nb2RpZnkiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpG aWVsZCBOYW1lPSJJdGVtc1RvTW9kaWZ5IiBUeXBlTmFtZT0idG5zOk1vbml0b3JlZEl0ZW1Nb2Rp ZnlSZXF1ZXN0IiBMZW5ndGhGaWVsZD0iTm9PZkl0ZW1zVG9Nb2RpZnkiIC8+DQogIDwvb3BjOlN0 cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iTW9kaWZ5TW9uaXRv cmVkSXRlbXNSZXNwb25zZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9w YzpGaWVsZCBOYW1lPSJSZXNwb25zZUhlYWRlciIgVHlwZU5hbWU9InRuczpSZXNwb25zZUhlYWRl ciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZSZXN1bHRzIiBUeXBlTmFtZT0ib3BjOklu dDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVzdWx0cyIgVHlwZU5hbWU9InRuczpNb25p dG9yZWRJdGVtTW9kaWZ5UmVzdWx0IiBMZW5ndGhGaWVsZD0iTm9PZlJlc3VsdHMiIC8+DQogICAg PG9wYzpGaWVsZCBOYW1lPSJOb09mRGlhZ25vc3RpY0luZm9zIiBUeXBlTmFtZT0ib3BjOkludDMy IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGlhZ25vc3RpY0luZm9zIiBUeXBlTmFtZT0idWE6 RGlhZ25vc3RpY0luZm8iIExlbmd0aEZpZWxkPSJOb09mRGlhZ25vc3RpY0luZm9zIiAvPg0KICA8 L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlNldE1v bml0b3JpbmdNb2RlUmVxdWVzdCIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAg PG9wYzpGaWVsZCBOYW1lPSJSZXF1ZXN0SGVhZGVyIiBUeXBlTmFtZT0idG5zOlJlcXVlc3RIZWFk ZXIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTdWJzY3JpcHRpb25JZCIgVHlwZU5hbWU9Im9w YzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJNb25pdG9yaW5nTW9kZSIgVHlwZU5h bWU9InRuczpNb25pdG9yaW5nTW9kZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZNb25p dG9yZWRJdGVtSWRzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt ZT0iTW9uaXRvcmVkSXRlbUlkcyIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIExlbmd0aEZpZWxkPSJO b09mTW9uaXRvcmVkSXRlbUlkcyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9w YzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJTZXRNb25pdG9yaW5nTW9kZVJlc3BvbnNlIiBCYXNlVHlw ZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlc3BvbnNlSGVh ZGVyIiBUeXBlTmFtZT0idG5zOlJlc3BvbnNlSGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt ZT0iTm9PZlJlc3VsdHMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBO YW1lPSJSZXN1bHRzIiBUeXBlTmFtZT0idWE6U3RhdHVzQ29kZSIgTGVuZ3RoRmllbGQ9Ik5vT2ZS ZXN1bHRzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkRpYWdub3N0aWNJbmZvcyIgVHlw ZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRpYWdub3N0aWNJbmZv cyIgVHlwZU5hbWU9InVhOkRpYWdub3N0aWNJbmZvIiBMZW5ndGhGaWVsZD0iTm9PZkRpYWdub3N0 aWNJbmZvcyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVk VHlwZSBOYW1lPSJTZXRUcmlnZ2VyaW5nUmVxdWVzdCIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9i amVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXF1ZXN0SGVhZGVyIiBUeXBlTmFtZT0idG5z OlJlcXVlc3RIZWFkZXIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTdWJzY3JpcHRpb25JZCIg VHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJUcmlnZ2VyaW5n SXRlbUlkIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5v T2ZMaW5rc1RvQWRkIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt ZT0iTGlua3NUb0FkZCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIExlbmd0aEZpZWxkPSJOb09mTGlu a3NUb0FkZCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZMaW5rc1RvUmVtb3ZlIiBUeXBl TmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTGlua3NUb1JlbW92ZSIg VHlwZU5hbWU9Im9wYzpVSW50MzIiIExlbmd0aEZpZWxkPSJOb09mTGlua3NUb1JlbW92ZSIgLz4N CiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJT ZXRUcmlnZ2VyaW5nUmVzcG9uc2UiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAg IDxvcGM6RmllbGQgTmFtZT0iUmVzcG9uc2VIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVzcG9uc2VI ZWFkZXIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mQWRkUmVzdWx0cyIgVHlwZU5hbWU9 Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkFkZFJlc3VsdHMiIFR5cGVOYW1l PSJ1YTpTdGF0dXNDb2RlIiBMZW5ndGhGaWVsZD0iTm9PZkFkZFJlc3VsdHMiIC8+DQogICAgPG9w YzpGaWVsZCBOYW1lPSJOb09mQWRkRGlhZ25vc3RpY0luZm9zIiBUeXBlTmFtZT0ib3BjOkludDMy IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQWRkRGlhZ25vc3RpY0luZm9zIiBUeXBlTmFtZT0i dWE6RGlhZ25vc3RpY0luZm8iIExlbmd0aEZpZWxkPSJOb09mQWRkRGlhZ25vc3RpY0luZm9zIiAv Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlJlbW92ZVJlc3VsdHMiIFR5cGVOYW1lPSJvcGM6 SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZW1vdmVSZXN1bHRzIiBUeXBlTmFtZT0i dWE6U3RhdHVzQ29kZSIgTGVuZ3RoRmllbGQ9Ik5vT2ZSZW1vdmVSZXN1bHRzIiAvPg0KICAgIDxv cGM6RmllbGQgTmFtZT0iTm9PZlJlbW92ZURpYWdub3N0aWNJbmZvcyIgVHlwZU5hbWU9Im9wYzpJ bnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlbW92ZURpYWdub3N0aWNJbmZvcyIgVHlw ZU5hbWU9InVhOkRpYWdub3N0aWNJbmZvIiBMZW5ndGhGaWVsZD0iTm9PZlJlbW92ZURpYWdub3N0 aWNJbmZvcyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVk VHlwZSBOYW1lPSJEZWxldGVNb25pdG9yZWRJdGVtc1JlcXVlc3QiIEJhc2VUeXBlPSJ1YTpFeHRl bnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVxdWVzdEhlYWRlciIgVHlwZU5h bWU9InRuczpSZXF1ZXN0SGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU3Vic2NyaXB0 aW9uSWQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9P Zk1vbml0b3JlZEl0ZW1JZHMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVs ZCBOYW1lPSJNb25pdG9yZWRJdGVtSWRzIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgTGVuZ3RoRmll bGQ9Ik5vT2ZNb25pdG9yZWRJdGVtSWRzIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0K ICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkRlbGV0ZU1vbml0b3JlZEl0ZW1zUmVzcG9uc2Ui IEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVz cG9uc2VIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIC8+DQogICAgPG9wYzpG aWVsZCBOYW1lPSJOb09mUmVzdWx0cyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3Bj OkZpZWxkIE5hbWU9IlJlc3VsdHMiIFR5cGVOYW1lPSJ1YTpTdGF0dXNDb2RlIiBMZW5ndGhGaWVs ZD0iTm9PZlJlc3VsdHMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mRGlhZ25vc3RpY0lu Zm9zIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGlhZ25v c3RpY0luZm9zIiBUeXBlTmFtZT0idWE6RGlhZ25vc3RpY0luZm8iIExlbmd0aEZpZWxkPSJOb09m RGlhZ25vc3RpY0luZm9zIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0 cnVjdHVyZWRUeXBlIE5hbWU9IkNyZWF0ZVN1YnNjcmlwdGlvblJlcXVlc3QiIEJhc2VUeXBlPSJ1 YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVxdWVzdEhlYWRlciIg VHlwZU5hbWU9InRuczpSZXF1ZXN0SGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVx dWVzdGVkUHVibGlzaGluZ0ludGVydmFsIiBUeXBlTmFtZT0ib3BjOkRvdWJsZSIgLz4NCiAgICA8 b3BjOkZpZWxkIE5hbWU9IlJlcXVlc3RlZExpZmV0aW1lQ291bnQiIFR5cGVOYW1lPSJvcGM6VUlu dDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVxdWVzdGVkTWF4S2VlcEFsaXZlQ291bnQi IFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTWF4Tm90aWZp Y2F0aW9uc1BlclB1Ymxpc2giIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6Rmll bGQgTmFtZT0iUHVibGlzaGluZ0VuYWJsZWQiIFR5cGVOYW1lPSJvcGM6Qm9vbGVhbiIgLz4NCiAg ICA8b3BjOkZpZWxkIE5hbWU9IlByaW9yaXR5IiBUeXBlTmFtZT0ib3BjOkJ5dGUiIC8+DQogIDwv b3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iQ3JlYXRl U3Vic2NyaXB0aW9uUmVzcG9uc2UiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAg IDxvcGM6RmllbGQgTmFtZT0iUmVzcG9uc2VIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVzcG9uc2VI ZWFkZXIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTdWJzY3JpcHRpb25JZCIgVHlwZU5hbWU9 Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXZpc2VkUHVibGlzaGluZ0lu dGVydmFsIiBUeXBlTmFtZT0ib3BjOkRvdWJsZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJl dmlzZWRMaWZldGltZUNvdW50IiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZp ZWxkIE5hbWU9IlJldmlzZWRNYXhLZWVwQWxpdmVDb3VudCIgVHlwZU5hbWU9Im9wYzpVSW50MzIi IC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFt ZT0iTW9kaWZ5U3Vic2NyaXB0aW9uUmVxdWVzdCIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVj dCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXF1ZXN0SGVhZGVyIiBUeXBlTmFtZT0idG5zOlJl cXVlc3RIZWFkZXIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTdWJzY3JpcHRpb25JZCIgVHlw ZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXF1ZXN0ZWRQdWJs aXNoaW5nSW50ZXJ2YWwiIFR5cGVOYW1lPSJvcGM6RG91YmxlIiAvPg0KICAgIDxvcGM6RmllbGQg TmFtZT0iUmVxdWVzdGVkTGlmZXRpbWVDb3VudCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQog ICAgPG9wYzpGaWVsZCBOYW1lPSJSZXF1ZXN0ZWRNYXhLZWVwQWxpdmVDb3VudCIgVHlwZU5hbWU9 Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJNYXhOb3RpZmljYXRpb25zUGVy UHVibGlzaCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJQ cmlvcml0eSIgVHlwZU5hbWU9Im9wYzpCeXRlIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4N Cg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9Ik1vZGlmeVN1YnNjcmlwdGlvblJlc3BvbnNl IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJl c3BvbnNlSGVhZGVyIiBUeXBlTmFtZT0idG5zOlJlc3BvbnNlSGVhZGVyIiAvPg0KICAgIDxvcGM6 RmllbGQgTmFtZT0iUmV2aXNlZFB1Ymxpc2hpbmdJbnRlcnZhbCIgVHlwZU5hbWU9Im9wYzpEb3Vi bGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXZpc2VkTGlmZXRpbWVDb3VudCIgVHlwZU5h bWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXZpc2VkTWF4S2VlcEFs aXZlQ291bnQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlw ZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlNldFB1Ymxpc2hpbmdNb2RlUmVxdWVz dCIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJS ZXF1ZXN0SGVhZGVyIiBUeXBlTmFtZT0idG5zOlJlcXVlc3RIZWFkZXIiIC8+DQogICAgPG9wYzpG aWVsZCBOYW1lPSJQdWJsaXNoaW5nRW5hYmxlZCIgVHlwZU5hbWU9Im9wYzpCb29sZWFuIiAvPg0K ICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlN1YnNjcmlwdGlvbklkcyIgVHlwZU5hbWU9Im9wYzpJ bnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlN1YnNjcmlwdGlvbklkcyIgVHlwZU5hbWU9 Im9wYzpVSW50MzIiIExlbmd0aEZpZWxkPSJOb09mU3Vic2NyaXB0aW9uSWRzIiAvPg0KICA8L29w YzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlNldFB1Ymxp c2hpbmdNb2RlUmVzcG9uc2UiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxv cGM6RmllbGQgTmFtZT0iUmVzcG9uc2VIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVzcG9uc2VIZWFk ZXIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mUmVzdWx0cyIgVHlwZU5hbWU9Im9wYzpJ bnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlc3VsdHMiIFR5cGVOYW1lPSJ1YTpTdGF0 dXNDb2RlIiBMZW5ndGhGaWVsZD0iTm9PZlJlc3VsdHMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1l PSJOb09mRGlhZ25vc3RpY0luZm9zIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6 RmllbGQgTmFtZT0iRGlhZ25vc3RpY0luZm9zIiBUeXBlTmFtZT0idWE6RGlhZ25vc3RpY0luZm8i IExlbmd0aEZpZWxkPSJOb09mRGlhZ25vc3RpY0luZm9zIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVk VHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9Ik5vdGlmaWNhdGlvbk1lc3NhZ2Ui IEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2Vx dWVuY2VOdW1iZXIiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt ZT0iUHVibGlzaFRpbWUiIFR5cGVOYW1lPSJvcGM6RGF0ZVRpbWUiIC8+DQogICAgPG9wYzpGaWVs ZCBOYW1lPSJOb09mTm90aWZpY2F0aW9uRGF0YSIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAg ICA8b3BjOkZpZWxkIE5hbWU9Ik5vdGlmaWNhdGlvbkRhdGEiIFR5cGVOYW1lPSJ1YTpFeHRlbnNp b25PYmplY3QiIExlbmd0aEZpZWxkPSJOb09mTm90aWZpY2F0aW9uRGF0YSIgLz4NCiAgPC9vcGM6 U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJOb3RpZmljYXRp b25EYXRhIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgPC9vcGM6U3RydWN0dXJl ZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJEYXRhQ2hhbmdlTm90aWZpY2F0 aW9uIiBCYXNlVHlwZT0idG5zOk5vdGlmaWNhdGlvbkRhdGEiPg0KICAgIDxvcGM6RmllbGQgTmFt ZT0iTm9PZk1vbml0b3JlZEl0ZW1zIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6 RmllbGQgTmFtZT0iTW9uaXRvcmVkSXRlbXMiIFR5cGVOYW1lPSJ0bnM6TW9uaXRvcmVkSXRlbU5v dGlmaWNhdGlvbiIgTGVuZ3RoRmllbGQ9Ik5vT2ZNb25pdG9yZWRJdGVtcyIgLz4NCiAgICA8b3Bj OkZpZWxkIE5hbWU9Ik5vT2ZEaWFnbm9zdGljSW5mb3MiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+ DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEaWFnbm9zdGljSW5mb3MiIFR5cGVOYW1lPSJ1YTpEaWFn bm9zdGljSW5mbyIgTGVuZ3RoRmllbGQ9Ik5vT2ZEaWFnbm9zdGljSW5mb3MiIC8+DQogIDwvb3Bj OlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iTW9uaXRvcmVk SXRlbU5vdGlmaWNhdGlvbiIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9w YzpGaWVsZCBOYW1lPSJDbGllbnRIYW5kbGUiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAg IDxvcGM6RmllbGQgTmFtZT0iVmFsdWUiIFR5cGVOYW1lPSJ1YTpEYXRhVmFsdWUiIC8+DQogIDwv b3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iRXZlbnRO b3RpZmljYXRpb25MaXN0IiBCYXNlVHlwZT0idG5zOk5vdGlmaWNhdGlvbkRhdGEiPg0KICAgIDxv cGM6RmllbGQgTmFtZT0iTm9PZkV2ZW50cyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8 b3BjOkZpZWxkIE5hbWU9IkV2ZW50cyIgVHlwZU5hbWU9InRuczpFdmVudEZpZWxkTGlzdCIgTGVu Z3RoRmllbGQ9Ik5vT2ZFdmVudHMiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxv cGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iRXZlbnRGaWVsZExpc3QiIEJhc2VUeXBlPSJ1YTpFeHRl bnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQ2xpZW50SGFuZGxlIiBUeXBlTmFt ZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZFdmVudEZpZWxkcyIg VHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkV2ZW50RmllbGRz IiBUeXBlTmFtZT0idWE6VmFyaWFudCIgTGVuZ3RoRmllbGQ9Ik5vT2ZFdmVudEZpZWxkcyIgLz4N CiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJI aXN0b3J5RXZlbnRGaWVsZExpc3QiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAg IDxvcGM6RmllbGQgTmFtZT0iTm9PZkV2ZW50RmllbGRzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAv Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRXZlbnRGaWVsZHMiIFR5cGVOYW1lPSJ1YTpWYXJpYW50 IiBMZW5ndGhGaWVsZD0iTm9PZkV2ZW50RmllbGRzIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlw ZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlN0YXR1c0NoYW5nZU5vdGlmaWNhdGlv biIgQmFzZVR5cGU9InRuczpOb3RpZmljYXRpb25EYXRhIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 IlN0YXR1cyIgVHlwZU5hbWU9InVhOlN0YXR1c0NvZGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1l PSJEaWFnbm9zdGljSW5mbyIgVHlwZU5hbWU9InVhOkRpYWdub3N0aWNJbmZvIiAvPg0KICA8L29w YzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlN1YnNjcmlw dGlvbkFja25vd2xlZGdlbWVudCIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAg PG9wYzpGaWVsZCBOYW1lPSJTdWJzY3JpcHRpb25JZCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+ DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTZXF1ZW5jZU51bWJlciIgVHlwZU5hbWU9Im9wYzpVSW50 MzIiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUg TmFtZT0iUHVibGlzaFJlcXVlc3QiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAg IDxvcGM6RmllbGQgTmFtZT0iUmVxdWVzdEhlYWRlciIgVHlwZU5hbWU9InRuczpSZXF1ZXN0SGVh ZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlN1YnNjcmlwdGlvbkFja25vd2xlZGdl bWVudHMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTdWJz Y3JpcHRpb25BY2tub3dsZWRnZW1lbnRzIiBUeXBlTmFtZT0idG5zOlN1YnNjcmlwdGlvbkFja25v d2xlZGdlbWVudCIgTGVuZ3RoRmllbGQ9Ik5vT2ZTdWJzY3JpcHRpb25BY2tub3dsZWRnZW1lbnRz IiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5h bWU9IlB1Ymxpc2hSZXNwb25zZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAg PG9wYzpGaWVsZCBOYW1lPSJSZXNwb25zZUhlYWRlciIgVHlwZU5hbWU9InRuczpSZXNwb25zZUhl YWRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlN1YnNjcmlwdGlvbklkIiBUeXBlTmFtZT0i b3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZBdmFpbGFibGVTZXF1ZW5j ZU51bWJlcnMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJB dmFpbGFibGVTZXF1ZW5jZU51bWJlcnMiIFR5cGVOYW1lPSJvcGM6VUludDMyIiBMZW5ndGhGaWVs ZD0iTm9PZkF2YWlsYWJsZVNlcXVlbmNlTnVtYmVycyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 Ik1vcmVOb3RpZmljYXRpb25zIiBUeXBlTmFtZT0ib3BjOkJvb2xlYW4iIC8+DQogICAgPG9wYzpG aWVsZCBOYW1lPSJOb3RpZmljYXRpb25NZXNzYWdlIiBUeXBlTmFtZT0idG5zOk5vdGlmaWNhdGlv bk1lc3NhZ2UiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mUmVzdWx0cyIgVHlwZU5hbWU9 Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlc3VsdHMiIFR5cGVOYW1lPSJ1 YTpTdGF0dXNDb2RlIiBMZW5ndGhGaWVsZD0iTm9PZlJlc3VsdHMiIC8+DQogICAgPG9wYzpGaWVs ZCBOYW1lPSJOb09mRGlhZ25vc3RpY0luZm9zIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAg IDxvcGM6RmllbGQgTmFtZT0iRGlhZ25vc3RpY0luZm9zIiBUeXBlTmFtZT0idWE6RGlhZ25vc3Rp Y0luZm8iIExlbmd0aEZpZWxkPSJOb09mRGlhZ25vc3RpY0luZm9zIiAvPg0KICA8L29wYzpTdHJ1 Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlJlcHVibGlzaFJlcXVl c3QiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i UmVxdWVzdEhlYWRlciIgVHlwZU5hbWU9InRuczpSZXF1ZXN0SGVhZGVyIiAvPg0KICAgIDxvcGM6 RmllbGQgTmFtZT0iU3Vic2NyaXB0aW9uSWQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAg IDxvcGM6RmllbGQgTmFtZT0iUmV0cmFuc21pdFNlcXVlbmNlTnVtYmVyIiBUeXBlTmFtZT0ib3Bj OlVJbnQzMiIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVk VHlwZSBOYW1lPSJSZXB1Ymxpc2hSZXNwb25zZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVj dCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXNwb25zZUhlYWRlciIgVHlwZU5hbWU9InRuczpS ZXNwb25zZUhlYWRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vdGlmaWNhdGlvbk1lc3Nh Z2UiIFR5cGVOYW1lPSJ0bnM6Tm90aWZpY2F0aW9uTWVzc2FnZSIgLz4NCiAgPC9vcGM6U3RydWN0 dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJUcmFuc2ZlclJlc3VsdCIg QmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTdGF0 dXNDb2RlIiBUeXBlTmFtZT0idWE6U3RhdHVzQ29kZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 Ik5vT2ZBdmFpbGFibGVTZXF1ZW5jZU51bWJlcnMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQog ICAgPG9wYzpGaWVsZCBOYW1lPSJBdmFpbGFibGVTZXF1ZW5jZU51bWJlcnMiIFR5cGVOYW1lPSJv cGM6VUludDMyIiBMZW5ndGhGaWVsZD0iTm9PZkF2YWlsYWJsZVNlcXVlbmNlTnVtYmVycyIgLz4N CiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJU cmFuc2ZlclN1YnNjcmlwdGlvbnNSZXF1ZXN0IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0 Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlcXVlc3RIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVx dWVzdEhlYWRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZTdWJzY3JpcHRpb25JZHMi IFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTdWJzY3JpcHRp b25JZHMiIFR5cGVOYW1lPSJvcGM6VUludDMyIiBMZW5ndGhGaWVsZD0iTm9PZlN1YnNjcmlwdGlv bklkcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNlbmRJbml0aWFsVmFsdWVzIiBUeXBlTmFt ZT0ib3BjOkJvb2xlYW4iIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3Ry dWN0dXJlZFR5cGUgTmFtZT0iVHJhbnNmZXJTdWJzY3JpcHRpb25zUmVzcG9uc2UiIEJhc2VUeXBl PSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVzcG9uc2VIZWFk ZXIiIFR5cGVOYW1lPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1l PSJOb09mUmVzdWx0cyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5h bWU9IlJlc3VsdHMiIFR5cGVOYW1lPSJ0bnM6VHJhbnNmZXJSZXN1bHQiIExlbmd0aEZpZWxkPSJO b09mUmVzdWx0cyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZEaWFnbm9zdGljSW5mb3Mi IFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEaWFnbm9zdGlj SW5mb3MiIFR5cGVOYW1lPSJ1YTpEaWFnbm9zdGljSW5mbyIgTGVuZ3RoRmllbGQ9Ik5vT2ZEaWFn bm9zdGljSW5mb3MiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0 dXJlZFR5cGUgTmFtZT0iRGVsZXRlU3Vic2NyaXB0aW9uc1JlcXVlc3QiIEJhc2VUeXBlPSJ1YTpF eHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVxdWVzdEhlYWRlciIgVHlw ZU5hbWU9InRuczpSZXF1ZXN0SGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlN1 YnNjcmlwdGlvbklkcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5h bWU9IlN1YnNjcmlwdGlvbklkcyIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIExlbmd0aEZpZWxkPSJO b09mU3Vic2NyaXB0aW9uSWRzIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3Bj OlN0cnVjdHVyZWRUeXBlIE5hbWU9IkRlbGV0ZVN1YnNjcmlwdGlvbnNSZXNwb25zZSIgQmFzZVR5 cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXNwb25zZUhl YWRlciIgVHlwZU5hbWU9InRuczpSZXNwb25zZUhlYWRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5h bWU9Ik5vT2ZSZXN1bHRzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQg TmFtZT0iUmVzdWx0cyIgVHlwZU5hbWU9InVhOlN0YXR1c0NvZGUiIExlbmd0aEZpZWxkPSJOb09m UmVzdWx0cyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZEaWFnbm9zdGljSW5mb3MiIFR5 cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEaWFnbm9zdGljSW5m b3MiIFR5cGVOYW1lPSJ1YTpEaWFnbm9zdGljSW5mbyIgTGVuZ3RoRmllbGQ9Ik5vT2ZEaWFnbm9z dGljSW5mb3MiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJl ZFR5cGUgTmFtZT0iQnVpbGRJbmZvIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAg ICA8b3BjOkZpZWxkIE5hbWU9IlByb2R1Y3RVcmkiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0K ICAgIDxvcGM6RmllbGQgTmFtZT0iTWFudWZhY3R1cmVyTmFtZSIgVHlwZU5hbWU9Im9wYzpTdHJp bmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJQcm9kdWN0TmFtZSIgVHlwZU5hbWU9Im9wYzpT dHJpbmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTb2Z0d2FyZVZlcnNpb24iIFR5cGVOYW1l PSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQnVpbGROdW1iZXIiIFR5cGVO YW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQnVpbGREYXRlIiBUeXBl TmFtZT0ib3BjOkRhdGVUaW1lIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3Bj OkVudW1lcmF0ZWRUeXBlIE5hbWU9IlJlZHVuZGFuY3lTdXBwb3J0IiBMZW5ndGhJbkJpdHM9IjMy Ij4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJOb25lIiBWYWx1ZT0iMCIgLz4NCiAg ICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJDb2xkIiBWYWx1ZT0iMSIgLz4NCiAgICA8b3Bj OkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJXYXJtIiBWYWx1ZT0iMiIgLz4NCiAgICA8b3BjOkVudW1l cmF0ZWRWYWx1ZSBOYW1lPSJIb3QiIFZhbHVlPSIzIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZh bHVlIE5hbWU9IlRyYW5zcGFyZW50IiBWYWx1ZT0iNCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRW YWx1ZSBOYW1lPSJIb3RBbmRNaXJyb3JlZCIgVmFsdWU9IjUiIC8+DQogIDwvb3BjOkVudW1lcmF0 ZWRUeXBlPg0KDQogIDxvcGM6RW51bWVyYXRlZFR5cGUgTmFtZT0iU2VydmVyU3RhdGUiIExlbmd0 aEluQml0cz0iMzIiPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlJ1bm5pbmciIFZh bHVlPSIwIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkZhaWxlZCIgVmFsdWU9 IjEiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iTm9Db25maWd1cmF0aW9uIiBW YWx1ZT0iMiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJTdXNwZW5kZWQiIFZh bHVlPSIzIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlNodXRkb3duIiBWYWx1 ZT0iNCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJUZXN0IiBWYWx1ZT0iNSIg Lz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJDb21tdW5pY2F0aW9uRmF1bHQiIFZh bHVlPSI2IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlVua25vd24iIFZhbHVl PSI3IiAvPg0KICA8L29wYzpFbnVtZXJhdGVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBl IE5hbWU9IlJlZHVuZGFudFNlcnZlckRhdGFUeXBlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2Jq ZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNlcnZlcklkIiBUeXBlTmFtZT0ib3BjOlN0cmlu ZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNlcnZpY2VMZXZlbCIgVHlwZU5hbWU9Im9wYzpC eXRlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2VydmVyU3RhdGUiIFR5cGVOYW1lPSJ0bnM6 U2VydmVyU3RhdGUiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0 dXJlZFR5cGUgTmFtZT0iRW5kcG9pbnRVcmxMaXN0RGF0YVR5cGUiIEJhc2VUeXBlPSJ1YTpFeHRl bnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkVuZHBvaW50VXJsTGlzdCIg VHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkVuZHBvaW50VXJs TGlzdCIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIExlbmd0aEZpZWxkPSJOb09mRW5kcG9pbnRVcmxM aXN0IiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBl IE5hbWU9Ik5ldHdvcmtHcm91cERhdGFUeXBlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0 Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNlcnZlclVyaSIgVHlwZU5hbWU9Im9wYzpTdHJpbmci IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mTmV0d29ya1BhdGhzIiBUeXBlTmFtZT0ib3Bj OkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTmV0d29ya1BhdGhzIiBUeXBlTmFtZT0i dG5zOkVuZHBvaW50VXJsTGlzdERhdGFUeXBlIiBMZW5ndGhGaWVsZD0iTm9PZk5ldHdvcmtQYXRo cyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBO YW1lPSJTYW1wbGluZ0ludGVydmFsRGlhZ25vc3RpY3NEYXRhVHlwZSIgQmFzZVR5cGU9InVhOkV4 dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTYW1wbGluZ0ludGVydmFsIiBU eXBlTmFtZT0ib3BjOkRvdWJsZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik1vbml0b3JlZEl0 ZW1Db3VudCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJN YXhNb25pdG9yZWRJdGVtQ291bnQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6 RmllbGQgTmFtZT0iRGlzYWJsZWRNb25pdG9yZWRJdGVtQ291bnQiIFR5cGVOYW1lPSJvcGM6VUlu dDMyIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBl IE5hbWU9IlNlcnZlckRpYWdub3N0aWNzU3VtbWFyeURhdGFUeXBlIiBCYXNlVHlwZT0idWE6RXh0 ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNlcnZlclZpZXdDb3VudCIgVHlw ZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJDdXJyZW50U2Vzc2lv bkNvdW50IiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkN1 bXVsYXRlZFNlc3Npb25Db3VudCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpG aWVsZCBOYW1lPSJTZWN1cml0eVJlamVjdGVkU2Vzc2lvbkNvdW50IiBUeXBlTmFtZT0ib3BjOlVJ bnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlamVjdGVkU2Vzc2lvbkNvdW50IiBUeXBl TmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNlc3Npb25UaW1lb3V0 Q291bnQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2Vz c2lvbkFib3J0Q291bnQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQg TmFtZT0iQ3VycmVudFN1YnNjcmlwdGlvbkNvdW50IiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4N CiAgICA8b3BjOkZpZWxkIE5hbWU9IkN1bXVsYXRlZFN1YnNjcmlwdGlvbkNvdW50IiBUeXBlTmFt ZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlB1Ymxpc2hpbmdJbnRlcnZh bENvdW50IiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNl Y3VyaXR5UmVqZWN0ZWRSZXF1ZXN0c0NvdW50IiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAg ICA8b3BjOkZpZWxkIE5hbWU9IlJlamVjdGVkUmVxdWVzdHNDb3VudCIgVHlwZU5hbWU9Im9wYzpV SW50MzIiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5 cGUgTmFtZT0iU2VydmVyU3RhdHVzRGF0YVR5cGUiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmpl Y3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU3RhcnRUaW1lIiBUeXBlTmFtZT0ib3BjOkRhdGVU aW1lIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQ3VycmVudFRpbWUiIFR5cGVOYW1lPSJvcGM6 RGF0ZVRpbWUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTdGF0ZSIgVHlwZU5hbWU9InRuczpT ZXJ2ZXJTdGF0ZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkJ1aWxkSW5mbyIgVHlwZU5hbWU9 InRuczpCdWlsZEluZm8iIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTZWNvbmRzVGlsbFNodXRk b3duIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNodXRk b3duUmVhc29uIiBUeXBlTmFtZT0idWE6TG9jYWxpemVkVGV4dCIgLz4NCiAgPC9vcGM6U3RydWN0 dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJTZXNzaW9uRGlhZ25vc3Rp Y3NEYXRhVHlwZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVs ZCBOYW1lPSJTZXNzaW9uSWQiIFR5cGVOYW1lPSJ1YTpOb2RlSWQiIC8+DQogICAgPG9wYzpGaWVs ZCBOYW1lPSJTZXNzaW9uTmFtZSIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogICAgPG9wYzpG aWVsZCBOYW1lPSJDbGllbnREZXNjcmlwdGlvbiIgVHlwZU5hbWU9InRuczpBcHBsaWNhdGlvbkRl c2NyaXB0aW9uIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2VydmVyVXJpIiBUeXBlTmFtZT0i b3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkVuZHBvaW50VXJsIiBUeXBlTmFt ZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZMb2NhbGVJZHMiIFR5 cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJMb2NhbGVJZHMiIFR5 cGVOYW1lPSJvcGM6U3RyaW5nIiBMZW5ndGhGaWVsZD0iTm9PZkxvY2FsZUlkcyIgLz4NCiAgICA8 b3BjOkZpZWxkIE5hbWU9IkFjdHVhbFNlc3Npb25UaW1lb3V0IiBUeXBlTmFtZT0ib3BjOkRvdWJs ZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik1heFJlc3BvbnNlTWVzc2FnZVNpemUiIFR5cGVO YW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQ2xpZW50Q29ubmVjdGlv blRpbWUiIFR5cGVOYW1lPSJvcGM6RGF0ZVRpbWUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJD bGllbnRMYXN0Q29udGFjdFRpbWUiIFR5cGVOYW1lPSJvcGM6RGF0ZVRpbWUiIC8+DQogICAgPG9w YzpGaWVsZCBOYW1lPSJDdXJyZW50U3Vic2NyaXB0aW9uc0NvdW50IiBUeXBlTmFtZT0ib3BjOlVJ bnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkN1cnJlbnRNb25pdG9yZWRJdGVtc0NvdW50 IiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkN1cnJlbnRQ dWJsaXNoUmVxdWVzdHNJblF1ZXVlIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3Bj OkZpZWxkIE5hbWU9IlRvdGFsUmVxdWVzdENvdW50IiBUeXBlTmFtZT0idG5zOlNlcnZpY2VDb3Vu dGVyRGF0YVR5cGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJVbmF1dGhvcml6ZWRSZXF1ZXN0 Q291bnQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVh ZENvdW50IiBUeXBlTmFtZT0idG5zOlNlcnZpY2VDb3VudGVyRGF0YVR5cGUiIC8+DQogICAgPG9w YzpGaWVsZCBOYW1lPSJIaXN0b3J5UmVhZENvdW50IiBUeXBlTmFtZT0idG5zOlNlcnZpY2VDb3Vu dGVyRGF0YVR5cGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJXcml0ZUNvdW50IiBUeXBlTmFt ZT0idG5zOlNlcnZpY2VDb3VudGVyRGF0YVR5cGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJI aXN0b3J5VXBkYXRlQ291bnQiIFR5cGVOYW1lPSJ0bnM6U2VydmljZUNvdW50ZXJEYXRhVHlwZSIg Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkNhbGxDb3VudCIgVHlwZU5hbWU9InRuczpTZXJ2aWNl Q291bnRlckRhdGFUeXBlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQ3JlYXRlTW9uaXRvcmVk SXRlbXNDb3VudCIgVHlwZU5hbWU9InRuczpTZXJ2aWNlQ291bnRlckRhdGFUeXBlIiAvPg0KICAg IDxvcGM6RmllbGQgTmFtZT0iTW9kaWZ5TW9uaXRvcmVkSXRlbXNDb3VudCIgVHlwZU5hbWU9InRu czpTZXJ2aWNlQ291bnRlckRhdGFUeXBlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2V0TW9u aXRvcmluZ01vZGVDb3VudCIgVHlwZU5hbWU9InRuczpTZXJ2aWNlQ291bnRlckRhdGFUeXBlIiAv Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2V0VHJpZ2dlcmluZ0NvdW50IiBUeXBlTmFtZT0idG5z OlNlcnZpY2VDb3VudGVyRGF0YVR5cGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEZWxldGVN b25pdG9yZWRJdGVtc0NvdW50IiBUeXBlTmFtZT0idG5zOlNlcnZpY2VDb3VudGVyRGF0YVR5cGUi IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJDcmVhdGVTdWJzY3JpcHRpb25Db3VudCIgVHlwZU5h bWU9InRuczpTZXJ2aWNlQ291bnRlckRhdGFUeXBlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i TW9kaWZ5U3Vic2NyaXB0aW9uQ291bnQiIFR5cGVOYW1lPSJ0bnM6U2VydmljZUNvdW50ZXJEYXRh VHlwZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNldFB1Ymxpc2hpbmdNb2RlQ291bnQiIFR5 cGVOYW1lPSJ0bnM6U2VydmljZUNvdW50ZXJEYXRhVHlwZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5h bWU9IlB1Ymxpc2hDb3VudCIgVHlwZU5hbWU9InRuczpTZXJ2aWNlQ291bnRlckRhdGFUeXBlIiAv Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVwdWJsaXNoQ291bnQiIFR5cGVOYW1lPSJ0bnM6U2Vy dmljZUNvdW50ZXJEYXRhVHlwZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlRyYW5zZmVyU3Vi c2NyaXB0aW9uc0NvdW50IiBUeXBlTmFtZT0idG5zOlNlcnZpY2VDb3VudGVyRGF0YVR5cGUiIC8+ DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEZWxldGVTdWJzY3JpcHRpb25zQ291bnQiIFR5cGVOYW1l PSJ0bnM6U2VydmljZUNvdW50ZXJEYXRhVHlwZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkFk ZE5vZGVzQ291bnQiIFR5cGVOYW1lPSJ0bnM6U2VydmljZUNvdW50ZXJEYXRhVHlwZSIgLz4NCiAg ICA8b3BjOkZpZWxkIE5hbWU9IkFkZFJlZmVyZW5jZXNDb3VudCIgVHlwZU5hbWU9InRuczpTZXJ2 aWNlQ291bnRlckRhdGFUeXBlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGVsZXRlTm9kZXND b3VudCIgVHlwZU5hbWU9InRuczpTZXJ2aWNlQ291bnRlckRhdGFUeXBlIiAvPg0KICAgIDxvcGM6 RmllbGQgTmFtZT0iRGVsZXRlUmVmZXJlbmNlc0NvdW50IiBUeXBlTmFtZT0idG5zOlNlcnZpY2VD b3VudGVyRGF0YVR5cGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJCcm93c2VDb3VudCIgVHlw ZU5hbWU9InRuczpTZXJ2aWNlQ291bnRlckRhdGFUeXBlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt ZT0iQnJvd3NlTmV4dENvdW50IiBUeXBlTmFtZT0idG5zOlNlcnZpY2VDb3VudGVyRGF0YVR5cGUi IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJUcmFuc2xhdGVCcm93c2VQYXRoc1RvTm9kZUlkc0Nv dW50IiBUeXBlTmFtZT0idG5zOlNlcnZpY2VDb3VudGVyRGF0YVR5cGUiIC8+DQogICAgPG9wYzpG aWVsZCBOYW1lPSJRdWVyeUZpcnN0Q291bnQiIFR5cGVOYW1lPSJ0bnM6U2VydmljZUNvdW50ZXJE YXRhVHlwZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlF1ZXJ5TmV4dENvdW50IiBUeXBlTmFt ZT0idG5zOlNlcnZpY2VDb3VudGVyRGF0YVR5cGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJS ZWdpc3Rlck5vZGVzQ291bnQiIFR5cGVOYW1lPSJ0bnM6U2VydmljZUNvdW50ZXJEYXRhVHlwZSIg Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlVucmVnaXN0ZXJOb2Rlc0NvdW50IiBUeXBlTmFtZT0i dG5zOlNlcnZpY2VDb3VudGVyRGF0YVR5cGUiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0K DQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iU2Vzc2lvblNlY3VyaXR5RGlhZ25vc3RpY3NE YXRhVHlwZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBO YW1lPSJTZXNzaW9uSWQiIFR5cGVOYW1lPSJ1YTpOb2RlSWQiIC8+DQogICAgPG9wYzpGaWVsZCBO YW1lPSJDbGllbnRVc2VySWRPZlNlc3Npb24iIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAg IDxvcGM6RmllbGQgTmFtZT0iTm9PZkNsaWVudFVzZXJJZEhpc3RvcnkiIFR5cGVOYW1lPSJvcGM6 SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJDbGllbnRVc2VySWRIaXN0b3J5IiBUeXBl TmFtZT0ib3BjOlN0cmluZyIgTGVuZ3RoRmllbGQ9Ik5vT2ZDbGllbnRVc2VySWRIaXN0b3J5IiAv Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQXV0aGVudGljYXRpb25NZWNoYW5pc20iIFR5cGVOYW1l PSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRW5jb2RpbmciIFR5cGVOYW1l PSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVHJhbnNwb3J0UHJvdG9jb2wi IFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2VjdXJpdHlN b2RlIiBUeXBlTmFtZT0idG5zOk1lc3NhZ2VTZWN1cml0eU1vZGUiIC8+DQogICAgPG9wYzpGaWVs ZCBOYW1lPSJTZWN1cml0eVBvbGljeVVyaSIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogICAg PG9wYzpGaWVsZCBOYW1lPSJDbGllbnRDZXJ0aWZpY2F0ZSIgVHlwZU5hbWU9Im9wYzpCeXRlU3Ry aW5nIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBl IE5hbWU9IlNlcnZpY2VDb3VudGVyRGF0YVR5cGUiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmpl Y3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVG90YWxDb3VudCIgVHlwZU5hbWU9Im9wYzpVSW50 MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJFcnJvckNvdW50IiBUeXBlTmFtZT0ib3BjOlVJ bnQzMiIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlw ZSBOYW1lPSJTdGF0dXNSZXN1bHQiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAg IDxvcGM6RmllbGQgTmFtZT0iU3RhdHVzQ29kZSIgVHlwZU5hbWU9InVhOlN0YXR1c0NvZGUiIC8+ DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEaWFnbm9zdGljSW5mbyIgVHlwZU5hbWU9InVhOkRpYWdu b3N0aWNJbmZvIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVy ZWRUeXBlIE5hbWU9IlN1YnNjcmlwdGlvbkRpYWdub3N0aWNzRGF0YVR5cGUiIEJhc2VUeXBlPSJ1 YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2Vzc2lvbklkIiBUeXBl TmFtZT0idWE6Tm9kZUlkIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU3Vic2NyaXB0aW9uSWQi IFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUHJpb3JpdHki IFR5cGVOYW1lPSJvcGM6Qnl0ZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlB1Ymxpc2hpbmdJ bnRlcnZhbCIgVHlwZU5hbWU9Im9wYzpEb3VibGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJN YXhLZWVwQWxpdmVDb3VudCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVs ZCBOYW1lPSJNYXhMaWZldGltZUNvdW50IiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8 b3BjOkZpZWxkIE5hbWU9Ik1heE5vdGlmaWNhdGlvbnNQZXJQdWJsaXNoIiBUeXBlTmFtZT0ib3Bj OlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlB1Ymxpc2hpbmdFbmFibGVkIiBUeXBl TmFtZT0ib3BjOkJvb2xlYW4iIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJNb2RpZnlDb3VudCIg VHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJFbmFibGVDb3Vu dCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEaXNhYmxl Q291bnQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVw dWJsaXNoUmVxdWVzdENvdW50IiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZp ZWxkIE5hbWU9IlJlcHVibGlzaE1lc3NhZ2VSZXF1ZXN0Q291bnQiIFR5cGVOYW1lPSJvcGM6VUlu dDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVwdWJsaXNoTWVzc2FnZUNvdW50IiBUeXBl TmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlRyYW5zZmVyUmVxdWVz dENvdW50IiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlRy YW5zZmVycmVkVG9BbHRDbGllbnRDb3VudCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAg PG9wYzpGaWVsZCBOYW1lPSJUcmFuc2ZlcnJlZFRvU2FtZUNsaWVudENvdW50IiBUeXBlTmFtZT0i b3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlB1Ymxpc2hSZXF1ZXN0Q291bnQi IFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGF0YUNoYW5n ZU5vdGlmaWNhdGlvbnNDb3VudCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpG aWVsZCBOYW1lPSJFdmVudE5vdGlmaWNhdGlvbnNDb3VudCIgVHlwZU5hbWU9Im9wYzpVSW50MzIi IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb3RpZmljYXRpb25zQ291bnQiIFR5cGVOYW1lPSJv cGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTGF0ZVB1Ymxpc2hSZXF1ZXN0Q291 bnQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQ3VycmVu dEtlZXBBbGl2ZUNvdW50IiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxk IE5hbWU9IkN1cnJlbnRMaWZldGltZUNvdW50IiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAg ICA8b3BjOkZpZWxkIE5hbWU9IlVuYWNrbm93bGVkZ2VkTWVzc2FnZUNvdW50IiBUeXBlTmFtZT0i b3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRpc2NhcmRlZE1lc3NhZ2VDb3Vu dCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJNb25pdG9y ZWRJdGVtQ291bnQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt ZT0iRGlzYWJsZWRNb25pdG9yZWRJdGVtQ291bnQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0K ICAgIDxvcGM6RmllbGQgTmFtZT0iTW9uaXRvcmluZ1F1ZXVlT3ZlcmZsb3dDb3VudCIgVHlwZU5h bWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOZXh0U2VxdWVuY2VOdW1i ZXIiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRXZlbnRR dWV1ZU92ZXJGbG93Q291bnQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICA8L29wYzpTdHJ1 Y3R1cmVkVHlwZT4NCg0KICA8b3BjOkVudW1lcmF0ZWRUeXBlIE5hbWU9Ik1vZGVsQ2hhbmdlU3Ry dWN0dXJlVmVyYk1hc2siIExlbmd0aEluQml0cz0iMzIiPg0KICAgIDxvcGM6RW51bWVyYXRlZFZh bHVlIE5hbWU9Ik5vZGVBZGRlZCIgVmFsdWU9IjEiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFs dWUgTmFtZT0iTm9kZURlbGV0ZWQiIFZhbHVlPSIyIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZh bHVlIE5hbWU9IlJlZmVyZW5jZUFkZGVkIiBWYWx1ZT0iNCIgLz4NCiAgICA8b3BjOkVudW1lcmF0 ZWRWYWx1ZSBOYW1lPSJSZWZlcmVuY2VEZWxldGVkIiBWYWx1ZT0iOCIgLz4NCiAgICA8b3BjOkVu dW1lcmF0ZWRWYWx1ZSBOYW1lPSJEYXRhVHlwZUNoYW5nZWQiIFZhbHVlPSIxNiIgLz4NCiAgPC9v cGM6RW51bWVyYXRlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJNb2RlbENo YW5nZVN0cnVjdHVyZURhdGFUeXBlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAg ICA8b3BjOkZpZWxkIE5hbWU9IkFmZmVjdGVkIiBUeXBlTmFtZT0idWE6Tm9kZUlkIiAvPg0KICAg IDxvcGM6RmllbGQgTmFtZT0iQWZmZWN0ZWRUeXBlIiBUeXBlTmFtZT0idWE6Tm9kZUlkIiAvPg0K ICAgIDxvcGM6RmllbGQgTmFtZT0iVmVyYiIgVHlwZU5hbWU9Im9wYzpCeXRlIiAvPg0KICA8L29w YzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlNlbWFudGlj Q2hhbmdlU3RydWN0dXJlRGF0YVR5cGUiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0K ICAgIDxvcGM6RmllbGQgTmFtZT0iQWZmZWN0ZWQiIFR5cGVOYW1lPSJ1YTpOb2RlSWQiIC8+DQog ICAgPG9wYzpGaWVsZCBOYW1lPSJBZmZlY3RlZFR5cGUiIFR5cGVOYW1lPSJ1YTpOb2RlSWQiIC8+ DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0i UmFuZ2UiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFt ZT0iTG93IiBUeXBlTmFtZT0ib3BjOkRvdWJsZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ikhp Z2giIFR5cGVOYW1lPSJvcGM6RG91YmxlIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0K ICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkVVSW5mb3JtYXRpb24iIEJhc2VUeXBlPSJ1YTpF eHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTmFtZXNwYWNlVXJpIiBUeXBl TmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlVuaXRJZCIgVHlwZU5h bWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRpc3BsYXlOYW1lIiBUeXBl TmFtZT0idWE6TG9jYWxpemVkVGV4dCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRlc2NyaXB0 aW9uIiBUeXBlTmFtZT0idWE6TG9jYWxpemVkVGV4dCIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5 cGU+DQoNCiAgPG9wYzpFbnVtZXJhdGVkVHlwZSBOYW1lPSJBeGlzU2NhbGVFbnVtZXJhdGlvbiIg TGVuZ3RoSW5CaXRzPSIzMiI+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iTGluZWFy IiBWYWx1ZT0iMCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJMb2ciIFZhbHVl PSIxIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkxuIiBWYWx1ZT0iMiIgLz4N CiAgPC9vcGM6RW51bWVyYXRlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJD b21wbGV4TnVtYmVyVHlwZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9w YzpGaWVsZCBOYW1lPSJSZWFsIiBUeXBlTmFtZT0ib3BjOkZsb2F0IiAvPg0KICAgIDxvcGM6Rmll bGQgTmFtZT0iSW1hZ2luYXJ5IiBUeXBlTmFtZT0ib3BjOkZsb2F0IiAvPg0KICA8L29wYzpTdHJ1 Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkRvdWJsZUNvbXBsZXhO dW1iZXJUeXBlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxk IE5hbWU9IlJlYWwiIFR5cGVOYW1lPSJvcGM6RG91YmxlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt ZT0iSW1hZ2luYXJ5IiBUeXBlTmFtZT0ib3BjOkRvdWJsZSIgLz4NCiAgPC9vcGM6U3RydWN0dXJl ZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJBeGlzSW5mb3JtYXRpb24iIEJh c2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRW5naW5l ZXJpbmdVbml0cyIgVHlwZU5hbWU9InRuczpFVUluZm9ybWF0aW9uIiAvPg0KICAgIDxvcGM6Rmll bGQgTmFtZT0iRVVSYW5nZSIgVHlwZU5hbWU9InRuczpSYW5nZSIgLz4NCiAgICA8b3BjOkZpZWxk IE5hbWU9IlRpdGxlIiBUeXBlTmFtZT0idWE6TG9jYWxpemVkVGV4dCIgLz4NCiAgICA8b3BjOkZp ZWxkIE5hbWU9IkF4aXNTY2FsZVR5cGUiIFR5cGVOYW1lPSJ0bnM6QXhpc1NjYWxlRW51bWVyYXRp b24iIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mQXhpc1N0ZXBzIiBUeXBlTmFtZT0ib3Bj OkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQXhpc1N0ZXBzIiBUeXBlTmFtZT0ib3Bj OkRvdWJsZSIgTGVuZ3RoRmllbGQ9Ik5vT2ZBeGlzU3RlcHMiIC8+DQogIDwvb3BjOlN0cnVjdHVy ZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iWFZUeXBlIiBCYXNlVHlwZT0i dWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlgiIFR5cGVOYW1lPSJv cGM6RG91YmxlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVmFsdWUiIFR5cGVOYW1lPSJvcGM6 RmxvYXQiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5 cGUgTmFtZT0iUHJvZ3JhbURpYWdub3N0aWNEYXRhVHlwZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lv bk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJDcmVhdGVTZXNzaW9uSWQiIFR5cGVOYW1l PSJ1YTpOb2RlSWQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJDcmVhdGVDbGllbnROYW1lIiBU eXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ikludm9jYXRpb25D cmVhdGlvblRpbWUiIFR5cGVOYW1lPSJvcGM6RGF0ZVRpbWUiIC8+DQogICAgPG9wYzpGaWVsZCBO YW1lPSJMYXN0VHJhbnNpdGlvblRpbWUiIFR5cGVOYW1lPSJvcGM6RGF0ZVRpbWUiIC8+DQogICAg PG9wYzpGaWVsZCBOYW1lPSJMYXN0TWV0aG9kQ2FsbCIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+ DQogICAgPG9wYzpGaWVsZCBOYW1lPSJMYXN0TWV0aG9kU2Vzc2lvbklkIiBUeXBlTmFtZT0idWE6 Tm9kZUlkIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkxhc3RNZXRob2RJbnB1dEFyZ3Vt ZW50cyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ikxhc3RN ZXRob2RJbnB1dEFyZ3VtZW50cyIgVHlwZU5hbWU9InRuczpBcmd1bWVudCIgTGVuZ3RoRmllbGQ9 Ik5vT2ZMYXN0TWV0aG9kSW5wdXRBcmd1bWVudHMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJO b09mTGFzdE1ldGhvZE91dHB1dEFyZ3VtZW50cyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAg ICA8b3BjOkZpZWxkIE5hbWU9Ikxhc3RNZXRob2RPdXRwdXRBcmd1bWVudHMiIFR5cGVOYW1lPSJ0 bnM6QXJndW1lbnQiIExlbmd0aEZpZWxkPSJOb09mTGFzdE1ldGhvZE91dHB1dEFyZ3VtZW50cyIg Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ikxhc3RNZXRob2RDYWxsVGltZSIgVHlwZU5hbWU9Im9w YzpEYXRlVGltZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ikxhc3RNZXRob2RSZXR1cm5TdGF0 dXMiIFR5cGVOYW1lPSJ0bnM6U3RhdHVzUmVzdWx0IiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlw ZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlByb2dyYW1EaWFnbm9zdGljMkRhdGFU eXBlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 IkNyZWF0ZVNlc3Npb25JZCIgVHlwZU5hbWU9InVhOk5vZGVJZCIgLz4NCiAgICA8b3BjOkZpZWxk IE5hbWU9IkNyZWF0ZUNsaWVudE5hbWUiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxv cGM6RmllbGQgTmFtZT0iSW52b2NhdGlvbkNyZWF0aW9uVGltZSIgVHlwZU5hbWU9Im9wYzpEYXRl VGltZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ikxhc3RUcmFuc2l0aW9uVGltZSIgVHlwZU5h bWU9Im9wYzpEYXRlVGltZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ikxhc3RNZXRob2RDYWxs IiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ikxhc3RNZXRo b2RTZXNzaW9uSWQiIFR5cGVOYW1lPSJ1YTpOb2RlSWQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1l PSJOb09mTGFzdE1ldGhvZElucHV0QXJndW1lbnRzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0K ICAgIDxvcGM6RmllbGQgTmFtZT0iTGFzdE1ldGhvZElucHV0QXJndW1lbnRzIiBUeXBlTmFtZT0i dG5zOkFyZ3VtZW50IiBMZW5ndGhGaWVsZD0iTm9PZkxhc3RNZXRob2RJbnB1dEFyZ3VtZW50cyIg Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZMYXN0TWV0aG9kT3V0cHV0QXJndW1lbnRzIiBU eXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTGFzdE1ldGhvZE91 dHB1dEFyZ3VtZW50cyIgVHlwZU5hbWU9InRuczpBcmd1bWVudCIgTGVuZ3RoRmllbGQ9Ik5vT2ZM YXN0TWV0aG9kT3V0cHV0QXJndW1lbnRzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkxh c3RNZXRob2RJbnB1dFZhbHVlcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZp ZWxkIE5hbWU9Ikxhc3RNZXRob2RJbnB1dFZhbHVlcyIgVHlwZU5hbWU9InVhOlZhcmlhbnQiIExl bmd0aEZpZWxkPSJOb09mTGFzdE1ldGhvZElucHV0VmFsdWVzIiAvPg0KICAgIDxvcGM6RmllbGQg TmFtZT0iTm9PZkxhc3RNZXRob2RPdXRwdXRWYWx1ZXMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+ DQogICAgPG9wYzpGaWVsZCBOYW1lPSJMYXN0TWV0aG9kT3V0cHV0VmFsdWVzIiBUeXBlTmFtZT0i dWE6VmFyaWFudCIgTGVuZ3RoRmllbGQ9Ik5vT2ZMYXN0TWV0aG9kT3V0cHV0VmFsdWVzIiAvPg0K ICAgIDxvcGM6RmllbGQgTmFtZT0iTGFzdE1ldGhvZENhbGxUaW1lIiBUeXBlTmFtZT0ib3BjOkRh dGVUaW1lIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTGFzdE1ldGhvZFJldHVyblN0YXR1cyIg VHlwZU5hbWU9InVhOlN0YXR1c0NvZGUiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQog IDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iQW5ub3RhdGlvbiIgQmFzZVR5cGU9InVhOkV4dGVu c2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJNZXNzYWdlIiBUeXBlTmFtZT0ib3Bj OlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlVzZXJOYW1lIiBUeXBlTmFtZT0ib3Bj OlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkFubm90YXRpb25UaW1lIiBUeXBlTmFt ZT0ib3BjOkRhdGVUaW1lIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOkVu dW1lcmF0ZWRUeXBlIE5hbWU9IkV4Y2VwdGlvbkRldmlhdGlvbkZvcm1hdCIgTGVuZ3RoSW5CaXRz PSIzMiI+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iQWJzb2x1dGVWYWx1ZSIgVmFs dWU9IjAiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iUGVyY2VudE9mVmFsdWUi IFZhbHVlPSIxIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlBlcmNlbnRPZlJh bmdlIiBWYWx1ZT0iMiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJQZXJjZW50 T2ZFVVJhbmdlIiBWYWx1ZT0iMyIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJV bmtub3duIiBWYWx1ZT0iNCIgLz4NCiAgPC9vcGM6RW51bWVyYXRlZFR5cGU+DQoNCjwvb3BjOlR5 cGVEaWN0aW9uYXJ5Pg== NamespaceUri i=68 i=7617 http://opcfoundation.org/UA/ Deprecated i=68 i=7617 true Union i=69 i=7617 Union KeyValuePair i=69 i=7617 KeyValuePair AdditionalParametersType i=69 i=7617 AdditionalParametersType EphemeralKeyType i=69 i=7617 EphemeralKeyType EndpointType i=69 i=7617 EndpointType RationalNumber i=69 i=7617 RationalNumber Vector i=69 i=7617 Vector 3DVector i=69 i=7617 ThreeDVector CartesianCoordinates i=69 i=7617 CartesianCoordinates 3DCartesianCoordinates i=69 i=7617 ThreeDCartesianCoordinates Orientation i=69 i=7617 Orientation 3DOrientation i=69 i=7617 ThreeDOrientation Frame i=69 i=7617 Frame 3DFrame i=69 i=7617 ThreeDFrame IdentityMappingRuleType i=69 i=7617 IdentityMappingRuleType CurrencyUnitType i=69 i=7617 CurrencyUnitType TrustListDataType i=69 i=7617 TrustListDataType DataTypeSchemaHeader i=69 i=7617 DataTypeSchemaHeader DataTypeDescription i=69 i=7617 DataTypeDescription StructureDescription i=69 i=7617 StructureDescription EnumDescription i=69 i=7617 EnumDescription SimpleTypeDescription i=69 i=7617 SimpleTypeDescription UABinaryFileDataType i=69 i=7617 UABinaryFileDataType DataSetMetaDataType i=69 i=7617 DataSetMetaDataType FieldMetaData i=69 i=7617 FieldMetaData ConfigurationVersionDataType i=69 i=7617 ConfigurationVersionDataType PublishedDataSetDataType i=69 i=7617 PublishedDataSetDataType PublishedDataSetSourceDataType i=69 i=7617 PublishedDataSetSourceDataType PublishedVariableDataType i=69 i=7617 PublishedVariableDataType PublishedDataItemsDataType i=69 i=7617 PublishedDataItemsDataType PublishedEventsDataType i=69 i=7617 PublishedEventsDataType DataSetWriterDataType i=69 i=7617 DataSetWriterDataType DataSetWriterTransportDataType i=69 i=7617 DataSetWriterTransportDataType DataSetWriterMessageDataType i=69 i=7617 DataSetWriterMessageDataType PubSubGroupDataType i=69 i=7617 PubSubGroupDataType WriterGroupDataType i=69 i=7617 WriterGroupDataType WriterGroupTransportDataType i=69 i=7617 WriterGroupTransportDataType WriterGroupMessageDataType i=69 i=7617 WriterGroupMessageDataType PubSubConnectionDataType i=69 i=7617 PubSubConnectionDataType ConnectionTransportDataType i=69 i=7617 ConnectionTransportDataType NetworkAddressDataType i=69 i=7617 NetworkAddressDataType NetworkAddressUrlDataType i=69 i=7617 NetworkAddressUrlDataType ReaderGroupDataType i=69 i=7617 ReaderGroupDataType ReaderGroupTransportDataType i=69 i=7617 ReaderGroupTransportDataType ReaderGroupMessageDataType i=69 i=7617 ReaderGroupMessageDataType DataSetReaderDataType i=69 i=7617 DataSetReaderDataType DataSetReaderTransportDataType i=69 i=7617 DataSetReaderTransportDataType DataSetReaderMessageDataType i=69 i=7617 DataSetReaderMessageDataType SubscribedDataSetDataType i=69 i=7617 SubscribedDataSetDataType TargetVariablesDataType i=69 i=7617 TargetVariablesDataType FieldTargetDataType i=69 i=7617 FieldTargetDataType SubscribedDataSetMirrorDataType i=69 i=7617 SubscribedDataSetMirrorDataType PubSubConfigurationDataType i=69 i=7617 PubSubConfigurationDataType UadpWriterGroupMessageDataType i=69 i=7617 UadpWriterGroupMessageDataType UadpDataSetWriterMessageDataType i=69 i=7617 UadpDataSetWriterMessageDataType UadpDataSetReaderMessageDataType i=69 i=7617 UadpDataSetReaderMessageDataType JsonWriterGroupMessageDataType i=69 i=7617 JsonWriterGroupMessageDataType JsonDataSetWriterMessageDataType i=69 i=7617 JsonDataSetWriterMessageDataType JsonDataSetReaderMessageDataType i=69 i=7617 JsonDataSetReaderMessageDataType DatagramConnectionTransportDataType i=69 i=7617 DatagramConnectionTransportDataType DatagramWriterGroupTransportDataType i=69 i=7617 DatagramWriterGroupTransportDataType BrokerConnectionTransportDataType i=69 i=7617 BrokerConnectionTransportDataType BrokerWriterGroupTransportDataType i=69 i=7617 BrokerWriterGroupTransportDataType BrokerDataSetWriterTransportDataType i=69 i=7617 BrokerDataSetWriterTransportDataType BrokerDataSetReaderTransportDataType i=69 i=7617 BrokerDataSetReaderTransportDataType AliasNameDataType i=69 i=7617 AliasNameDataType UnsignedRationalNumber i=69 i=7617 UnsignedRationalNumber RolePermissionType i=69 i=7617 RolePermissionType DataTypeDefinition i=69 i=7617 DataTypeDefinition StructureField i=69 i=7617 StructureField StructureDefinition i=69 i=7617 StructureDefinition EnumDefinition i=69 i=7617 EnumDefinition Argument i=69 i=7617 Argument EnumValueType i=69 i=7617 EnumValueType EnumField i=69 i=7617 EnumField OptionSet i=69 i=7617 OptionSet TimeZoneDataType i=69 i=7617 TimeZoneDataType ApplicationDescription i=69 i=7617 ApplicationDescription ServerOnNetwork i=69 i=7617 ServerOnNetwork UserTokenPolicy i=69 i=7617 UserTokenPolicy EndpointDescription i=69 i=7617 EndpointDescription RegisteredServer i=69 i=7617 RegisteredServer DiscoveryConfiguration i=69 i=7617 DiscoveryConfiguration MdnsDiscoveryConfiguration i=69 i=7617 MdnsDiscoveryConfiguration SignedSoftwareCertificate i=69 i=7617 SignedSoftwareCertificate UserIdentityToken i=69 i=7617 UserIdentityToken AnonymousIdentityToken i=69 i=7617 AnonymousIdentityToken UserNameIdentityToken i=69 i=7617 UserNameIdentityToken X509IdentityToken i=69 i=7617 X509IdentityToken IssuedIdentityToken i=69 i=7617 IssuedIdentityToken AddNodesItem i=69 i=7617 AddNodesItem AddReferencesItem i=69 i=7617 AddReferencesItem DeleteNodesItem i=69 i=7617 DeleteNodesItem DeleteReferencesItem i=69 i=7617 DeleteReferencesItem RelativePathElement i=69 i=7617 RelativePathElement RelativePath i=69 i=7617 RelativePath EndpointConfiguration i=69 i=7617 EndpointConfiguration ContentFilterElement i=69 i=7617 ContentFilterElement ContentFilter i=69 i=7617 ContentFilter FilterOperand i=69 i=7617 FilterOperand ElementOperand i=69 i=7617 ElementOperand LiteralOperand i=69 i=7617 LiteralOperand AttributeOperand i=69 i=7617 AttributeOperand SimpleAttributeOperand i=69 i=7617 SimpleAttributeOperand HistoryEvent i=69 i=7617 HistoryEvent MonitoringFilter i=69 i=7617 MonitoringFilter EventFilter i=69 i=7617 EventFilter AggregateConfiguration i=69 i=7617 AggregateConfiguration HistoryEventFieldList i=69 i=7617 HistoryEventFieldList BuildInfo i=69 i=7617 BuildInfo RedundantServerDataType i=69 i=7617 RedundantServerDataType EndpointUrlListDataType i=69 i=7617 EndpointUrlListDataType NetworkGroupDataType i=69 i=7617 NetworkGroupDataType SamplingIntervalDiagnosticsDataType i=69 i=7617 SamplingIntervalDiagnosticsDataType ServerDiagnosticsSummaryDataType i=69 i=7617 ServerDiagnosticsSummaryDataType ServerStatusDataType i=69 i=7617 ServerStatusDataType SessionDiagnosticsDataType i=69 i=7617 SessionDiagnosticsDataType SessionSecurityDiagnosticsDataType i=69 i=7617 SessionSecurityDiagnosticsDataType ServiceCounterDataType i=69 i=7617 ServiceCounterDataType StatusResult i=69 i=7617 StatusResult SubscriptionDiagnosticsDataType i=69 i=7617 SubscriptionDiagnosticsDataType ModelChangeStructureDataType i=69 i=7617 ModelChangeStructureDataType SemanticChangeStructureDataType i=69 i=7617 SemanticChangeStructureDataType Range i=69 i=7617 Range EUInformation i=69 i=7617 EUInformation ComplexNumberType i=69 i=7617 ComplexNumberType DoubleComplexNumberType i=69 i=7617 DoubleComplexNumberType AxisInformation i=69 i=7617 AxisInformation XVType i=69 i=7617 XVType ProgramDiagnosticDataType i=69 i=7617 ProgramDiagnosticDataType ProgramDiagnostic2DataType i=69 i=7617 ProgramDiagnostic2DataType Annotation i=69 i=7617 Annotation Default XML i=12756 i=12762 i=76 Default XML i=14533 i=14829 i=76 Default XML i=16313 i=17542 i=76 Default XML i=17548 i=17554 i=76 Default XML i=15528 i=16024 i=76 Default XML i=18806 i=18860 i=76 Default XML i=18807 i=18863 i=76 Default XML i=18808 i=18866 i=76 Default XML i=18809 i=18869 i=76 Default XML i=18810 i=19049 i=76 Default XML i=18811 i=19052 i=76 Default XML i=18812 i=19055 i=76 Default XML i=18813 i=19058 i=76 Default XML i=18814 i=19061 i=76 Default XML i=15634 i=15730 i=76 Default XML i=23498 i=23522 i=76 Default XML i=12554 i=12677 i=76 Default XML i=15534 i=16027 i=76 Default XML i=14525 i=14811 i=76 Default XML i=15487 i=15591 i=76 Default XML i=15488 i=15594 i=76 Default XML i=15005 i=15585 i=76 Default XML i=15006 i=15588 i=76 Default XML i=14523 i=14805 i=76 Default XML i=14524 i=14808 i=76 Default XML i=14593 i=14832 i=76 Default XML i=15578 i=16030 i=76 Default XML i=15580 i=16033 i=76 Default XML i=14273 i=14320 i=76 Default XML i=15581 i=16037 i=76 Default XML i=15582 i=16040 i=76 Default XML i=15597 i=16047 i=76 Default XML i=15598 i=16050 i=76 Default XML i=15605 i=16053 i=76 Default XML i=15609 i=16056 i=76 Default XML i=15480 i=21180 i=76 Default XML i=15611 i=16062 i=76 Default XML i=15616 i=16065 i=76 Default XML i=15617 i=16068 i=76 Default XML i=15618 i=16071 i=76 Default XML i=15502 i=21183 i=76 Default XML i=15510 i=21186 i=76 Default XML i=15520 i=21189 i=76 Default XML i=15621 i=16077 i=76 Default XML i=15622 i=16080 i=76 Default XML i=15623 i=16083 i=76 Default XML i=15628 i=16086 i=76 Default XML i=15629 i=16089 i=76 Default XML i=15630 i=16092 i=76 Default XML i=15631 i=16095 i=76 Default XML i=14744 i=14835 i=76 Default XML i=15635 i=16098 i=76 Default XML i=15530 i=21192 i=76 Default XML i=15645 i=16104 i=76 Default XML i=15652 i=16107 i=76 Default XML i=15653 i=16110 i=76 Default XML i=15657 i=16113 i=76 Default XML i=15664 i=16116 i=76 Default XML i=15665 i=16119 i=76 Default XML i=17467 i=17473 i=76 Default XML i=15532 i=21195 i=76 Default XML i=15007 i=15640 i=76 Default XML i=15667 i=16125 i=76 Default XML i=15669 i=16144 i=76 Default XML i=15670 i=16147 i=76 Default XML i=23468 i=23508 i=76 Default XML i=24107 i=24129 i=76 Default XML i=96 i=16127 i=76 Default XML i=97 i=18166 i=76 Default XML i=101 i=18169 i=76 Default XML i=99 i=18172 i=76 Default XML i=100 i=18175 i=76 Default XML i=296 i=8285 i=76 Default XML i=7594 i=8291 i=76 Default XML i=102 i=14826 i=76 Default XML i=12755 i=12759 i=76 Default XML i=8912 i=8918 i=76 Default XML i=308 i=8300 i=76 Default XML i=12189 i=12201 i=76 Default XML i=304 i=8297 i=76 Default XML i=312 i=8303 i=76 Default XML i=432 i=8417 i=76 Default XML i=12890 i=12894 i=76 Default XML i=12891 i=12897 i=76 Default XML i=344 i=8333 i=76 Default XML i=316 i=8306 i=76 Default XML i=319 i=8309 i=76 Default XML i=322 i=8312 i=76 Default XML i=325 i=8315 i=76 Default XML i=938 i=8318 i=76 Default XML i=376 i=8363 i=76 Default XML i=379 i=8366 i=76 Default XML i=382 i=8369 i=76 Default XML i=385 i=8372 i=76 Default XML i=537 i=12712 i=76 Default XML i=540 i=12715 i=76 Default XML i=331 i=8321 i=76 Default XML i=583 i=8564 i=76 Default XML i=586 i=8567 i=76 Default XML i=589 i=8570 i=76 Default XML i=592 i=8573 i=76 Default XML i=595 i=8576 i=76 Default XML i=598 i=8579 i=76 Default XML i=601 i=8582 i=76 Default XML i=659 i=8639 i=76 Default XML i=719 i=8702 i=76 Default XML i=725 i=8708 i=76 Default XML i=948 i=8711 i=76 Default XML i=920 i=8807 i=76 Default XML i=338 i=8327 i=76 Default XML i=853 i=8843 i=76 Default XML i=11943 i=11951 i=76 Default XML i=11944 i=11954 i=76 Default XML i=856 i=8846 i=76 Default XML i=859 i=8849 i=76 Default XML i=862 i=8852 i=76 Default XML i=865 i=8855 i=76 Default XML i=868 i=8858 i=76 Default XML i=871 i=8861 i=76 Default XML i=299 i=8294 i=76 Default XML i=874 i=8864 i=76 Default XML i=877 i=8867 i=76 Default XML i=897 i=8870 i=76 Default XML i=884 i=8873 i=76 Default XML i=887 i=8876 i=76 Default XML i=12171 i=12175 i=76 Default XML i=12172 i=12178 i=76 Default XML i=12079 i=12083 i=76 Default XML i=12080 i=12086 i=76 Default XML i=894 i=8882 i=76 Default XML i=24033 i=24039 i=76 Default XML i=891 i=8879 i=76 Opc.Ua i=8254 i=15039 i=12762 i=14829 i=17542 i=17554 i=16024 i=18860 i=18863 i=18866 i=18869 i=19049 i=19052 i=19055 i=19058 i=19061 i=15730 i=23522 i=12677 i=16027 i=14811 i=15591 i=15594 i=15585 i=15588 i=14805 i=14808 i=14832 i=16030 i=16033 i=14320 i=16037 i=16040 i=16047 i=16050 i=16053 i=16056 i=21180 i=16062 i=16065 i=16068 i=16071 i=21183 i=21186 i=21189 i=16077 i=16080 i=16083 i=16086 i=16089 i=16092 i=16095 i=14835 i=16098 i=21192 i=16104 i=16107 i=16110 i=16113 i=16116 i=16119 i=17473 i=21195 i=15640 i=16125 i=16144 i=16147 i=23508 i=24129 i=16127 i=18166 i=18169 i=18172 i=18175 i=8285 i=8291 i=14826 i=12759 i=8918 i=8300 i=12201 i=8297 i=8303 i=8417 i=12894 i=12897 i=8333 i=8306 i=8309 i=8312 i=8315 i=8318 i=8363 i=8366 i=8369 i=8372 i=12712 i=12715 i=8321 i=8564 i=8567 i=8570 i=8573 i=8576 i=8579 i=8582 i=8639 i=8702 i=8708 i=8711 i=8807 i=8327 i=8843 i=11951 i=11954 i=8846 i=8849 i=8852 i=8855 i=8858 i=8861 i=8294 i=8864 i=8867 i=8870 i=8873 i=8876 i=12175 i=12178 i=12083 i=12086 i=8882 i=24039 i=8879 i=92 i=72 PHhzOnNjaGVtYQ0KICB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEi DQogIHhtbG5zOnVhPSJodHRwOi8vb3BjZm91bmRhdGlvbi5vcmcvVUEvMjAwOC8wMi9UeXBlcy54 c2QiDQogIHhtbG5zOnRucz0iaHR0cDovL29wY2ZvdW5kYXRpb24ub3JnL1VBLzIwMDgvMDIvVHlw ZXMueHNkIg0KICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9vcGNmb3VuZGF0aW9uLm9yZy9VQS8y MDA4LzAyL1R5cGVzLnhzZCINCiAgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiDQo+DQog IDx4czplbGVtZW50IG5hbWU9IkJvb2xlYW4iIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4czpib29s ZWFuIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZCb29sZWFuIj4NCiAgICA8 eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJCb29sZWFuIiB0eXBlPSJ4czpi b29sZWFuIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiAvPg0KICAgIDwveHM6 c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RP ZkJvb2xlYW4iIHR5cGU9InRuczpMaXN0T2ZCb29sZWFuIiBuaWxsYWJsZT0idHJ1ZSI+PC94czpl bGVtZW50Pg0KDQogIDx4czplbGVtZW50IG5hbWU9IlNCeXRlIiBuaWxsYWJsZT0idHJ1ZSIgdHlw ZT0ieHM6Ynl0ZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mU0J5dGUiPg0K ICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNCeXRlIiB0eXBlPSJ4 czpieXRlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiAvPg0KICAgIDwveHM6 c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RP ZlNCeXRlIiB0eXBlPSJ0bnM6TGlzdE9mU0J5dGUiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1l bnQ+DQoNCiAgPHhzOmVsZW1lbnQgbmFtZT0iQnl0ZSIgbmlsbGFibGU9InRydWUiIHR5cGU9Inhz OnVuc2lnbmVkQnl0ZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mQnl0ZSI+ DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQnl0ZSIgdHlwZT0i eHM6dW5zaWduZWRCeXRlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiAvPg0K ICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5h bWU9Ikxpc3RPZkJ5dGUiIHR5cGU9InRuczpMaXN0T2ZCeXRlIiBuaWxsYWJsZT0idHJ1ZSI+PC94 czplbGVtZW50Pg0KDQogIDx4czplbGVtZW50IG5hbWU9IkludDE2IiBuaWxsYWJsZT0idHJ1ZSIg dHlwZT0ieHM6c2hvcnQiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkludDE2 Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJJbnQxNiIgdHlw ZT0ieHM6c2hvcnQiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIC8+DQogICAg PC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0i TGlzdE9mSW50MTYiIHR5cGU9InRuczpMaXN0T2ZJbnQxNiIgbmlsbGFibGU9InRydWUiPjwveHM6 ZWxlbWVudD4NCg0KICA8eHM6ZWxlbWVudCBuYW1lPSJVSW50MTYiIG5pbGxhYmxlPSJ0cnVlIiB0 eXBlPSJ4czp1bnNpZ25lZFNob3J0IiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0 T2ZVSW50MTYiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlVJ bnQxNiIgdHlwZT0ieHM6dW5zaWduZWRTaG9ydCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVu Ym91bmRlZCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8 eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZVSW50MTYiIHR5cGU9InRuczpMaXN0T2ZVSW50MTYiIG5p bGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmVsZW1lbnQgbmFtZT0iSW50MzIi IG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4czppbnQiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5h bWU9Ikxpc3RPZkludDMyIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBu YW1lPSJJbnQzMiIgdHlwZT0ieHM6aW50IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3Vu ZGVkIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czpl bGVtZW50IG5hbWU9Ikxpc3RPZkludDMyIiB0eXBlPSJ0bnM6TGlzdE9mSW50MzIiIG5pbGxhYmxl PSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmVsZW1lbnQgbmFtZT0iVUludDMyIiBuaWxs YWJsZT0idHJ1ZSIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBl IG5hbWU9Ikxpc3RPZlVJbnQzMiI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1l bnQgbmFtZT0iVUludDMyIiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiBtYXhP Y2N1cnM9InVuYm91bmRlZCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhU eXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZVSW50MzIiIHR5cGU9InRuczpMaXN0T2ZV SW50MzIiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmVsZW1lbnQgbmFt ZT0iSW50NjQiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4czpsb25nIiAvPg0KDQogIDx4czpjb21w bGV4VHlwZSBuYW1lPSJMaXN0T2ZJbnQ2NCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhz OmVsZW1lbnQgbmFtZT0iSW50NjQiIHR5cGU9InhzOmxvbmciIG1pbk9jY3Vycz0iMCIgbWF4T2Nj dXJzPSJ1bmJvdW5kZWQiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlw ZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mSW50NjQiIHR5cGU9InRuczpMaXN0T2ZJbnQ2 NCIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6ZWxlbWVudCBuYW1lPSJV SW50NjQiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4czp1bnNpZ25lZExvbmciIC8+DQoNCiAgPHhz OmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZlVJbnQ2NCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAg ICAgPHhzOmVsZW1lbnQgbmFtZT0iVUludDY0IiB0eXBlPSJ4czp1bnNpZ25lZExvbmciIG1pbk9j Y3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAg PC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mVUludDY0IiB0eXBl PSJ0bnM6TGlzdE9mVUludDY0IiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4 czplbGVtZW50IG5hbWU9IkZsb2F0IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHM6ZmxvYXQiIC8+ DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkZsb2F0Ij4NCiAgICA8eHM6c2VxdWVu Y2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJGbG9hdCIgdHlwZT0ieHM6ZmxvYXQiIG1pbk9j Y3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAg PC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mRmxvYXQiIHR5cGU9 InRuczpMaXN0T2ZGbG9hdCIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6 ZWxlbWVudCBuYW1lPSJEb3VibGUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4czpkb3VibGUiIC8+ DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkRvdWJsZSI+DQogICAgPHhzOnNlcXVl bmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRG91YmxlIiB0eXBlPSJ4czpkb3VibGUiIG1p bk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIC8+DQogICAgPC94czpzZXF1ZW5jZT4N CiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mRG91YmxlIiB0 eXBlPSJ0bnM6TGlzdE9mRG91YmxlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQog IDx4czplbGVtZW50IG5hbWU9IlN0cmluZyIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzOnN0cmlu ZyIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mU3RyaW5nIj4NCiAgICA8eHM6 c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTdHJpbmciIHR5cGU9InhzOnN0cmlu ZyIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgLz4NCiAgICA8L3hzOnNlcXVl bmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZTdHJp bmciIHR5cGU9InRuczpMaXN0T2ZTdHJpbmciIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+ DQoNCiAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0ZVRpbWUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4 czpkYXRlVGltZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mRGF0ZVRpbWUi Pg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRhdGVUaW1lIiB0 eXBlPSJ4czpkYXRlVGltZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgLz4N CiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBu YW1lPSJMaXN0T2ZEYXRlVGltZSIgdHlwZT0idG5zOkxpc3RPZkRhdGVUaW1lIiBuaWxsYWJsZT0i dHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJHdWlkIj4NCiAg ICA8eHM6YW5ub3RhdGlvbj4NCiAgICAgIDx4czphcHBpbmZvPg0KICAgICAgICA8SXNWYWx1ZVR5 cGUgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vMjAwMy8xMC9TZXJpYWxpemF0 aW9uLyI+dHJ1ZTwvSXNWYWx1ZVR5cGU+DQogICAgICA8L3hzOmFwcGluZm8+DQogICAgPC94czph bm5vdGF0aW9uPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlN0 cmluZyIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0iMSIgbmlsbGFi bGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAg PHhzOmVsZW1lbnQgbmFtZT0iR3VpZCIgdHlwZT0idG5zOkd1aWQiIG5pbGxhYmxlPSJ0cnVlIj48 L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkd1aWQiPg0KICAg IDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ikd1aWQiIHR5cGU9InRuczpH dWlkIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiAvPg0KICAgIDwveHM6c2Vx dWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkd1 aWQiIHR5cGU9InRuczpMaXN0T2ZHdWlkIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0K DQogIDx4czplbGVtZW50IG5hbWU9IkJ5dGVTdHJpbmciIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ4 czpiYXNlNjRCaW5hcnkiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkJ5dGVT dHJpbmciPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkJ5dGVT dHJpbmciIHR5cGU9InhzOmJhc2U2NEJpbmFyeSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVu Ym91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpj b21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mQnl0ZVN0cmluZyIgdHlwZT0i dG5zOkxpc3RPZkJ5dGVTdHJpbmciIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAg PHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZlhtbEVsZW1lbnQiPg0KICAgIDx4czpzZXF1ZW5j ZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlhtbEVsZW1lbnQiIG1pbk9jY3Vycz0iMCIgbWF4 T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIj4NCiAgICAgICAgPHhzOmNvbXBsZXhU eXBlPg0KICAgICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICAgIDx4czphbnkgbWluT2Nj dXJzPSIwIiBwcm9jZXNzQ29udGVudHM9ImxheCIvPg0KICAgICAgICAgIDwveHM6c2VxdWVuY2U+ DQogICAgICAgIDwveHM6Y29tcGxleFR5cGU+DQogICAgICA8L3hzOmVsZW1lbnQ+DQogICAgPC94 czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlz dE9mWG1sRWxlbWVudCIgdHlwZT0idG5zOkxpc3RPZlhtbEVsZW1lbnQiIG5pbGxhYmxlPSJ0cnVl Ij48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ik5vZGVJZCI+DQogICAg PHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iSWRlbnRpZmllciIgdHlwZT0i eHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0iMSIgbmlsbGFibGU9InRydWUiIC8+ DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQg bmFtZT0iTm9kZUlkIiB0eXBlPSJ0bnM6Tm9kZUlkIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVt ZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZOb2RlSWQiPg0KICAgIDx4czpz ZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik5vZGVJZCIgdHlwZT0idG5zOk5vZGVJ ZCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+ DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQg bmFtZT0iTGlzdE9mTm9kZUlkIiB0eXBlPSJ0bnM6TGlzdE9mTm9kZUlkIiBuaWxsYWJsZT0idHJ1 ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJFeHBhbmRlZE5vZGVJ ZCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iSWRlbnRpZmll ciIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0iMSIgbmlsbGFibGU9 InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhz OmVsZW1lbnQgbmFtZT0iRXhwYW5kZWROb2RlSWQiIHR5cGU9InRuczpFeHBhbmRlZE5vZGVJZCIg bmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0i TGlzdE9mRXhwYW5kZWROb2RlSWQiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVt ZW50IG5hbWU9IkV4cGFuZGVkTm9kZUlkIiB0eXBlPSJ0bnM6RXhwYW5kZWROb2RlSWQiIG1pbk9j Y3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwv eHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxp c3RPZkV4cGFuZGVkTm9kZUlkIiB0eXBlPSJ0bnM6TGlzdE9mRXhwYW5kZWROb2RlSWQiIG5pbGxh YmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlN0YXR1 c0NvZGUiPg0KICAgIDx4czphbm5vdGF0aW9uPg0KICAgICAgPHhzOmFwcGluZm8+DQogICAgICAg IDxJc1ZhbHVlVHlwZSB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS8yMDAzLzEw L1NlcmlhbGl6YXRpb24vIj50cnVlPC9Jc1ZhbHVlVHlwZT4NCiAgICAgIDwveHM6YXBwaW5mbz4N CiAgICA8L3hzOmFubm90YXRpb24+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1l bnQgbmFtZT0iQ29kZSIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAg ICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1l PSJTdGF0dXNDb2RlIiB0eXBlPSJ0bnM6U3RhdHVzQ29kZSIgbmlsbGFibGU9InRydWUiPjwveHM6 ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mU3RhdHVzQ29kZSI+DQog ICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU3RhdHVzQ29kZSIgdHlw ZT0idG5zOlN0YXR1c0NvZGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIC8+ DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQg bmFtZT0iTGlzdE9mU3RhdHVzQ29kZSIgdHlwZT0idG5zOkxpc3RPZlN0YXR1c0NvZGUiIG5pbGxh YmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkRpYWdu b3N0aWNJbmZvIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJT eW1ib2xpY0lkIiB0eXBlPSJ4czppbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVt ZW50IG5hbWU9Ik5hbWVzcGFjZVVyaSIgdHlwZT0ieHM6aW50IiBtaW5PY2N1cnM9IjAiIC8+DQog ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJMb2NhbGUiIHR5cGU9InhzOmludCIgbWluT2NjdXJzPSIw IiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTG9jYWxpemVkVGV4dCIgdHlwZT0ieHM6aW50 IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBZGRpdGlvbmFsSW5m byIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBu YW1lPSJJbm5lclN0YXR1c0NvZGUiIHR5cGU9InRuczpTdGF0dXNDb2RlIiBtaW5PY2N1cnM9IjAi IC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJJbm5lckRpYWdub3N0aWNJbmZvIiB0eXBlPSJ0 bnM6RGlhZ25vc3RpY0luZm8iIG1pbk9jY3Vycz0iMCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0K ICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJEaWFnbm9zdGljSW5mbyIg dHlwZT0idG5zOkRpYWdub3N0aWNJbmZvIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0K DQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZEaWFnbm9zdGljSW5mbyI+DQogICAgPHhz OnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGlhZ25vc3RpY0luZm8iIHR5cGU9 InRuczpEaWFnbm9zdGljSW5mbyIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIg bmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlw ZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mRGlhZ25vc3RpY0luZm8iIHR5cGU9InRuczpM aXN0T2ZEaWFnbm9zdGljSW5mbyIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8 eHM6Y29tcGxleFR5cGUgbmFtZT0iTG9jYWxpemVkVGV4dCI+DQogICAgPHhzOnNlcXVlbmNlPg0K ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTG9jYWxlIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vy cz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJUZXh0IiB0 eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwv eHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxv Y2FsaXplZFRleHQiIHR5cGU9InRuczpMb2NhbGl6ZWRUZXh0IiBuaWxsYWJsZT0idHJ1ZSIgLz4N Cg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mTG9jYWxpemVkVGV4dCI+DQogICAgPHhz OnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTG9jYWxpemVkVGV4dCIgdHlwZT0i dG5zOkxvY2FsaXplZFRleHQiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5p bGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+ DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkxvY2FsaXplZFRleHQiIHR5cGU9InRuczpMaXN0 T2ZMb2NhbGl6ZWRUZXh0IiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpj b21wbGV4VHlwZSBuYW1lPSJRdWFsaWZpZWROYW1lIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAg ICA8eHM6ZWxlbWVudCBuYW1lPSJOYW1lc3BhY2VJbmRleCIgdHlwZT0ieHM6dW5zaWduZWRTaG9y dCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTmFtZSIgdHlwZT0i eHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2Vx dWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlF1YWxpZmll ZE5hbWUiIHR5cGU9InRuczpRdWFsaWZpZWROYW1lIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCg0KICA8 eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mUXVhbGlmaWVkTmFtZSI+DQogICAgPHhzOnNlcXVl bmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUXVhbGlmaWVkTmFtZSIgdHlwZT0idG5zOlF1 YWxpZmllZE5hbWUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxl PSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4 czplbGVtZW50IG5hbWU9Ikxpc3RPZlF1YWxpZmllZE5hbWUiIHR5cGU9InRuczpMaXN0T2ZRdWFs aWZpZWROYW1lIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDwhLS0NCiAgICBT b21lIGVudmlyb25tZW50cyByZXF1aXJlIGEgV1NETC9YU0Qgd2hpY2ggZXhwbGljaXRseSBkZWZp bmVzIGFsbCBwb3NzaWJsZSB0eXBlcy4NCiAgICBUaGUgVUEgV1NETC9YU0QgY2FuIGJlIG1vZGlm aWVkIHRvIHN1cHBvcnQgdGhlc2UgZW52aXJvbm1lbnRzIGJ5IHJlcGxhY2luZyB0aGUNCiAgICBk ZWZpbml0aW9ucyBvZiB0aGUgRXh0ZW5zaW9uT2JqZWN0Qm9keSBhbmQgVmFyaWFudFZhbHVlIGNv bXBsZXggdHlwZXMgd2l0aCB0aGUNCiAgICBkZWZpbml0aW9ucyBpbiB0aGUgY29tbWVudHMgc2hv d24gaGVyZS4gRGV2ZWxvcGVycyB3b3VsZCB0aGVuIGRlZmluZSBzdWJ0eXBlcw0KICAgIG9mIHRo ZSBFeHRlbnNpb25PYmplY3RCb2R5IHR5cGUgd2hpY2ggZXhwbGljaXRseSBkZWNsYXJlIGEgY2hv aWNlIGJldHdlZW4gYWxsIG9mIHRoZQ0KICAgIGNvbXBsZXggdHlwZXMgdXNlZCBieSB0aGUgc3lz dGVtLiBUaGUgRXhhbXBsZUV4dGVuc2lvbk9iamVjdEJvZHkgc3VidHlwZSBpcyBwcm92aWRlcw0K ICAgIGEgdGVtcGxhdGUgYmFzZWQgb24gYSBmZXcgY29tbW9uIFVBLWRlZmluZWQgY29tcGxleCB0 eXBlcy4NCiAgICAtLT4NCg0KICA8IS0tDQogICAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkV4dGVu c2lvbk9iamVjdEJvZHkiIC8+DQoNCiAgICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iRXhhbXBsZUV4 dGVuc2lvbk9iamVjdEJvZHkiPg0KICAgICAgPHhzOmNvbXBsZXhDb250ZW50Pg0KICAgICAgICA8 eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpFeHRlbnNpb25PYmplY3RCb2R5Ij4NCiAgICAgICAgICA8 eHM6Y2hvaWNlPg0KICAgICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQXJndW1lbnQiIHR5cGU9 InRuczpBcmd1bWVudCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAg ICAgIDx4czplbGVtZW50IG5hbWU9IlVzZXJJZGVudGl0eVRva2VuIiB0eXBlPSJ0bnM6VXNlcklk ZW50aXR5VG9rZW4iIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAgICAg ICA8eHM6ZWxlbWVudCBuYW1lPSJVc2VyTmFtZUlkZW50aXR5VG9rZW4iIHR5cGU9InRuczpVc2Vy TmFtZUlkZW50aXR5VG9rZW4iIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAg ICAgICAgPC94czpjaG9pY2U+DQogICAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgICAgPC94czpj b21wbGV4Q29udGVudD4NCiAgICA8L3hzOmNvbXBsZXhUeXBlPg0KDQogICAgPHhzOmNvbXBsZXhU eXBlIG5hbWU9IkV4dGVuc2lvbk9iamVjdCI+DQogICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAg IDx4czplbGVtZW50IG5hbWU9IlR5cGVJZCIgdHlwZT0idG5zOkV4cGFuZGVkTm9kZUlkIiBtaW5P Y2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJC b2R5IiBtaW5PY2N1cnM9IjAiIHR5cGU9InRuczpFeHRlbnNpb25PYmplY3RCb2R5IiBuaWxsYWJs ZT0idHJ1ZSIgLz4NCiAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgPC94czpjb21wbGV4VHlwZT4N CiAgICA8eHM6ZWxlbWVudCBuYW1lPSJFeHRlbnNpb25PYmplY3QiIHR5cGU9InRuczpFeHRlbnNp b25PYmplY3QiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIC0tPg0KDQogIDx4czpjb21wbGV4VHlw ZSBuYW1lPSJFeHRlbnNpb25PYmplY3QiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czpl bGVtZW50IG5hbWU9IlR5cGVJZCIgdHlwZT0idG5zOk5vZGVJZCIgbWluT2NjdXJzPSIwIiBuaWxs YWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkJvZHkiIG1pbk9jY3Vycz0i MCIgbmlsbGFibGU9InRydWUiPg0KICAgICAgICA8eHM6Y29tcGxleFR5cGU+DQogICAgICAgICAg PHhzOnNlcXVlbmNlPg0KICAgICAgICAgICAgPHhzOmFueSBtaW5PY2N1cnM9IjAiIHByb2Nlc3ND b250ZW50cz0ibGF4Ii8+DQogICAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgICAgPC94czpj b21wbGV4VHlwZT4NCiAgICAgIDwveHM6ZWxlbWVudD4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8 L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJFeHRlbnNpb25PYmplY3QiIHR5 cGU9InRuczpFeHRlbnNpb25PYmplY3QiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KDQogIDx4czpjb21w bGV4VHlwZSBuYW1lPSJMaXN0T2ZFeHRlbnNpb25PYmplY3QiPg0KICAgIDx4czpzZXF1ZW5jZT4N CiAgICAgIDx4czplbGVtZW50IG5hbWU9IkV4dGVuc2lvbk9iamVjdCIgdHlwZT0idG5zOkV4dGVu c2lvbk9iamVjdCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9 InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhz OmVsZW1lbnQgbmFtZT0iTGlzdE9mRXh0ZW5zaW9uT2JqZWN0IiB0eXBlPSJ0bnM6TGlzdE9mRXh0 ZW5zaW9uT2JqZWN0IiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDwhLS0NCiAg ICBTb21lIFdTREwvWE1MIGNvbXBpbGVycyBoYXZlIGlzc3VlcyB3aXRoIHRoZSB4czpjaG9pY2Ug Y29uc3RydWN0LiBGb3IgdGhhdCByZWFzb24NCiAgICB0aGUgZGVmYXVsdCBkZWNsYXJhdGlvbiBv ZiBhIFZhcmlhbnQgdXNlcyB4czphbnkgY29uc3RydWN0LiBUaGUgc2NoZW1hIGFjdXR1YWxseQ0K ICAgIGRlZmluZWQgYnkgdGhlIHNwZWNpZmljYXRpb24gaXMgcHJvdmlkZWQgYnkgdGhlIE1hdHJp eCBhbmQgVmFyaWFudFZhbHVlIGNvbXBsZXggdHlwZXMNCiAgICBzaG93biBpbiBjb21tZW50cyBi ZWxvdy4gQXBwbGljYXRpb24gZGV2ZWxvcGVycyBjYW4gcmVwbGFjZSB0aGUgVmFyaWFudFZhbHVl IGRlY2xhcmF0aW9uDQogICAgd2l0aCB0aGUgc3BlY2lmaWMgZGVjbGFyYXRpb24gaWYgdGhleSBo YXZlIGEgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQgdGhhdCBjYW4gaGFuZGxlDQogICAgdGhlIHhz OmNob2ljZSBjb25zdHJ1Y3QgaW4gYSByZWFzb25hYmxlIHdheS4NCiAgICAtLT4NCg0KICA8IS0t DQogICAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ik1hdHJpeCI+DQogICAgICA8eHM6c2VxdWVuY2U+ DQogICAgICAgIDx4czplbGVtZW50IG5hbWU9IkRpbWVuc2lvbnMiIHR5cGU9InRuczpMaXN0T2ZV SW50MzIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAgIDx4czplbGVt ZW50IG5hbWU9IlZhbHVlIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIj4NCiAgICAgICAg ICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9ImZhbHNlIj4NCiAgICAgICAgICAgIDx4czpjaG9pY2Ug bWF4T2NjdXJzPSJ1bmJvdW5kZWQiPg0KICAgICAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJC b29sZWFuIiB0eXBlPSJ4czpib29sZWFuIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgICAg IDx4czplbGVtZW50IG5hbWU9IlNCeXRlIiB0eXBlPSJ4czpieXRlIiBtaW5PY2N1cnM9IjAiIC8+ DQogICAgICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IkJ5dGUiIHR5cGU9InhzOnVuc2lnbmVk Qnl0ZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJJ bnQxNiIgdHlwZT0ieHM6c2hvcnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICAgICAgPHhz OmVsZW1lbnQgbmFtZT0iVUludDE2IiB0eXBlPSJ4czp1bnNpZ25lZFNob3J0IiBtaW5PY2N1cnM9 IjAiIC8+DQogICAgICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IkludDMyIiB0eXBlPSJ4czpp bnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVUlu dDMyIiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICAgICAg ICA8eHM6ZWxlbWVudCBuYW1lPSJJbnQ2NCIgdHlwZT0ieHM6bG9uZyIgbWluT2NjdXJzPSIwIiAv Pg0KICAgICAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJVSW50NjQiIHR5cGU9InhzOnVuc2ln bmVkTG9uZyIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1l PSJGbG9hdCIgdHlwZT0ieHM6ZmxvYXQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICAgICAg PHhzOmVsZW1lbnQgbmFtZT0iRG91YmxlIiB0eXBlPSJ4czpkb3VibGUiIG1pbk9jY3Vycz0iMCIg Lz4NCiAgICAgICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU3RyaW5nIiB0eXBlPSJ4czpzdHJp bmciIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0 ZVRpbWUiIHR5cGU9InhzOmRhdGVUaW1lIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgICAg IDx4czplbGVtZW50IG5hbWU9Ikd1aWQiIHR5cGU9InRuczpHdWlkIiBtaW5PY2N1cnM9IjAiIC8+ DQogICAgICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IkJ5dGVTdHJpbmciIHR5cGU9InhzOmJh c2U2NEJpbmFyeSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICAgICAgICA8eHM6ZWxlbWVudCBu YW1lPSJYbWxFbGVtZW50IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIj4NCiAgICAgICAg ICAgICAgICA8eHM6Y29tcGxleFR5cGU+DQogICAgICAgICAgICAgICAgICA8eHM6c2VxdWVuY2U+ DQogICAgICAgICAgICAgICAgICAgIDx4czphbnkgbWluT2NjdXJzPSIwIiBwcm9jZXNzQ29udGVu dHM9ImxheCIgLz4NCiAgICAgICAgICAgICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICAgICAg ICAgICAgPC94czpjb21wbGV4VHlwZT4NCiAgICAgICAgICAgICAgPC94czplbGVtZW50Pg0KICAg ICAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTdGF0dXNDb2RlIiB0eXBlPSJ0bnM6U3RhdHVz Q29kZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJO b2RlSWQiIHR5cGU9InRuczpOb2RlSWQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICAgICAg PHhzOmVsZW1lbnQgbmFtZT0iRXhwYW5kZWROb2RlSWQiIHR5cGU9InRuczpFeHBhbmRlZE5vZGVJ ZCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJRdWFs aWZpZWROYW1lIiB0eXBlPSJ0bnM6UXVhbGlmaWVkTmFtZSIgbWluT2NjdXJzPSIwIiAvPg0KICAg ICAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJMb2NhbGl6ZWRUZXh0IiB0eXBlPSJ0bnM6TG9j YWxpemVkVGV4dCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICAgICAgICA8eHM6ZWxlbWVudCBu YW1lPSJFeHRlbnNpb25PYmplY3QiIHR5cGU9InRuczpFeHRlbnNpb25PYmplY3QiIG1pbk9jY3Vy cz0iMCIgLz4NCiAgICAgICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVmFyaWFudCIgdHlwZT0i dG5zOlZhcmlhbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICAgIDwveHM6Y2hvaWNlPg0K ICAgICAgICAgIDwveHM6Y29tcGxleFR5cGU+DQogICAgICAgIDwveHM6ZWxlbWVudD4NCiAgICAg IDwveHM6c2VxdWVuY2U+DQogICAgPC94czpjb21wbGV4VHlwZT4NCiAgICA8eHM6ZWxlbWVudCBu YW1lPSJNYXRyaXgiIHR5cGU9InRuczpNYXRyaXgiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KDQogICAg PHhzOmNvbXBsZXhUeXBlIG5hbWU9IlZhcmlhbnRWYWx1ZSI+DQogICAgICA8eHM6Y2hvaWNlPg0K ICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJCb29sZWFuIiB0eXBlPSJ4czpib29sZWFuIiBtaW5P Y2N1cnM9IjAiIC8+DQogICAgICAgIDx4czplbGVtZW50IG5hbWU9IlNCeXRlIiB0eXBlPSJ4czpi eXRlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgIDx4czplbGVtZW50IG5hbWU9IkJ5dGUiIHR5 cGU9InhzOnVuc2lnbmVkQnl0ZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICA8eHM6ZWxlbWVu dCBuYW1lPSJJbnQxNiIgdHlwZT0ieHM6c2hvcnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAg PHhzOmVsZW1lbnQgbmFtZT0iVUludDE2IiB0eXBlPSJ4czp1bnNpZ25lZFNob3J0IiBtaW5PY2N1 cnM9IjAiIC8+DQogICAgICAgIDx4czplbGVtZW50IG5hbWU9IkludDMyIiB0eXBlPSJ4czppbnQi IG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVUludDMyIiB0eXBl PSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICA8eHM6ZWxlbWVudCBu YW1lPSJJbnQ2NCIgdHlwZT0ieHM6bG9uZyIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICA8eHM6 ZWxlbWVudCBuYW1lPSJVSW50NjQiIHR5cGU9InhzOnVuc2lnbmVkTG9uZyIgbWluT2NjdXJzPSIw IiAvPg0KICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJGbG9hdCIgdHlwZT0ieHM6ZmxvYXQiIG1p bk9jY3Vycz0iMCIgLz4NCiAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRG91YmxlIiB0eXBlPSJ4 czpkb3VibGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU3Ry aW5nIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgPHhzOmVsZW1l bnQgbmFtZT0iRGF0ZVRpbWUiIHR5cGU9InhzOmRhdGVUaW1lIiBtaW5PY2N1cnM9IjAiIC8+DQog ICAgICAgIDx4czplbGVtZW50IG5hbWU9Ikd1aWQiIHR5cGU9InRuczpHdWlkIiBtaW5PY2N1cnM9 IjAiIC8+DQogICAgICAgIDx4czplbGVtZW50IG5hbWU9IkJ5dGVTdHJpbmciIHR5cGU9InhzOmJh c2U2NEJpbmFyeSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJY bWxFbGVtZW50IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIj4NCiAgICAgICAgICA8eHM6 Y29tcGxleFR5cGU+DQogICAgICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAgICAgIDx4 czphbnkgbWluT2NjdXJzPSIwIiBwcm9jZXNzQ29udGVudHM9ImxheCIgLz4NCiAgICAgICAgICAg IDwveHM6c2VxdWVuY2U+DQogICAgICAgICAgPC94czpjb21wbGV4VHlwZT4NCiAgICAgICAgPC94 czplbGVtZW50Pg0KICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTdGF0dXNDb2RlIiB0eXBlPSJ0 bnM6U3RhdHVzQ29kZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICA8eHM6ZWxlbWVudCBuYW1l PSJOb2RlSWQiIHR5cGU9InRuczpOb2RlSWQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgPHhz OmVsZW1lbnQgbmFtZT0iRXhwYW5kZWROb2RlSWQiIHR5cGU9InRuczpFeHBhbmRlZE5vZGVJZCIg bWluT2NjdXJzPSIwIiAvPg0KICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJRdWFsaWZpZWROYW1l IiB0eXBlPSJ0bnM6UXVhbGlmaWVkTmFtZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICA8eHM6 ZWxlbWVudCBuYW1lPSJMb2NhbGl6ZWRUZXh0IiB0eXBlPSJ0bnM6TG9jYWxpemVkVGV4dCIgbWlu T2NjdXJzPSIwIiAvPg0KICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJFeHRlbnNpb25PYmplY3Qi IHR5cGU9InRuczpFeHRlbnNpb25PYmplY3QiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgPHhz OmVsZW1lbnQgbmFtZT0iTGlzdE9mQm9vbGVhbiIgdHlwZT0idG5zOkxpc3RPZkJvb2xlYW4iIG1p bk9jY3Vycz0iMCIgLz4NCiAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mU0J5dGUiIHR5 cGU9InRuczpMaXN0T2ZTQnl0ZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICA8eHM6ZWxlbWVu dCBuYW1lPSJMaXN0T2ZCeXRlIiB0eXBlPSJ0bnM6TGlzdE9mQnl0ZSIgbWluT2NjdXJzPSIwIiAv Pg0KICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZJbnQxNiIgdHlwZT0idG5zOkxpc3RP ZkludDE2IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgIDx4czplbGVtZW50IG5hbWU9Ikxpc3RP ZlVJbnQxNiIgdHlwZT0idG5zOkxpc3RPZlVJbnQxNiIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAg ICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZJbnQzMiIgdHlwZT0idG5zOkxpc3RPZkludDMyIiBt aW5PY2N1cnM9IjAiIC8+DQogICAgICAgIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZlVJbnQzMiIg dHlwZT0idG5zOkxpc3RPZlVJbnQzMiIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICA8eHM6ZWxl bWVudCBuYW1lPSJMaXN0T2ZJbnQ2NCIgdHlwZT0idG5zOkxpc3RPZkludDY0IiBtaW5PY2N1cnM9 IjAiIC8+DQogICAgICAgIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZlVJbnQ2NCIgdHlwZT0idG5z Okxpc3RPZlVJbnQ2NCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICA8eHM6ZWxlbWVudCBuYW1l PSJMaXN0T2ZGbG9hdCIgdHlwZT0idG5zOkxpc3RPZkZsb2F0IiBtaW5PY2N1cnM9IjAiIC8+DQog ICAgICAgIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkRvdWJsZSIgdHlwZT0idG5zOkxpc3RPZkRv dWJsZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZT dHJpbmciIHR5cGU9InRuczpMaXN0T2ZTdHJpbmciIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAg PHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mRGF0ZVRpbWUiIHR5cGU9InRuczpMaXN0T2ZEYXRlVGlt ZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZHdWlk IiB0eXBlPSJ0bnM6TGlzdE9mR3VpZCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICA8eHM6ZWxl bWVudCBuYW1lPSJMaXN0T2ZCeXRlU3RyaW5nIiB0eXBlPSJ0bnM6TGlzdE9mQnl0ZVN0cmluZyIg bWluT2NjdXJzPSIwIiAvPg0KICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZYbWxFbGVt ZW50IiB0eXBlPSJ0bnM6TGlzdE9mWG1sRWxlbWVudCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAg ICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZTdGF0dXNDb2RlIiB0eXBlPSJ0bnM6TGlzdE9mU3Rh dHVzQ29kZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0 T2ZOb2RlSWQiIHR5cGU9InRuczpMaXN0T2ZOb2RlSWQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAg ICAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mRXhwYW5kZWROb2RlSWQiIHR5cGU9InRuczpMaXN0 T2ZFeHBhbmRlZE5vZGVJZCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICA8eHM6ZWxlbWVudCBu YW1lPSJMaXN0T2ZRdWFsaWZpZWROYW1lIiB0eXBlPSJ0bnM6TGlzdE9mUXVhbGlmaWVkTmFtZSIg bWluT2NjdXJzPSIwIiAvPg0KICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZMb2NhbGl6 ZWRUZXh0IiB0eXBlPSJ0bnM6TGlzdE9mTG9jYWxpemVkVGV4dCIgbWluT2NjdXJzPSIwIiAvPg0K ICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZFeHRlbnNpb25PYmplY3QiIHR5cGU9InRu czpMaXN0T2ZFeHRlbnNpb25PYmplY3QiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgPHhzOmVs ZW1lbnQgbmFtZT0iTGlzdE9mVmFyaWFudCIgdHlwZT0idG5zOkxpc3RPZlZhcmlhbnQiIG1pbk9j Y3Vycz0iMCIgLz4NCiAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTWF0cml4IiB0eXBlPSJ0bnM6 TWF0cml4IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8L3hzOmNob2ljZT4NCiAgICA8L3hzOmNv bXBsZXhUeXBlPg0KDQogICAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlZhcmlhbnQiPg0KICAgICAg PHhzOnNlcXVlbmNlPg0KICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJWYWx1ZSIgdHlwZT0idG5z OlZhcmlhbnRWYWx1ZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDwv eHM6c2VxdWVuY2U+DQogICAgPC94czpjb21wbGV4VHlwZT4NCiAgICA8eHM6ZWxlbWVudCBuYW1l PSJWYXJpYW50IiB0eXBlPSJ0bnM6VmFyaWFudCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgLS0+ DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlZhcmlhbnQiPg0KICAgIDx4czphbm5vdGF0aW9u Pg0KICAgICAgPHhzOmFwcGluZm8+DQogICAgICAgIDxJc1ZhbHVlVHlwZSB4bWxucz0iaHR0cDov L3NjaGVtYXMubWljcm9zb2Z0LmNvbS8yMDAzLzEwL1NlcmlhbGl6YXRpb24vIj50cnVlPC9Jc1Zh bHVlVHlwZT4NCiAgICAgIDwveHM6YXBwaW5mbz4NCiAgICA8L3hzOmFubm90YXRpb24+DQogICAg PHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVmFsdWUiIG1pbk9jY3Vycz0i MCIgbmlsbGFibGU9InRydWUiPg0KICAgICAgICA8eHM6Y29tcGxleFR5cGU+DQogICAgICAgICAg PHhzOnNlcXVlbmNlPg0KICAgICAgICAgICAgPHhzOmFueSBtaW5PY2N1cnM9IjAiIHByb2Nlc3ND b250ZW50cz0ibGF4IiAvPg0KICAgICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICAgIDwveHM6 Y29tcGxleFR5cGU+DQogICAgICA8L3hzOmVsZW1lbnQ+DQogICAgPC94czpzZXF1ZW5jZT4NCiAg PC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iVmFyaWFudCIgdHlwZT0idG5z OlZhcmlhbnQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJM aXN0T2ZWYXJpYW50Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1l PSJWYXJpYW50IiB0eXBlPSJ0bnM6VmFyaWFudCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVu Ym91bmRlZCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8 eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZWYXJpYW50IiB0eXBlPSJ0bnM6TGlzdE9mVmFyaWFudCIg bmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0i RGF0YVZhbHVlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJW YWx1ZSIgdHlwZT0idG5zOlZhcmlhbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVt ZW50IG5hbWU9IlN0YXR1c0NvZGUiIHR5cGU9InRuczpTdGF0dXNDb2RlIiBtaW5PY2N1cnM9IjAi IC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTb3VyY2VUaW1lc3RhbXAiIHR5cGU9InhzOmRh dGVUaW1lIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTb3VyY2VQ aWNvc2Vjb25kcyIgdHlwZT0ieHM6dW5zaWduZWRTaG9ydCIgbWluT2NjdXJzPSIwIiAvPg0KICAg ICAgPHhzOmVsZW1lbnQgbmFtZT0iU2VydmVyVGltZXN0YW1wIiB0eXBlPSJ4czpkYXRlVGltZSIg bWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2VydmVyUGljb3NlY29u ZHMiIHR5cGU9InhzOnVuc2lnbmVkU2hvcnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICA8L3hzOnNl cXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJEYXRhVmFs dWUiIHR5cGU9InRuczpEYXRhVmFsdWUiIG5pbGxhYmxlPSJ0cnVlIi8+DQoNCiAgPHhzOmNvbXBs ZXhUeXBlIG5hbWU9Ikxpc3RPZkRhdGFWYWx1ZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAg PHhzOmVsZW1lbnQgbmFtZT0iRGF0YVZhbHVlIiB0eXBlPSJ0bnM6RGF0YVZhbHVlIiBtaW5PY2N1 cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hz OnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0 T2ZEYXRhVmFsdWUiIHR5cGU9InRuczpMaXN0T2ZEYXRhVmFsdWUiIG5pbGxhYmxlPSJ0cnVlIj48 L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmVsZW1lbnQgbmFtZT0iSW52b2tlU2VydmljZVJlcXVlc3Qi IHR5cGU9InhzOmJhc2U2NEJpbmFyeSIgbmlsbGFibGU9InRydWUiIC8+DQogIDx4czplbGVtZW50 IG5hbWU9Ikludm9rZVNlcnZpY2VSZXNwb25zZSIgdHlwZT0ieHM6YmFzZTY0QmluYXJ5IiBuaWxs YWJsZT0idHJ1ZSIgLz4NCg0KICA8eHM6ZWxlbWVudCBuYW1lPSJJbWFnZUJNUCIgdHlwZT0ieHM6 YmFzZTY0QmluYXJ5IiAvPg0KDQogIDx4czplbGVtZW50IG5hbWU9IkltYWdlR0lGIiB0eXBlPSJ4 czpiYXNlNjRCaW5hcnkiIC8+DQoNCiAgPHhzOmVsZW1lbnQgbmFtZT0iSW1hZ2VKUEciIHR5cGU9 InhzOmJhc2U2NEJpbmFyeSIgLz4NCg0KICA8eHM6ZWxlbWVudCBuYW1lPSJJbWFnZVBORyIgdHlw ZT0ieHM6YmFzZTY0QmluYXJ5IiAvPg0KDQogIDx4czplbGVtZW50IG5hbWU9IkF1ZGlvRGF0YVR5 cGUiIHR5cGU9InhzOmJhc2U2NEJpbmFyeSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0i VW5pb24iPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNv bXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJVbmlvbiIgdHlwZT0idG5zOlVuaW9uIiAv Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZVbmlvbiI+DQogICAgPHhzOnNlcXVl bmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVW5pb24iIHR5cGU9InRuczpVbmlvbiIgbWlu T2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAg PC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0i TGlzdE9mVW5pb24iIHR5cGU9InRuczpMaXN0T2ZVbmlvbiIgbmlsbGFibGU9InRydWUiPjwveHM6 ZWxlbWVudD4NCg0KICA8eHM6ZWxlbWVudCBuYW1lPSJCaXRGaWVsZE1hc2tEYXRhVHlwZSIgdHlw ZT0ieHM6dW5zaWduZWRMb25nIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJLZXlWYWx1 ZVBhaXIiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IktleSIg dHlwZT0idWE6UXVhbGlmaWVkTmFtZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4N CiAgICAgIDx4czplbGVtZW50IG5hbWU9IlZhbHVlIiB0eXBlPSJ1YTpWYXJpYW50IiBtaW5PY2N1 cnM9IjAiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhz OmVsZW1lbnQgbmFtZT0iS2V5VmFsdWVQYWlyIiB0eXBlPSJ0bnM6S2V5VmFsdWVQYWlyIiAvPg0K DQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZLZXlWYWx1ZVBhaXIiPg0KICAgIDx4czpz ZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IktleVZhbHVlUGFpciIgdHlwZT0idG5z OktleVZhbHVlUGFpciIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFi bGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAg PHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mS2V5VmFsdWVQYWlyIiB0eXBlPSJ0bnM6TGlzdE9mS2V5 VmFsdWVQYWlyIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4 VHlwZSBuYW1lPSJBZGRpdGlvbmFsUGFyYW1ldGVyc1R5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4N CiAgICAgIDx4czplbGVtZW50IG5hbWU9IlBhcmFtZXRlcnMiIHR5cGU9InRuczpMaXN0T2ZLZXlW YWx1ZVBhaXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1 ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iQWRkaXRpb25h bFBhcmFtZXRlcnNUeXBlIiB0eXBlPSJ0bnM6QWRkaXRpb25hbFBhcmFtZXRlcnNUeXBlIiAvPg0K DQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJFcGhlbWVyYWxLZXlUeXBlIj4NCiAgICA8eHM6c2Vx dWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJQdWJsaWNLZXkiIHR5cGU9InhzOmJhc2U2 NEJpbmFyeSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVt ZW50IG5hbWU9IlNpZ25hdHVyZSIgdHlwZT0ieHM6YmFzZTY0QmluYXJ5IiBtaW5PY2N1cnM9IjAi IG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5 cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkVwaGVtZXJhbEtleVR5cGUiIHR5cGU9InRuczpFcGhl bWVyYWxLZXlUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJFbmRwb2ludFR5cGUi Pg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkVuZHBvaW50VXJs IiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAg ICA8eHM6ZWxlbWVudCBuYW1lPSJTZWN1cml0eU1vZGUiIHR5cGU9InRuczpNZXNzYWdlU2VjdXJp dHlNb2RlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTZWN1cml0 eVBvbGljeVVyaSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVl IiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVHJhbnNwb3J0UHJvZmlsZVVyaSIgdHlwZT0i eHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2Vx dWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkVuZHBvaW50 VHlwZSIgdHlwZT0idG5zOkVuZHBvaW50VHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFt ZT0iTGlzdE9mRW5kcG9pbnRUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxl bWVudCBuYW1lPSJFbmRwb2ludFR5cGUiIHR5cGU9InRuczpFbmRwb2ludFR5cGUiIG1pbk9jY3Vy cz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6 c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RP ZkVuZHBvaW50VHlwZSIgdHlwZT0idG5zOkxpc3RPZkVuZHBvaW50VHlwZSIgbmlsbGFibGU9InRy dWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iUmF0aW9uYWxOdW1i ZXIiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik51bWVyYXRv ciIgdHlwZT0ieHM6aW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1l PSJEZW5vbWluYXRvciIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAg ICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1l PSJSYXRpb25hbE51bWJlciIgdHlwZT0idG5zOlJhdGlvbmFsTnVtYmVyIiAvPg0KDQogIDx4czpj b21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZSYXRpb25hbE51bWJlciI+DQogICAgPHhzOnNlcXVlbmNl Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmF0aW9uYWxOdW1iZXIiIHR5cGU9InRuczpSYXRp b25hbE51bWJlciIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9 InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhz OmVsZW1lbnQgbmFtZT0iTGlzdE9mUmF0aW9uYWxOdW1iZXIiIHR5cGU9InRuczpMaXN0T2ZSYXRp b25hbE51bWJlciIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxl eFR5cGUgbmFtZT0iVmVjdG9yIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgPC94czpzZXF1ZW5j ZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iVmVjdG9yIiB0eXBl PSJ0bnM6VmVjdG9yIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZWZWN0b3Ii Pg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlZlY3RvciIgdHlw ZT0idG5zOlZlY3RvciIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFi bGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAg PHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mVmVjdG9yIiB0eXBlPSJ0bnM6TGlzdE9mVmVjdG9yIiBu aWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJU aHJlZURWZWN0b3IiPg0KICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0iZmFsc2UiPg0KICAg ICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0bnM6VmVjdG9yIj4NCiAgICAgICAgPHhzOnNlcXVlbmNl Pg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IlgiIHR5cGU9InhzOmRvdWJsZSIgbWluT2Nj dXJzPSIwIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IlkiIHR5cGU9InhzOmRvdWJs ZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IloiIHR5cGU9 InhzOmRvdWJsZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0KICAg ICAgPC94czpleHRlbnNpb24+DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAgPC94czpjb21w bGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iVGhyZWVEVmVjdG9yIiB0eXBlPSJ0bnM6VGhy ZWVEVmVjdG9yIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZUaHJlZURWZWN0 b3IiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlRocmVlRFZl Y3RvciIgdHlwZT0idG5zOlRocmVlRFZlY3RvciIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVu Ym91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpj b21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mVGhyZWVEVmVjdG9yIiB0eXBl PSJ0bnM6TGlzdE9mVGhyZWVEVmVjdG9yIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0K DQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJDYXJ0ZXNpYW5Db29yZGluYXRlcyI+DQogICAgPHhz OnNlcXVlbmNlPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4 czplbGVtZW50IG5hbWU9IkNhcnRlc2lhbkNvb3JkaW5hdGVzIiB0eXBlPSJ0bnM6Q2FydGVzaWFu Q29vcmRpbmF0ZXMiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkNhcnRlc2lh bkNvb3JkaW5hdGVzIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1l PSJDYXJ0ZXNpYW5Db29yZGluYXRlcyIgdHlwZT0idG5zOkNhcnRlc2lhbkNvb3JkaW5hdGVzIiBt aW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAg ICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1l PSJMaXN0T2ZDYXJ0ZXNpYW5Db29yZGluYXRlcyIgdHlwZT0idG5zOkxpc3RPZkNhcnRlc2lhbkNv b3JkaW5hdGVzIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4 VHlwZSBuYW1lPSJUaHJlZURDYXJ0ZXNpYW5Db29yZGluYXRlcyI+DQogICAgPHhzOmNvbXBsZXhD b250ZW50IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpDYXJ0 ZXNpYW5Db29yZGluYXRlcyI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6 ZWxlbWVudCBuYW1lPSJYIiB0eXBlPSJ4czpkb3VibGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAg ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJZIiB0eXBlPSJ4czpkb3VibGUiIG1pbk9jY3Vycz0iMCIg Lz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJaIiB0eXBlPSJ4czpkb3VibGUiIG1pbk9j Y3Vycz0iMCIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9u Pg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czpl bGVtZW50IG5hbWU9IlRocmVlRENhcnRlc2lhbkNvb3JkaW5hdGVzIiB0eXBlPSJ0bnM6VGhyZWVE Q2FydGVzaWFuQ29vcmRpbmF0ZXMiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RP ZlRocmVlRENhcnRlc2lhbkNvb3JkaW5hdGVzIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8 eHM6ZWxlbWVudCBuYW1lPSJUaHJlZURDYXJ0ZXNpYW5Db29yZGluYXRlcyIgdHlwZT0idG5zOlRo cmVlRENhcnRlc2lhbkNvb3JkaW5hdGVzIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3Vu ZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBs ZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZUaHJlZURDYXJ0ZXNpYW5Db29yZGlu YXRlcyIgdHlwZT0idG5zOkxpc3RPZlRocmVlRENhcnRlc2lhbkNvb3JkaW5hdGVzIiBuaWxsYWJs ZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJPcmllbnRh dGlvbiI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29t cGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ik9yaWVudGF0aW9uIiB0eXBlPSJ0bnM6T3Jp ZW50YXRpb24iIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZk9yaWVudGF0aW9u Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJPcmllbnRhdGlv biIgdHlwZT0idG5zOk9yaWVudGF0aW9uIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3Vu ZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBs ZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZPcmllbnRhdGlvbiIgdHlwZT0idG5z Okxpc3RPZk9yaWVudGF0aW9uIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4 czpjb21wbGV4VHlwZSBuYW1lPSJUaHJlZURPcmllbnRhdGlvbiI+DQogICAgPHhzOmNvbXBsZXhD b250ZW50IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpPcmll bnRhdGlvbiI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBu YW1lPSJBIiB0eXBlPSJ4czpkb3VibGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICA8eHM6 ZWxlbWVudCBuYW1lPSJCIiB0eXBlPSJ4czpkb3VibGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAg ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDIiB0eXBlPSJ4czpkb3VibGUiIG1pbk9jY3Vycz0iMCIg Lz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwv eHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5h bWU9IlRocmVlRE9yaWVudGF0aW9uIiB0eXBlPSJ0bnM6VGhyZWVET3JpZW50YXRpb24iIC8+DQoN CiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZlRocmVlRE9yaWVudGF0aW9uIj4NCiAgICA8 eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJUaHJlZURPcmllbnRhdGlvbiIg dHlwZT0idG5zOlRocmVlRE9yaWVudGF0aW9uIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5i b3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNv bXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZUaHJlZURPcmllbnRhdGlvbiIg dHlwZT0idG5zOkxpc3RPZlRocmVlRE9yaWVudGF0aW9uIiBuaWxsYWJsZT0idHJ1ZSI+PC94czpl bGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJGcmFtZSI+DQogICAgPHhzOnNlcXVl bmNlPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVt ZW50IG5hbWU9IkZyYW1lIiB0eXBlPSJ0bnM6RnJhbWUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBl IG5hbWU9Ikxpc3RPZkZyYW1lIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVu dCBuYW1lPSJGcmFtZSIgdHlwZT0idG5zOkZyYW1lIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0i dW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hz OmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZGcmFtZSIgdHlwZT0idG5z Okxpc3RPZkZyYW1lIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21w bGV4VHlwZSBuYW1lPSJUaHJlZURGcmFtZSI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVk PSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpGcmFtZSI+DQogICAgICAg IDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDYXJ0ZXNpYW5Db29y ZGluYXRlcyIgdHlwZT0idG5zOlRocmVlRENhcnRlc2lhbkNvb3JkaW5hdGVzIiBtaW5PY2N1cnM9 IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9Ik9yaWVu dGF0aW9uIiB0eXBlPSJ0bnM6VGhyZWVET3JpZW50YXRpb24iIG1pbk9jY3Vycz0iMCIgbmlsbGFi bGU9InRydWUiIC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVuc2lv bj4NCiAgICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6 ZWxlbWVudCBuYW1lPSJUaHJlZURGcmFtZSIgdHlwZT0idG5zOlRocmVlREZyYW1lIiAvPg0KDQog IDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZUaHJlZURGcmFtZSI+DQogICAgPHhzOnNlcXVl bmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVGhyZWVERnJhbWUiIHR5cGU9InRuczpUaHJl ZURGcmFtZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRy dWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVs ZW1lbnQgbmFtZT0iTGlzdE9mVGhyZWVERnJhbWUiIHR5cGU9InRuczpMaXN0T2ZUaHJlZURGcmFt ZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6c2ltcGxlVHlwZSAgbmFt ZT0iT3BlbkZpbGVNb2RlIj4NCiAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIj4N CiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iUmVhZF8xIiAvPg0KICAgICAgPHhzOmVudW1l cmF0aW9uIHZhbHVlPSJXcml0ZV8yIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJF cmFzZUV4aXN0aW5nXzQiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkFwcGVuZF84 IiAvPg0KICAgIDwveHM6cmVzdHJpY3Rpb24+DQogIDwveHM6c2ltcGxlVHlwZT4NCiAgPHhzOmVs ZW1lbnQgbmFtZT0iT3BlbkZpbGVNb2RlIiB0eXBlPSJ0bnM6T3BlbkZpbGVNb2RlIiAvPg0KDQog IDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZPcGVuRmlsZU1vZGUiPg0KICAgIDx4czpzZXF1 ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik9wZW5GaWxlTW9kZSIgdHlwZT0idG5zOk9w ZW5GaWxlTW9kZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgLz4NCiAgICA8 L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJM aXN0T2ZPcGVuRmlsZU1vZGUiIHR5cGU9InRuczpMaXN0T2ZPcGVuRmlsZU1vZGUiIG5pbGxhYmxl PSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOnNpbXBsZVR5cGUgIG5hbWU9IklkZW50aXR5 Q3JpdGVyaWFUeXBlIj4NCiAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIj4NCiAg ICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iVXNlck5hbWVfMSIgLz4NCiAgICAgIDx4czplbnVt ZXJhdGlvbiB2YWx1ZT0iVGh1bWJwcmludF8yIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZh bHVlPSJSb2xlXzMiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Ikdyb3VwSWRfNCIg Lz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iQW5vbnltb3VzXzUiIC8+DQogICAgICA8 eHM6ZW51bWVyYXRpb24gdmFsdWU9IkF1dGhlbnRpY2F0ZWRVc2VyXzYiIC8+DQogICAgICA8eHM6 ZW51bWVyYXRpb24gdmFsdWU9IkFwcGxpY2F0aW9uXzciIC8+DQogICAgPC94czpyZXN0cmljdGlv bj4NCiAgPC94czpzaW1wbGVUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJJZGVudGl0eUNyaXRl cmlhVHlwZSIgdHlwZT0idG5zOklkZW50aXR5Q3JpdGVyaWFUeXBlIiAvPg0KDQogIDx4czpjb21w bGV4VHlwZSBuYW1lPSJMaXN0T2ZJZGVudGl0eUNyaXRlcmlhVHlwZSI+DQogICAgPHhzOnNlcXVl bmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iSWRlbnRpdHlDcml0ZXJpYVR5cGUiIHR5cGU9 InRuczpJZGVudGl0eUNyaXRlcmlhVHlwZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91 bmRlZCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6 ZWxlbWVudCBuYW1lPSJMaXN0T2ZJZGVudGl0eUNyaXRlcmlhVHlwZSIgdHlwZT0idG5zOkxpc3RP ZklkZW50aXR5Q3JpdGVyaWFUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQog IDx4czpjb21wbGV4VHlwZSBuYW1lPSJJZGVudGl0eU1hcHBpbmdSdWxlVHlwZSI+DQogICAgPHhz OnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQ3JpdGVyaWFUeXBlIiB0eXBlPSJ0 bnM6SWRlbnRpdHlDcml0ZXJpYVR5cGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVt ZW50IG5hbWU9IkNyaXRlcmlhIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFi bGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAg PHhzOmVsZW1lbnQgbmFtZT0iSWRlbnRpdHlNYXBwaW5nUnVsZVR5cGUiIHR5cGU9InRuczpJZGVu dGl0eU1hcHBpbmdSdWxlVHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9m SWRlbnRpdHlNYXBwaW5nUnVsZVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czpl bGVtZW50IG5hbWU9IklkZW50aXR5TWFwcGluZ1J1bGVUeXBlIiB0eXBlPSJ0bnM6SWRlbnRpdHlN YXBwaW5nUnVsZVR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxh YmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQog IDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZklkZW50aXR5TWFwcGluZ1J1bGVUeXBlIiB0eXBlPSJ0 bnM6TGlzdE9mSWRlbnRpdHlNYXBwaW5nUnVsZVR5cGUiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVs ZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkN1cnJlbmN5VW5pdFR5cGUiPg0KICAg IDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik51bWVyaWNDb2RlIiB0eXBl PSJ4czpzaG9ydCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRXhw b25lbnQiIHR5cGU9InhzOmJ5dGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50 IG5hbWU9IkFscGhhYmV0aWNDb2RlIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmls bGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDdXJyZW5jeSIgdHlwZT0i dWE6TG9jYWxpemVkVGV4dCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8 L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJD dXJyZW5jeVVuaXRUeXBlIiB0eXBlPSJ0bnM6Q3VycmVuY3lVbml0VHlwZSIgLz4NCg0KICA8eHM6 Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mQ3VycmVuY3lVbml0VHlwZSI+DQogICAgPHhzOnNlcXVl bmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQ3VycmVuY3lVbml0VHlwZSIgdHlwZT0idG5z OkN1cnJlbmN5VW5pdFR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5p bGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+ DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkN1cnJlbmN5VW5pdFR5cGUiIHR5cGU9InRuczpM aXN0T2ZDdXJyZW5jeVVuaXRUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQog IDx4czpzaW1wbGVUeXBlICBuYW1lPSJUcnVzdExpc3RNYXNrcyI+DQogICAgPHhzOnJlc3RyaWN0 aW9uIGJhc2U9InhzOnN0cmluZyI+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Ik5vbmVf MCIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iVHJ1c3RlZENlcnRpZmljYXRlc18x IiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJUcnVzdGVkQ3Jsc18yIiAvPg0KICAg ICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJJc3N1ZXJDZXJ0aWZpY2F0ZXNfNCIgLz4NCiAgICAg IDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iSXNzdWVyQ3Jsc184IiAvPg0KICAgICAgPHhzOmVudW1l cmF0aW9uIHZhbHVlPSJBbGxfMTUiIC8+DQogICAgPC94czpyZXN0cmljdGlvbj4NCiAgPC94czpz aW1wbGVUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJUcnVzdExpc3RNYXNrcyIgdHlwZT0idG5z OlRydXN0TGlzdE1hc2tzIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJUcnVzdExpc3RE YXRhVHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU3Bl Y2lmaWVkTGlzdHMiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAg ICA8eHM6ZWxlbWVudCBuYW1lPSJUcnVzdGVkQ2VydGlmaWNhdGVzIiB0eXBlPSJ1YTpMaXN0T2ZC eXRlU3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVs ZW1lbnQgbmFtZT0iVHJ1c3RlZENybHMiIHR5cGU9InVhOkxpc3RPZkJ5dGVTdHJpbmciIG1pbk9j Y3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJJc3N1 ZXJDZXJ0aWZpY2F0ZXMiIHR5cGU9InVhOkxpc3RPZkJ5dGVTdHJpbmciIG1pbk9jY3Vycz0iMCIg bmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJJc3N1ZXJDcmxzIiB0 eXBlPSJ1YTpMaXN0T2ZCeXRlU3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAv Pg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50 IG5hbWU9IlRydXN0TGlzdERhdGFUeXBlIiB0eXBlPSJ0bnM6VHJ1c3RMaXN0RGF0YVR5cGUiIC8+ DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZlRydXN0TGlzdERhdGFUeXBlIj4NCiAg ICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJUcnVzdExpc3REYXRhVHlw ZSIgdHlwZT0idG5zOlRydXN0TGlzdERhdGFUeXBlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0i dW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hz OmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZUcnVzdExpc3REYXRhVHlw ZSIgdHlwZT0idG5zOkxpc3RPZlRydXN0TGlzdERhdGFUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94 czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJEZWNpbWFsRGF0YVR5cGUiPg0K ICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNjYWxlIiB0eXBlPSJ4 czpzaG9ydCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVmFsdWUi IHR5cGU9InhzOmJhc2U2NEJpbmFyeSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4N CiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBu YW1lPSJEZWNpbWFsRGF0YVR5cGUiIHR5cGU9InRuczpEZWNpbWFsRGF0YVR5cGUiIC8+DQoNCiAg PHhzOmNvbXBsZXhUeXBlIG5hbWU9IkRhdGFUeXBlU2NoZW1hSGVhZGVyIj4NCiAgICA8eHM6c2Vx dWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJOYW1lc3BhY2VzIiB0eXBlPSJ1YTpMaXN0 T2ZTdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxl bWVudCBuYW1lPSJTdHJ1Y3R1cmVEYXRhVHlwZXMiIHR5cGU9InRuczpMaXN0T2ZTdHJ1Y3R1cmVE ZXNjcmlwdGlvbiIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czpl bGVtZW50IG5hbWU9IkVudW1EYXRhVHlwZXMiIHR5cGU9InRuczpMaXN0T2ZFbnVtRGVzY3JpcHRp b24iIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBu YW1lPSJTaW1wbGVEYXRhVHlwZXMiIHR5cGU9InRuczpMaXN0T2ZTaW1wbGVUeXBlRGVzY3JpcHRp b24iIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4N CiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVR5cGVTY2hlbWFI ZWFkZXIiIHR5cGU9InRuczpEYXRhVHlwZVNjaGVtYUhlYWRlciIgLz4NCg0KICA8eHM6Y29tcGxl eFR5cGUgbmFtZT0iTGlzdE9mRGF0YVR5cGVTY2hlbWFIZWFkZXIiPg0KICAgIDx4czpzZXF1ZW5j ZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRhdGFUeXBlU2NoZW1hSGVhZGVyIiB0eXBlPSJ0 bnM6RGF0YVR5cGVTY2hlbWFIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5k ZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxl eFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkRhdGFUeXBlU2NoZW1hSGVhZGVyIiB0 eXBlPSJ0bnM6TGlzdE9mRGF0YVR5cGVTY2hlbWFIZWFkZXIiIG5pbGxhYmxlPSJ0cnVlIj48L3hz OmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkRhdGFUeXBlRGVzY3JpcHRpb24i Pg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRhdGFUeXBlSWQi IHR5cGU9InVhOk5vZGVJZCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAg IDx4czplbGVtZW50IG5hbWU9Ik5hbWUiIHR5cGU9InVhOlF1YWxpZmllZE5hbWUiIG1pbk9jY3Vy cz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21w bGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVR5cGVEZXNjcmlwdGlvbiIgdHlwZT0i dG5zOkRhdGFUeXBlRGVzY3JpcHRpb24iIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxp c3RPZkRhdGFUeXBlRGVzY3JpcHRpb24iPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czpl bGVtZW50IG5hbWU9IkRhdGFUeXBlRGVzY3JpcHRpb24iIHR5cGU9InRuczpEYXRhVHlwZURlc2Ny aXB0aW9uIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1 ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxl bWVudCBuYW1lPSJMaXN0T2ZEYXRhVHlwZURlc2NyaXB0aW9uIiB0eXBlPSJ0bnM6TGlzdE9mRGF0 YVR5cGVEZXNjcmlwdGlvbiIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6 Y29tcGxleFR5cGUgbmFtZT0iU3RydWN0dXJlRGVzY3JpcHRpb24iPg0KICAgIDx4czpjb21wbGV4 Q29udGVudCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0bnM6RGF0 YVR5cGVEZXNjcmlwdGlvbiI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6 ZWxlbWVudCBuYW1lPSJTdHJ1Y3R1cmVEZWZpbml0aW9uIiB0eXBlPSJ0bnM6U3RydWN0dXJlRGVm aW5pdGlvbiIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgPC94czpz ZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+ DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlN0cnVjdHVyZURlc2Ny aXB0aW9uIiB0eXBlPSJ0bnM6U3RydWN0dXJlRGVzY3JpcHRpb24iIC8+DQoNCiAgPHhzOmNvbXBs ZXhUeXBlIG5hbWU9Ikxpc3RPZlN0cnVjdHVyZURlc2NyaXB0aW9uIj4NCiAgICA8eHM6c2VxdWVu Y2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTdHJ1Y3R1cmVEZXNjcmlwdGlvbiIgdHlwZT0i dG5zOlN0cnVjdHVyZURlc2NyaXB0aW9uIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3Vu ZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBs ZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZTdHJ1Y3R1cmVEZXNjcmlwdGlvbiIg dHlwZT0idG5zOkxpc3RPZlN0cnVjdHVyZURlc2NyaXB0aW9uIiBuaWxsYWJsZT0idHJ1ZSI+PC94 czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJFbnVtRGVzY3JpcHRpb24iPg0K ICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVuc2lv biBiYXNlPSJ0bnM6RGF0YVR5cGVEZXNjcmlwdGlvbiI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4N CiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJFbnVtRGVmaW5pdGlvbiIgdHlwZT0idG5zOkVu dW1EZWZpbml0aW9uIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICAg IDx4czplbGVtZW50IG5hbWU9IkJ1aWx0SW5UeXBlIiB0eXBlPSJ4czp1bnNpZ25lZEJ5dGUiIG1p bk9jY3Vycz0iMCIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5z aW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4 czplbGVtZW50IG5hbWU9IkVudW1EZXNjcmlwdGlvbiIgdHlwZT0idG5zOkVudW1EZXNjcmlwdGlv biIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mRW51bURlc2NyaXB0aW9uIj4N CiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJFbnVtRGVzY3JpcHRp b24iIHR5cGU9InRuczpFbnVtRGVzY3JpcHRpb24iIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1 bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6 Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkVudW1EZXNjcmlwdGlvbiIg dHlwZT0idG5zOkxpc3RPZkVudW1EZXNjcmlwdGlvbiIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxl bWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iU2ltcGxlVHlwZURlc2NyaXB0aW9uIj4N CiAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAgICAgIDx4czpleHRlbnNp b24gYmFzZT0idG5zOkRhdGFUeXBlRGVzY3JpcHRpb24iPg0KICAgICAgICA8eHM6c2VxdWVuY2U+ DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQmFzZURhdGFUeXBlIiB0eXBlPSJ1YTpOb2Rl SWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAgICAgPHhzOmVsZW1l bnQgbmFtZT0iQnVpbHRJblR5cGUiIHR5cGU9InhzOnVuc2lnbmVkQnl0ZSIgbWluT2NjdXJzPSIw IiAvPg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0KICAgICAgPC94czpleHRlbnNpb24+DQogICAg PC94czpjb21wbGV4Q29udGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQg bmFtZT0iU2ltcGxlVHlwZURlc2NyaXB0aW9uIiB0eXBlPSJ0bnM6U2ltcGxlVHlwZURlc2NyaXB0 aW9uIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZTaW1wbGVUeXBlRGVzY3Jp cHRpb24iPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNpbXBs ZVR5cGVEZXNjcmlwdGlvbiIgdHlwZT0idG5zOlNpbXBsZVR5cGVEZXNjcmlwdGlvbiIgbWluT2Nj dXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94 czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlz dE9mU2ltcGxlVHlwZURlc2NyaXB0aW9uIiB0eXBlPSJ0bnM6TGlzdE9mU2ltcGxlVHlwZURlc2Ny aXB0aW9uIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlw ZSBuYW1lPSJVQUJpbmFyeUZpbGVEYXRhVHlwZSI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1p eGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpEYXRhVHlwZVNjaGVt YUhlYWRlciI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBu YW1lPSJTY2hlbWFMb2NhdGlvbiIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxh YmxlPSJ0cnVlIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IkZpbGVIZWFkZXIiIHR5 cGU9InRuczpMaXN0T2ZLZXlWYWx1ZVBhaXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUi IC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQm9keSIgdHlwZT0idWE6VmFyaWFudCIg bWluT2NjdXJzPSIwIiAvPg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0KICAgICAgPC94czpleHRl bnNpb24+DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAg PHhzOmVsZW1lbnQgbmFtZT0iVUFCaW5hcnlGaWxlRGF0YVR5cGUiIHR5cGU9InRuczpVQUJpbmFy eUZpbGVEYXRhVHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mVUFCaW5h cnlGaWxlRGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5h bWU9IlVBQmluYXJ5RmlsZURhdGFUeXBlIiB0eXBlPSJ0bnM6VUFCaW5hcnlGaWxlRGF0YVR5cGUi IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0K ICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5h bWU9Ikxpc3RPZlVBQmluYXJ5RmlsZURhdGFUeXBlIiB0eXBlPSJ0bnM6TGlzdE9mVUFCaW5hcnlG aWxlRGF0YVR5cGUiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOnNpbXBs ZVR5cGUgIG5hbWU9IlB1YlN1YlN0YXRlIj4NCiAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6 c3RyaW5nIj4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iRGlzYWJsZWRfMCIgLz4NCiAg ICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iUGF1c2VkXzEiIC8+DQogICAgICA8eHM6ZW51bWVy YXRpb24gdmFsdWU9Ik9wZXJhdGlvbmFsXzIiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFs dWU9IkVycm9yXzMiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlByZU9wZXJhdGlv bmFsXzQiIC8+DQogICAgPC94czpyZXN0cmljdGlvbj4NCiAgPC94czpzaW1wbGVUeXBlPg0KICA8 eHM6ZWxlbWVudCBuYW1lPSJQdWJTdWJTdGF0ZSIgdHlwZT0idG5zOlB1YlN1YlN0YXRlIiAvPg0K DQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZQdWJTdWJTdGF0ZSI+DQogICAgPHhzOnNl cXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUHViU3ViU3RhdGUiIHR5cGU9InRuczpQ dWJTdWJTdGF0ZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgLz4NCiAgICA8 L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJM aXN0T2ZQdWJTdWJTdGF0ZSIgdHlwZT0idG5zOkxpc3RPZlB1YlN1YlN0YXRlIiBuaWxsYWJsZT0i dHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJEYXRhU2V0TWV0 YURhdGFUeXBlIj4NCiAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAgICAg IDx4czpleHRlbnNpb24gYmFzZT0idG5zOkRhdGFUeXBlU2NoZW1hSGVhZGVyIj4NCiAgICAgICAg PHhzOnNlcXVlbmNlPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9Ik5hbWUiIHR5cGU9Inhz OnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgICA8eHM6 ZWxlbWVudCBuYW1lPSJEZXNjcmlwdGlvbiIgdHlwZT0idWE6TG9jYWxpemVkVGV4dCIgbWluT2Nj dXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJG aWVsZHMiIHR5cGU9InRuczpMaXN0T2ZGaWVsZE1ldGFEYXRhIiBtaW5PY2N1cnM9IjAiIG5pbGxh YmxlPSJ0cnVlIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IkRhdGFTZXRDbGFzc0lk IiB0eXBlPSJ1YTpHdWlkIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQg bmFtZT0iQ29uZmlndXJhdGlvblZlcnNpb24iIHR5cGU9InRuczpDb25maWd1cmF0aW9uVmVyc2lv bkRhdGFUeXBlIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICA8L3hz OnNlcXVlbmNlPg0KICAgICAgPC94czpleHRlbnNpb24+DQogICAgPC94czpjb21wbGV4Q29udGVu dD4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVNldE1ldGFE YXRhVHlwZSIgdHlwZT0idG5zOkRhdGFTZXRNZXRhRGF0YVR5cGUiIC8+DQoNCiAgPHhzOmNvbXBs ZXhUeXBlIG5hbWU9Ikxpc3RPZkRhdGFTZXRNZXRhRGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5j ZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRhdGFTZXRNZXRhRGF0YVR5cGUiIHR5cGU9InRu czpEYXRhU2V0TWV0YURhdGFUeXBlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVk IiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhU eXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZEYXRhU2V0TWV0YURhdGFUeXBlIiB0eXBl PSJ0bnM6TGlzdE9mRGF0YVNldE1ldGFEYXRhVHlwZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxl bWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iRmllbGRNZXRhRGF0YSI+DQogICAgPHhz OnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTmFtZSIgdHlwZT0ieHM6c3RyaW5n IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt ZT0iRGVzY3JpcHRpb24iIHR5cGU9InVhOkxvY2FsaXplZFRleHQiIG1pbk9jY3Vycz0iMCIgbmls bGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJGaWVsZEZsYWdzIiB0eXBl PSJ0bnM6RGF0YVNldEZpZWxkRmxhZ3MiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVt ZW50IG5hbWU9IkJ1aWx0SW5UeXBlIiB0eXBlPSJ4czp1bnNpZ25lZEJ5dGUiIG1pbk9jY3Vycz0i MCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRhdGFUeXBlIiB0eXBlPSJ1YTpOb2RlSWQi IG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1l PSJWYWx1ZVJhbmsiIHR5cGU9InhzOmludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVs ZW1lbnQgbmFtZT0iQXJyYXlEaW1lbnNpb25zIiB0eXBlPSJ1YTpMaXN0T2ZVSW50MzIiIG1pbk9j Y3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJNYXhT dHJpbmdMZW5ndGgiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAg ICA8eHM6ZWxlbWVudCBuYW1lPSJEYXRhU2V0RmllbGRJZCIgdHlwZT0idWE6R3VpZCIgbWluT2Nj dXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUHJvcGVydGllcyIgdHlwZT0idG5z Okxpc3RPZktleVZhbHVlUGFpciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAg ICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1l PSJGaWVsZE1ldGFEYXRhIiB0eXBlPSJ0bnM6RmllbGRNZXRhRGF0YSIgLz4NCg0KICA8eHM6Y29t cGxleFR5cGUgbmFtZT0iTGlzdE9mRmllbGRNZXRhRGF0YSI+DQogICAgPHhzOnNlcXVlbmNlPg0K ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRmllbGRNZXRhRGF0YSIgdHlwZT0idG5zOkZpZWxkTWV0 YURhdGEiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVl IiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVt ZW50IG5hbWU9Ikxpc3RPZkZpZWxkTWV0YURhdGEiIHR5cGU9InRuczpMaXN0T2ZGaWVsZE1ldGFE YXRhIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpzaW1wbGVUeXBlICBu YW1lPSJEYXRhU2V0RmllbGRGbGFncyI+DQogICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnVu c2lnbmVkU2hvcnQiPg0KICAgIDwveHM6cmVzdHJpY3Rpb24+DQogIDwveHM6c2ltcGxlVHlwZT4N CiAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVNldEZpZWxkRmxhZ3MiIHR5cGU9InRuczpEYXRhU2V0 RmllbGRGbGFncyIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iQ29uZmlndXJhdGlvblZl cnNpb25EYXRhVHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt ZT0iTWFqb3JWZXJzaW9uIiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0K ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTWlub3JWZXJzaW9uIiB0eXBlPSJ4czp1bnNpZ25lZElu dCIgbWluT2NjdXJzPSIwIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5 cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkNvbmZpZ3VyYXRpb25WZXJzaW9uRGF0YVR5cGUiIHR5 cGU9InRuczpDb25maWd1cmF0aW9uVmVyc2lvbkRhdGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4 VHlwZSBuYW1lPSJMaXN0T2ZDb25maWd1cmF0aW9uVmVyc2lvbkRhdGFUeXBlIj4NCiAgICA8eHM6 c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDb25maWd1cmF0aW9uVmVyc2lvbkRh dGFUeXBlIiB0eXBlPSJ0bnM6Q29uZmlndXJhdGlvblZlcnNpb25EYXRhVHlwZSIgbWluT2NjdXJz PSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpz ZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9m Q29uZmlndXJhdGlvblZlcnNpb25EYXRhVHlwZSIgdHlwZT0idG5zOkxpc3RPZkNvbmZpZ3VyYXRp b25WZXJzaW9uRGF0YVR5cGUiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhz OmNvbXBsZXhUeXBlIG5hbWU9IlB1Ymxpc2hlZERhdGFTZXREYXRhVHlwZSI+DQogICAgPHhzOnNl cXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTmFtZSIgdHlwZT0ieHM6c3RyaW5nIiBt aW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i RGF0YVNldEZvbGRlciIgdHlwZT0idWE6TGlzdE9mU3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxh YmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVNldE1ldGFEYXRhIiB0 eXBlPSJ0bnM6RGF0YVNldE1ldGFEYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1 ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkV4dGVuc2lvbkZpZWxkcyIgdHlwZT0idG5z Okxpc3RPZktleVZhbHVlUGFpciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAg ICAgIDx4czplbGVtZW50IG5hbWU9IkRhdGFTZXRTb3VyY2UiIHR5cGU9InRuczpQdWJsaXNoZWRE YXRhU2V0U291cmNlRGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQog ICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFt ZT0iUHVibGlzaGVkRGF0YVNldERhdGFUeXBlIiB0eXBlPSJ0bnM6UHVibGlzaGVkRGF0YVNldERh dGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZQdWJsaXNoZWREYXRh U2V0RGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9 IlB1Ymxpc2hlZERhdGFTZXREYXRhVHlwZSIgdHlwZT0idG5zOlB1Ymxpc2hlZERhdGFTZXREYXRh VHlwZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUi IC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1l bnQgbmFtZT0iTGlzdE9mUHVibGlzaGVkRGF0YVNldERhdGFUeXBlIiB0eXBlPSJ0bnM6TGlzdE9m UHVibGlzaGVkRGF0YVNldERhdGFUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0K DQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJQdWJsaXNoZWREYXRhU2V0U291cmNlRGF0YVR5cGUi Pg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhU eXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJQdWJsaXNoZWREYXRhU2V0U291cmNlRGF0YVR5cGUi IHR5cGU9InRuczpQdWJsaXNoZWREYXRhU2V0U291cmNlRGF0YVR5cGUiIC8+DQoNCiAgPHhzOmNv bXBsZXhUeXBlIG5hbWU9Ikxpc3RPZlB1Ymxpc2hlZERhdGFTZXRTb3VyY2VEYXRhVHlwZSI+DQog ICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUHVibGlzaGVkRGF0YVNl dFNvdXJjZURhdGFUeXBlIiB0eXBlPSJ0bnM6UHVibGlzaGVkRGF0YVNldFNvdXJjZURhdGFUeXBl IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4N CiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBu YW1lPSJMaXN0T2ZQdWJsaXNoZWREYXRhU2V0U291cmNlRGF0YVR5cGUiIHR5cGU9InRuczpMaXN0 T2ZQdWJsaXNoZWREYXRhU2V0U291cmNlRGF0YVR5cGUiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVs ZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlB1Ymxpc2hlZFZhcmlhYmxlRGF0YVR5 cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlB1Ymxpc2hl ZFZhcmlhYmxlIiB0eXBlPSJ1YTpOb2RlSWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUi IC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBdHRyaWJ1dGVJZCIgdHlwZT0ieHM6dW5zaWdu ZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNhbXBsaW5n SW50ZXJ2YWxIaW50IiB0eXBlPSJ4czpkb3VibGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4 czplbGVtZW50IG5hbWU9IkRlYWRiYW5kVHlwZSIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9j Y3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRlYWRiYW5kVmFsdWUiIHR5cGU9 InhzOmRvdWJsZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iSW5k ZXhSYW5nZSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAv Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU3Vic3RpdHV0ZVZhbHVlIiB0eXBlPSJ1YTpWYXJp YW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJNZXRhRGF0YVBy b3BlcnRpZXMiIHR5cGU9InVhOkxpc3RPZlF1YWxpZmllZE5hbWUiIG1pbk9jY3Vycz0iMCIgbmls bGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4N CiAgPHhzOmVsZW1lbnQgbmFtZT0iUHVibGlzaGVkVmFyaWFibGVEYXRhVHlwZSIgdHlwZT0idG5z OlB1Ymxpc2hlZFZhcmlhYmxlRGF0YVR5cGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9 Ikxpc3RPZlB1Ymxpc2hlZFZhcmlhYmxlRGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAg ICAgIDx4czplbGVtZW50IG5hbWU9IlB1Ymxpc2hlZFZhcmlhYmxlRGF0YVR5cGUiIHR5cGU9InRu czpQdWJsaXNoZWRWYXJpYWJsZURhdGFUeXBlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5i b3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNv bXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZQdWJsaXNoZWRWYXJpYWJsZURh dGFUeXBlIiB0eXBlPSJ0bnM6TGlzdE9mUHVibGlzaGVkVmFyaWFibGVEYXRhVHlwZSIgbmlsbGFi bGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iUHVibGlz aGVkRGF0YUl0ZW1zRGF0YVR5cGUiPg0KICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0iZmFs c2UiPg0KICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0bnM6UHVibGlzaGVkRGF0YVNldFNvdXJj ZURhdGFUeXBlIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAgIDx4czplbGVtZW50 IG5hbWU9IlB1Ymxpc2hlZERhdGEiIHR5cGU9InRuczpMaXN0T2ZQdWJsaXNoZWRWYXJpYWJsZURh dGFUeXBlIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICA8L3hzOnNl cXVlbmNlPg0KICAgICAgPC94czpleHRlbnNpb24+DQogICAgPC94czpjb21wbGV4Q29udGVudD4N CiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iUHVibGlzaGVkRGF0YUl0 ZW1zRGF0YVR5cGUiIHR5cGU9InRuczpQdWJsaXNoZWREYXRhSXRlbXNEYXRhVHlwZSIgLz4NCg0K ICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mUHVibGlzaGVkRGF0YUl0ZW1zRGF0YVR5cGUi Pg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlB1Ymxpc2hlZERh dGFJdGVtc0RhdGFUeXBlIiB0eXBlPSJ0bnM6UHVibGlzaGVkRGF0YUl0ZW1zRGF0YVR5cGUiIG1p bk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAg IDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9 Ikxpc3RPZlB1Ymxpc2hlZERhdGFJdGVtc0RhdGFUeXBlIiB0eXBlPSJ0bnM6TGlzdE9mUHVibGlz aGVkRGF0YUl0ZW1zRGF0YVR5cGUiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAg PHhzOmNvbXBsZXhUeXBlIG5hbWU9IlB1Ymxpc2hlZEV2ZW50c0RhdGFUeXBlIj4NCiAgICA8eHM6 Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAgICAgIDx4czpleHRlbnNpb24gYmFzZT0i dG5zOlB1Ymxpc2hlZERhdGFTZXRTb3VyY2VEYXRhVHlwZSI+DQogICAgICAgIDx4czpzZXF1ZW5j ZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJFdmVudE5vdGlmaWVyIiB0eXBlPSJ1YTpO b2RlSWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAgICAgPHhzOmVs ZW1lbnQgbmFtZT0iU2VsZWN0ZWRGaWVsZHMiIHR5cGU9InRuczpMaXN0T2ZTaW1wbGVBdHRyaWJ1 dGVPcGVyYW5kIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICAgIDx4 czplbGVtZW50IG5hbWU9IkZpbHRlciIgdHlwZT0idG5zOkNvbnRlbnRGaWx0ZXIiIG1pbk9jY3Vy cz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICA8 L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhU eXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJQdWJsaXNoZWRFdmVudHNEYXRhVHlwZSIgdHlwZT0i dG5zOlB1Ymxpc2hlZEV2ZW50c0RhdGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1l PSJMaXN0T2ZQdWJsaXNoZWRFdmVudHNEYXRhVHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAg ICAgPHhzOmVsZW1lbnQgbmFtZT0iUHVibGlzaGVkRXZlbnRzRGF0YVR5cGUiIHR5cGU9InRuczpQ dWJsaXNoZWRFdmVudHNEYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRl ZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4 VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mUHVibGlzaGVkRXZlbnRzRGF0YVR5cGUi IHR5cGU9InRuczpMaXN0T2ZQdWJsaXNoZWRFdmVudHNEYXRhVHlwZSIgbmlsbGFibGU9InRydWUi PjwveHM6ZWxlbWVudD4NCg0KICA8eHM6c2ltcGxlVHlwZSAgbmFtZT0iRGF0YVNldEZpZWxkQ29u dGVudE1hc2siPg0KICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp1bnNpZ25lZEludCI+DQog ICAgPC94czpyZXN0cmljdGlvbj4NCiAgPC94czpzaW1wbGVUeXBlPg0KICA8eHM6ZWxlbWVudCBu YW1lPSJEYXRhU2V0RmllbGRDb250ZW50TWFzayIgdHlwZT0idG5zOkRhdGFTZXRGaWVsZENvbnRl bnRNYXNrIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZEYXRhU2V0RmllbGRD b250ZW50TWFzayI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i RGF0YVNldEZpZWxkQ29udGVudE1hc2siIHR5cGU9InRuczpEYXRhU2V0RmllbGRDb250ZW50TWFz ayIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgLz4NCiAgICA8L3hzOnNlcXVl bmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZEYXRh U2V0RmllbGRDb250ZW50TWFzayIgdHlwZT0idG5zOkxpc3RPZkRhdGFTZXRGaWVsZENvbnRlbnRN YXNrIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBu YW1lPSJEYXRhU2V0V3JpdGVyRGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4 czplbGVtZW50IG5hbWU9Ik5hbWUiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxs YWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkVuYWJsZWQiIHR5cGU9Inhz OmJvb2xlYW4iIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRhdGFT ZXRXcml0ZXJJZCIgdHlwZT0ieHM6dW5zaWduZWRTaG9ydCIgbWluT2NjdXJzPSIwIiAvPg0KICAg ICAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVNldEZpZWxkQ29udGVudE1hc2siIHR5cGU9InRuczpE YXRhU2V0RmllbGRDb250ZW50TWFzayIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1l bnQgbmFtZT0iS2V5RnJhbWVDb3VudCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0i MCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRhdGFTZXROYW1lIiB0eXBlPSJ4czpzdHJp bmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBu YW1lPSJEYXRhU2V0V3JpdGVyUHJvcGVydGllcyIgdHlwZT0idG5zOkxpc3RPZktleVZhbHVlUGFp ciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5h bWU9IlRyYW5zcG9ydFNldHRpbmdzIiB0eXBlPSJ0bnM6RGF0YVNldFdyaXRlclRyYW5zcG9ydERh dGFUeXBlIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1l bnQgbmFtZT0iTWVzc2FnZVNldHRpbmdzIiB0eXBlPSJ0bnM6RGF0YVNldFdyaXRlck1lc3NhZ2VE YXRhVHlwZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVl bmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJEYXRhU2V0V3Jp dGVyRGF0YVR5cGUiIHR5cGU9InRuczpEYXRhU2V0V3JpdGVyRGF0YVR5cGUiIC8+DQoNCiAgPHhz OmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkRhdGFTZXRXcml0ZXJEYXRhVHlwZSI+DQogICAgPHhz OnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVNldFdyaXRlckRhdGFUeXBl IiB0eXBlPSJ0bnM6RGF0YVNldFdyaXRlckRhdGFUeXBlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vy cz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8 L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZEYXRhU2V0V3JpdGVy RGF0YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZEYXRhU2V0V3JpdGVyRGF0YVR5cGUiIG5pbGxhYmxl PSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkRhdGFTZXRX cml0ZXJUcmFuc3BvcnREYXRhVHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgIDwveHM6c2Vx dWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkRhdGFTZXRX cml0ZXJUcmFuc3BvcnREYXRhVHlwZSIgdHlwZT0idG5zOkRhdGFTZXRXcml0ZXJUcmFuc3BvcnRE YXRhVHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mRGF0YVNldFdyaXRl clRyYW5zcG9ydERhdGFUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVu dCBuYW1lPSJEYXRhU2V0V3JpdGVyVHJhbnNwb3J0RGF0YVR5cGUiIHR5cGU9InRuczpEYXRhU2V0 V3JpdGVyVHJhbnNwb3J0RGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5k ZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxl eFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkRhdGFTZXRXcml0ZXJUcmFuc3BvcnRE YXRhVHlwZSIgdHlwZT0idG5zOkxpc3RPZkRhdGFTZXRXcml0ZXJUcmFuc3BvcnREYXRhVHlwZSIg bmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0i RGF0YVNldFdyaXRlck1lc3NhZ2VEYXRhVHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgIDwv eHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkRh dGFTZXRXcml0ZXJNZXNzYWdlRGF0YVR5cGUiIHR5cGU9InRuczpEYXRhU2V0V3JpdGVyTWVzc2Fn ZURhdGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZEYXRhU2V0V3Jp dGVyTWVzc2FnZURhdGFUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVu dCBuYW1lPSJEYXRhU2V0V3JpdGVyTWVzc2FnZURhdGFUeXBlIiB0eXBlPSJ0bnM6RGF0YVNldFdy aXRlck1lc3NhZ2VEYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIg bmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlw ZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mRGF0YVNldFdyaXRlck1lc3NhZ2VEYXRhVHlw ZSIgdHlwZT0idG5zOkxpc3RPZkRhdGFTZXRXcml0ZXJNZXNzYWdlRGF0YVR5cGUiIG5pbGxhYmxl PSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlB1YlN1Ykdy b3VwRGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9 Ik5hbWUiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4N CiAgICAgIDx4czplbGVtZW50IG5hbWU9IkVuYWJsZWQiIHR5cGU9InhzOmJvb2xlYW4iIG1pbk9j Y3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNlY3VyaXR5TW9kZSIgdHlwZT0i dG5zOk1lc3NhZ2VTZWN1cml0eU1vZGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVt ZW50IG5hbWU9IlNlY3VyaXR5R3JvdXBJZCIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAi IG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2VjdXJpdHlLZXlT ZXJ2aWNlcyIgdHlwZT0idG5zOkxpc3RPZkVuZHBvaW50RGVzY3JpcHRpb24iIG1pbk9jY3Vycz0i MCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJNYXhOZXR3b3Jr TWVzc2FnZVNpemUiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAg ICA8eHM6ZWxlbWVudCBuYW1lPSJHcm91cFByb3BlcnRpZXMiIHR5cGU9InRuczpMaXN0T2ZLZXlW YWx1ZVBhaXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1 ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iUHViU3ViR3Jv dXBEYXRhVHlwZSIgdHlwZT0idG5zOlB1YlN1Ykdyb3VwRGF0YVR5cGUiIC8+DQoNCiAgPHhzOmNv bXBsZXhUeXBlIG5hbWU9Ikxpc3RPZlB1YlN1Ykdyb3VwRGF0YVR5cGUiPg0KICAgIDx4czpzZXF1 ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlB1YlN1Ykdyb3VwRGF0YVR5cGUiIHR5cGU9 InRuczpQdWJTdWJHcm91cERhdGFUeXBlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3Vu ZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBs ZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZQdWJTdWJHcm91cERhdGFUeXBlIiB0 eXBlPSJ0bnM6TGlzdE9mUHViU3ViR3JvdXBEYXRhVHlwZSIgbmlsbGFibGU9InRydWUiPjwveHM6 ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iV3JpdGVyR3JvdXBEYXRhVHlwZSI+ DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5z aW9uIGJhc2U9InRuczpQdWJTdWJHcm91cERhdGFUeXBlIj4NCiAgICAgICAgPHhzOnNlcXVlbmNl Pg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IldyaXRlckdyb3VwSWQiIHR5cGU9InhzOnVu c2lnbmVkU2hvcnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1l PSJQdWJsaXNoaW5nSW50ZXJ2YWwiIHR5cGU9InhzOmRvdWJsZSIgbWluT2NjdXJzPSIwIiAvPg0K ICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IktlZXBBbGl2ZVRpbWUiIHR5cGU9InhzOmRvdWJs ZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IlByaW9yaXR5 IiB0eXBlPSJ4czp1bnNpZ25lZEJ5dGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICA8eHM6 ZWxlbWVudCBuYW1lPSJMb2NhbGVJZHMiIHR5cGU9InVhOkxpc3RPZlN0cmluZyIgbWluT2NjdXJz PSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJIZWFk ZXJMYXlvdXRVcmkiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1 ZSIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJUcmFuc3BvcnRTZXR0aW5ncyIgdHlw ZT0idG5zOldyaXRlckdyb3VwVHJhbnNwb3J0RGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFi bGU9InRydWUiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTWVzc2FnZVNldHRpbmdz IiB0eXBlPSJ0bnM6V3JpdGVyR3JvdXBNZXNzYWdlRGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbmls bGFibGU9InRydWUiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVNldFdyaXRl cnMiIHR5cGU9InRuczpMaXN0T2ZEYXRhU2V0V3JpdGVyRGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIg bmlsbGFibGU9InRydWUiIC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICA8L3hzOmV4 dGVuc2lvbj4NCiAgICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0K ICA8eHM6ZWxlbWVudCBuYW1lPSJXcml0ZXJHcm91cERhdGFUeXBlIiB0eXBlPSJ0bnM6V3JpdGVy R3JvdXBEYXRhVHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mV3JpdGVy R3JvdXBEYXRhVHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt ZT0iV3JpdGVyR3JvdXBEYXRhVHlwZSIgdHlwZT0idG5zOldyaXRlckdyb3VwRGF0YVR5cGUiIG1p bk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAg IDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9 Ikxpc3RPZldyaXRlckdyb3VwRGF0YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZXcml0ZXJHcm91cERh dGFUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlw ZSBuYW1lPSJXcml0ZXJHcm91cFRyYW5zcG9ydERhdGFUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+ DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQg bmFtZT0iV3JpdGVyR3JvdXBUcmFuc3BvcnREYXRhVHlwZSIgdHlwZT0idG5zOldyaXRlckdyb3Vw VHJhbnNwb3J0RGF0YVR5cGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZldy aXRlckdyb3VwVHJhbnNwb3J0RGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4 czplbGVtZW50IG5hbWU9IldyaXRlckdyb3VwVHJhbnNwb3J0RGF0YVR5cGUiIHR5cGU9InRuczpX cml0ZXJHcm91cFRyYW5zcG9ydERhdGFUeXBlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5i b3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNv bXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZXcml0ZXJHcm91cFRyYW5zcG9y dERhdGFUeXBlIiB0eXBlPSJ0bnM6TGlzdE9mV3JpdGVyR3JvdXBUcmFuc3BvcnREYXRhVHlwZSIg bmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0i V3JpdGVyR3JvdXBNZXNzYWdlRGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICA8L3hz OnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJXcml0 ZXJHcm91cE1lc3NhZ2VEYXRhVHlwZSIgdHlwZT0idG5zOldyaXRlckdyb3VwTWVzc2FnZURhdGFU eXBlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZXcml0ZXJHcm91cE1lc3Nh Z2VEYXRhVHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i V3JpdGVyR3JvdXBNZXNzYWdlRGF0YVR5cGUiIHR5cGU9InRuczpXcml0ZXJHcm91cE1lc3NhZ2VE YXRhVHlwZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRy dWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVs ZW1lbnQgbmFtZT0iTGlzdE9mV3JpdGVyR3JvdXBNZXNzYWdlRGF0YVR5cGUiIHR5cGU9InRuczpM aXN0T2ZXcml0ZXJHcm91cE1lc3NhZ2VEYXRhVHlwZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxl bWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iUHViU3ViQ29ubmVjdGlvbkRhdGFUeXBl Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJOYW1lIiB0eXBl PSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6 ZWxlbWVudCBuYW1lPSJFbmFibGVkIiB0eXBlPSJ4czpib29sZWFuIiBtaW5PY2N1cnM9IjAiIC8+ DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJQdWJsaXNoZXJJZCIgdHlwZT0idWE6VmFyaWFudCIg bWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVHJhbnNwb3J0UHJvZmls ZVVyaSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0K ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQWRkcmVzcyIgdHlwZT0idG5zOk5ldHdvcmtBZGRyZXNz RGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxl bWVudCBuYW1lPSJDb25uZWN0aW9uUHJvcGVydGllcyIgdHlwZT0idG5zOkxpc3RPZktleVZhbHVl UGFpciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50 IG5hbWU9IlRyYW5zcG9ydFNldHRpbmdzIiB0eXBlPSJ0bnM6Q29ubmVjdGlvblRyYW5zcG9ydERh dGFUeXBlIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1l bnQgbmFtZT0iV3JpdGVyR3JvdXBzIiB0eXBlPSJ0bnM6TGlzdE9mV3JpdGVyR3JvdXBEYXRhVHlw ZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5h bWU9IlJlYWRlckdyb3VwcyIgdHlwZT0idG5zOkxpc3RPZlJlYWRlckdyb3VwRGF0YVR5cGUiIG1p bk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94 czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iUHViU3ViQ29ubmVjdGlvbkRhdGFU eXBlIiB0eXBlPSJ0bnM6UHViU3ViQ29ubmVjdGlvbkRhdGFUeXBlIiAvPg0KDQogIDx4czpjb21w bGV4VHlwZSBuYW1lPSJMaXN0T2ZQdWJTdWJDb25uZWN0aW9uRGF0YVR5cGUiPg0KICAgIDx4czpz ZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlB1YlN1YkNvbm5lY3Rpb25EYXRhVHlw ZSIgdHlwZT0idG5zOlB1YlN1YkNvbm5lY3Rpb25EYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBtYXhP Y2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4N CiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mUHViU3ViQ29u bmVjdGlvbkRhdGFUeXBlIiB0eXBlPSJ0bnM6TGlzdE9mUHViU3ViQ29ubmVjdGlvbkRhdGFUeXBl IiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1l PSJDb25uZWN0aW9uVHJhbnNwb3J0RGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICA8 L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJD b25uZWN0aW9uVHJhbnNwb3J0RGF0YVR5cGUiIHR5cGU9InRuczpDb25uZWN0aW9uVHJhbnNwb3J0 RGF0YVR5cGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkNvbm5lY3Rpb25U cmFuc3BvcnREYXRhVHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQg bmFtZT0iQ29ubmVjdGlvblRyYW5zcG9ydERhdGFUeXBlIiB0eXBlPSJ0bnM6Q29ubmVjdGlvblRy YW5zcG9ydERhdGFUeXBlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxs YWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0K ICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZDb25uZWN0aW9uVHJhbnNwb3J0RGF0YVR5cGUiIHR5 cGU9InRuczpMaXN0T2ZDb25uZWN0aW9uVHJhbnNwb3J0RGF0YVR5cGUiIG5pbGxhYmxlPSJ0cnVl Ij48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ik5ldHdvcmtBZGRyZXNz RGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik5l dHdvcmtJbnRlcmZhY2UiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0i dHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6 ZWxlbWVudCBuYW1lPSJOZXR3b3JrQWRkcmVzc0RhdGFUeXBlIiB0eXBlPSJ0bnM6TmV0d29ya0Fk ZHJlc3NEYXRhVHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mTmV0d29y a0FkZHJlc3NEYXRhVHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQg bmFtZT0iTmV0d29ya0FkZHJlc3NEYXRhVHlwZSIgdHlwZT0idG5zOk5ldHdvcmtBZGRyZXNzRGF0 YVR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVl IiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVt ZW50IG5hbWU9Ikxpc3RPZk5ldHdvcmtBZGRyZXNzRGF0YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZO ZXR3b3JrQWRkcmVzc0RhdGFUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQog IDx4czpjb21wbGV4VHlwZSBuYW1lPSJOZXR3b3JrQWRkcmVzc1VybERhdGFUeXBlIj4NCiAgICA8 eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAgICAgIDx4czpleHRlbnNpb24gYmFz ZT0idG5zOk5ldHdvcmtBZGRyZXNzRGF0YVR5cGUiPg0KICAgICAgICA8eHM6c2VxdWVuY2U+DQog ICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVXJsIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vy cz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICA8 L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhU eXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJOZXR3b3JrQWRkcmVzc1VybERhdGFUeXBlIiB0eXBl PSJ0bnM6TmV0d29ya0FkZHJlc3NVcmxEYXRhVHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUg bmFtZT0iTGlzdE9mTmV0d29ya0FkZHJlc3NVcmxEYXRhVHlwZSI+DQogICAgPHhzOnNlcXVlbmNl Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTmV0d29ya0FkZHJlc3NVcmxEYXRhVHlwZSIgdHlw ZT0idG5zOk5ldHdvcmtBZGRyZXNzVXJsRGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJz PSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwv eHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZk5ldHdvcmtBZGRyZXNz VXJsRGF0YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZOZXR3b3JrQWRkcmVzc1VybERhdGFUeXBlIiBu aWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJS ZWFkZXJHcm91cERhdGFUeXBlIj4NCiAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNl Ij4NCiAgICAgIDx4czpleHRlbnNpb24gYmFzZT0idG5zOlB1YlN1Ykdyb3VwRGF0YVR5cGUiPg0K ICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVHJhbnNw b3J0U2V0dGluZ3MiIHR5cGU9InRuczpSZWFkZXJHcm91cFRyYW5zcG9ydERhdGFUeXBlIiBtaW5P Y2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9 Ik1lc3NhZ2VTZXR0aW5ncyIgdHlwZT0idG5zOlJlYWRlckdyb3VwTWVzc2FnZURhdGFUeXBlIiBt aW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5h bWU9IkRhdGFTZXRSZWFkZXJzIiB0eXBlPSJ0bnM6TGlzdE9mRGF0YVNldFJlYWRlckRhdGFUeXBl IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICA8L3hzOnNlcXVlbmNl Pg0KICAgICAgPC94czpleHRlbnNpb24+DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAgPC94 czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iUmVhZGVyR3JvdXBEYXRhVHlwZSIg dHlwZT0idG5zOlJlYWRlckdyb3VwRGF0YVR5cGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5h bWU9Ikxpc3RPZlJlYWRlckdyb3VwRGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAg IDx4czplbGVtZW50IG5hbWU9IlJlYWRlckdyb3VwRGF0YVR5cGUiIHR5cGU9InRuczpSZWFkZXJH cm91cERhdGFUeXBlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJs ZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8 eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZSZWFkZXJHcm91cERhdGFUeXBlIiB0eXBlPSJ0bnM6TGlz dE9mUmVhZGVyR3JvdXBEYXRhVHlwZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0K ICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iUmVhZGVyR3JvdXBUcmFuc3BvcnREYXRhVHlwZSI+DQog ICAgPHhzOnNlcXVlbmNlPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+ DQogIDx4czplbGVtZW50IG5hbWU9IlJlYWRlckdyb3VwVHJhbnNwb3J0RGF0YVR5cGUiIHR5cGU9 InRuczpSZWFkZXJHcm91cFRyYW5zcG9ydERhdGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4VHlw ZSBuYW1lPSJMaXN0T2ZSZWFkZXJHcm91cFRyYW5zcG9ydERhdGFUeXBlIj4NCiAgICA8eHM6c2Vx dWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZWFkZXJHcm91cFRyYW5zcG9ydERhdGFU eXBlIiB0eXBlPSJ0bnM6UmVhZGVyR3JvdXBUcmFuc3BvcnREYXRhVHlwZSIgbWluT2NjdXJzPSIw IiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1 ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mUmVh ZGVyR3JvdXBUcmFuc3BvcnREYXRhVHlwZSIgdHlwZT0idG5zOkxpc3RPZlJlYWRlckdyb3VwVHJh bnNwb3J0RGF0YVR5cGUiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNv bXBsZXhUeXBlIG5hbWU9IlJlYWRlckdyb3VwTWVzc2FnZURhdGFUeXBlIj4NCiAgICA8eHM6c2Vx dWVuY2U+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVs ZW1lbnQgbmFtZT0iUmVhZGVyR3JvdXBNZXNzYWdlRGF0YVR5cGUiIHR5cGU9InRuczpSZWFkZXJH cm91cE1lc3NhZ2VEYXRhVHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9m UmVhZGVyR3JvdXBNZXNzYWdlRGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4 czplbGVtZW50IG5hbWU9IlJlYWRlckdyb3VwTWVzc2FnZURhdGFUeXBlIiB0eXBlPSJ0bnM6UmVh ZGVyR3JvdXBNZXNzYWdlRGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5k ZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxl eFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZlJlYWRlckdyb3VwTWVzc2FnZURhdGFU eXBlIiB0eXBlPSJ0bnM6TGlzdE9mUmVhZGVyR3JvdXBNZXNzYWdlRGF0YVR5cGUiIG5pbGxhYmxl PSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkRhdGFTZXRS ZWFkZXJEYXRhVHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt ZT0iTmFtZSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAv Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRW5hYmxlZCIgdHlwZT0ieHM6Ym9vbGVhbiIgbWlu T2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUHVibGlzaGVySWQiIHR5cGU9 InVhOlZhcmlhbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ildy aXRlckdyb3VwSWQiIHR5cGU9InhzOnVuc2lnbmVkU2hvcnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAg ICAgIDx4czplbGVtZW50IG5hbWU9IkRhdGFTZXRXcml0ZXJJZCIgdHlwZT0ieHM6dW5zaWduZWRT aG9ydCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVNldE1l dGFEYXRhIiB0eXBlPSJ0bnM6RGF0YVNldE1ldGFEYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBuaWxs YWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRhdGFTZXRGaWVsZENvbnRl bnRNYXNrIiB0eXBlPSJ0bnM6RGF0YVNldEZpZWxkQ29udGVudE1hc2siIG1pbk9jY3Vycz0iMCIg Lz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik1lc3NhZ2VSZWNlaXZlVGltZW91dCIgdHlwZT0i eHM6ZG91YmxlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJLZXlG cmFtZUNvdW50IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAg PHhzOmVsZW1lbnQgbmFtZT0iSGVhZGVyTGF5b3V0VXJpIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9j Y3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTZWN1 cml0eU1vZGUiIHR5cGU9InRuczpNZXNzYWdlU2VjdXJpdHlNb2RlIiBtaW5PY2N1cnM9IjAiIC8+ DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTZWN1cml0eUdyb3VwSWQiIHR5cGU9InhzOnN0cmlu ZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5h bWU9IlNlY3VyaXR5S2V5U2VydmljZXMiIHR5cGU9InRuczpMaXN0T2ZFbmRwb2ludERlc2NyaXB0 aW9uIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQg bmFtZT0iRGF0YVNldFJlYWRlclByb3BlcnRpZXMiIHR5cGU9InRuczpMaXN0T2ZLZXlWYWx1ZVBh aXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBu YW1lPSJUcmFuc3BvcnRTZXR0aW5ncyIgdHlwZT0idG5zOkRhdGFTZXRSZWFkZXJUcmFuc3BvcnRE YXRhVHlwZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVt ZW50IG5hbWU9Ik1lc3NhZ2VTZXR0aW5ncyIgdHlwZT0idG5zOkRhdGFTZXRSZWFkZXJNZXNzYWdl RGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxl bWVudCBuYW1lPSJTdWJzY3JpYmVkRGF0YVNldCIgdHlwZT0idG5zOlN1YnNjcmliZWREYXRhU2V0 RGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1 ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVNldFJl YWRlckRhdGFUeXBlIiB0eXBlPSJ0bnM6RGF0YVNldFJlYWRlckRhdGFUeXBlIiAvPg0KDQogIDx4 czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZEYXRhU2V0UmVhZGVyRGF0YVR5cGUiPg0KICAgIDx4 czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRhdGFTZXRSZWFkZXJEYXRhVHlw ZSIgdHlwZT0idG5zOkRhdGFTZXRSZWFkZXJEYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1 cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAg PC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mRGF0YVNldFJlYWRl ckRhdGFUeXBlIiB0eXBlPSJ0bnM6TGlzdE9mRGF0YVNldFJlYWRlckRhdGFUeXBlIiBuaWxsYWJs ZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJEYXRhU2V0 UmVhZGVyVHJhbnNwb3J0RGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICA8L3hzOnNl cXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJEYXRhU2V0 UmVhZGVyVHJhbnNwb3J0RGF0YVR5cGUiIHR5cGU9InRuczpEYXRhU2V0UmVhZGVyVHJhbnNwb3J0 RGF0YVR5cGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkRhdGFTZXRSZWFk ZXJUcmFuc3BvcnREYXRhVHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1l bnQgbmFtZT0iRGF0YVNldFJlYWRlclRyYW5zcG9ydERhdGFUeXBlIiB0eXBlPSJ0bnM6RGF0YVNl dFJlYWRlclRyYW5zcG9ydERhdGFUeXBlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3Vu ZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBs ZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZEYXRhU2V0UmVhZGVyVHJhbnNwb3J0 RGF0YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZEYXRhU2V0UmVhZGVyVHJhbnNwb3J0RGF0YVR5cGUi IG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9 IkRhdGFTZXRSZWFkZXJNZXNzYWdlRGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICA8 L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJE YXRhU2V0UmVhZGVyTWVzc2FnZURhdGFUeXBlIiB0eXBlPSJ0bnM6RGF0YVNldFJlYWRlck1lc3Nh Z2VEYXRhVHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mRGF0YVNldFJl YWRlck1lc3NhZ2VEYXRhVHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1l bnQgbmFtZT0iRGF0YVNldFJlYWRlck1lc3NhZ2VEYXRhVHlwZSIgdHlwZT0idG5zOkRhdGFTZXRS ZWFkZXJNZXNzYWdlRGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQi IG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5 cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkRhdGFTZXRSZWFkZXJNZXNzYWdlRGF0YVR5 cGUiIHR5cGU9InRuczpMaXN0T2ZEYXRhU2V0UmVhZGVyTWVzc2FnZURhdGFUeXBlIiBuaWxsYWJs ZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJTdWJzY3Jp YmVkRGF0YVNldERhdGFUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgPC94czpzZXF1ZW5j ZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iU3Vic2NyaWJlZERh dGFTZXREYXRhVHlwZSIgdHlwZT0idG5zOlN1YnNjcmliZWREYXRhU2V0RGF0YVR5cGUiIC8+DQoN CiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZlN1YnNjcmliZWREYXRhU2V0RGF0YVR5cGUi Pg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlN1YnNjcmliZWRE YXRhU2V0RGF0YVR5cGUiIHR5cGU9InRuczpTdWJzY3JpYmVkRGF0YVNldERhdGFUeXBlIiBtaW5P Y2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8 L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJM aXN0T2ZTdWJzY3JpYmVkRGF0YVNldERhdGFUeXBlIiB0eXBlPSJ0bnM6TGlzdE9mU3Vic2NyaWJl ZERhdGFTZXREYXRhVHlwZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6 Y29tcGxleFR5cGUgbmFtZT0iVGFyZ2V0VmFyaWFibGVzRGF0YVR5cGUiPg0KICAgIDx4czpjb21w bGV4Q29udGVudCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0bnM6 U3Vic2NyaWJlZERhdGFTZXREYXRhVHlwZSI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAg ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJUYXJnZXRWYXJpYWJsZXMiIHR5cGU9InRuczpMaXN0T2ZG aWVsZFRhcmdldERhdGFUeXBlIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAg ICAgICA8L3hzOnNlcXVlbmNlPg0KICAgICAgPC94czpleHRlbnNpb24+DQogICAgPC94czpjb21w bGV4Q29udGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iVGFy Z2V0VmFyaWFibGVzRGF0YVR5cGUiIHR5cGU9InRuczpUYXJnZXRWYXJpYWJsZXNEYXRhVHlwZSIg Lz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mVGFyZ2V0VmFyaWFibGVzRGF0YVR5 cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlRhcmdldFZh cmlhYmxlc0RhdGFUeXBlIiB0eXBlPSJ0bnM6VGFyZ2V0VmFyaWFibGVzRGF0YVR5cGUiIG1pbk9j Y3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwv eHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxp c3RPZlRhcmdldFZhcmlhYmxlc0RhdGFUeXBlIiB0eXBlPSJ0bnM6TGlzdE9mVGFyZ2V0VmFyaWFi bGVzRGF0YVR5cGUiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBs ZXhUeXBlIG5hbWU9IkZpZWxkVGFyZ2V0RGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAg ICAgIDx4czplbGVtZW50IG5hbWU9IkRhdGFTZXRGaWVsZElkIiB0eXBlPSJ1YTpHdWlkIiBtaW5P Y2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZWNlaXZlckluZGV4UmFuZ2Ui IHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAg IDx4czplbGVtZW50IG5hbWU9IlRhcmdldE5vZGVJZCIgdHlwZT0idWE6Tm9kZUlkIiBtaW5PY2N1 cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQXR0cmli dXRlSWQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6 ZWxlbWVudCBuYW1lPSJXcml0ZUluZGV4UmFuZ2UiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJz PSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik92ZXJyaWRl VmFsdWVIYW5kbGluZyIgdHlwZT0idG5zOk92ZXJyaWRlVmFsdWVIYW5kbGluZyIgbWluT2NjdXJz PSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iT3ZlcnJpZGVWYWx1ZSIgdHlwZT0idWE6 VmFyaWFudCIgbWluT2NjdXJzPSIwIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29t cGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkZpZWxkVGFyZ2V0RGF0YVR5cGUiIHR5cGU9 InRuczpGaWVsZFRhcmdldERhdGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJM aXN0T2ZGaWVsZFRhcmdldERhdGFUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6 ZWxlbWVudCBuYW1lPSJGaWVsZFRhcmdldERhdGFUeXBlIiB0eXBlPSJ0bnM6RmllbGRUYXJnZXRE YXRhVHlwZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRy dWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVs ZW1lbnQgbmFtZT0iTGlzdE9mRmllbGRUYXJnZXREYXRhVHlwZSIgdHlwZT0idG5zOkxpc3RPZkZp ZWxkVGFyZ2V0RGF0YVR5cGUiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhz OnNpbXBsZVR5cGUgIG5hbWU9Ik92ZXJyaWRlVmFsdWVIYW5kbGluZyI+DQogICAgPHhzOnJlc3Ry aWN0aW9uIGJhc2U9InhzOnN0cmluZyI+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkRp c2FibGVkXzAiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Ikxhc3RVc2FibGVWYWx1 ZV8xIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJPdmVycmlkZVZhbHVlXzIiIC8+ DQogICAgPC94czpyZXN0cmljdGlvbj4NCiAgPC94czpzaW1wbGVUeXBlPg0KICA8eHM6ZWxlbWVu dCBuYW1lPSJPdmVycmlkZVZhbHVlSGFuZGxpbmciIHR5cGU9InRuczpPdmVycmlkZVZhbHVlSGFu ZGxpbmciIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZk92ZXJyaWRlVmFsdWVI YW5kbGluZyI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iT3Zl cnJpZGVWYWx1ZUhhbmRsaW5nIiB0eXBlPSJ0bnM6T3ZlcnJpZGVWYWx1ZUhhbmRsaW5nIiBtaW5P Y2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQog IDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZk92ZXJyaWRlVmFs dWVIYW5kbGluZyIgdHlwZT0idG5zOkxpc3RPZk92ZXJyaWRlVmFsdWVIYW5kbGluZyIgbmlsbGFi bGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iU3Vic2Ny aWJlZERhdGFTZXRNaXJyb3JEYXRhVHlwZSI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVk PSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpTdWJzY3JpYmVkRGF0YVNl dERhdGFUeXBlIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAgIDx4czplbGVtZW50 IG5hbWU9IlBhcmVudE5vZGVOYW1lIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmls bGFibGU9InRydWUiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUm9sZVBlcm1pc3Np b25zIiB0eXBlPSJ0bnM6TGlzdE9mUm9sZVBlcm1pc3Npb25UeXBlIiBtaW5PY2N1cnM9IjAiIG5p bGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0KICAgICAgPC94czpleHRl bnNpb24+DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAg PHhzOmVsZW1lbnQgbmFtZT0iU3Vic2NyaWJlZERhdGFTZXRNaXJyb3JEYXRhVHlwZSIgdHlwZT0i dG5zOlN1YnNjcmliZWREYXRhU2V0TWlycm9yRGF0YVR5cGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhU eXBlIG5hbWU9Ikxpc3RPZlN1YnNjcmliZWREYXRhU2V0TWlycm9yRGF0YVR5cGUiPg0KICAgIDx4 czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlN1YnNjcmliZWREYXRhU2V0TWly cm9yRGF0YVR5cGUiIHR5cGU9InRuczpTdWJzY3JpYmVkRGF0YVNldE1pcnJvckRhdGFUeXBlIiBt aW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAg ICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1l PSJMaXN0T2ZTdWJzY3JpYmVkRGF0YVNldE1pcnJvckRhdGFUeXBlIiB0eXBlPSJ0bnM6TGlzdE9m U3Vic2NyaWJlZERhdGFTZXRNaXJyb3JEYXRhVHlwZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxl bWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iUHViU3ViQ29uZmlndXJhdGlvbkRhdGFU eXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJQdWJsaXNo ZWREYXRhU2V0cyIgdHlwZT0idG5zOkxpc3RPZlB1Ymxpc2hlZERhdGFTZXREYXRhVHlwZSIgbWlu T2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkNv bm5lY3Rpb25zIiB0eXBlPSJ0bnM6TGlzdE9mUHViU3ViQ29ubmVjdGlvbkRhdGFUeXBlIiBtaW5P Y2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRW5h YmxlZCIgdHlwZT0ieHM6Ym9vbGVhbiIgbWluT2NjdXJzPSIwIiAvPg0KICAgIDwveHM6c2VxdWVu Y2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlB1YlN1YkNvbmZp Z3VyYXRpb25EYXRhVHlwZSIgdHlwZT0idG5zOlB1YlN1YkNvbmZpZ3VyYXRpb25EYXRhVHlwZSIg Lz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mUHViU3ViQ29uZmlndXJhdGlvbkRh dGFUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJQdWJT dWJDb25maWd1cmF0aW9uRGF0YVR5cGUiIHR5cGU9InRuczpQdWJTdWJDb25maWd1cmF0aW9uRGF0 YVR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVl IiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVt ZW50IG5hbWU9Ikxpc3RPZlB1YlN1YkNvbmZpZ3VyYXRpb25EYXRhVHlwZSIgdHlwZT0idG5zOkxp c3RPZlB1YlN1YkNvbmZpZ3VyYXRpb25EYXRhVHlwZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxl bWVudD4NCg0KICA8eHM6c2ltcGxlVHlwZSAgbmFtZT0iRGF0YVNldE9yZGVyaW5nVHlwZSI+DQog ICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnN0cmluZyI+DQogICAgICA8eHM6ZW51bWVyYXRp b24gdmFsdWU9IlVuZGVmaW5lZF8wIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJB c2NlbmRpbmdXcml0ZXJJZF8xIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJBc2Nl bmRpbmdXcml0ZXJJZFNpbmdsZV8yIiAvPg0KICAgIDwveHM6cmVzdHJpY3Rpb24+DQogIDwveHM6 c2ltcGxlVHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVNldE9yZGVyaW5nVHlwZSIgdHlw ZT0idG5zOkRhdGFTZXRPcmRlcmluZ1R5cGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9 Ikxpc3RPZkRhdGFTZXRPcmRlcmluZ1R5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4 czplbGVtZW50IG5hbWU9IkRhdGFTZXRPcmRlcmluZ1R5cGUiIHR5cGU9InRuczpEYXRhU2V0T3Jk ZXJpbmdUeXBlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiAvPg0KICAgIDwv eHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxp c3RPZkRhdGFTZXRPcmRlcmluZ1R5cGUiIHR5cGU9InRuczpMaXN0T2ZEYXRhU2V0T3JkZXJpbmdU eXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpzaW1wbGVUeXBlICBu YW1lPSJVYWRwTmV0d29ya01lc3NhZ2VDb250ZW50TWFzayI+DQogICAgPHhzOnJlc3RyaWN0aW9u IGJhc2U9InhzOnVuc2lnbmVkSW50Ij4NCiAgICA8L3hzOnJlc3RyaWN0aW9uPg0KICA8L3hzOnNp bXBsZVR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlVhZHBOZXR3b3JrTWVzc2FnZUNvbnRlbnRN YXNrIiB0eXBlPSJ0bnM6VWFkcE5ldHdvcmtNZXNzYWdlQ29udGVudE1hc2siIC8+DQoNCiAgPHhz OmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZlVhZHBOZXR3b3JrTWVzc2FnZUNvbnRlbnRNYXNrIj4N CiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJVYWRwTmV0d29ya01l c3NhZ2VDb250ZW50TWFzayIgdHlwZT0idG5zOlVhZHBOZXR3b3JrTWVzc2FnZUNvbnRlbnRNYXNr IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiAvPg0KICAgIDwveHM6c2VxdWVu Y2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZlVhZHBO ZXR3b3JrTWVzc2FnZUNvbnRlbnRNYXNrIiB0eXBlPSJ0bnM6TGlzdE9mVWFkcE5ldHdvcmtNZXNz YWdlQ29udGVudE1hc2siIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNv bXBsZXhUeXBlIG5hbWU9IlVhZHBXcml0ZXJHcm91cE1lc3NhZ2VEYXRhVHlwZSI+DQogICAgPHhz OmNvbXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9 InRuczpXcml0ZXJHcm91cE1lc3NhZ2VEYXRhVHlwZSI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4N CiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJHcm91cFZlcnNpb24iIHR5cGU9InhzOnVuc2ln bmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0 YVNldE9yZGVyaW5nIiB0eXBlPSJ0bnM6RGF0YVNldE9yZGVyaW5nVHlwZSIgbWluT2NjdXJzPSIw IiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9Ik5ldHdvcmtNZXNzYWdlQ29udGVudE1h c2siIHR5cGU9InRuczpVYWRwTmV0d29ya01lc3NhZ2VDb250ZW50TWFzayIgbWluT2NjdXJzPSIw IiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IlNhbXBsaW5nT2Zmc2V0IiB0eXBlPSJ4 czpkb3VibGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJQ dWJsaXNoaW5nT2Zmc2V0IiB0eXBlPSJ1YTpMaXN0T2ZEb3VibGUiIG1pbk9jY3Vycz0iMCIgbmls bGFibGU9InRydWUiIC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVu c2lvbj4NCiAgICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8 eHM6ZWxlbWVudCBuYW1lPSJVYWRwV3JpdGVyR3JvdXBNZXNzYWdlRGF0YVR5cGUiIHR5cGU9InRu czpVYWRwV3JpdGVyR3JvdXBNZXNzYWdlRGF0YVR5cGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBl IG5hbWU9Ikxpc3RPZlVhZHBXcml0ZXJHcm91cE1lc3NhZ2VEYXRhVHlwZSI+DQogICAgPHhzOnNl cXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVWFkcFdyaXRlckdyb3VwTWVzc2FnZURh dGFUeXBlIiB0eXBlPSJ0bnM6VWFkcFdyaXRlckdyb3VwTWVzc2FnZURhdGFUeXBlIiBtaW5PY2N1 cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hz OnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0 T2ZVYWRwV3JpdGVyR3JvdXBNZXNzYWdlRGF0YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZVYWRwV3Jp dGVyR3JvdXBNZXNzYWdlRGF0YVR5cGUiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoN CiAgPHhzOnNpbXBsZVR5cGUgIG5hbWU9IlVhZHBEYXRhU2V0TWVzc2FnZUNvbnRlbnRNYXNrIj4N CiAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dW5zaWduZWRJbnQiPg0KICAgIDwveHM6cmVz dHJpY3Rpb24+DQogIDwveHM6c2ltcGxlVHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iVWFkcERh dGFTZXRNZXNzYWdlQ29udGVudE1hc2siIHR5cGU9InRuczpVYWRwRGF0YVNldE1lc3NhZ2VDb250 ZW50TWFzayIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mVWFkcERhdGFTZXRN ZXNzYWdlQ29udGVudE1hc2siPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50 IG5hbWU9IlVhZHBEYXRhU2V0TWVzc2FnZUNvbnRlbnRNYXNrIiB0eXBlPSJ0bnM6VWFkcERhdGFT ZXRNZXNzYWdlQ29udGVudE1hc2siIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQi IC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1l bnQgbmFtZT0iTGlzdE9mVWFkcERhdGFTZXRNZXNzYWdlQ29udGVudE1hc2siIHR5cGU9InRuczpM aXN0T2ZVYWRwRGF0YVNldE1lc3NhZ2VDb250ZW50TWFzayIgbmlsbGFibGU9InRydWUiPjwveHM6 ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iVWFkcERhdGFTZXRXcml0ZXJNZXNz YWdlRGF0YVR5cGUiPg0KICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0iZmFsc2UiPg0KICAg ICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0bnM6RGF0YVNldFdyaXRlck1lc3NhZ2VEYXRhVHlwZSI+ DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEYXRh U2V0TWVzc2FnZUNvbnRlbnRNYXNrIiB0eXBlPSJ0bnM6VWFkcERhdGFTZXRNZXNzYWdlQ29udGVu dE1hc2siIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDb25m aWd1cmVkU2l6ZSIgdHlwZT0ieHM6dW5zaWduZWRTaG9ydCIgbWluT2NjdXJzPSIwIiAvPg0KICAg ICAgICAgIDx4czplbGVtZW50IG5hbWU9Ik5ldHdvcmtNZXNzYWdlTnVtYmVyIiB0eXBlPSJ4czp1 bnNpZ25lZFNob3J0IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFt ZT0iRGF0YVNldE9mZnNldCIgdHlwZT0ieHM6dW5zaWduZWRTaG9ydCIgbWluT2NjdXJzPSIwIiAv Pg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0KICAgICAgPC94czpleHRlbnNpb24+DQogICAgPC94 czpjb21wbGV4Q29udGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFt ZT0iVWFkcERhdGFTZXRXcml0ZXJNZXNzYWdlRGF0YVR5cGUiIHR5cGU9InRuczpVYWRwRGF0YVNl dFdyaXRlck1lc3NhZ2VEYXRhVHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlz dE9mVWFkcERhdGFTZXRXcml0ZXJNZXNzYWdlRGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4N CiAgICAgIDx4czplbGVtZW50IG5hbWU9IlVhZHBEYXRhU2V0V3JpdGVyTWVzc2FnZURhdGFUeXBl IiB0eXBlPSJ0bnM6VWFkcERhdGFTZXRXcml0ZXJNZXNzYWdlRGF0YVR5cGUiIG1pbk9jY3Vycz0i MCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2Vx dWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZlVh ZHBEYXRhU2V0V3JpdGVyTWVzc2FnZURhdGFUeXBlIiB0eXBlPSJ0bnM6TGlzdE9mVWFkcERhdGFT ZXRXcml0ZXJNZXNzYWdlRGF0YVR5cGUiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoN CiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlVhZHBEYXRhU2V0UmVhZGVyTWVzc2FnZURhdGFUeXBl Ij4NCiAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAgICAgIDx4czpleHRl bnNpb24gYmFzZT0idG5zOkRhdGFTZXRSZWFkZXJNZXNzYWdlRGF0YVR5cGUiPg0KICAgICAgICA8 eHM6c2VxdWVuY2U+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iR3JvdXBWZXJzaW9uIiB0 eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICAgIDx4czplbGVt ZW50IG5hbWU9Ik5ldHdvcmtNZXNzYWdlTnVtYmVyIiB0eXBlPSJ4czp1bnNpZ25lZFNob3J0IiBt aW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVNldE9mZnNl dCIgdHlwZT0ieHM6dW5zaWduZWRTaG9ydCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICAgIDx4 czplbGVtZW50IG5hbWU9IkRhdGFTZXRDbGFzc0lkIiB0eXBlPSJ1YTpHdWlkIiBtaW5PY2N1cnM9 IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTmV0d29ya01lc3NhZ2VDb250ZW50 TWFzayIgdHlwZT0idG5zOlVhZHBOZXR3b3JrTWVzc2FnZUNvbnRlbnRNYXNrIiBtaW5PY2N1cnM9 IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVNldE1lc3NhZ2VDb250ZW50 TWFzayIgdHlwZT0idG5zOlVhZHBEYXRhU2V0TWVzc2FnZUNvbnRlbnRNYXNrIiBtaW5PY2N1cnM9 IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUHVibGlzaGluZ0ludGVydmFsIiB0 eXBlPSJ4czpkb3VibGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBu YW1lPSJSZWNlaXZlT2Zmc2V0IiB0eXBlPSJ4czpkb3VibGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAg ICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJQcm9jZXNzaW5nT2Zmc2V0IiB0eXBlPSJ4czpkb3Vi bGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6 ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+ DQogIDx4czplbGVtZW50IG5hbWU9IlVhZHBEYXRhU2V0UmVhZGVyTWVzc2FnZURhdGFUeXBlIiB0 eXBlPSJ0bnM6VWFkcERhdGFTZXRSZWFkZXJNZXNzYWdlRGF0YVR5cGUiIC8+DQoNCiAgPHhzOmNv bXBsZXhUeXBlIG5hbWU9Ikxpc3RPZlVhZHBEYXRhU2V0UmVhZGVyTWVzc2FnZURhdGFUeXBlIj4N CiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJVYWRwRGF0YVNldFJl YWRlck1lc3NhZ2VEYXRhVHlwZSIgdHlwZT0idG5zOlVhZHBEYXRhU2V0UmVhZGVyTWVzc2FnZURh dGFUeXBlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1 ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxl bWVudCBuYW1lPSJMaXN0T2ZVYWRwRGF0YVNldFJlYWRlck1lc3NhZ2VEYXRhVHlwZSIgdHlwZT0i dG5zOkxpc3RPZlVhZHBEYXRhU2V0UmVhZGVyTWVzc2FnZURhdGFUeXBlIiBuaWxsYWJsZT0idHJ1 ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpzaW1wbGVUeXBlICBuYW1lPSJKc29uTmV0d29ya01l c3NhZ2VDb250ZW50TWFzayI+DQogICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnVuc2lnbmVk SW50Ij4NCiAgICA8L3hzOnJlc3RyaWN0aW9uPg0KICA8L3hzOnNpbXBsZVR5cGU+DQogIDx4czpl bGVtZW50IG5hbWU9Ikpzb25OZXR3b3JrTWVzc2FnZUNvbnRlbnRNYXNrIiB0eXBlPSJ0bnM6SnNv bk5ldHdvcmtNZXNzYWdlQ29udGVudE1hc2siIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9 Ikxpc3RPZkpzb25OZXR3b3JrTWVzc2FnZUNvbnRlbnRNYXNrIj4NCiAgICA8eHM6c2VxdWVuY2U+ DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJKc29uTmV0d29ya01lc3NhZ2VDb250ZW50TWFzayIg dHlwZT0idG5zOkpzb25OZXR3b3JrTWVzc2FnZUNvbnRlbnRNYXNrIiBtaW5PY2N1cnM9IjAiIG1h eE9jY3Vycz0idW5ib3VuZGVkIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxl eFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkpzb25OZXR3b3JrTWVzc2FnZUNvbnRl bnRNYXNrIiB0eXBlPSJ0bnM6TGlzdE9mSnNvbk5ldHdvcmtNZXNzYWdlQ29udGVudE1hc2siIG5p bGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikpz b25Xcml0ZXJHcm91cE1lc3NhZ2VEYXRhVHlwZSI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1p eGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpXcml0ZXJHcm91cE1l c3NhZ2VEYXRhVHlwZSI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxl bWVudCBuYW1lPSJOZXR3b3JrTWVzc2FnZUNvbnRlbnRNYXNrIiB0eXBlPSJ0bnM6SnNvbk5ldHdv cmtNZXNzYWdlQ29udGVudE1hc2siIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgPC94czpzZXF1 ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQog IDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikpzb25Xcml0ZXJHcm91cE1l c3NhZ2VEYXRhVHlwZSIgdHlwZT0idG5zOkpzb25Xcml0ZXJHcm91cE1lc3NhZ2VEYXRhVHlwZSIg Lz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mSnNvbldyaXRlckdyb3VwTWVzc2Fn ZURhdGFUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJK c29uV3JpdGVyR3JvdXBNZXNzYWdlRGF0YVR5cGUiIHR5cGU9InRuczpKc29uV3JpdGVyR3JvdXBN ZXNzYWdlRGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxh YmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQog IDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkpzb25Xcml0ZXJHcm91cE1lc3NhZ2VEYXRhVHlwZSIg dHlwZT0idG5zOkxpc3RPZkpzb25Xcml0ZXJHcm91cE1lc3NhZ2VEYXRhVHlwZSIgbmlsbGFibGU9 InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6c2ltcGxlVHlwZSAgbmFtZT0iSnNvbkRhdGFT ZXRNZXNzYWdlQ29udGVudE1hc2siPg0KICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp1bnNp Z25lZEludCI+DQogICAgPC94czpyZXN0cmljdGlvbj4NCiAgPC94czpzaW1wbGVUeXBlPg0KICA8 eHM6ZWxlbWVudCBuYW1lPSJKc29uRGF0YVNldE1lc3NhZ2VDb250ZW50TWFzayIgdHlwZT0idG5z Okpzb25EYXRhU2V0TWVzc2FnZUNvbnRlbnRNYXNrIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBu YW1lPSJMaXN0T2ZKc29uRGF0YVNldE1lc3NhZ2VDb250ZW50TWFzayI+DQogICAgPHhzOnNlcXVl bmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iSnNvbkRhdGFTZXRNZXNzYWdlQ29udGVudE1h c2siIHR5cGU9InRuczpKc29uRGF0YVNldE1lc3NhZ2VDb250ZW50TWFzayIgbWluT2NjdXJzPSIw IiBtYXhPY2N1cnM9InVuYm91bmRlZCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNv bXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZKc29uRGF0YVNldE1lc3NhZ2VD b250ZW50TWFzayIgdHlwZT0idG5zOkxpc3RPZkpzb25EYXRhU2V0TWVzc2FnZUNvbnRlbnRNYXNr IiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1l PSJKc29uRGF0YVNldFdyaXRlck1lc3NhZ2VEYXRhVHlwZSI+DQogICAgPHhzOmNvbXBsZXhDb250 ZW50IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpEYXRhU2V0 V3JpdGVyTWVzc2FnZURhdGFUeXBlIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAg IDx4czplbGVtZW50IG5hbWU9IkRhdGFTZXRNZXNzYWdlQ29udGVudE1hc2siIHR5cGU9InRuczpK c29uRGF0YVNldE1lc3NhZ2VDb250ZW50TWFzayIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICA8 L3hzOnNlcXVlbmNlPg0KICAgICAgPC94czpleHRlbnNpb24+DQogICAgPC94czpjb21wbGV4Q29u dGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iSnNvbkRhdGFT ZXRXcml0ZXJNZXNzYWdlRGF0YVR5cGUiIHR5cGU9InRuczpKc29uRGF0YVNldFdyaXRlck1lc3Nh Z2VEYXRhVHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mSnNvbkRhdGFT ZXRXcml0ZXJNZXNzYWdlRGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czpl bGVtZW50IG5hbWU9Ikpzb25EYXRhU2V0V3JpdGVyTWVzc2FnZURhdGFUeXBlIiB0eXBlPSJ0bnM6 SnNvbkRhdGFTZXRXcml0ZXJNZXNzYWdlRGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJz PSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwv eHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkpzb25EYXRhU2V0V3Jp dGVyTWVzc2FnZURhdGFUeXBlIiB0eXBlPSJ0bnM6TGlzdE9mSnNvbkRhdGFTZXRXcml0ZXJNZXNz YWdlRGF0YVR5cGUiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBs ZXhUeXBlIG5hbWU9Ikpzb25EYXRhU2V0UmVhZGVyTWVzc2FnZURhdGFUeXBlIj4NCiAgICA8eHM6 Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAgICAgIDx4czpleHRlbnNpb24gYmFzZT0i dG5zOkRhdGFTZXRSZWFkZXJNZXNzYWdlRGF0YVR5cGUiPg0KICAgICAgICA8eHM6c2VxdWVuY2U+ DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTmV0d29ya01lc3NhZ2VDb250ZW50TWFzayIg dHlwZT0idG5zOkpzb25OZXR3b3JrTWVzc2FnZUNvbnRlbnRNYXNrIiBtaW5PY2N1cnM9IjAiIC8+ DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVNldE1lc3NhZ2VDb250ZW50TWFzayIg dHlwZT0idG5zOkpzb25EYXRhU2V0TWVzc2FnZUNvbnRlbnRNYXNrIiBtaW5PY2N1cnM9IjAiIC8+ DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hz OmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1l PSJKc29uRGF0YVNldFJlYWRlck1lc3NhZ2VEYXRhVHlwZSIgdHlwZT0idG5zOkpzb25EYXRhU2V0 UmVhZGVyTWVzc2FnZURhdGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0 T2ZKc29uRGF0YVNldFJlYWRlck1lc3NhZ2VEYXRhVHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0K ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iSnNvbkRhdGFTZXRSZWFkZXJNZXNzYWdlRGF0YVR5cGUi IHR5cGU9InRuczpKc29uRGF0YVNldFJlYWRlck1lc3NhZ2VEYXRhVHlwZSIgbWluT2NjdXJzPSIw IiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1 ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mSnNv bkRhdGFTZXRSZWFkZXJNZXNzYWdlRGF0YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZKc29uRGF0YVNl dFJlYWRlck1lc3NhZ2VEYXRhVHlwZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0K ICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iRGF0YWdyYW1Db25uZWN0aW9uVHJhbnNwb3J0RGF0YVR5 cGUiPg0KICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4 dGVuc2lvbiBiYXNlPSJ0bnM6Q29ubmVjdGlvblRyYW5zcG9ydERhdGFUeXBlIj4NCiAgICAgICAg PHhzOnNlcXVlbmNlPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IkRpc2NvdmVyeUFkZHJl c3MiIHR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1 ZSIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAg IDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50 IG5hbWU9IkRhdGFncmFtQ29ubmVjdGlvblRyYW5zcG9ydERhdGFUeXBlIiB0eXBlPSJ0bnM6RGF0 YWdyYW1Db25uZWN0aW9uVHJhbnNwb3J0RGF0YVR5cGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBl IG5hbWU9Ikxpc3RPZkRhdGFncmFtQ29ubmVjdGlvblRyYW5zcG9ydERhdGFUeXBlIj4NCiAgICA8 eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEYXRhZ3JhbUNvbm5lY3Rpb25U cmFuc3BvcnREYXRhVHlwZSIgdHlwZT0idG5zOkRhdGFncmFtQ29ubmVjdGlvblRyYW5zcG9ydERh dGFUeXBlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1 ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxl bWVudCBuYW1lPSJMaXN0T2ZEYXRhZ3JhbUNvbm5lY3Rpb25UcmFuc3BvcnREYXRhVHlwZSIgdHlw ZT0idG5zOkxpc3RPZkRhdGFncmFtQ29ubmVjdGlvblRyYW5zcG9ydERhdGFUeXBlIiBuaWxsYWJs ZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJEYXRhZ3Jh bVdyaXRlckdyb3VwVHJhbnNwb3J0RGF0YVR5cGUiPg0KICAgIDx4czpjb21wbGV4Q29udGVudCBt aXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0bnM6V3JpdGVyR3JvdXBU cmFuc3BvcnREYXRhVHlwZSI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6 ZWxlbWVudCBuYW1lPSJNZXNzYWdlUmVwZWF0Q291bnQiIHR5cGU9InhzOnVuc2lnbmVkQnl0ZSIg bWluT2NjdXJzPSIwIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9Ik1lc3NhZ2VSZXBl YXREZWxheSIgdHlwZT0ieHM6ZG91YmxlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgIDwveHM6 c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hzOmNvbXBsZXhDb250ZW50 Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJEYXRhZ3JhbVdyaXRl ckdyb3VwVHJhbnNwb3J0RGF0YVR5cGUiIHR5cGU9InRuczpEYXRhZ3JhbVdyaXRlckdyb3VwVHJh bnNwb3J0RGF0YVR5cGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkRhdGFn cmFtV3JpdGVyR3JvdXBUcmFuc3BvcnREYXRhVHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAg ICAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YWdyYW1Xcml0ZXJHcm91cFRyYW5zcG9ydERhdGFUeXBl IiB0eXBlPSJ0bnM6RGF0YWdyYW1Xcml0ZXJHcm91cFRyYW5zcG9ydERhdGFUeXBlIiBtaW5PY2N1 cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hz OnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0 T2ZEYXRhZ3JhbVdyaXRlckdyb3VwVHJhbnNwb3J0RGF0YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZE YXRhZ3JhbVdyaXRlckdyb3VwVHJhbnNwb3J0RGF0YVR5cGUiIG5pbGxhYmxlPSJ0cnVlIj48L3hz OmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkJyb2tlckNvbm5lY3Rpb25UcmFu c3BvcnREYXRhVHlwZSI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+DQog ICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpDb25uZWN0aW9uVHJhbnNwb3J0RGF0YVR5cGUi Pg0KICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVz b3VyY2VVcmkiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIg Lz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBdXRoZW50aWNhdGlvblByb2ZpbGVVcmki IHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAg ICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxl eENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkJyb2tl ckNvbm5lY3Rpb25UcmFuc3BvcnREYXRhVHlwZSIgdHlwZT0idG5zOkJyb2tlckNvbm5lY3Rpb25U cmFuc3BvcnREYXRhVHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mQnJv a2VyQ29ubmVjdGlvblRyYW5zcG9ydERhdGFUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAg ICA8eHM6ZWxlbWVudCBuYW1lPSJCcm9rZXJDb25uZWN0aW9uVHJhbnNwb3J0RGF0YVR5cGUiIHR5 cGU9InRuczpCcm9rZXJDb25uZWN0aW9uVHJhbnNwb3J0RGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIg bWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVu Y2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkJyb2tl ckNvbm5lY3Rpb25UcmFuc3BvcnREYXRhVHlwZSIgdHlwZT0idG5zOkxpc3RPZkJyb2tlckNvbm5l Y3Rpb25UcmFuc3BvcnREYXRhVHlwZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0K ICA8eHM6c2ltcGxlVHlwZSAgbmFtZT0iQnJva2VyVHJhbnNwb3J0UXVhbGl0eU9mU2VydmljZSI+ DQogICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnN0cmluZyI+DQogICAgICA8eHM6ZW51bWVy YXRpb24gdmFsdWU9Ik5vdFNwZWNpZmllZF8wIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZh bHVlPSJCZXN0RWZmb3J0XzEiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkF0TGVh c3RPbmNlXzIiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkF0TW9zdE9uY2VfMyIg Lz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iRXhhY3RseU9uY2VfNCIgLz4NCiAgICA8 L3hzOnJlc3RyaWN0aW9uPg0KICA8L3hzOnNpbXBsZVR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9 IkJyb2tlclRyYW5zcG9ydFF1YWxpdHlPZlNlcnZpY2UiIHR5cGU9InRuczpCcm9rZXJUcmFuc3Bv cnRRdWFsaXR5T2ZTZXJ2aWNlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZC cm9rZXJUcmFuc3BvcnRRdWFsaXR5T2ZTZXJ2aWNlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAg ICA8eHM6ZWxlbWVudCBuYW1lPSJCcm9rZXJUcmFuc3BvcnRRdWFsaXR5T2ZTZXJ2aWNlIiB0eXBl PSJ0bnM6QnJva2VyVHJhbnNwb3J0UXVhbGl0eU9mU2VydmljZSIgbWluT2NjdXJzPSIwIiBtYXhP Y2N1cnM9InVuYm91bmRlZCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhU eXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZCcm9rZXJUcmFuc3BvcnRRdWFsaXR5T2ZT ZXJ2aWNlIiB0eXBlPSJ0bnM6TGlzdE9mQnJva2VyVHJhbnNwb3J0UXVhbGl0eU9mU2VydmljZSIg bmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0i QnJva2VyV3JpdGVyR3JvdXBUcmFuc3BvcnREYXRhVHlwZSI+DQogICAgPHhzOmNvbXBsZXhDb250 ZW50IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpXcml0ZXJH cm91cFRyYW5zcG9ydERhdGFUeXBlIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAg IDx4czplbGVtZW50IG5hbWU9IlF1ZXVlTmFtZSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9 IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlc291 cmNlVXJpIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+ DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQXV0aGVudGljYXRpb25Qcm9maWxlVXJpIiB0 eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAg ICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVxdWVzdGVkRGVsaXZlcnlHdWFyYW50ZWUiIHR5cGU9InRu czpCcm9rZXJUcmFuc3BvcnRRdWFsaXR5T2ZTZXJ2aWNlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAg ICAgIDwveHM6c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hzOmNvbXBs ZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJCcm9r ZXJXcml0ZXJHcm91cFRyYW5zcG9ydERhdGFUeXBlIiB0eXBlPSJ0bnM6QnJva2VyV3JpdGVyR3Jv dXBUcmFuc3BvcnREYXRhVHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9m QnJva2VyV3JpdGVyR3JvdXBUcmFuc3BvcnREYXRhVHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0K ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQnJva2VyV3JpdGVyR3JvdXBUcmFuc3BvcnREYXRhVHlw ZSIgdHlwZT0idG5zOkJyb2tlcldyaXRlckdyb3VwVHJhbnNwb3J0RGF0YVR5cGUiIG1pbk9jY3Vy cz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6 c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RP ZkJyb2tlcldyaXRlckdyb3VwVHJhbnNwb3J0RGF0YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZCcm9r ZXJXcml0ZXJHcm91cFRyYW5zcG9ydERhdGFUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVt ZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJCcm9rZXJEYXRhU2V0V3JpdGVyVHJhbnNw b3J0RGF0YVR5cGUiPg0KICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0iZmFsc2UiPg0KICAg ICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0bnM6RGF0YVNldFdyaXRlclRyYW5zcG9ydERhdGFUeXBl Ij4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IlF1 ZXVlTmFtZSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAv Pg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlc291cmNlVXJpIiB0eXBlPSJ4czpzdHJp bmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAgICAgPHhzOmVsZW1l bnQgbmFtZT0iQXV0aGVudGljYXRpb25Qcm9maWxlVXJpIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9j Y3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i UmVxdWVzdGVkRGVsaXZlcnlHdWFyYW50ZWUiIHR5cGU9InRuczpCcm9rZXJUcmFuc3BvcnRRdWFs aXR5T2ZTZXJ2aWNlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFt ZT0iTWV0YURhdGFRdWV1ZU5hbWUiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxs YWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJNZXRhRGF0YVVwZGF0 ZVRpbWUiIHR5cGU9InhzOmRvdWJsZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICA8L3hzOnNl cXVlbmNlPg0KICAgICAgPC94czpleHRlbnNpb24+DQogICAgPC94czpjb21wbGV4Q29udGVudD4N CiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iQnJva2VyRGF0YVNldFdy aXRlclRyYW5zcG9ydERhdGFUeXBlIiB0eXBlPSJ0bnM6QnJva2VyRGF0YVNldFdyaXRlclRyYW5z cG9ydERhdGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZCcm9rZXJE YXRhU2V0V3JpdGVyVHJhbnNwb3J0RGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAg IDx4czplbGVtZW50IG5hbWU9IkJyb2tlckRhdGFTZXRXcml0ZXJUcmFuc3BvcnREYXRhVHlwZSIg dHlwZT0idG5zOkJyb2tlckRhdGFTZXRXcml0ZXJUcmFuc3BvcnREYXRhVHlwZSIgbWluT2NjdXJz PSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpz ZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9m QnJva2VyRGF0YVNldFdyaXRlclRyYW5zcG9ydERhdGFUeXBlIiB0eXBlPSJ0bnM6TGlzdE9mQnJv a2VyRGF0YVNldFdyaXRlclRyYW5zcG9ydERhdGFUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czpl bGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJCcm9rZXJEYXRhU2V0UmVhZGVyVHJh bnNwb3J0RGF0YVR5cGUiPg0KICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0iZmFsc2UiPg0K ICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0bnM6RGF0YVNldFJlYWRlclRyYW5zcG9ydERhdGFU eXBlIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9 IlF1ZXVlTmFtZSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVl IiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlc291cmNlVXJpIiB0eXBlPSJ4czpz dHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAgICAgPHhzOmVs ZW1lbnQgbmFtZT0iQXV0aGVudGljYXRpb25Qcm9maWxlVXJpIiB0eXBlPSJ4czpzdHJpbmciIG1p bk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFt ZT0iUmVxdWVzdGVkRGVsaXZlcnlHdWFyYW50ZWUiIHR5cGU9InRuczpCcm9rZXJUcmFuc3BvcnRR dWFsaXR5T2ZTZXJ2aWNlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQg bmFtZT0iTWV0YURhdGFRdWV1ZU5hbWUiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBu aWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0 ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQog IDx4czplbGVtZW50IG5hbWU9IkJyb2tlckRhdGFTZXRSZWFkZXJUcmFuc3BvcnREYXRhVHlwZSIg dHlwZT0idG5zOkJyb2tlckRhdGFTZXRSZWFkZXJUcmFuc3BvcnREYXRhVHlwZSIgLz4NCg0KICA8 eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mQnJva2VyRGF0YVNldFJlYWRlclRyYW5zcG9ydERh dGFUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJCcm9r ZXJEYXRhU2V0UmVhZGVyVHJhbnNwb3J0RGF0YVR5cGUiIHR5cGU9InRuczpCcm9rZXJEYXRhU2V0 UmVhZGVyVHJhbnNwb3J0RGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5k ZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxl eFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkJyb2tlckRhdGFTZXRSZWFkZXJUcmFu c3BvcnREYXRhVHlwZSIgdHlwZT0idG5zOkxpc3RPZkJyb2tlckRhdGFTZXRSZWFkZXJUcmFuc3Bv cnREYXRhVHlwZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6c2ltcGxl VHlwZSAgbmFtZT0iRGlhZ25vc3RpY3NMZXZlbCI+DQogICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9 InhzOnN0cmluZyI+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkJhc2ljXzAiIC8+DQog ICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkFkdmFuY2VkXzEiIC8+DQogICAgICA8eHM6ZW51 bWVyYXRpb24gdmFsdWU9IkluZm9fMiIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0i TG9nXzMiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkRlYnVnXzQiIC8+DQogICAg PC94czpyZXN0cmljdGlvbj4NCiAgPC94czpzaW1wbGVUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1l PSJEaWFnbm9zdGljc0xldmVsIiB0eXBlPSJ0bnM6RGlhZ25vc3RpY3NMZXZlbCIgLz4NCg0KICA8 eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mRGlhZ25vc3RpY3NMZXZlbCI+DQogICAgPHhzOnNl cXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGlhZ25vc3RpY3NMZXZlbCIgdHlwZT0i dG5zOkRpYWdub3N0aWNzTGV2ZWwiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQi IC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1l bnQgbmFtZT0iTGlzdE9mRGlhZ25vc3RpY3NMZXZlbCIgdHlwZT0idG5zOkxpc3RPZkRpYWdub3N0 aWNzTGV2ZWwiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOnNpbXBsZVR5 cGUgIG5hbWU9IlB1YlN1YkRpYWdub3N0aWNzQ291bnRlckNsYXNzaWZpY2F0aW9uIj4NCiAgICA8 eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIj4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2 YWx1ZT0iSW5mb3JtYXRpb25fMCIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iRXJy b3JfMSIgLz4NCiAgICA8L3hzOnJlc3RyaWN0aW9uPg0KICA8L3hzOnNpbXBsZVR5cGU+DQogIDx4 czplbGVtZW50IG5hbWU9IlB1YlN1YkRpYWdub3N0aWNzQ291bnRlckNsYXNzaWZpY2F0aW9uIiB0 eXBlPSJ0bnM6UHViU3ViRGlhZ25vc3RpY3NDb3VudGVyQ2xhc3NpZmljYXRpb24iIC8+DQoNCiAg PHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZlB1YlN1YkRpYWdub3N0aWNzQ291bnRlckNsYXNz aWZpY2F0aW9uIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJQ dWJTdWJEaWFnbm9zdGljc0NvdW50ZXJDbGFzc2lmaWNhdGlvbiIgdHlwZT0idG5zOlB1YlN1YkRp YWdub3N0aWNzQ291bnRlckNsYXNzaWZpY2F0aW9uIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0i dW5ib3VuZGVkIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQog IDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZlB1YlN1YkRpYWdub3N0aWNzQ291bnRlckNsYXNzaWZp Y2F0aW9uIiB0eXBlPSJ0bnM6TGlzdE9mUHViU3ViRGlhZ25vc3RpY3NDb3VudGVyQ2xhc3NpZmlj YXRpb24iIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBl IG5hbWU9IkFsaWFzTmFtZURhdGFUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6 ZWxlbWVudCBuYW1lPSJBbGlhc05hbWUiIHR5cGU9InVhOlF1YWxpZmllZE5hbWUiIG1pbk9jY3Vy cz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZWZlcmVu Y2VkTm9kZXMiIHR5cGU9InVhOkxpc3RPZkV4cGFuZGVkTm9kZUlkIiBtaW5PY2N1cnM9IjAiIG5p bGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+ DQogIDx4czplbGVtZW50IG5hbWU9IkFsaWFzTmFtZURhdGFUeXBlIiB0eXBlPSJ0bnM6QWxpYXNO YW1lRGF0YVR5cGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkFsaWFzTmFt ZURhdGFUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJB bGlhc05hbWVEYXRhVHlwZSIgdHlwZT0idG5zOkFsaWFzTmFtZURhdGFUeXBlIiBtaW5PY2N1cnM9 IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNl cXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZB bGlhc05hbWVEYXRhVHlwZSIgdHlwZT0idG5zOkxpc3RPZkFsaWFzTmFtZURhdGFUeXBlIiBuaWxs YWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpzaW1wbGVUeXBlICBuYW1lPSJEdXBs ZXgiPg0KICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpzdHJpbmciPg0KICAgICAgPHhzOmVu dW1lcmF0aW9uIHZhbHVlPSJGdWxsXzAiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9 IkhhbGZfMSIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iVW5rbm93bl8yIiAvPg0K ICAgIDwveHM6cmVzdHJpY3Rpb24+DQogIDwveHM6c2ltcGxlVHlwZT4NCiAgPHhzOmVsZW1lbnQg bmFtZT0iRHVwbGV4IiB0eXBlPSJ0bnM6RHVwbGV4IiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBu YW1lPSJMaXN0T2ZEdXBsZXgiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50 IG5hbWU9IkR1cGxleCIgdHlwZT0idG5zOkR1cGxleCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9 InVuYm91bmRlZCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0K ICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZEdXBsZXgiIHR5cGU9InRuczpMaXN0T2ZEdXBsZXgi IG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOnNpbXBsZVR5cGUgIG5hbWU9 IkludGVyZmFjZUFkbWluU3RhdHVzIj4NCiAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3Ry aW5nIj4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iVXBfMCIgLz4NCiAgICAgIDx4czpl bnVtZXJhdGlvbiB2YWx1ZT0iRG93bl8xIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVl PSJUZXN0aW5nXzIiIC8+DQogICAgPC94czpyZXN0cmljdGlvbj4NCiAgPC94czpzaW1wbGVUeXBl Pg0KICA8eHM6ZWxlbWVudCBuYW1lPSJJbnRlcmZhY2VBZG1pblN0YXR1cyIgdHlwZT0idG5zOklu dGVyZmFjZUFkbWluU3RhdHVzIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZJ bnRlcmZhY2VBZG1pblN0YXR1cyI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1l bnQgbmFtZT0iSW50ZXJmYWNlQWRtaW5TdGF0dXMiIHR5cGU9InRuczpJbnRlcmZhY2VBZG1pblN0 YXR1cyIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgLz4NCiAgICA8L3hzOnNl cXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZJ bnRlcmZhY2VBZG1pblN0YXR1cyIgdHlwZT0idG5zOkxpc3RPZkludGVyZmFjZUFkbWluU3RhdHVz IiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpzaW1wbGVUeXBlICBuYW1l PSJJbnRlcmZhY2VPcGVyU3RhdHVzIj4NCiAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3Ry aW5nIj4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iVXBfMCIgLz4NCiAgICAgIDx4czpl bnVtZXJhdGlvbiB2YWx1ZT0iRG93bl8xIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVl PSJUZXN0aW5nXzIiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlVua25vd25fMyIg Lz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iRG9ybWFudF80IiAvPg0KICAgICAgPHhz OmVudW1lcmF0aW9uIHZhbHVlPSJOb3RQcmVzZW50XzUiIC8+DQogICAgICA8eHM6ZW51bWVyYXRp b24gdmFsdWU9Ikxvd2VyTGF5ZXJEb3duXzYiIC8+DQogICAgPC94czpyZXN0cmljdGlvbj4NCiAg PC94czpzaW1wbGVUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJJbnRlcmZhY2VPcGVyU3RhdHVz IiB0eXBlPSJ0bnM6SW50ZXJmYWNlT3BlclN0YXR1cyIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUg bmFtZT0iTGlzdE9mSW50ZXJmYWNlT3BlclN0YXR1cyI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAg ICAgPHhzOmVsZW1lbnQgbmFtZT0iSW50ZXJmYWNlT3BlclN0YXR1cyIgdHlwZT0idG5zOkludGVy ZmFjZU9wZXJTdGF0dXMiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIC8+DQog ICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFt ZT0iTGlzdE9mSW50ZXJmYWNlT3BlclN0YXR1cyIgdHlwZT0idG5zOkxpc3RPZkludGVyZmFjZU9w ZXJTdGF0dXMiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOnNpbXBsZVR5 cGUgIG5hbWU9Ik5lZ290aWF0aW9uU3RhdHVzIj4NCiAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0i eHM6c3RyaW5nIj4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iSW5Qcm9ncmVzc18wIiAv Pg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJDb21wbGV0ZV8xIiAvPg0KICAgICAgPHhz OmVudW1lcmF0aW9uIHZhbHVlPSJGYWlsZWRfMiIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2 YWx1ZT0iVW5rbm93bl8zIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJOb05lZ290 aWF0aW9uXzQiIC8+DQogICAgPC94czpyZXN0cmljdGlvbj4NCiAgPC94czpzaW1wbGVUeXBlPg0K ICA8eHM6ZWxlbWVudCBuYW1lPSJOZWdvdGlhdGlvblN0YXR1cyIgdHlwZT0idG5zOk5lZ290aWF0 aW9uU3RhdHVzIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZOZWdvdGlhdGlv blN0YXR1cyI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTmVn b3RpYXRpb25TdGF0dXMiIHR5cGU9InRuczpOZWdvdGlhdGlvblN0YXR1cyIgbWluT2NjdXJzPSIw IiBtYXhPY2N1cnM9InVuYm91bmRlZCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNv bXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZOZWdvdGlhdGlvblN0YXR1cyIg dHlwZT0idG5zOkxpc3RPZk5lZ290aWF0aW9uU3RhdHVzIiBuaWxsYWJsZT0idHJ1ZSI+PC94czpl bGVtZW50Pg0KDQogIDx4czpzaW1wbGVUeXBlICBuYW1lPSJUc25GYWlsdXJlQ29kZSI+DQogICAg PHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnN0cmluZyI+DQogICAgICA8eHM6ZW51bWVyYXRpb24g dmFsdWU9Ik5vRmFpbHVyZV8wIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJJbnN1 ZmZpY2llbnRCYW5kd2lkdGhfMSIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iSW5z dWZmaWNpZW50UmVzb3VyY2VzXzIiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Iklu c3VmZmljaWVudFRyYWZmaWNDbGFzc0JhbmR3aWR0aF8zIiAvPg0KICAgICAgPHhzOmVudW1lcmF0 aW9uIHZhbHVlPSJTdHJlYW1JZEluVXNlXzQiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFs dWU9IlN0cmVhbURlc3RpbmF0aW9uQWRkcmVzc0luVXNlXzUiIC8+DQogICAgICA8eHM6ZW51bWVy YXRpb24gdmFsdWU9IlN0cmVhbVByZWVtcHRlZEJ5SGlnaGVyUmFua182IiAvPg0KICAgICAgPHhz OmVudW1lcmF0aW9uIHZhbHVlPSJMYXRlbmN5SGFzQ2hhbmdlZF83IiAvPg0KICAgICAgPHhzOmVu dW1lcmF0aW9uIHZhbHVlPSJFZ3Jlc3NQb3J0Tm90QXZiQ2FwYWJsZV84IiAvPg0KICAgICAgPHhz OmVudW1lcmF0aW9uIHZhbHVlPSJVc2VEaWZmZXJlbnREZXN0aW5hdGlvbkFkZHJlc3NfOSIgLz4N CiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iT3V0T2ZNc3JwUmVzb3VyY2VzXzEwIiAvPg0K ICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJPdXRPZk1tcnBSZXNvdXJjZXNfMTEiIC8+DQog ICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkNhbm5vdFN0b3JlRGVzdGluYXRpb25BZGRyZXNz XzEyIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJQcmlvcml0eUlzTm90QW5TcmND bGFzc18xMyIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iTWF4RnJhbWVTaXplVG9v TGFyZ2VfMTQiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Ik1heEZhbkluUG9ydHNM aW1pdFJlYWNoZWRfMTUiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkZpcnN0VmFs dWVDaGFuZ2VkRm9yU3RyZWFtSWRfMTYiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9 IlZsYW5CbG9ja2VkT25FZ3Jlc3NfMTciIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9 IlZsYW5UYWdnaW5nRGlzYWJsZWRPbkVncmVzc18xOCIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlv biB2YWx1ZT0iU3JDbGFzc1ByaW9yaXR5TWlzbWF0Y2hfMTkiIC8+DQogICAgICA8eHM6ZW51bWVy YXRpb24gdmFsdWU9IkZlYXR1cmVOb3RQcm9wYWdhdGVkXzIwIiAvPg0KICAgICAgPHhzOmVudW1l cmF0aW9uIHZhbHVlPSJNYXhMYXRlbmN5RXhjZWVkZWRfMjEiIC8+DQogICAgICA8eHM6ZW51bWVy YXRpb24gdmFsdWU9IkJyaWRnZURvZXNOb3RQcm92aWRlTmV0d29ya0lkXzIyIiAvPg0KICAgICAg PHhzOmVudW1lcmF0aW9uIHZhbHVlPSJTdHJlYW1UcmFuc2Zvcm1Ob3RTdXBwb3J0ZWRfMjMiIC8+ DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlN0cmVhbUlkVHlwZU5vdFN1cHBvcnRlZF8y NCIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iRmVhdHVyZU5vdFN1cHBvcnRlZF8y NSIgLz4NCiAgICA8L3hzOnJlc3RyaWN0aW9uPg0KICA8L3hzOnNpbXBsZVR5cGU+DQogIDx4czpl bGVtZW50IG5hbWU9IlRzbkZhaWx1cmVDb2RlIiB0eXBlPSJ0bnM6VHNuRmFpbHVyZUNvZGUiIC8+ DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZlRzbkZhaWx1cmVDb2RlIj4NCiAgICA8 eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJUc25GYWlsdXJlQ29kZSIgdHlw ZT0idG5zOlRzbkZhaWx1cmVDb2RlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVk IiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVt ZW50IG5hbWU9Ikxpc3RPZlRzbkZhaWx1cmVDb2RlIiB0eXBlPSJ0bnM6TGlzdE9mVHNuRmFpbHVy ZUNvZGUiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOnNpbXBsZVR5cGUg IG5hbWU9IlRzblN0cmVhbVN0YXRlIj4NCiAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3Ry aW5nIj4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iRGlzYWJsZWRfMCIgLz4NCiAgICAg IDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iQ29uZmlndXJpbmdfMSIgLz4NCiAgICAgIDx4czplbnVt ZXJhdGlvbiB2YWx1ZT0iUmVhZHlfMiIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0i T3BlcmF0aW9uYWxfMyIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iRXJyb3JfNCIg Lz4NCiAgICA8L3hzOnJlc3RyaWN0aW9uPg0KICA8L3hzOnNpbXBsZVR5cGU+DQogIDx4czplbGVt ZW50IG5hbWU9IlRzblN0cmVhbVN0YXRlIiB0eXBlPSJ0bnM6VHNuU3RyZWFtU3RhdGUiIC8+DQoN CiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZlRzblN0cmVhbVN0YXRlIj4NCiAgICA8eHM6 c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJUc25TdHJlYW1TdGF0ZSIgdHlwZT0i dG5zOlRzblN0cmVhbVN0YXRlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiAv Pg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50 IG5hbWU9Ikxpc3RPZlRzblN0cmVhbVN0YXRlIiB0eXBlPSJ0bnM6TGlzdE9mVHNuU3RyZWFtU3Rh dGUiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOnNpbXBsZVR5cGUgIG5h bWU9IlRzblRhbGtlclN0YXR1cyI+DQogICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnN0cmlu ZyI+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Ik5vbmVfMCIgLz4NCiAgICAgIDx4czpl bnVtZXJhdGlvbiB2YWx1ZT0iUmVhZHlfMSIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1 ZT0iRmFpbGVkXzIiIC8+DQogICAgPC94czpyZXN0cmljdGlvbj4NCiAgPC94czpzaW1wbGVUeXBl Pg0KICA8eHM6ZWxlbWVudCBuYW1lPSJUc25UYWxrZXJTdGF0dXMiIHR5cGU9InRuczpUc25UYWxr ZXJTdGF0dXMiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZlRzblRhbGtlclN0 YXR1cyI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVHNuVGFs a2VyU3RhdHVzIiB0eXBlPSJ0bnM6VHNuVGFsa2VyU3RhdHVzIiBtaW5PY2N1cnM9IjAiIG1heE9j Y3Vycz0idW5ib3VuZGVkIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5 cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZlRzblRhbGtlclN0YXR1cyIgdHlwZT0idG5z Okxpc3RPZlRzblRhbGtlclN0YXR1cyIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0K ICA8eHM6c2ltcGxlVHlwZSAgbmFtZT0iVHNuTGlzdGVuZXJTdGF0dXMiPg0KICAgIDx4czpyZXN0 cmljdGlvbiBiYXNlPSJ4czpzdHJpbmciPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJO b25lXzAiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlJlYWR5XzEiIC8+DQogICAg ICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlBhcnRpYWxGYWlsZWRfMiIgLz4NCiAgICAgIDx4czpl bnVtZXJhdGlvbiB2YWx1ZT0iRmFpbGVkXzMiIC8+DQogICAgPC94czpyZXN0cmljdGlvbj4NCiAg PC94czpzaW1wbGVUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJUc25MaXN0ZW5lclN0YXR1cyIg dHlwZT0idG5zOlRzbkxpc3RlbmVyU3RhdHVzIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1l PSJMaXN0T2ZUc25MaXN0ZW5lclN0YXR1cyI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhz OmVsZW1lbnQgbmFtZT0iVHNuTGlzdGVuZXJTdGF0dXMiIHR5cGU9InRuczpUc25MaXN0ZW5lclN0 YXR1cyIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgLz4NCiAgICA8L3hzOnNl cXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZU c25MaXN0ZW5lclN0YXR1cyIgdHlwZT0idG5zOkxpc3RPZlRzbkxpc3RlbmVyU3RhdHVzIiBuaWxs YWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJVbnNp Z25lZFJhdGlvbmFsTnVtYmVyIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVu dCBuYW1lPSJOdW1lcmF0b3IiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+ DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEZW5vbWluYXRvciIgdHlwZT0ieHM6dW5zaWduZWRJ bnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhU eXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJVbnNpZ25lZFJhdGlvbmFsTnVtYmVyIiB0eXBlPSJ0 bnM6VW5zaWduZWRSYXRpb25hbE51bWJlciIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0i TGlzdE9mVW5zaWduZWRSYXRpb25hbE51bWJlciI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAg PHhzOmVsZW1lbnQgbmFtZT0iVW5zaWduZWRSYXRpb25hbE51bWJlciIgdHlwZT0idG5zOlVuc2ln bmVkUmF0aW9uYWxOdW1iZXIiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5p bGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+ DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZlVuc2lnbmVkUmF0aW9uYWxOdW1iZXIiIHR5cGU9 InRuczpMaXN0T2ZVbnNpZ25lZFJhdGlvbmFsTnVtYmVyIiBuaWxsYWJsZT0idHJ1ZSI+PC94czpl bGVtZW50Pg0KDQogIDx4czpzaW1wbGVUeXBlICBuYW1lPSJJZFR5cGUiPg0KICAgIDx4czpyZXN0 cmljdGlvbiBiYXNlPSJ4czpzdHJpbmciPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJO dW1lcmljXzAiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlN0cmluZ18xIiAvPg0K ICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJHdWlkXzIiIC8+DQogICAgICA8eHM6ZW51bWVy YXRpb24gdmFsdWU9Ik9wYXF1ZV8zIiAvPg0KICAgIDwveHM6cmVzdHJpY3Rpb24+DQogIDwveHM6 c2ltcGxlVHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iSWRUeXBlIiB0eXBlPSJ0bnM6SWRUeXBl IiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZJZFR5cGUiPg0KICAgIDx4czpz ZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IklkVHlwZSIgdHlwZT0idG5zOklkVHlw ZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgLz4NCiAgICA8L3hzOnNlcXVl bmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZJZFR5 cGUiIHR5cGU9InRuczpMaXN0T2ZJZFR5cGUiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+ DQoNCiAgPHhzOnNpbXBsZVR5cGUgIG5hbWU9Ik5vZGVDbGFzcyI+DQogICAgPHhzOnJlc3RyaWN0 aW9uIGJhc2U9InhzOnN0cmluZyI+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlVuc3Bl Y2lmaWVkXzAiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Ik9iamVjdF8xIiAvPg0K ICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJWYXJpYWJsZV8yIiAvPg0KICAgICAgPHhzOmVu dW1lcmF0aW9uIHZhbHVlPSJNZXRob2RfNCIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1 ZT0iT2JqZWN0VHlwZV84IiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJWYXJpYWJs ZVR5cGVfMTYiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlJlZmVyZW5jZVR5cGVf MzIiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkRhdGFUeXBlXzY0IiAvPg0KICAg ICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJWaWV3XzEyOCIgLz4NCiAgICA8L3hzOnJlc3RyaWN0 aW9uPg0KICA8L3hzOnNpbXBsZVR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ik5vZGVDbGFzcyIg dHlwZT0idG5zOk5vZGVDbGFzcyIgLz4NCg0KICA8eHM6c2ltcGxlVHlwZSAgbmFtZT0iUGVybWlz c2lvblR5cGUiPg0KICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp1bnNpZ25lZEludCI+DQog ICAgPC94czpyZXN0cmljdGlvbj4NCiAgPC94czpzaW1wbGVUeXBlPg0KICA8eHM6ZWxlbWVudCBu YW1lPSJQZXJtaXNzaW9uVHlwZSIgdHlwZT0idG5zOlBlcm1pc3Npb25UeXBlIiAvPg0KDQogIDx4 czpzaW1wbGVUeXBlICBuYW1lPSJBY2Nlc3NMZXZlbFR5cGUiPg0KICAgIDx4czpyZXN0cmljdGlv biBiYXNlPSJ4czp1bnNpZ25lZEJ5dGUiPg0KICAgIDwveHM6cmVzdHJpY3Rpb24+DQogIDwveHM6 c2ltcGxlVHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iQWNjZXNzTGV2ZWxUeXBlIiB0eXBlPSJ0 bnM6QWNjZXNzTGV2ZWxUeXBlIiAvPg0KDQogIDx4czpzaW1wbGVUeXBlICBuYW1lPSJBY2Nlc3NM ZXZlbEV4VHlwZSI+DQogICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnVuc2lnbmVkSW50Ij4N CiAgICA8L3hzOnJlc3RyaWN0aW9uPg0KICA8L3hzOnNpbXBsZVR5cGU+DQogIDx4czplbGVtZW50 IG5hbWU9IkFjY2Vzc0xldmVsRXhUeXBlIiB0eXBlPSJ0bnM6QWNjZXNzTGV2ZWxFeFR5cGUiIC8+ DQoNCiAgPHhzOnNpbXBsZVR5cGUgIG5hbWU9IkV2ZW50Tm90aWZpZXJUeXBlIj4NCiAgICA8eHM6 cmVzdHJpY3Rpb24gYmFzZT0ieHM6dW5zaWduZWRCeXRlIj4NCiAgICA8L3hzOnJlc3RyaWN0aW9u Pg0KICA8L3hzOnNpbXBsZVR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkV2ZW50Tm90aWZpZXJU eXBlIiB0eXBlPSJ0bnM6RXZlbnROb3RpZmllclR5cGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBl IG5hbWU9IlJvbGVQZXJtaXNzaW9uVHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhz OmVsZW1lbnQgbmFtZT0iUm9sZUlkIiB0eXBlPSJ1YTpOb2RlSWQiIG1pbk9jY3Vycz0iMCIgbmls bGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJQZXJtaXNzaW9ucyIgdHlw ZT0idG5zOlBlcm1pc3Npb25UeXBlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgPC94czpzZXF1ZW5j ZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iUm9sZVBlcm1pc3Np b25UeXBlIiB0eXBlPSJ0bnM6Um9sZVBlcm1pc3Npb25UeXBlIiAvPg0KDQogIDx4czpjb21wbGV4 VHlwZSBuYW1lPSJMaXN0T2ZSb2xlUGVybWlzc2lvblR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4N CiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJvbGVQZXJtaXNzaW9uVHlwZSIgdHlwZT0idG5zOlJv bGVQZXJtaXNzaW9uVHlwZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmls bGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4N CiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mUm9sZVBlcm1pc3Npb25UeXBlIiB0eXBlPSJ0bnM6 TGlzdE9mUm9sZVBlcm1pc3Npb25UeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0K DQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJEYXRhVHlwZURlZmluaXRpb24iPg0KICAgIDx4czpz ZXF1ZW5jZT4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6 ZWxlbWVudCBuYW1lPSJEYXRhVHlwZURlZmluaXRpb24iIHR5cGU9InRuczpEYXRhVHlwZURlZmlu aXRpb24iIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkRhdGFUeXBlRGVmaW5p dGlvbiI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVR5 cGVEZWZpbml0aW9uIiB0eXBlPSJ0bnM6RGF0YVR5cGVEZWZpbml0aW9uIiBtaW5PY2N1cnM9IjAi IG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVl bmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZEYXRh VHlwZURlZmluaXRpb24iIHR5cGU9InRuczpMaXN0T2ZEYXRhVHlwZURlZmluaXRpb24iIG5pbGxh YmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOnNpbXBsZVR5cGUgIG5hbWU9IlN0cnVj dHVyZVR5cGUiPg0KICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpzdHJpbmciPg0KICAgICAg PHhzOmVudW1lcmF0aW9uIHZhbHVlPSJTdHJ1Y3R1cmVfMCIgLz4NCiAgICAgIDx4czplbnVtZXJh dGlvbiB2YWx1ZT0iU3RydWN0dXJlV2l0aE9wdGlvbmFsRmllbGRzXzEiIC8+DQogICAgICA8eHM6 ZW51bWVyYXRpb24gdmFsdWU9IlVuaW9uXzIiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFs dWU9IlN0cnVjdHVyZVdpdGhTdWJ0eXBlZFZhbHVlc18zIiAvPg0KICAgICAgPHhzOmVudW1lcmF0 aW9uIHZhbHVlPSJVbmlvbldpdGhTdWJ0eXBlZFZhbHVlc180IiAvPg0KICAgIDwveHM6cmVzdHJp Y3Rpb24+DQogIDwveHM6c2ltcGxlVHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iU3RydWN0dXJl VHlwZSIgdHlwZT0idG5zOlN0cnVjdHVyZVR5cGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5h bWU9IlN0cnVjdHVyZUZpZWxkIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVu dCBuYW1lPSJOYW1lIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRy dWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEZXNjcmlwdGlvbiIgdHlwZT0idWE6TG9j YWxpemVkVGV4dCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czpl bGVtZW50IG5hbWU9IkRhdGFUeXBlIiB0eXBlPSJ1YTpOb2RlSWQiIG1pbk9jY3Vycz0iMCIgbmls bGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJWYWx1ZVJhbmsiIHR5cGU9 InhzOmludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQXJyYXlE aW1lbnNpb25zIiB0eXBlPSJ1YTpMaXN0T2ZVSW50MzIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9 InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJNYXhTdHJpbmdMZW5ndGgiIHR5cGU9 InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1l PSJJc09wdGlvbmFsIiB0eXBlPSJ4czpib29sZWFuIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgPC94 czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iU3Ry dWN0dXJlRmllbGQiIHR5cGU9InRuczpTdHJ1Y3R1cmVGaWVsZCIgLz4NCg0KICA8eHM6Y29tcGxl eFR5cGUgbmFtZT0iTGlzdE9mU3RydWN0dXJlRmllbGQiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAg ICAgIDx4czplbGVtZW50IG5hbWU9IlN0cnVjdHVyZUZpZWxkIiB0eXBlPSJ0bnM6U3RydWN0dXJl RmllbGQiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVl IiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVt ZW50IG5hbWU9Ikxpc3RPZlN0cnVjdHVyZUZpZWxkIiB0eXBlPSJ0bnM6TGlzdE9mU3RydWN0dXJl RmllbGQiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBl IG5hbWU9IlN0cnVjdHVyZURlZmluaXRpb24iPg0KICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhl ZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0bnM6RGF0YVR5cGVEZWZpbml0 aW9uIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9 IkRlZmF1bHRFbmNvZGluZ0lkIiB0eXBlPSJ1YTpOb2RlSWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFi bGU9InRydWUiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQmFzZURhdGFUeXBlIiB0 eXBlPSJ1YTpOb2RlSWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAg ICAgPHhzOmVsZW1lbnQgbmFtZT0iU3RydWN0dXJlVHlwZSIgdHlwZT0idG5zOlN0cnVjdHVyZVR5 cGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJGaWVsZHMi IHR5cGU9InRuczpMaXN0T2ZTdHJ1Y3R1cmVGaWVsZCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0i dHJ1ZSIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0K ICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVt ZW50IG5hbWU9IlN0cnVjdHVyZURlZmluaXRpb24iIHR5cGU9InRuczpTdHJ1Y3R1cmVEZWZpbml0 aW9uIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZTdHJ1Y3R1cmVEZWZpbml0 aW9uIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTdHJ1Y3R1 cmVEZWZpbml0aW9uIiB0eXBlPSJ0bnM6U3RydWN0dXJlRGVmaW5pdGlvbiIgbWluT2NjdXJzPSIw IiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1 ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mU3Ry dWN0dXJlRGVmaW5pdGlvbiIgdHlwZT0idG5zOkxpc3RPZlN0cnVjdHVyZURlZmluaXRpb24iIG5p bGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkVu dW1EZWZpbml0aW9uIj4NCiAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAg ICAgIDx4czpleHRlbnNpb24gYmFzZT0idG5zOkRhdGFUeXBlRGVmaW5pdGlvbiI+DQogICAgICAg IDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJGaWVsZHMiIHR5cGU9 InRuczpMaXN0T2ZFbnVtRmllbGQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQog ICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hzOmNv bXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJF bnVtRGVmaW5pdGlvbiIgdHlwZT0idG5zOkVudW1EZWZpbml0aW9uIiAvPg0KDQogIDx4czpjb21w bGV4VHlwZSBuYW1lPSJMaXN0T2ZFbnVtRGVmaW5pdGlvbiI+DQogICAgPHhzOnNlcXVlbmNlPg0K ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRW51bURlZmluaXRpb24iIHR5cGU9InRuczpFbnVtRGVm aW5pdGlvbiIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRy dWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVs ZW1lbnQgbmFtZT0iTGlzdE9mRW51bURlZmluaXRpb24iIHR5cGU9InRuczpMaXN0T2ZFbnVtRGVm aW5pdGlvbiIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5 cGUgbmFtZT0iTm9kZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt ZT0iTm9kZUlkIiB0eXBlPSJ1YTpOb2RlSWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUi IC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJOb2RlQ2xhc3MiIHR5cGU9InRuczpOb2RlQ2xh c3MiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkJyb3dzZU5hbWUi IHR5cGU9InVhOlF1YWxpZmllZE5hbWUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+ DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEaXNwbGF5TmFtZSIgdHlwZT0idWE6TG9jYWxpemVk VGV4dCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50 IG5hbWU9IkRlc2NyaXB0aW9uIiB0eXBlPSJ1YTpMb2NhbGl6ZWRUZXh0IiBtaW5PY2N1cnM9IjAi IG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iV3JpdGVNYXNrIiB0 eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQg bmFtZT0iVXNlcldyaXRlTWFzayIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIg Lz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJvbGVQZXJtaXNzaW9ucyIgdHlwZT0idG5zOkxp c3RPZlJvbGVQZXJtaXNzaW9uVHlwZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4N CiAgICAgIDx4czplbGVtZW50IG5hbWU9IlVzZXJSb2xlUGVybWlzc2lvbnMiIHR5cGU9InRuczpM aXN0T2ZSb2xlUGVybWlzc2lvblR5cGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+ DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBY2Nlc3NSZXN0cmljdGlvbnMiIHR5cGU9InhzOnVu c2lnbmVkU2hvcnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJl ZmVyZW5jZXMiIHR5cGU9InRuczpMaXN0T2ZSZWZlcmVuY2VOb2RlIiBtaW5PY2N1cnM9IjAiIG5p bGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+ DQogIDx4czplbGVtZW50IG5hbWU9Ik5vZGUiIHR5cGU9InRuczpOb2RlIiAvPg0KDQogIDx4czpj b21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZOb2RlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8 eHM6ZWxlbWVudCBuYW1lPSJOb2RlIiB0eXBlPSJ0bnM6Tm9kZSIgbWluT2NjdXJzPSIwIiBtYXhP Y2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4N CiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mTm9kZSIgdHlw ZT0idG5zOkxpc3RPZk5vZGUiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhz OmNvbXBsZXhUeXBlIG5hbWU9Ikluc3RhbmNlTm9kZSI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50 IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpOb2RlIj4NCiAg ICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0KICAgICAgPC94czpl eHRlbnNpb24+DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4N CiAgPHhzOmVsZW1lbnQgbmFtZT0iSW5zdGFuY2VOb2RlIiB0eXBlPSJ0bnM6SW5zdGFuY2VOb2Rl IiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJUeXBlTm9kZSI+DQogICAgPHhzOmNvbXBs ZXhDb250ZW50IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpO b2RlIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0KICAg ICAgPC94czpleHRlbnNpb24+DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAgPC94czpjb21w bGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iVHlwZU5vZGUiIHR5cGU9InRuczpUeXBlTm9k ZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iT2JqZWN0Tm9kZSI+DQogICAgPHhzOmNv bXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRu czpJbnN0YW5jZU5vZGUiPg0KICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAgPHhzOmVs ZW1lbnQgbmFtZT0iRXZlbnROb3RpZmllciIgdHlwZT0ieHM6dW5zaWduZWRCeXRlIiBtaW5PY2N1 cnM9IjAiIC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVuc2lvbj4N CiAgICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxl bWVudCBuYW1lPSJPYmplY3ROb2RlIiB0eXBlPSJ0bnM6T2JqZWN0Tm9kZSIgLz4NCg0KICA8eHM6 Y29tcGxleFR5cGUgbmFtZT0iT2JqZWN0VHlwZU5vZGUiPg0KICAgIDx4czpjb21wbGV4Q29udGVu dCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0bnM6VHlwZU5vZGUi Pg0KICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iSXNB YnN0cmFjdCIgdHlwZT0ieHM6Ym9vbGVhbiIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICA8L3hz OnNlcXVlbmNlPg0KICAgICAgPC94czpleHRlbnNpb24+DQogICAgPC94czpjb21wbGV4Q29udGVu dD4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iT2JqZWN0VHlwZU5v ZGUiIHR5cGU9InRuczpPYmplY3RUeXBlTm9kZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFt ZT0iVmFyaWFibGVOb2RlIj4NCiAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4N CiAgICAgIDx4czpleHRlbnNpb24gYmFzZT0idG5zOkluc3RhbmNlTm9kZSI+DQogICAgICAgIDx4 czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJWYWx1ZSIgdHlwZT0idWE6 VmFyaWFudCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IkRh dGFUeXBlIiB0eXBlPSJ1YTpOb2RlSWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+ DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVmFsdWVSYW5rIiB0eXBlPSJ4czppbnQiIG1p bk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBcnJheURpbWVuc2lv bnMiIHR5cGU9InVhOkxpc3RPZlVJbnQzMiIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIg Lz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBY2Nlc3NMZXZlbCIgdHlwZT0ieHM6dW5z aWduZWRCeXRlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i VXNlckFjY2Vzc0xldmVsIiB0eXBlPSJ4czp1bnNpZ25lZEJ5dGUiIG1pbk9jY3Vycz0iMCIgLz4N CiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJNaW5pbXVtU2FtcGxpbmdJbnRlcnZhbCIgdHlw ZT0ieHM6ZG91YmxlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFt ZT0iSGlzdG9yaXppbmciIHR5cGU9InhzOmJvb2xlYW4iIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAg ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBY2Nlc3NMZXZlbEV4IiB0eXBlPSJ4czp1bnNpZ25lZElu dCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0KICAgICAgPC94czpl eHRlbnNpb24+DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4N CiAgPHhzOmVsZW1lbnQgbmFtZT0iVmFyaWFibGVOb2RlIiB0eXBlPSJ0bnM6VmFyaWFibGVOb2Rl IiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJWYXJpYWJsZVR5cGVOb2RlIj4NCiAgICA8 eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAgICAgIDx4czpleHRlbnNpb24gYmFz ZT0idG5zOlR5cGVOb2RlIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAgIDx4czpl bGVtZW50IG5hbWU9IlZhbHVlIiB0eXBlPSJ1YTpWYXJpYW50IiBtaW5PY2N1cnM9IjAiIC8+DQog ICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVR5cGUiIHR5cGU9InVhOk5vZGVJZCIgbWlu T2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1l PSJWYWx1ZVJhbmsiIHR5cGU9InhzOmludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICAgIDx4 czplbGVtZW50IG5hbWU9IkFycmF5RGltZW5zaW9ucyIgdHlwZT0idWE6TGlzdE9mVUludDMyIiBt aW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5h bWU9IklzQWJzdHJhY3QiIHR5cGU9InhzOmJvb2xlYW4iIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAg ICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxl eENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlZhcmlh YmxlVHlwZU5vZGUiIHR5cGU9InRuczpWYXJpYWJsZVR5cGVOb2RlIiAvPg0KDQogIDx4czpjb21w bGV4VHlwZSBuYW1lPSJSZWZlcmVuY2VUeXBlTm9kZSI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50 IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpUeXBlTm9kZSI+ DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJJc0Fi c3RyYWN0IiB0eXBlPSJ4czpib29sZWFuIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhz OmVsZW1lbnQgbmFtZT0iU3ltbWV0cmljIiB0eXBlPSJ4czpib29sZWFuIiBtaW5PY2N1cnM9IjAi IC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iSW52ZXJzZU5hbWUiIHR5cGU9InVhOkxv Y2FsaXplZFRleHQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAgIDwv eHM6c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hzOmNvbXBsZXhDb250 ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJSZWZlcmVuY2VU eXBlTm9kZSIgdHlwZT0idG5zOlJlZmVyZW5jZVR5cGVOb2RlIiAvPg0KDQogIDx4czpjb21wbGV4 VHlwZSBuYW1lPSJNZXRob2ROb2RlIj4NCiAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZh bHNlIj4NCiAgICAgIDx4czpleHRlbnNpb24gYmFzZT0idG5zOkluc3RhbmNlTm9kZSI+DQogICAg ICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJFeGVjdXRhYmxl IiB0eXBlPSJ4czpib29sZWFuIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1l bnQgbmFtZT0iVXNlckV4ZWN1dGFibGUiIHR5cGU9InhzOmJvb2xlYW4iIG1pbk9jY3Vycz0iMCIg Lz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwv eHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5h bWU9Ik1ldGhvZE5vZGUiIHR5cGU9InRuczpNZXRob2ROb2RlIiAvPg0KDQogIDx4czpjb21wbGV4 VHlwZSBuYW1lPSJWaWV3Tm9kZSI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJmYWxz ZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpJbnN0YW5jZU5vZGUiPg0KICAgICAg ICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQ29udGFpbnNOb0xv b3BzIiB0eXBlPSJ4czpib29sZWFuIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVs ZW1lbnQgbmFtZT0iRXZlbnROb3RpZmllciIgdHlwZT0ieHM6dW5zaWduZWRCeXRlIiBtaW5PY2N1 cnM9IjAiIC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVuc2lvbj4N CiAgICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxl bWVudCBuYW1lPSJWaWV3Tm9kZSIgdHlwZT0idG5zOlZpZXdOb2RlIiAvPg0KDQogIDx4czpjb21w bGV4VHlwZSBuYW1lPSJEYXRhVHlwZU5vZGUiPg0KICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhl ZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0bnM6VHlwZU5vZGUiPg0KICAg ICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iSXNBYnN0cmFj dCIgdHlwZT0ieHM6Ym9vbGVhbiIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICAgIDx4czplbGVt ZW50IG5hbWU9IkRhdGFUeXBlRGVmaW5pdGlvbiIgdHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0IiBt aW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0K ICAgICAgPC94czpleHRlbnNpb24+DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAgPC94czpj b21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVR5cGVOb2RlIiB0eXBlPSJ0bnM6 RGF0YVR5cGVOb2RlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJSZWZlcmVuY2VOb2Rl Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZWZlcmVuY2VU eXBlSWQiIHR5cGU9InVhOk5vZGVJZCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4N CiAgICAgIDx4czplbGVtZW50IG5hbWU9IklzSW52ZXJzZSIgdHlwZT0ieHM6Ym9vbGVhbiIgbWlu T2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVGFyZ2V0SWQiIHR5cGU9InVh OkV4cGFuZGVkTm9kZUlkIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwv eHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlJl ZmVyZW5jZU5vZGUiIHR5cGU9InRuczpSZWZlcmVuY2VOb2RlIiAvPg0KDQogIDx4czpjb21wbGV4 VHlwZSBuYW1lPSJMaXN0T2ZSZWZlcmVuY2VOb2RlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAg ICA8eHM6ZWxlbWVudCBuYW1lPSJSZWZlcmVuY2VOb2RlIiB0eXBlPSJ0bnM6UmVmZXJlbmNlTm9k ZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+ DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQg bmFtZT0iTGlzdE9mUmVmZXJlbmNlTm9kZSIgdHlwZT0idG5zOkxpc3RPZlJlZmVyZW5jZU5vZGUi IG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9 IkFyZ3VtZW50Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJO YW1lIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQog ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEYXRhVHlwZSIgdHlwZT0idWE6Tm9kZUlkIiBtaW5PY2N1 cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVmFsdWVS YW5rIiB0eXBlPSJ4czppbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5h bWU9IkFycmF5RGltZW5zaW9ucyIgdHlwZT0idWE6TGlzdE9mVUludDMyIiBtaW5PY2N1cnM9IjAi IG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGVzY3JpcHRpb24i IHR5cGU9InVhOkxvY2FsaXplZFRleHQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+ DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQg bmFtZT0iQXJndW1lbnQiIHR5cGU9InRuczpBcmd1bWVudCIgLz4NCg0KICA8eHM6Y29tcGxleFR5 cGUgbmFtZT0iTGlzdE9mQXJndW1lbnQiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czpl bGVtZW50IG5hbWU9IkFyZ3VtZW50IiB0eXBlPSJ0bnM6QXJndW1lbnQiIG1pbk9jY3Vycz0iMCIg bWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVu Y2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkFyZ3Vt ZW50IiB0eXBlPSJ0bnM6TGlzdE9mQXJndW1lbnQiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1l bnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkVudW1WYWx1ZVR5cGUiPg0KICAgIDx4czpz ZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlZhbHVlIiB0eXBlPSJ4czpsb25nIiBt aW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEaXNwbGF5TmFtZSIgdHlw ZT0idWE6TG9jYWxpemVkVGV4dCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAg ICAgIDx4czplbGVtZW50IG5hbWU9IkRlc2NyaXB0aW9uIiB0eXBlPSJ1YTpMb2NhbGl6ZWRUZXh0 IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQog IDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkVudW1WYWx1ZVR5cGUiIHR5 cGU9InRuczpFbnVtVmFsdWVUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0 T2ZFbnVtVmFsdWVUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBu YW1lPSJFbnVtVmFsdWVUeXBlIiB0eXBlPSJ0bnM6RW51bVZhbHVlVHlwZSIgbWluT2NjdXJzPSIw IiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1 ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mRW51 bVZhbHVlVHlwZSIgdHlwZT0idG5zOkxpc3RPZkVudW1WYWx1ZVR5cGUiIG5pbGxhYmxlPSJ0cnVl Ij48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkVudW1GaWVsZCI+DQog ICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9u IGJhc2U9InRuczpFbnVtVmFsdWVUeXBlIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAg ICAgIDx4czplbGVtZW50IG5hbWU9Ik5hbWUiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIw IiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6 ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+ DQogIDx4czplbGVtZW50IG5hbWU9IkVudW1GaWVsZCIgdHlwZT0idG5zOkVudW1GaWVsZCIgLz4N Cg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mRW51bUZpZWxkIj4NCiAgICA8eHM6c2Vx dWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJFbnVtRmllbGQiIHR5cGU9InRuczpFbnVt RmllbGQiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVl IiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVt ZW50IG5hbWU9Ikxpc3RPZkVudW1GaWVsZCIgdHlwZT0idG5zOkxpc3RPZkVudW1GaWVsZCIgbmls bGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iT3B0 aW9uU2V0Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJWYWx1 ZSIgdHlwZT0ieHM6YmFzZTY0QmluYXJ5IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAv Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVmFsaWRCaXRzIiB0eXBlPSJ4czpiYXNlNjRCaW5h cnkiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4N CiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iT3B0aW9uU2V0IiB0eXBl PSJ0bnM6T3B0aW9uU2V0IiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZPcHRp b25TZXQiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik9wdGlv blNldCIgdHlwZT0idG5zOk9wdGlvblNldCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91 bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21w bGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mT3B0aW9uU2V0IiB0eXBlPSJ0bnM6 TGlzdE9mT3B0aW9uU2V0IiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpl bGVtZW50IG5hbWU9Ik5vcm1hbGl6ZWRTdHJpbmciIHR5cGU9InhzOnN0cmluZyIgLz4NCg0KICA8 eHM6ZWxlbWVudCBuYW1lPSJEZWNpbWFsU3RyaW5nIiB0eXBlPSJ4czpzdHJpbmciIC8+DQoNCiAg PHhzOmVsZW1lbnQgbmFtZT0iRHVyYXRpb25TdHJpbmciIHR5cGU9InhzOnN0cmluZyIgLz4NCg0K ICA8eHM6ZWxlbWVudCBuYW1lPSJUaW1lU3RyaW5nIiB0eXBlPSJ4czpzdHJpbmciIC8+DQoNCiAg PHhzOmVsZW1lbnQgbmFtZT0iRGF0ZVN0cmluZyIgdHlwZT0ieHM6c3RyaW5nIiAvPg0KDQogIDx4 czplbGVtZW50IG5hbWU9IkR1cmF0aW9uIiB0eXBlPSJ4czpkb3VibGUiIC8+DQoNCiAgPHhzOmVs ZW1lbnQgbmFtZT0iVXRjVGltZSIgdHlwZT0ieHM6ZGF0ZVRpbWUiIC8+DQoNCiAgPHhzOmVsZW1l bnQgbmFtZT0iVGltZSIgdHlwZT0ieHM6c3RyaW5nIiAvPg0KDQogIDx4czplbGVtZW50IG5hbWU9 IkRhdGUiIHR5cGU9InhzOmRhdGVUaW1lIiAvPg0KDQogIDx4czplbGVtZW50IG5hbWU9IkxvY2Fs ZUlkIiB0eXBlPSJ4czpzdHJpbmciIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlRpbWVa b25lRGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9 Ik9mZnNldCIgdHlwZT0ieHM6c2hvcnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVt ZW50IG5hbWU9IkRheWxpZ2h0U2F2aW5nSW5PZmZzZXQiIHR5cGU9InhzOmJvb2xlYW4iIG1pbk9j Y3Vycz0iMCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8 eHM6ZWxlbWVudCBuYW1lPSJUaW1lWm9uZURhdGFUeXBlIiB0eXBlPSJ0bnM6VGltZVpvbmVEYXRh VHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mVGltZVpvbmVEYXRhVHlw ZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVGltZVpvbmVE YXRhVHlwZSIgdHlwZT0idG5zOlRpbWVab25lRGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2Nj dXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQog IDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZlRpbWVab25lRGF0 YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZUaW1lWm9uZURhdGFUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+ PC94czplbGVtZW50Pg0KDQogIDx4czplbGVtZW50IG5hbWU9IkluZGV4IiB0eXBlPSJ4czp1bnNp Z25lZEludCIgLz4NCg0KICA8eHM6ZWxlbWVudCBuYW1lPSJJbnRlZ2VySWQiIHR5cGU9InhzOnVu c2lnbmVkSW50IiAvPg0KDQogIDx4czpzaW1wbGVUeXBlICBuYW1lPSJBcHBsaWNhdGlvblR5cGUi Pg0KICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpzdHJpbmciPg0KICAgICAgPHhzOmVudW1l cmF0aW9uIHZhbHVlPSJTZXJ2ZXJfMCIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0i Q2xpZW50XzEiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkNsaWVudEFuZFNlcnZl cl8yIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJEaXNjb3ZlcnlTZXJ2ZXJfMyIg Lz4NCiAgICA8L3hzOnJlc3RyaWN0aW9uPg0KICA8L3hzOnNpbXBsZVR5cGU+DQogIDx4czplbGVt ZW50IG5hbWU9IkFwcGxpY2F0aW9uVHlwZSIgdHlwZT0idG5zOkFwcGxpY2F0aW9uVHlwZSIgLz4N Cg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iQXBwbGljYXRpb25EZXNjcmlwdGlvbiI+DQogICAg PHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQXBwbGljYXRpb25VcmkiIHR5 cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4 czplbGVtZW50IG5hbWU9IlByb2R1Y3RVcmkiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIw IiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkFwcGxpY2F0aW9u TmFtZSIgdHlwZT0idWE6TG9jYWxpemVkVGV4dCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1 ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkFwcGxpY2F0aW9uVHlwZSIgdHlwZT0idG5z OkFwcGxpY2F0aW9uVHlwZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt ZT0iR2F0ZXdheVNlcnZlclVyaSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxh YmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGlzY292ZXJ5UHJvZmlsZVVy aSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAg ICAgPHhzOmVsZW1lbnQgbmFtZT0iRGlzY292ZXJ5VXJscyIgdHlwZT0idWE6TGlzdE9mU3RyaW5n IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQog IDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkFwcGxpY2F0aW9uRGVzY3Jp cHRpb24iIHR5cGU9InRuczpBcHBsaWNhdGlvbkRlc2NyaXB0aW9uIiAvPg0KDQogIDx4czpjb21w bGV4VHlwZSBuYW1lPSJMaXN0T2ZBcHBsaWNhdGlvbkRlc2NyaXB0aW9uIj4NCiAgICA8eHM6c2Vx dWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBcHBsaWNhdGlvbkRlc2NyaXB0aW9uIiB0 eXBlPSJ0bnM6QXBwbGljYXRpb25EZXNjcmlwdGlvbiIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9 InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94 czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mQXBwbGljYXRpb25EZXNj cmlwdGlvbiIgdHlwZT0idG5zOkxpc3RPZkFwcGxpY2F0aW9uRGVzY3JpcHRpb24iIG5pbGxhYmxl PSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlJlcXVlc3RI ZWFkZXIiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkF1dGhl bnRpY2F0aW9uVG9rZW4iIHR5cGU9InVhOk5vZGVJZCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0i dHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlRpbWVzdGFtcCIgdHlwZT0ieHM6ZGF0 ZVRpbWUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlcXVlc3RI YW5kbGUiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6 ZWxlbWVudCBuYW1lPSJSZXR1cm5EaWFnbm9zdGljcyIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1p bk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkF1ZGl0RW50cnlJZCIgdHlw ZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhz OmVsZW1lbnQgbmFtZT0iVGltZW91dEhpbnQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1 cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBZGRpdGlvbmFsSGVhZGVyIiB0eXBl PSJ1YTpFeHRlbnNpb25PYmplY3QiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQog ICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFt ZT0iUmVxdWVzdEhlYWRlciIgdHlwZT0idG5zOlJlcXVlc3RIZWFkZXIiIC8+DQoNCiAgPHhzOmNv bXBsZXhUeXBlIG5hbWU9IlJlc3BvbnNlSGVhZGVyIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAg ICA8eHM6ZWxlbWVudCBuYW1lPSJUaW1lc3RhbXAiIHR5cGU9InhzOmRhdGVUaW1lIiBtaW5PY2N1 cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0SGFuZGxlIiB0eXBlPSJ4 czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i U2VydmljZVJlc3VsdCIgdHlwZT0idWE6U3RhdHVzQ29kZSIgbWluT2NjdXJzPSIwIiAvPg0KICAg ICAgPHhzOmVsZW1lbnQgbmFtZT0iU2VydmljZURpYWdub3N0aWNzIiB0eXBlPSJ1YTpEaWFnbm9z dGljSW5mbyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVt ZW50IG5hbWU9IlN0cmluZ1RhYmxlIiB0eXBlPSJ1YTpMaXN0T2ZTdHJpbmciIG1pbk9jY3Vycz0i MCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBZGRpdGlvbmFs SGVhZGVyIiB0eXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9 InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhz OmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VIZWFkZXIiIHR5cGU9InRuczpSZXNwb25zZUhlYWRlciIg Lz4NCg0KICA8eHM6ZWxlbWVudCBuYW1lPSJWZXJzaW9uVGltZSIgdHlwZT0ieHM6dW5zaWduZWRJ bnQiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlNlcnZpY2VGYXVsdCI+DQogICAgPHhz OnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VIZWFkZXIiIHR5cGU9 InRuczpSZXNwb25zZUhlYWRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAg ICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1l PSJTZXJ2aWNlRmF1bHQiIHR5cGU9InRuczpTZXJ2aWNlRmF1bHQiIC8+DQoNCiAgPHhzOmNvbXBs ZXhUeXBlIG5hbWU9IlNlc3Npb25sZXNzSW52b2tlUmVxdWVzdFR5cGUiPg0KICAgIDx4czpzZXF1 ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlVyaXNWZXJzaW9uIiB0eXBlPSJ4czp1bnNp Z25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTmFtZXNw YWNlVXJpcyIgdHlwZT0idWE6TGlzdE9mU3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0 cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2VydmVyVXJpcyIgdHlwZT0idWE6TGlz dE9mU3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVs ZW1lbnQgbmFtZT0iTG9jYWxlSWRzIiB0eXBlPSJ1YTpMaXN0T2ZTdHJpbmciIG1pbk9jY3Vycz0i MCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTZXJ2aWNlSWQi IHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgPC94czpzZXF1ZW5j ZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iU2Vzc2lvbmxlc3NJ bnZva2VSZXF1ZXN0VHlwZSIgdHlwZT0idG5zOlNlc3Npb25sZXNzSW52b2tlUmVxdWVzdFR5cGUi IC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlNlc3Npb25sZXNzSW52b2tlUmVzcG9uc2VU eXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJOYW1lc3Bh Y2VVcmlzIiB0eXBlPSJ1YTpMaXN0T2ZTdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRy dWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTZXJ2ZXJVcmlzIiB0eXBlPSJ1YTpMaXN0 T2ZTdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxl bWVudCBuYW1lPSJTZXJ2aWNlSWQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAi IC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1l bnQgbmFtZT0iU2Vzc2lvbmxlc3NJbnZva2VSZXNwb25zZVR5cGUiIHR5cGU9InRuczpTZXNzaW9u bGVzc0ludm9rZVJlc3BvbnNlVHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iRmlu ZFNlcnZlcnNSZXF1ZXN0Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBu YW1lPSJSZXF1ZXN0SGVhZGVyIiB0eXBlPSJ0bnM6UmVxdWVzdEhlYWRlciIgbWluT2NjdXJzPSIw IiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkVuZHBvaW50VXJs IiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAg ICA8eHM6ZWxlbWVudCBuYW1lPSJMb2NhbGVJZHMiIHR5cGU9InVhOkxpc3RPZlN0cmluZyIgbWlu T2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNl cnZlclVyaXMiIHR5cGU9InVhOkxpc3RPZlN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0i dHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6 ZWxlbWVudCBuYW1lPSJGaW5kU2VydmVyc1JlcXVlc3QiIHR5cGU9InRuczpGaW5kU2VydmVyc1Jl cXVlc3QiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkZpbmRTZXJ2ZXJzUmVzcG9uc2Ui Pg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlc3BvbnNlSGVh ZGVyIiB0eXBlPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRy dWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTZXJ2ZXJzIiB0eXBlPSJ0bnM6TGlzdE9m QXBwbGljYXRpb25EZXNjcmlwdGlvbiIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4N CiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBu YW1lPSJGaW5kU2VydmVyc1Jlc3BvbnNlIiB0eXBlPSJ0bnM6RmluZFNlcnZlcnNSZXNwb25zZSIg Lz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iU2VydmVyT25OZXR3b3JrIj4NCiAgICA8eHM6 c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZWNvcmRJZCIgdHlwZT0ieHM6dW5z aWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNlcnZl ck5hbWUiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4N CiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRpc2NvdmVyeVVybCIgdHlwZT0ieHM6c3RyaW5nIiBt aW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i U2VydmVyQ2FwYWJpbGl0aWVzIiB0eXBlPSJ1YTpMaXN0T2ZTdHJpbmciIG1pbk9jY3Vycz0iMCIg bmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlw ZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iU2VydmVyT25OZXR3b3JrIiB0eXBlPSJ0bnM6U2VydmVy T25OZXR3b3JrIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZTZXJ2ZXJPbk5l dHdvcmsiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNlcnZl ck9uTmV0d29yayIgdHlwZT0idG5zOlNlcnZlck9uTmV0d29yayIgbWluT2NjdXJzPSIwIiBtYXhP Y2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4N CiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mU2VydmVyT25O ZXR3b3JrIiB0eXBlPSJ0bnM6TGlzdE9mU2VydmVyT25OZXR3b3JrIiBuaWxsYWJsZT0idHJ1ZSI+ PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJGaW5kU2VydmVyc09uTmV0 d29ya1JlcXVlc3QiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9 IlJlcXVlc3RIZWFkZXIiIHR5cGU9InRuczpSZXF1ZXN0SGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5p bGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU3RhcnRpbmdSZWNvcmRJ ZCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVt ZW50IG5hbWU9Ik1heFJlY29yZHNUb1JldHVybiIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9j Y3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNlcnZlckNhcGFiaWxpdHlGaWx0 ZXIiIHR5cGU9InVhOkxpc3RPZlN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIg Lz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVu dCBuYW1lPSJGaW5kU2VydmVyc09uTmV0d29ya1JlcXVlc3QiIHR5cGU9InRuczpGaW5kU2VydmVy c09uTmV0d29ya1JlcXVlc3QiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkZpbmRTZXJ2 ZXJzT25OZXR3b3JrUmVzcG9uc2UiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVt ZW50IG5hbWU9IlJlc3BvbnNlSGVhZGVyIiB0eXBlPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIG1pbk9j Y3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJMYXN0 Q291bnRlclJlc2V0VGltZSIgdHlwZT0ieHM6ZGF0ZVRpbWUiIG1pbk9jY3Vycz0iMCIgLz4NCiAg ICAgIDx4czplbGVtZW50IG5hbWU9IlNlcnZlcnMiIHR5cGU9InRuczpMaXN0T2ZTZXJ2ZXJPbk5l dHdvcmsiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5j ZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iRmluZFNlcnZlcnNP bk5ldHdvcmtSZXNwb25zZSIgdHlwZT0idG5zOkZpbmRTZXJ2ZXJzT25OZXR3b3JrUmVzcG9uc2Ui IC8+DQoNCiAgPHhzOmVsZW1lbnQgbmFtZT0iQXBwbGljYXRpb25JbnN0YW5jZUNlcnRpZmljYXRl IiB0eXBlPSJ4czpiYXNlNjRCaW5hcnkiIC8+DQoNCiAgPHhzOnNpbXBsZVR5cGUgIG5hbWU9Ik1l c3NhZ2VTZWN1cml0eU1vZGUiPg0KICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpzdHJpbmci Pg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJJbnZhbGlkXzAiIC8+DQogICAgICA8eHM6 ZW51bWVyYXRpb24gdmFsdWU9Ik5vbmVfMSIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1 ZT0iU2lnbl8yIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJTaWduQW5kRW5jcnlw dF8zIiAvPg0KICAgIDwveHM6cmVzdHJpY3Rpb24+DQogIDwveHM6c2ltcGxlVHlwZT4NCiAgPHhz OmVsZW1lbnQgbmFtZT0iTWVzc2FnZVNlY3VyaXR5TW9kZSIgdHlwZT0idG5zOk1lc3NhZ2VTZWN1 cml0eU1vZGUiIC8+DQoNCiAgPHhzOnNpbXBsZVR5cGUgIG5hbWU9IlVzZXJUb2tlblR5cGUiPg0K ICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpzdHJpbmciPg0KICAgICAgPHhzOmVudW1lcmF0 aW9uIHZhbHVlPSJBbm9ueW1vdXNfMCIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0i VXNlck5hbWVfMSIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iQ2VydGlmaWNhdGVf MiIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iSXNzdWVkVG9rZW5fMyIgLz4NCiAg ICA8L3hzOnJlc3RyaWN0aW9uPg0KICA8L3hzOnNpbXBsZVR5cGU+DQogIDx4czplbGVtZW50IG5h bWU9IlVzZXJUb2tlblR5cGUiIHR5cGU9InRuczpVc2VyVG9rZW5UeXBlIiAvPg0KDQogIDx4czpj b21wbGV4VHlwZSBuYW1lPSJVc2VyVG9rZW5Qb2xpY3kiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAg ICAgIDx4czplbGVtZW50IG5hbWU9IlBvbGljeUlkIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vy cz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJUb2tlblR5 cGUiIHR5cGU9InRuczpVc2VyVG9rZW5UeXBlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6 ZWxlbWVudCBuYW1lPSJJc3N1ZWRUb2tlblR5cGUiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJz PSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Iklzc3VlckVu ZHBvaW50VXJsIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUi IC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTZWN1cml0eVBvbGljeVVyaSIgdHlwZT0ieHM6 c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVu Y2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlVzZXJUb2tlblBv bGljeSIgdHlwZT0idG5zOlVzZXJUb2tlblBvbGljeSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUg bmFtZT0iTGlzdE9mVXNlclRva2VuUG9saWN5Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8 eHM6ZWxlbWVudCBuYW1lPSJVc2VyVG9rZW5Qb2xpY3kiIHR5cGU9InRuczpVc2VyVG9rZW5Qb2xp Y3kiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAv Pg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50 IG5hbWU9Ikxpc3RPZlVzZXJUb2tlblBvbGljeSIgdHlwZT0idG5zOkxpc3RPZlVzZXJUb2tlblBv bGljeSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUg bmFtZT0iRW5kcG9pbnREZXNjcmlwdGlvbiI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhz OmVsZW1lbnQgbmFtZT0iRW5kcG9pbnRVcmwiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIw IiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNlcnZlciIgdHlw ZT0idG5zOkFwcGxpY2F0aW9uRGVzY3JpcHRpb24iIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRy dWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTZXJ2ZXJDZXJ0aWZpY2F0ZSIgdHlwZT0i eHM6YmFzZTY0QmluYXJ5IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAg PHhzOmVsZW1lbnQgbmFtZT0iU2VjdXJpdHlNb2RlIiB0eXBlPSJ0bnM6TWVzc2FnZVNlY3VyaXR5 TW9kZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2VjdXJpdHlQ b2xpY3lVcmkiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIg Lz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlVzZXJJZGVudGl0eVRva2VucyIgdHlwZT0idG5z Okxpc3RPZlVzZXJUb2tlblBvbGljeSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4N CiAgICAgIDx4czplbGVtZW50IG5hbWU9IlRyYW5zcG9ydFByb2ZpbGVVcmkiIHR5cGU9InhzOnN0 cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50 IG5hbWU9IlNlY3VyaXR5TGV2ZWwiIHR5cGU9InhzOnVuc2lnbmVkQnl0ZSIgbWluT2NjdXJzPSIw IiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVt ZW50IG5hbWU9IkVuZHBvaW50RGVzY3JpcHRpb24iIHR5cGU9InRuczpFbmRwb2ludERlc2NyaXB0 aW9uIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZFbmRwb2ludERlc2NyaXB0 aW9uIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJFbmRwb2lu dERlc2NyaXB0aW9uIiB0eXBlPSJ0bnM6RW5kcG9pbnREZXNjcmlwdGlvbiIgbWluT2NjdXJzPSIw IiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1 ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mRW5k cG9pbnREZXNjcmlwdGlvbiIgdHlwZT0idG5zOkxpc3RPZkVuZHBvaW50RGVzY3JpcHRpb24iIG5p bGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikdl dEVuZHBvaW50c1JlcXVlc3QiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50 IG5hbWU9IlJlcXVlc3RIZWFkZXIiIHR5cGU9InRuczpSZXF1ZXN0SGVhZGVyIiBtaW5PY2N1cnM9 IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRW5kcG9pbnRV cmwiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAg ICAgIDx4czplbGVtZW50IG5hbWU9IkxvY2FsZUlkcyIgdHlwZT0idWE6TGlzdE9mU3RyaW5nIiBt aW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i UHJvZmlsZVVyaXMiIHR5cGU9InVhOkxpc3RPZlN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJs ZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8 eHM6ZWxlbWVudCBuYW1lPSJHZXRFbmRwb2ludHNSZXF1ZXN0IiB0eXBlPSJ0bnM6R2V0RW5kcG9p bnRzUmVxdWVzdCIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iR2V0RW5kcG9pbnRzUmVz cG9uc2UiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlc3Bv bnNlSGVhZGVyIiB0eXBlPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFi bGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJFbmRwb2ludHMiIHR5cGU9InRu czpMaXN0T2ZFbmRwb2ludERlc2NyaXB0aW9uIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVl IiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVt ZW50IG5hbWU9IkdldEVuZHBvaW50c1Jlc3BvbnNlIiB0eXBlPSJ0bnM6R2V0RW5kcG9pbnRzUmVz cG9uc2UiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlJlZ2lzdGVyZWRTZXJ2ZXIiPg0K ICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNlcnZlclVyaSIgdHlw ZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhz OmVsZW1lbnQgbmFtZT0iUHJvZHVjdFVyaSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAi IG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2VydmVyTmFtZXMi IHR5cGU9InVhOkxpc3RPZkxvY2FsaXplZFRleHQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRy dWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTZXJ2ZXJUeXBlIiB0eXBlPSJ0bnM6QXBw bGljYXRpb25UeXBlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJH YXRld2F5U2VydmVyVXJpIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9 InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEaXNjb3ZlcnlVcmxzIiB0eXBlPSJ1 YTpMaXN0T2ZTdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8 eHM6ZWxlbWVudCBuYW1lPSJTZW1hcGhvcmVGaWxlUGF0aCIgdHlwZT0ieHM6c3RyaW5nIiBtaW5P Y2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iSXNP bmxpbmUiIHR5cGU9InhzOmJvb2xlYW4iIG1pbk9jY3Vycz0iMCIgLz4NCiAgICA8L3hzOnNlcXVl bmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJSZWdpc3RlcmVk U2VydmVyIiB0eXBlPSJ0bnM6UmVnaXN0ZXJlZFNlcnZlciIgLz4NCg0KICA8eHM6Y29tcGxleFR5 cGUgbmFtZT0iTGlzdE9mUmVnaXN0ZXJlZFNlcnZlciI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAg ICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVnaXN0ZXJlZFNlcnZlciIgdHlwZT0idG5zOlJlZ2lzdGVy ZWRTZXJ2ZXIiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0 cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czpl bGVtZW50IG5hbWU9Ikxpc3RPZlJlZ2lzdGVyZWRTZXJ2ZXIiIHR5cGU9InRuczpMaXN0T2ZSZWdp c3RlcmVkU2VydmVyIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21w bGV4VHlwZSBuYW1lPSJSZWdpc3RlclNlcnZlclJlcXVlc3QiPg0KICAgIDx4czpzZXF1ZW5jZT4N CiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlcXVlc3RIZWFkZXIiIHR5cGU9InRuczpSZXF1ZXN0 SGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1l bnQgbmFtZT0iU2VydmVyIiB0eXBlPSJ0bnM6UmVnaXN0ZXJlZFNlcnZlciIgbWluT2NjdXJzPSIw IiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhU eXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJSZWdpc3RlclNlcnZlclJlcXVlc3QiIHR5cGU9InRu czpSZWdpc3RlclNlcnZlclJlcXVlc3QiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlJl Z2lzdGVyU2VydmVyUmVzcG9uc2UiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVt ZW50IG5hbWU9IlJlc3BvbnNlSGVhZGVyIiB0eXBlPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIG1pbk9j Y3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpj b21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iUmVnaXN0ZXJTZXJ2ZXJSZXNwb25zZSIg dHlwZT0idG5zOlJlZ2lzdGVyU2VydmVyUmVzcG9uc2UiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBl IG5hbWU9IkRpc2NvdmVyeUNvbmZpZ3VyYXRpb24iPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICA8 L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJE aXNjb3ZlcnlDb25maWd1cmF0aW9uIiB0eXBlPSJ0bnM6RGlzY292ZXJ5Q29uZmlndXJhdGlvbiIg Lz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTWRuc0Rpc2NvdmVyeUNvbmZpZ3VyYXRpb24i Pg0KICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVu c2lvbiBiYXNlPSJ0bnM6RGlzY292ZXJ5Q29uZmlndXJhdGlvbiI+DQogICAgICAgIDx4czpzZXF1 ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJNZG5zU2VydmVyTmFtZSIgdHlwZT0i eHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICAgIDx4 czplbGVtZW50IG5hbWU9IlNlcnZlckNhcGFiaWxpdGllcyIgdHlwZT0idWE6TGlzdE9mU3RyaW5n IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICA8L3hzOnNlcXVlbmNl Pg0KICAgICAgPC94czpleHRlbnNpb24+DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAgPC94 czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTWRuc0Rpc2NvdmVyeUNvbmZpZ3Vy YXRpb24iIHR5cGU9InRuczpNZG5zRGlzY292ZXJ5Q29uZmlndXJhdGlvbiIgLz4NCg0KICA8eHM6 Y29tcGxleFR5cGUgbmFtZT0iUmVnaXN0ZXJTZXJ2ZXIyUmVxdWVzdCI+DQogICAgPHhzOnNlcXVl bmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEhlYWRlciIgdHlwZT0idG5zOlJl cXVlc3RIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6 ZWxlbWVudCBuYW1lPSJTZXJ2ZXIiIHR5cGU9InRuczpSZWdpc3RlcmVkU2VydmVyIiBtaW5PY2N1 cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGlzY292 ZXJ5Q29uZmlndXJhdGlvbiIgdHlwZT0idWE6TGlzdE9mRXh0ZW5zaW9uT2JqZWN0IiBtaW5PY2N1 cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29t cGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlJlZ2lzdGVyU2VydmVyMlJlcXVlc3QiIHR5 cGU9InRuczpSZWdpc3RlclNlcnZlcjJSZXF1ZXN0IiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBu YW1lPSJSZWdpc3RlclNlcnZlcjJSZXNwb25zZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAg PHhzOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VIZWFkZXIiIHR5cGU9InRuczpSZXNwb25zZUhlYWRl ciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5h bWU9IkNvbmZpZ3VyYXRpb25SZXN1bHRzIiB0eXBlPSJ1YTpMaXN0T2ZTdGF0dXNDb2RlIiBtaW5P Y2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGlh Z25vc3RpY0luZm9zIiB0eXBlPSJ1YTpMaXN0T2ZEaWFnbm9zdGljSW5mbyIgbWluT2NjdXJzPSIw IiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhU eXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJSZWdpc3RlclNlcnZlcjJSZXNwb25zZSIgdHlwZT0i dG5zOlJlZ2lzdGVyU2VydmVyMlJlc3BvbnNlIiAvPg0KDQogIDx4czpzaW1wbGVUeXBlICBuYW1l PSJTZWN1cml0eVRva2VuUmVxdWVzdFR5cGUiPg0KICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4 czpzdHJpbmciPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJJc3N1ZV8wIiAvPg0KICAg ICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJSZW5ld18xIiAvPg0KICAgIDwveHM6cmVzdHJpY3Rp b24+DQogIDwveHM6c2ltcGxlVHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iU2VjdXJpdHlUb2tl blJlcXVlc3RUeXBlIiB0eXBlPSJ0bnM6U2VjdXJpdHlUb2tlblJlcXVlc3RUeXBlIiAvPg0KDQog IDx4czpjb21wbGV4VHlwZSBuYW1lPSJDaGFubmVsU2VjdXJpdHlUb2tlbiI+DQogICAgPHhzOnNl cXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQ2hhbm5lbElkIiB0eXBlPSJ4czp1bnNp Z25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVG9rZW5J ZCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVt ZW50IG5hbWU9IkNyZWF0ZWRBdCIgdHlwZT0ieHM6ZGF0ZVRpbWUiIG1pbk9jY3Vycz0iMCIgLz4N CiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJldmlzZWRMaWZldGltZSIgdHlwZT0ieHM6dW5zaWdu ZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBs ZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJDaGFubmVsU2VjdXJpdHlUb2tlbiIgdHlwZT0i dG5zOkNoYW5uZWxTZWN1cml0eVRva2VuIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJP cGVuU2VjdXJlQ2hhbm5lbFJlcXVlc3QiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czpl bGVtZW50IG5hbWU9IlJlcXVlc3RIZWFkZXIiIHR5cGU9InRuczpSZXF1ZXN0SGVhZGVyIiBtaW5P Y2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQ2xp ZW50UHJvdG9jb2xWZXJzaW9uIiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAv Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVxdWVzdFR5cGUiIHR5cGU9InRuczpTZWN1cml0 eVRva2VuUmVxdWVzdFR5cGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5h bWU9IlNlY3VyaXR5TW9kZSIgdHlwZT0idG5zOk1lc3NhZ2VTZWN1cml0eU1vZGUiIG1pbk9jY3Vy cz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkNsaWVudE5vbmNlIiB0eXBlPSJ4czpi YXNlNjRCaW5hcnkiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6 ZWxlbWVudCBuYW1lPSJSZXF1ZXN0ZWRMaWZldGltZSIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1p bk9jY3Vycz0iMCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0K ICA8eHM6ZWxlbWVudCBuYW1lPSJPcGVuU2VjdXJlQ2hhbm5lbFJlcXVlc3QiIHR5cGU9InRuczpP cGVuU2VjdXJlQ2hhbm5lbFJlcXVlc3QiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ik9w ZW5TZWN1cmVDaGFubmVsUmVzcG9uc2UiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czpl bGVtZW50IG5hbWU9IlJlc3BvbnNlSGVhZGVyIiB0eXBlPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIG1p bk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJT ZXJ2ZXJQcm90b2NvbFZlcnNpb24iIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAi IC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTZWN1cml0eVRva2VuIiB0eXBlPSJ0bnM6Q2hh bm5lbFNlY3VyaXR5VG9rZW4iIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAg ICA8eHM6ZWxlbWVudCBuYW1lPSJTZXJ2ZXJOb25jZSIgdHlwZT0ieHM6YmFzZTY0QmluYXJ5IiBt aW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwv eHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ik9wZW5TZWN1cmVDaGFubmVsUmVz cG9uc2UiIHR5cGU9InRuczpPcGVuU2VjdXJlQ2hhbm5lbFJlc3BvbnNlIiAvPg0KDQogIDx4czpj b21wbGV4VHlwZSBuYW1lPSJDbG9zZVNlY3VyZUNoYW5uZWxSZXF1ZXN0Ij4NCiAgICA8eHM6c2Vx dWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0SGVhZGVyIiB0eXBlPSJ0bnM6 UmVxdWVzdEhlYWRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hz OnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJDbG9z ZVNlY3VyZUNoYW5uZWxSZXF1ZXN0IiB0eXBlPSJ0bnM6Q2xvc2VTZWN1cmVDaGFubmVsUmVxdWVz dCIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iQ2xvc2VTZWN1cmVDaGFubmVsUmVzcG9u c2UiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlc3BvbnNl SGVhZGVyIiB0eXBlPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9 InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhz OmVsZW1lbnQgbmFtZT0iQ2xvc2VTZWN1cmVDaGFubmVsUmVzcG9uc2UiIHR5cGU9InRuczpDbG9z ZVNlY3VyZUNoYW5uZWxSZXNwb25zZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iU2ln bmVkU29mdHdhcmVDZXJ0aWZpY2F0ZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVs ZW1lbnQgbmFtZT0iQ2VydGlmaWNhdGVEYXRhIiB0eXBlPSJ4czpiYXNlNjRCaW5hcnkiIG1pbk9j Y3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTaWdu YXR1cmUiIHR5cGU9InhzOmJhc2U2NEJpbmFyeSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1 ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxl bWVudCBuYW1lPSJTaWduZWRTb2Z0d2FyZUNlcnRpZmljYXRlIiB0eXBlPSJ0bnM6U2lnbmVkU29m dHdhcmVDZXJ0aWZpY2F0ZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mU2ln bmVkU29mdHdhcmVDZXJ0aWZpY2F0ZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVs ZW1lbnQgbmFtZT0iU2lnbmVkU29mdHdhcmVDZXJ0aWZpY2F0ZSIgdHlwZT0idG5zOlNpZ25lZFNv ZnR3YXJlQ2VydGlmaWNhdGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5p bGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+ DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZlNpZ25lZFNvZnR3YXJlQ2VydGlmaWNhdGUiIHR5 cGU9InRuczpMaXN0T2ZTaWduZWRTb2Z0d2FyZUNlcnRpZmljYXRlIiBuaWxsYWJsZT0idHJ1ZSI+ PC94czplbGVtZW50Pg0KDQogIDx4czplbGVtZW50IG5hbWU9IlNlc3Npb25BdXRoZW50aWNhdGlv blRva2VuIiB0eXBlPSJ1YTpOb2RlSWQiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlNp Z25hdHVyZURhdGEiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9 IkFsZ29yaXRobSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVl IiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2lnbmF0dXJlIiB0eXBlPSJ4czpiYXNlNjRC aW5hcnkiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5j ZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iU2lnbmF0dXJlRGF0 YSIgdHlwZT0idG5zOlNpZ25hdHVyZURhdGEiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9 IkNyZWF0ZVNlc3Npb25SZXF1ZXN0Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxl bWVudCBuYW1lPSJSZXF1ZXN0SGVhZGVyIiB0eXBlPSJ0bnM6UmVxdWVzdEhlYWRlciIgbWluT2Nj dXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkNsaWVu dERlc2NyaXB0aW9uIiB0eXBlPSJ0bnM6QXBwbGljYXRpb25EZXNjcmlwdGlvbiIgbWluT2NjdXJz PSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNlcnZlclVy aSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAg ICAgPHhzOmVsZW1lbnQgbmFtZT0iRW5kcG9pbnRVcmwiIHR5cGU9InhzOnN0cmluZyIgbWluT2Nj dXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNlc3Np b25OYW1lIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+ DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDbGllbnROb25jZSIgdHlwZT0ieHM6YmFzZTY0Qmlu YXJ5IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQg bmFtZT0iQ2xpZW50Q2VydGlmaWNhdGUiIHR5cGU9InhzOmJhc2U2NEJpbmFyeSIgbWluT2NjdXJz PSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlcXVlc3Rl ZFNlc3Npb25UaW1lb3V0IiB0eXBlPSJ4czpkb3VibGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAg IDx4czplbGVtZW50IG5hbWU9Ik1heFJlc3BvbnNlTWVzc2FnZVNpemUiIHR5cGU9InhzOnVuc2ln bmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21w bGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iQ3JlYXRlU2Vzc2lvblJlcXVlc3QiIHR5cGU9 InRuczpDcmVhdGVTZXNzaW9uUmVxdWVzdCIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0i Q3JlYXRlU2Vzc2lvblJlc3BvbnNlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxl bWVudCBuYW1lPSJSZXNwb25zZUhlYWRlciIgdHlwZT0idG5zOlJlc3BvbnNlSGVhZGVyIiBtaW5P Y2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2Vz c2lvbklkIiB0eXBlPSJ1YTpOb2RlSWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+ DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBdXRoZW50aWNhdGlvblRva2VuIiB0eXBlPSJ1YTpO b2RlSWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVu dCBuYW1lPSJSZXZpc2VkU2Vzc2lvblRpbWVvdXQiIHR5cGU9InhzOmRvdWJsZSIgbWluT2NjdXJz PSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2VydmVyTm9uY2UiIHR5cGU9InhzOmJh c2U2NEJpbmFyeSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czpl bGVtZW50IG5hbWU9IlNlcnZlckNlcnRpZmljYXRlIiB0eXBlPSJ4czpiYXNlNjRCaW5hcnkiIG1p bk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJT ZXJ2ZXJFbmRwb2ludHMiIHR5cGU9InRuczpMaXN0T2ZFbmRwb2ludERlc2NyaXB0aW9uIiBtaW5P Y2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2Vy dmVyU29mdHdhcmVDZXJ0aWZpY2F0ZXMiIHR5cGU9InRuczpMaXN0T2ZTaWduZWRTb2Z0d2FyZUNl cnRpZmljYXRlIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVs ZW1lbnQgbmFtZT0iU2VydmVyU2lnbmF0dXJlIiB0eXBlPSJ0bnM6U2lnbmF0dXJlRGF0YSIgbWlu T2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik1h eFJlcXVlc3RNZXNzYWdlU2l6ZSIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIg Lz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVu dCBuYW1lPSJDcmVhdGVTZXNzaW9uUmVzcG9uc2UiIHR5cGU9InRuczpDcmVhdGVTZXNzaW9uUmVz cG9uc2UiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlVzZXJJZGVudGl0eVRva2VuIj4N CiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJQb2xpY3lJZCIgdHlw ZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6 c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlVzZXJJ ZGVudGl0eVRva2VuIiB0eXBlPSJ0bnM6VXNlcklkZW50aXR5VG9rZW4iIC8+DQoNCiAgPHhzOmNv bXBsZXhUeXBlIG5hbWU9IkFub255bW91c0lkZW50aXR5VG9rZW4iPg0KICAgIDx4czpjb21wbGV4 Q29udGVudCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0bnM6VXNl cklkZW50aXR5VG9rZW4iPg0KICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgIDwveHM6c2Vx dWVuY2U+DQogICAgICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hzOmNvbXBsZXhDb250ZW50Pg0K ICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJBbm9ueW1vdXNJZGVudGl0 eVRva2VuIiB0eXBlPSJ0bnM6QW5vbnltb3VzSWRlbnRpdHlUb2tlbiIgLz4NCg0KICA8eHM6Y29t cGxleFR5cGUgbmFtZT0iVXNlck5hbWVJZGVudGl0eVRva2VuIj4NCiAgICA8eHM6Y29tcGxleENv bnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAgICAgIDx4czpleHRlbnNpb24gYmFzZT0idG5zOlVzZXJJ ZGVudGl0eVRva2VuIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAgIDx4czplbGVt ZW50IG5hbWU9IlVzZXJOYW1lIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFi bGU9InRydWUiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUGFzc3dvcmQiIHR5cGU9 InhzOmJhc2U2NEJpbmFyeSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAg ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJFbmNyeXB0aW9uQWxnb3JpdGhtIiB0eXBlPSJ4czpzdHJp bmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAgIDwveHM6c2VxdWVu Y2U+DQogICAgICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8 L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJVc2VyTmFtZUlkZW50aXR5VG9r ZW4iIHR5cGU9InRuczpVc2VyTmFtZUlkZW50aXR5VG9rZW4iIC8+DQoNCiAgPHhzOmNvbXBsZXhU eXBlIG5hbWU9Ilg1MDlJZGVudGl0eVRva2VuIj4NCiAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4 ZWQ9ImZhbHNlIj4NCiAgICAgIDx4czpleHRlbnNpb24gYmFzZT0idG5zOlVzZXJJZGVudGl0eVRv a2VuIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9 IkNlcnRpZmljYXRlRGF0YSIgdHlwZT0ieHM6YmFzZTY0QmluYXJ5IiBtaW5PY2N1cnM9IjAiIG5p bGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0KICAgICAgPC94czpleHRl bnNpb24+DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAg PHhzOmVsZW1lbnQgbmFtZT0iWDUwOUlkZW50aXR5VG9rZW4iIHR5cGU9InRuczpYNTA5SWRlbnRp dHlUb2tlbiIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iSXNzdWVkSWRlbnRpdHlUb2tl biI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0 ZW5zaW9uIGJhc2U9InRuczpVc2VySWRlbnRpdHlUb2tlbiI+DQogICAgICAgIDx4czpzZXF1ZW5j ZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJUb2tlbkRhdGEiIHR5cGU9InhzOmJhc2U2 NEJpbmFyeSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgICA8eHM6 ZWxlbWVudCBuYW1lPSJFbmNyeXB0aW9uQWxnb3JpdGhtIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9j Y3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAg ICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBs ZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJJc3N1ZWRJZGVudGl0eVRva2VuIiB0eXBlPSJ0 bnM6SXNzdWVkSWRlbnRpdHlUb2tlbiIgLz4NCg0KICA8eHM6ZWxlbWVudCBuYW1lPSJSc2FFbmNy eXB0ZWRTZWNyZXQiIHR5cGU9InVhOlZhcmlhbnQiIC8+DQoNCiAgPHhzOmVsZW1lbnQgbmFtZT0i RWNjRW5jcnlwdGVkU2VjcmV0IiB0eXBlPSJ1YTpWYXJpYW50IiAvPg0KDQogIDx4czpjb21wbGV4 VHlwZSBuYW1lPSJBY3RpdmF0ZVNlc3Npb25SZXF1ZXN0Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQog ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0SGVhZGVyIiB0eXBlPSJ0bnM6UmVxdWVzdEhl YWRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50 IG5hbWU9IkNsaWVudFNpZ25hdHVyZSIgdHlwZT0idG5zOlNpZ25hdHVyZURhdGEiIG1pbk9jY3Vy cz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDbGllbnRT b2Z0d2FyZUNlcnRpZmljYXRlcyIgdHlwZT0idG5zOkxpc3RPZlNpZ25lZFNvZnR3YXJlQ2VydGlm aWNhdGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVu dCBuYW1lPSJMb2NhbGVJZHMiIHR5cGU9InVhOkxpc3RPZlN0cmluZyIgbWluT2NjdXJzPSIwIiBu aWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlVzZXJJZGVudGl0eVRv a2VuIiB0eXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRy dWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJVc2VyVG9rZW5TaWduYXR1cmUiIHR5cGU9 InRuczpTaWduYXR1cmVEYXRhIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAg IDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9 IkFjdGl2YXRlU2Vzc2lvblJlcXVlc3QiIHR5cGU9InRuczpBY3RpdmF0ZVNlc3Npb25SZXF1ZXN0 IiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJBY3RpdmF0ZVNlc3Npb25SZXNwb25zZSI+ DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VIZWFk ZXIiIHR5cGU9InRuczpSZXNwb25zZUhlYWRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1 ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNlcnZlck5vbmNlIiB0eXBlPSJ4czpiYXNl NjRCaW5hcnkiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxl bWVudCBuYW1lPSJSZXN1bHRzIiB0eXBlPSJ1YTpMaXN0T2ZTdGF0dXNDb2RlIiBtaW5PY2N1cnM9 IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGlhZ25vc3Rp Y0luZm9zIiB0eXBlPSJ1YTpMaXN0T2ZEaWFnbm9zdGljSW5mbyIgbWluT2NjdXJzPSIwIiBuaWxs YWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0K ICA8eHM6ZWxlbWVudCBuYW1lPSJBY3RpdmF0ZVNlc3Npb25SZXNwb25zZSIgdHlwZT0idG5zOkFj dGl2YXRlU2Vzc2lvblJlc3BvbnNlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJDbG9z ZVNlc3Npb25SZXF1ZXN0Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBu YW1lPSJSZXF1ZXN0SGVhZGVyIiB0eXBlPSJ0bnM6UmVxdWVzdEhlYWRlciIgbWluT2NjdXJzPSIw IiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRlbGV0ZVN1YnNj cmlwdGlvbnMiIHR5cGU9InhzOmJvb2xlYW4iIG1pbk9jY3Vycz0iMCIgLz4NCiAgICA8L3hzOnNl cXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJDbG9zZVNl c3Npb25SZXF1ZXN0IiB0eXBlPSJ0bnM6Q2xvc2VTZXNzaW9uUmVxdWVzdCIgLz4NCg0KICA8eHM6 Y29tcGxleFR5cGUgbmFtZT0iQ2xvc2VTZXNzaW9uUmVzcG9uc2UiPg0KICAgIDx4czpzZXF1ZW5j ZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlc3BvbnNlSGVhZGVyIiB0eXBlPSJ0bnM6UmVz cG9uc2VIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpz ZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iQ2xvc2VT ZXNzaW9uUmVzcG9uc2UiIHR5cGU9InRuczpDbG9zZVNlc3Npb25SZXNwb25zZSIgLz4NCg0KICA8 eHM6Y29tcGxleFR5cGUgbmFtZT0iQ2FuY2VsUmVxdWVzdCI+DQogICAgPHhzOnNlcXVlbmNlPg0K ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEhlYWRlciIgdHlwZT0idG5zOlJlcXVlc3RI ZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVu dCBuYW1lPSJSZXF1ZXN0SGFuZGxlIiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIw IiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVt ZW50IG5hbWU9IkNhbmNlbFJlcXVlc3QiIHR5cGU9InRuczpDYW5jZWxSZXF1ZXN0IiAvPg0KDQog IDx4czpjb21wbGV4VHlwZSBuYW1lPSJDYW5jZWxSZXNwb25zZSI+DQogICAgPHhzOnNlcXVlbmNl Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VIZWFkZXIiIHR5cGU9InRuczpSZXNw b25zZUhlYWRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czpl bGVtZW50IG5hbWU9IkNhbmNlbENvdW50IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJz PSIwIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czpl bGVtZW50IG5hbWU9IkNhbmNlbFJlc3BvbnNlIiB0eXBlPSJ0bnM6Q2FuY2VsUmVzcG9uc2UiIC8+ DQoNCiAgPHhzOnNpbXBsZVR5cGUgIG5hbWU9Ik5vZGVBdHRyaWJ1dGVzTWFzayI+DQogICAgPHhz OnJlc3RyaWN0aW9uIGJhc2U9InhzOnN0cmluZyI+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFs dWU9Ik5vbmVfMCIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iQWNjZXNzTGV2ZWxf MSIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iQXJyYXlEaW1lbnNpb25zXzIiIC8+ DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkJyb3dzZU5hbWVfNCIgLz4NCiAgICAgIDx4 czplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGFpbnNOb0xvb3BzXzgiIC8+DQogICAgICA8eHM6ZW51 bWVyYXRpb24gdmFsdWU9IkRhdGFUeXBlXzE2IiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZh bHVlPSJEZXNjcmlwdGlvbl8zMiIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iRGlz cGxheU5hbWVfNjQiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkV2ZW50Tm90aWZp ZXJfMTI4IiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJFeGVjdXRhYmxlXzI1NiIg Lz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iSGlzdG9yaXppbmdfNTEyIiAvPg0KICAg ICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJJbnZlcnNlTmFtZV8xMDI0IiAvPg0KICAgICAgPHhz OmVudW1lcmF0aW9uIHZhbHVlPSJJc0Fic3RyYWN0XzIwNDgiIC8+DQogICAgICA8eHM6ZW51bWVy YXRpb24gdmFsdWU9Ik1pbmltdW1TYW1wbGluZ0ludGVydmFsXzQwOTYiIC8+DQogICAgICA8eHM6 ZW51bWVyYXRpb24gdmFsdWU9Ik5vZGVDbGFzc184MTkyIiAvPg0KICAgICAgPHhzOmVudW1lcmF0 aW9uIHZhbHVlPSJOb2RlSWRfMTYzODQiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9 IlN5bW1ldHJpY18zMjc2OCIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iVXNlckFj Y2Vzc0xldmVsXzY1NTM2IiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJVc2VyRXhl Y3V0YWJsZV8xMzEwNzIiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlVzZXJXcml0 ZU1hc2tfMjYyMTQ0IiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJWYWx1ZVJhbmtf NTI0Mjg4IiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJXcml0ZU1hc2tfMTA0ODU3 NiIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iVmFsdWVfMjA5NzE1MiIgLz4NCiAg ICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iRGF0YVR5cGVEZWZpbml0aW9uXzQxOTQzMDQiIC8+ DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlJvbGVQZXJtaXNzaW9uc184Mzg4NjA4IiAv Pg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJBY2Nlc3NSZXN0cmljdGlvbnNfMTY3Nzcy MTYiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkFsbF8zMzU1NDQzMSIgLz4NCiAg ICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iQmFzZU5vZGVfMjY1MDEyMjAiIC8+DQogICAgICA8 eHM6ZW51bWVyYXRpb24gdmFsdWU9Ik9iamVjdF8yNjUwMTM0OCIgLz4NCiAgICAgIDx4czplbnVt ZXJhdGlvbiB2YWx1ZT0iT2JqZWN0VHlwZV8yNjUwMzI2OCIgLz4NCiAgICAgIDx4czplbnVtZXJh dGlvbiB2YWx1ZT0iVmFyaWFibGVfMjY1NzEzODMiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24g dmFsdWU9IlZhcmlhYmxlVHlwZV8yODYwMDQzOCIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2 YWx1ZT0iTWV0aG9kXzI2NjMyNTQ4IiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJS ZWZlcmVuY2VUeXBlXzI2NTM3MDYwIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJW aWV3XzI2NTAxMzU2IiAvPg0KICAgIDwveHM6cmVzdHJpY3Rpb24+DQogIDwveHM6c2ltcGxlVHlw ZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTm9kZUF0dHJpYnV0ZXNNYXNrIiB0eXBlPSJ0bnM6Tm9k ZUF0dHJpYnV0ZXNNYXNrIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJOb2RlQXR0cmli dXRlcyI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU3BlY2lm aWVkQXR0cmlidXRlcyIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAg ICAgIDx4czplbGVtZW50IG5hbWU9IkRpc3BsYXlOYW1lIiB0eXBlPSJ1YTpMb2NhbGl6ZWRUZXh0 IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt ZT0iRGVzY3JpcHRpb24iIHR5cGU9InVhOkxvY2FsaXplZFRleHQiIG1pbk9jY3Vycz0iMCIgbmls bGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJXcml0ZU1hc2siIHR5cGU9 InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1l PSJVc2VyV3JpdGVNYXNrIiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0K ICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5h bWU9Ik5vZGVBdHRyaWJ1dGVzIiB0eXBlPSJ0bnM6Tm9kZUF0dHJpYnV0ZXMiIC8+DQoNCiAgPHhz OmNvbXBsZXhUeXBlIG5hbWU9Ik9iamVjdEF0dHJpYnV0ZXMiPg0KICAgIDx4czpjb21wbGV4Q29u dGVudCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0bnM6Tm9kZUF0 dHJpYnV0ZXMiPg0KICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAgPHhzOmVsZW1lbnQg bmFtZT0iRXZlbnROb3RpZmllciIgdHlwZT0ieHM6dW5zaWduZWRCeXRlIiBtaW5PY2N1cnM9IjAi IC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8 L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBu YW1lPSJPYmplY3RBdHRyaWJ1dGVzIiB0eXBlPSJ0bnM6T2JqZWN0QXR0cmlidXRlcyIgLz4NCg0K ICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iVmFyaWFibGVBdHRyaWJ1dGVzIj4NCiAgICA8eHM6Y29t cGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAgICAgIDx4czpleHRlbnNpb24gYmFzZT0idG5z Ok5vZGVBdHRyaWJ1dGVzIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAgIDx4czpl bGVtZW50IG5hbWU9IlZhbHVlIiB0eXBlPSJ1YTpWYXJpYW50IiBtaW5PY2N1cnM9IjAiIC8+DQog ICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVR5cGUiIHR5cGU9InVhOk5vZGVJZCIgbWlu T2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1l PSJWYWx1ZVJhbmsiIHR5cGU9InhzOmludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICAgIDx4 czplbGVtZW50IG5hbWU9IkFycmF5RGltZW5zaW9ucyIgdHlwZT0idWE6TGlzdE9mVUludDMyIiBt aW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5h bWU9IkFjY2Vzc0xldmVsIiB0eXBlPSJ4czp1bnNpZ25lZEJ5dGUiIG1pbk9jY3Vycz0iMCIgLz4N CiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJVc2VyQWNjZXNzTGV2ZWwiIHR5cGU9InhzOnVu c2lnbmVkQnl0ZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9 Ik1pbmltdW1TYW1wbGluZ0ludGVydmFsIiB0eXBlPSJ4czpkb3VibGUiIG1pbk9jY3Vycz0iMCIg Lz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJIaXN0b3JpemluZyIgdHlwZT0ieHM6Ym9v bGVhbiIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0KICAgICAgPC94 czpleHRlbnNpb24+DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAgPC94czpjb21wbGV4VHlw ZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iVmFyaWFibGVBdHRyaWJ1dGVzIiB0eXBlPSJ0bnM6VmFy aWFibGVBdHRyaWJ1dGVzIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJNZXRob2RBdHRy aWJ1dGVzIj4NCiAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAgICAgIDx4 czpleHRlbnNpb24gYmFzZT0idG5zOk5vZGVBdHRyaWJ1dGVzIj4NCiAgICAgICAgPHhzOnNlcXVl bmNlPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IkV4ZWN1dGFibGUiIHR5cGU9InhzOmJv b2xlYW4iIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJVc2Vy RXhlY3V0YWJsZSIgdHlwZT0ieHM6Ym9vbGVhbiIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICA8 L3hzOnNlcXVlbmNlPg0KICAgICAgPC94czpleHRlbnNpb24+DQogICAgPC94czpjb21wbGV4Q29u dGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTWV0aG9kQXR0 cmlidXRlcyIgdHlwZT0idG5zOk1ldGhvZEF0dHJpYnV0ZXMiIC8+DQoNCiAgPHhzOmNvbXBsZXhU eXBlIG5hbWU9Ik9iamVjdFR5cGVBdHRyaWJ1dGVzIj4NCiAgICA8eHM6Y29tcGxleENvbnRlbnQg bWl4ZWQ9ImZhbHNlIj4NCiAgICAgIDx4czpleHRlbnNpb24gYmFzZT0idG5zOk5vZGVBdHRyaWJ1 dGVzIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9 IklzQWJzdHJhY3QiIHR5cGU9InhzOmJvb2xlYW4iIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAg PC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENv bnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ik9iamVjdFR5 cGVBdHRyaWJ1dGVzIiB0eXBlPSJ0bnM6T2JqZWN0VHlwZUF0dHJpYnV0ZXMiIC8+DQoNCiAgPHhz OmNvbXBsZXhUeXBlIG5hbWU9IlZhcmlhYmxlVHlwZUF0dHJpYnV0ZXMiPg0KICAgIDx4czpjb21w bGV4Q29udGVudCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0bnM6 Tm9kZUF0dHJpYnV0ZXMiPg0KICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAgPHhzOmVs ZW1lbnQgbmFtZT0iVmFsdWUiIHR5cGU9InVhOlZhcmlhbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAg ICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEYXRhVHlwZSIgdHlwZT0idWE6Tm9kZUlkIiBtaW5P Y2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9 IlZhbHVlUmFuayIgdHlwZT0ieHM6aW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhz OmVsZW1lbnQgbmFtZT0iQXJyYXlEaW1lbnNpb25zIiB0eXBlPSJ1YTpMaXN0T2ZVSW50MzIiIG1p bk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFt ZT0iSXNBYnN0cmFjdCIgdHlwZT0ieHM6Ym9vbGVhbiIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAg ICA8L3hzOnNlcXVlbmNlPg0KICAgICAgPC94czpleHRlbnNpb24+DQogICAgPC94czpjb21wbGV4 Q29udGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iVmFyaWFi bGVUeXBlQXR0cmlidXRlcyIgdHlwZT0idG5zOlZhcmlhYmxlVHlwZUF0dHJpYnV0ZXMiIC8+DQoN CiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlJlZmVyZW5jZVR5cGVBdHRyaWJ1dGVzIj4NCiAgICA8 eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAgICAgIDx4czpleHRlbnNpb24gYmFz ZT0idG5zOk5vZGVBdHRyaWJ1dGVzIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAg IDx4czplbGVtZW50IG5hbWU9IklzQWJzdHJhY3QiIHR5cGU9InhzOmJvb2xlYW4iIG1pbk9jY3Vy cz0iMCIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTeW1tZXRyaWMiIHR5cGU9Inhz OmJvb2xlYW4iIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJJ bnZlcnNlTmFtZSIgdHlwZT0idWE6TG9jYWxpemVkVGV4dCIgbWluT2NjdXJzPSIwIiBuaWxsYWJs ZT0idHJ1ZSIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9u Pg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czpl bGVtZW50IG5hbWU9IlJlZmVyZW5jZVR5cGVBdHRyaWJ1dGVzIiB0eXBlPSJ0bnM6UmVmZXJlbmNl VHlwZUF0dHJpYnV0ZXMiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkRhdGFUeXBlQXR0 cmlidXRlcyI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+DQogICAgICA8 eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpOb2RlQXR0cmlidXRlcyI+DQogICAgICAgIDx4czpzZXF1 ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJJc0Fic3RyYWN0IiB0eXBlPSJ4czpi b29sZWFuIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICA8 L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhU eXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJEYXRhVHlwZUF0dHJpYnV0ZXMiIHR5cGU9InRuczpE YXRhVHlwZUF0dHJpYnV0ZXMiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlZpZXdBdHRy aWJ1dGVzIj4NCiAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAgICAgIDx4 czpleHRlbnNpb24gYmFzZT0idG5zOk5vZGVBdHRyaWJ1dGVzIj4NCiAgICAgICAgPHhzOnNlcXVl bmNlPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IkNvbnRhaW5zTm9Mb29wcyIgdHlwZT0i eHM6Ym9vbGVhbiIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9 IkV2ZW50Tm90aWZpZXIiIHR5cGU9InhzOnVuc2lnbmVkQnl0ZSIgbWluT2NjdXJzPSIwIiAvPg0K ICAgICAgICA8L3hzOnNlcXVlbmNlPg0KICAgICAgPC94czpleHRlbnNpb24+DQogICAgPC94czpj b21wbGV4Q29udGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0i Vmlld0F0dHJpYnV0ZXMiIHR5cGU9InRuczpWaWV3QXR0cmlidXRlcyIgLz4NCg0KICA8eHM6Y29t cGxleFR5cGUgbmFtZT0iR2VuZXJpY0F0dHJpYnV0ZVZhbHVlIj4NCiAgICA8eHM6c2VxdWVuY2U+ DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBdHRyaWJ1dGVJZCIgdHlwZT0ieHM6dW5zaWduZWRJ bnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlZhbHVlIiB0eXBl PSJ1YTpWYXJpYW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94 czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iR2VuZXJpY0F0dHJpYnV0ZVZhbHVl IiB0eXBlPSJ0bnM6R2VuZXJpY0F0dHJpYnV0ZVZhbHVlIiAvPg0KDQogIDx4czpjb21wbGV4VHlw ZSBuYW1lPSJMaXN0T2ZHZW5lcmljQXR0cmlidXRlVmFsdWUiPg0KICAgIDx4czpzZXF1ZW5jZT4N CiAgICAgIDx4czplbGVtZW50IG5hbWU9IkdlbmVyaWNBdHRyaWJ1dGVWYWx1ZSIgdHlwZT0idG5z OkdlbmVyaWNBdHRyaWJ1dGVWYWx1ZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRl ZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4 VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mR2VuZXJpY0F0dHJpYnV0ZVZhbHVlIiB0 eXBlPSJ0bnM6TGlzdE9mR2VuZXJpY0F0dHJpYnV0ZVZhbHVlIiBuaWxsYWJsZT0idHJ1ZSI+PC94 czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJHZW5lcmljQXR0cmlidXRlcyI+ DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5z aW9uIGJhc2U9InRuczpOb2RlQXR0cmlidXRlcyI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAg ICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBdHRyaWJ1dGVWYWx1ZXMiIHR5cGU9InRuczpMaXN0 T2ZHZW5lcmljQXR0cmlidXRlVmFsdWUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+ DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hz OmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1l PSJHZW5lcmljQXR0cmlidXRlcyIgdHlwZT0idG5zOkdlbmVyaWNBdHRyaWJ1dGVzIiAvPg0KDQog IDx4czpjb21wbGV4VHlwZSBuYW1lPSJBZGROb2Rlc0l0ZW0iPg0KICAgIDx4czpzZXF1ZW5jZT4N CiAgICAgIDx4czplbGVtZW50IG5hbWU9IlBhcmVudE5vZGVJZCIgdHlwZT0idWE6RXhwYW5kZWRO b2RlSWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVu dCBuYW1lPSJSZWZlcmVuY2VUeXBlSWQiIHR5cGU9InVhOk5vZGVJZCIgbWluT2NjdXJzPSIwIiBu aWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlcXVlc3RlZE5ld05v ZGVJZCIgdHlwZT0idWE6RXhwYW5kZWROb2RlSWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRy dWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJCcm93c2VOYW1lIiB0eXBlPSJ1YTpRdWFs aWZpZWROYW1lIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVs ZW1lbnQgbmFtZT0iTm9kZUNsYXNzIiB0eXBlPSJ0bnM6Tm9kZUNsYXNzIiBtaW5PY2N1cnM9IjAi IC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJOb2RlQXR0cmlidXRlcyIgdHlwZT0idWE6RXh0 ZW5zaW9uT2JqZWN0IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhz OmVsZW1lbnQgbmFtZT0iVHlwZURlZmluaXRpb24iIHR5cGU9InVhOkV4cGFuZGVkTm9kZUlkIiBt aW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwv eHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkFkZE5vZGVzSXRlbSIgdHlwZT0i dG5zOkFkZE5vZGVzSXRlbSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mQWRk Tm9kZXNJdGVtIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJB ZGROb2Rlc0l0ZW0iIHR5cGU9InRuczpBZGROb2Rlc0l0ZW0iIG1pbk9jY3Vycz0iMCIgbWF4T2Nj dXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQog IDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkFkZE5vZGVzSXRl bSIgdHlwZT0idG5zOkxpc3RPZkFkZE5vZGVzSXRlbSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxl bWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iQWRkTm9kZXNSZXN1bHQiPg0KICAgIDx4 czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlN0YXR1c0NvZGUiIHR5cGU9InVh OlN0YXR1c0NvZGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkFk ZGVkTm9kZUlkIiB0eXBlPSJ1YTpOb2RlSWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUi IC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1l bnQgbmFtZT0iQWRkTm9kZXNSZXN1bHQiIHR5cGU9InRuczpBZGROb2Rlc1Jlc3VsdCIgLz4NCg0K ICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mQWRkTm9kZXNSZXN1bHQiPg0KICAgIDx4czpz ZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkFkZE5vZGVzUmVzdWx0IiB0eXBlPSJ0 bnM6QWRkTm9kZXNSZXN1bHQiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5p bGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+ DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkFkZE5vZGVzUmVzdWx0IiB0eXBlPSJ0bnM6TGlz dE9mQWRkTm9kZXNSZXN1bHQiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhz OmNvbXBsZXhUeXBlIG5hbWU9IkFkZE5vZGVzUmVxdWVzdCI+DQogICAgPHhzOnNlcXVlbmNlPg0K ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEhlYWRlciIgdHlwZT0idG5zOlJlcXVlc3RI ZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVu dCBuYW1lPSJOb2Rlc1RvQWRkIiB0eXBlPSJ0bnM6TGlzdE9mQWRkTm9kZXNJdGVtIiBtaW5PY2N1 cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29t cGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkFkZE5vZGVzUmVxdWVzdCIgdHlwZT0idG5z OkFkZE5vZGVzUmVxdWVzdCIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iQWRkTm9kZXNS ZXNwb25zZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVz cG9uc2VIZWFkZXIiIHR5cGU9InRuczpSZXNwb25zZUhlYWRlciIgbWluT2NjdXJzPSIwIiBuaWxs YWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlc3VsdHMiIHR5cGU9InRu czpMaXN0T2ZBZGROb2Rlc1Jlc3VsdCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4N CiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRpYWdub3N0aWNJbmZvcyIgdHlwZT0idWE6TGlzdE9m RGlhZ25vc3RpY0luZm8iIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94 czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iQWRk Tm9kZXNSZXNwb25zZSIgdHlwZT0idG5zOkFkZE5vZGVzUmVzcG9uc2UiIC8+DQoNCiAgPHhzOmNv bXBsZXhUeXBlIG5hbWU9IkFkZFJlZmVyZW5jZXNJdGVtIj4NCiAgICA8eHM6c2VxdWVuY2U+DQog ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTb3VyY2VOb2RlSWQiIHR5cGU9InVhOk5vZGVJZCIgbWlu T2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJl ZmVyZW5jZVR5cGVJZCIgdHlwZT0idWE6Tm9kZUlkIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0 cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iSXNGb3J3YXJkIiB0eXBlPSJ4czpib29s ZWFuIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJUYXJnZXRTZXJ2 ZXJVcmkiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4N CiAgICAgIDx4czplbGVtZW50IG5hbWU9IlRhcmdldE5vZGVJZCIgdHlwZT0idWE6RXhwYW5kZWRO b2RlSWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVu dCBuYW1lPSJUYXJnZXROb2RlQ2xhc3MiIHR5cGU9InRuczpOb2RlQ2xhc3MiIG1pbk9jY3Vycz0i MCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxl bWVudCBuYW1lPSJBZGRSZWZlcmVuY2VzSXRlbSIgdHlwZT0idG5zOkFkZFJlZmVyZW5jZXNJdGVt IiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZBZGRSZWZlcmVuY2VzSXRlbSI+ DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQWRkUmVmZXJlbmNl c0l0ZW0iIHR5cGU9InRuczpBZGRSZWZlcmVuY2VzSXRlbSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1 cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAg PC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mQWRkUmVmZXJlbmNl c0l0ZW0iIHR5cGU9InRuczpMaXN0T2ZBZGRSZWZlcmVuY2VzSXRlbSIgbmlsbGFibGU9InRydWUi PjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iQWRkUmVmZXJlbmNlc1Jl cXVlc3QiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlcXVl c3RIZWFkZXIiIHR5cGU9InRuczpSZXF1ZXN0SGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxl PSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVmZXJlbmNlc1RvQWRkIiB0eXBl PSJ0bnM6TGlzdE9mQWRkUmVmZXJlbmNlc0l0ZW0iIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRy dWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVs ZW1lbnQgbmFtZT0iQWRkUmVmZXJlbmNlc1JlcXVlc3QiIHR5cGU9InRuczpBZGRSZWZlcmVuY2Vz UmVxdWVzdCIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iQWRkUmVmZXJlbmNlc1Jlc3Bv bnNlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXNwb25z ZUhlYWRlciIgdHlwZT0idG5zOlJlc3BvbnNlSGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxl PSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzdWx0cyIgdHlwZT0idWE6TGlz dE9mU3RhdHVzQ29kZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4 czplbGVtZW50IG5hbWU9IkRpYWdub3N0aWNJbmZvcyIgdHlwZT0idWE6TGlzdE9mRGlhZ25vc3Rp Y0luZm8iIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5j ZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iQWRkUmVmZXJlbmNl c1Jlc3BvbnNlIiB0eXBlPSJ0bnM6QWRkUmVmZXJlbmNlc1Jlc3BvbnNlIiAvPg0KDQogIDx4czpj b21wbGV4VHlwZSBuYW1lPSJEZWxldGVOb2Rlc0l0ZW0iPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAg ICAgIDx4czplbGVtZW50IG5hbWU9Ik5vZGVJZCIgdHlwZT0idWE6Tm9kZUlkIiBtaW5PY2N1cnM9 IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGVsZXRlVGFy Z2V0UmVmZXJlbmNlcyIgdHlwZT0ieHM6Ym9vbGVhbiIgbWluT2NjdXJzPSIwIiAvPg0KICAgIDwv eHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkRl bGV0ZU5vZGVzSXRlbSIgdHlwZT0idG5zOkRlbGV0ZU5vZGVzSXRlbSIgLz4NCg0KICA8eHM6Y29t cGxleFR5cGUgbmFtZT0iTGlzdE9mRGVsZXRlTm9kZXNJdGVtIj4NCiAgICA8eHM6c2VxdWVuY2U+ DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEZWxldGVOb2Rlc0l0ZW0iIHR5cGU9InRuczpEZWxl dGVOb2Rlc0l0ZW0iIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxl PSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4 czplbGVtZW50IG5hbWU9Ikxpc3RPZkRlbGV0ZU5vZGVzSXRlbSIgdHlwZT0idG5zOkxpc3RPZkRl bGV0ZU5vZGVzSXRlbSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29t cGxleFR5cGUgbmFtZT0iRGVsZXRlTm9kZXNSZXF1ZXN0Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQog ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0SGVhZGVyIiB0eXBlPSJ0bnM6UmVxdWVzdEhl YWRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50 IG5hbWU9Ik5vZGVzVG9EZWxldGUiIHR5cGU9InRuczpMaXN0T2ZEZWxldGVOb2Rlc0l0ZW0iIG1p bk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94 czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iRGVsZXRlTm9kZXNSZXF1ZXN0IiB0 eXBlPSJ0bnM6RGVsZXRlTm9kZXNSZXF1ZXN0IiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1l PSJEZWxldGVOb2Rlc1Jlc3BvbnNlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxl bWVudCBuYW1lPSJSZXNwb25zZUhlYWRlciIgdHlwZT0idG5zOlJlc3BvbnNlSGVhZGVyIiBtaW5P Y2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVz dWx0cyIgdHlwZT0idWE6TGlzdE9mU3RhdHVzQ29kZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0i dHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRpYWdub3N0aWNJbmZvcyIgdHlwZT0i dWE6TGlzdE9mRGlhZ25vc3RpY0luZm8iIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+ DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQg bmFtZT0iRGVsZXRlTm9kZXNSZXNwb25zZSIgdHlwZT0idG5zOkRlbGV0ZU5vZGVzUmVzcG9uc2Ui IC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkRlbGV0ZVJlZmVyZW5jZXNJdGVtIj4NCiAg ICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTb3VyY2VOb2RlSWQiIHR5 cGU9InVhOk5vZGVJZCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4 czplbGVtZW50IG5hbWU9IlJlZmVyZW5jZVR5cGVJZCIgdHlwZT0idWE6Tm9kZUlkIiBtaW5PY2N1 cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iSXNGb3J3 YXJkIiB0eXBlPSJ4czpib29sZWFuIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVu dCBuYW1lPSJUYXJnZXROb2RlSWQiIHR5cGU9InVhOkV4cGFuZGVkTm9kZUlkIiBtaW5PY2N1cnM9 IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGVsZXRlQmlk aXJlY3Rpb25hbCIgdHlwZT0ieHM6Ym9vbGVhbiIgbWluT2NjdXJzPSIwIiAvPg0KICAgIDwveHM6 c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkRlbGV0 ZVJlZmVyZW5jZXNJdGVtIiB0eXBlPSJ0bnM6RGVsZXRlUmVmZXJlbmNlc0l0ZW0iIC8+DQoNCiAg PHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkRlbGV0ZVJlZmVyZW5jZXNJdGVtIj4NCiAgICA8 eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEZWxldGVSZWZlcmVuY2VzSXRl bSIgdHlwZT0idG5zOkRlbGV0ZVJlZmVyZW5jZXNJdGVtIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vy cz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8 L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZEZWxldGVSZWZlcmVu Y2VzSXRlbSIgdHlwZT0idG5zOkxpc3RPZkRlbGV0ZVJlZmVyZW5jZXNJdGVtIiBuaWxsYWJsZT0i dHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJEZWxldGVSZWZl cmVuY2VzUmVxdWVzdCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt ZT0iUmVxdWVzdEhlYWRlciIgdHlwZT0idG5zOlJlcXVlc3RIZWFkZXIiIG1pbk9jY3Vycz0iMCIg bmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZWZlcmVuY2VzVG9E ZWxldGUiIHR5cGU9InRuczpMaXN0T2ZEZWxldGVSZWZlcmVuY2VzSXRlbSIgbWluT2NjdXJzPSIw IiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhU eXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJEZWxldGVSZWZlcmVuY2VzUmVxdWVzdCIgdHlwZT0i dG5zOkRlbGV0ZVJlZmVyZW5jZXNSZXF1ZXN0IiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1l PSJEZWxldGVSZWZlcmVuY2VzUmVzcG9uc2UiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4 czplbGVtZW50IG5hbWU9IlJlc3BvbnNlSGVhZGVyIiB0eXBlPSJ0bnM6UmVzcG9uc2VIZWFkZXIi IG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1l PSJSZXN1bHRzIiB0eXBlPSJ1YTpMaXN0T2ZTdGF0dXNDb2RlIiBtaW5PY2N1cnM9IjAiIG5pbGxh YmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGlhZ25vc3RpY0luZm9zIiB0 eXBlPSJ1YTpMaXN0T2ZEaWFnbm9zdGljSW5mbyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1 ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxl bWVudCBuYW1lPSJEZWxldGVSZWZlcmVuY2VzUmVzcG9uc2UiIHR5cGU9InRuczpEZWxldGVSZWZl cmVuY2VzUmVzcG9uc2UiIC8+DQoNCiAgPHhzOnNpbXBsZVR5cGUgIG5hbWU9IkF0dHJpYnV0ZVdy aXRlTWFzayI+DQogICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnVuc2lnbmVkSW50Ij4NCiAg ICA8L3hzOnJlc3RyaWN0aW9uPg0KICA8L3hzOnNpbXBsZVR5cGU+DQogIDx4czplbGVtZW50IG5h bWU9IkF0dHJpYnV0ZVdyaXRlTWFzayIgdHlwZT0idG5zOkF0dHJpYnV0ZVdyaXRlTWFzayIgLz4N Cg0KICA8eHM6c2ltcGxlVHlwZSAgbmFtZT0iQnJvd3NlRGlyZWN0aW9uIj4NCiAgICA8eHM6cmVz dHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIj4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0i Rm9yd2FyZF8wIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJJbnZlcnNlXzEiIC8+ DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkJvdGhfMiIgLz4NCiAgICAgIDx4czplbnVt ZXJhdGlvbiB2YWx1ZT0iSW52YWxpZF8zIiAvPg0KICAgIDwveHM6cmVzdHJpY3Rpb24+DQogIDwv eHM6c2ltcGxlVHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iQnJvd3NlRGlyZWN0aW9uIiB0eXBl PSJ0bnM6QnJvd3NlRGlyZWN0aW9uIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJWaWV3 RGVzY3JpcHRpb24iPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9 IlZpZXdJZCIgdHlwZT0idWE6Tm9kZUlkIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAv Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVGltZXN0YW1wIiB0eXBlPSJ4czpkYXRlVGltZSIg bWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVmlld1ZlcnNpb24iIHR5 cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgPC94czpzZXF1ZW5jZT4N CiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iVmlld0Rlc2NyaXB0aW9u IiB0eXBlPSJ0bnM6Vmlld0Rlc2NyaXB0aW9uIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1l PSJCcm93c2VEZXNjcmlwdGlvbiI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1l bnQgbmFtZT0iTm9kZUlkIiB0eXBlPSJ1YTpOb2RlSWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9 InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJCcm93c2VEaXJlY3Rpb24iIHR5cGU9 InRuczpCcm93c2VEaXJlY3Rpb24iIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50 IG5hbWU9IlJlZmVyZW5jZVR5cGVJZCIgdHlwZT0idWE6Tm9kZUlkIiBtaW5PY2N1cnM9IjAiIG5p bGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iSW5jbHVkZVN1YnR5cGVz IiB0eXBlPSJ4czpib29sZWFuIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBu YW1lPSJOb2RlQ2xhc3NNYXNrIiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAv Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzdWx0TWFzayIgdHlwZT0ieHM6dW5zaWduZWRJ bnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhU eXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJCcm93c2VEZXNjcmlwdGlvbiIgdHlwZT0idG5zOkJy b3dzZURlc2NyaXB0aW9uIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZCcm93 c2VEZXNjcmlwdGlvbiI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt ZT0iQnJvd3NlRGVzY3JpcHRpb24iIHR5cGU9InRuczpCcm93c2VEZXNjcmlwdGlvbiIgbWluT2Nj dXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94 czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlz dE9mQnJvd3NlRGVzY3JpcHRpb24iIHR5cGU9InRuczpMaXN0T2ZCcm93c2VEZXNjcmlwdGlvbiIg bmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6c2ltcGxlVHlwZSAgbmFtZT0i QnJvd3NlUmVzdWx0TWFzayI+DQogICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnN0cmluZyI+ DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Ik5vbmVfMCIgLz4NCiAgICAgIDx4czplbnVt ZXJhdGlvbiB2YWx1ZT0iUmVmZXJlbmNlVHlwZUlkXzEiIC8+DQogICAgICA8eHM6ZW51bWVyYXRp b24gdmFsdWU9IklzRm9yd2FyZF8yIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJO b2RlQ2xhc3NfNCIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iQnJvd3NlTmFtZV84 IiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJEaXNwbGF5TmFtZV8xNiIgLz4NCiAg ICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iVHlwZURlZmluaXRpb25fMzIiIC8+DQogICAgICA8 eHM6ZW51bWVyYXRpb24gdmFsdWU9IkFsbF82MyIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2 YWx1ZT0iUmVmZXJlbmNlVHlwZUluZm9fMyIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1 ZT0iVGFyZ2V0SW5mb182MCIgLz4NCiAgICA8L3hzOnJlc3RyaWN0aW9uPg0KICA8L3hzOnNpbXBs ZVR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkJyb3dzZVJlc3VsdE1hc2siIHR5cGU9InRuczpC cm93c2VSZXN1bHRNYXNrIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJSZWZlcmVuY2VE ZXNjcmlwdGlvbiI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i UmVmZXJlbmNlVHlwZUlkIiB0eXBlPSJ1YTpOb2RlSWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9 InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJJc0ZvcndhcmQiIHR5cGU9InhzOmJv b2xlYW4iIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik5vZGVJZCIg dHlwZT0idWE6RXhwYW5kZWROb2RlSWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+ DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJCcm93c2VOYW1lIiB0eXBlPSJ1YTpRdWFsaWZpZWRO YW1lIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQg bmFtZT0iRGlzcGxheU5hbWUiIHR5cGU9InVhOkxvY2FsaXplZFRleHQiIG1pbk9jY3Vycz0iMCIg bmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJOb2RlQ2xhc3MiIHR5 cGU9InRuczpOb2RlQ2xhc3MiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5h bWU9IlR5cGVEZWZpbml0aW9uIiB0eXBlPSJ1YTpFeHBhbmRlZE5vZGVJZCIgbWluT2NjdXJzPSIw IiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhU eXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJSZWZlcmVuY2VEZXNjcmlwdGlvbiIgdHlwZT0idG5z OlJlZmVyZW5jZURlc2NyaXB0aW9uIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0 T2ZSZWZlcmVuY2VEZXNjcmlwdGlvbiI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVs ZW1lbnQgbmFtZT0iUmVmZXJlbmNlRGVzY3JpcHRpb24iIHR5cGU9InRuczpSZWZlcmVuY2VEZXNj cmlwdGlvbiIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRy dWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVs ZW1lbnQgbmFtZT0iTGlzdE9mUmVmZXJlbmNlRGVzY3JpcHRpb24iIHR5cGU9InRuczpMaXN0T2ZS ZWZlcmVuY2VEZXNjcmlwdGlvbiIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8 eHM6ZWxlbWVudCBuYW1lPSJDb250aW51YXRpb25Qb2ludCIgdHlwZT0ieHM6YmFzZTY0QmluYXJ5 IiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJCcm93c2VSZXN1bHQiPg0KICAgIDx4czpz ZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlN0YXR1c0NvZGUiIHR5cGU9InVhOlN0 YXR1c0NvZGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkNvbnRp bnVhdGlvblBvaW50IiB0eXBlPSJ4czpiYXNlNjRCaW5hcnkiIG1pbk9jY3Vycz0iMCIgbmlsbGFi bGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZWZlcmVuY2VzIiB0eXBlPSJ0 bnM6TGlzdE9mUmVmZXJlbmNlRGVzY3JpcHRpb24iIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRy dWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVs ZW1lbnQgbmFtZT0iQnJvd3NlUmVzdWx0IiB0eXBlPSJ0bnM6QnJvd3NlUmVzdWx0IiAvPg0KDQog IDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZCcm93c2VSZXN1bHQiPg0KICAgIDx4czpzZXF1 ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkJyb3dzZVJlc3VsdCIgdHlwZT0idG5zOkJy b3dzZVJlc3VsdCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9 InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhz OmVsZW1lbnQgbmFtZT0iTGlzdE9mQnJvd3NlUmVzdWx0IiB0eXBlPSJ0bnM6TGlzdE9mQnJvd3Nl UmVzdWx0IiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlw ZSBuYW1lPSJCcm93c2VSZXF1ZXN0Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxl bWVudCBuYW1lPSJSZXF1ZXN0SGVhZGVyIiB0eXBlPSJ0bnM6UmVxdWVzdEhlYWRlciIgbWluT2Nj dXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlZpZXci IHR5cGU9InRuczpWaWV3RGVzY3JpcHRpb24iIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUi IC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0ZWRNYXhSZWZlcmVuY2VzUGVyTm9k ZSIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVt ZW50IG5hbWU9Ik5vZGVzVG9Ccm93c2UiIHR5cGU9InRuczpMaXN0T2ZCcm93c2VEZXNjcmlwdGlv biIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0K ICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJCcm93c2VSZXF1ZXN0IiB0 eXBlPSJ0bnM6QnJvd3NlUmVxdWVzdCIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iQnJv d3NlUmVzcG9uc2UiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9 IlJlc3BvbnNlSGVhZGVyIiB0eXBlPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIG1pbk9jY3Vycz0iMCIg bmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXN1bHRzIiB0eXBl PSJ0bnM6TGlzdE9mQnJvd3NlUmVzdWx0IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAv Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGlhZ25vc3RpY0luZm9zIiB0eXBlPSJ1YTpMaXN0 T2ZEaWFnbm9zdGljSW5mbyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8 L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJC cm93c2VSZXNwb25zZSIgdHlwZT0idG5zOkJyb3dzZVJlc3BvbnNlIiAvPg0KDQogIDx4czpjb21w bGV4VHlwZSBuYW1lPSJCcm93c2VOZXh0UmVxdWVzdCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAg ICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEhlYWRlciIgdHlwZT0idG5zOlJlcXVlc3RIZWFk ZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBu YW1lPSJSZWxlYXNlQ29udGludWF0aW9uUG9pbnRzIiB0eXBlPSJ4czpib29sZWFuIiBtaW5PY2N1 cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDb250aW51YXRpb25Qb2ludHMiIHR5 cGU9InVhOkxpc3RPZkJ5dGVTdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+ DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQg bmFtZT0iQnJvd3NlTmV4dFJlcXVlc3QiIHR5cGU9InRuczpCcm93c2VOZXh0UmVxdWVzdCIgLz4N Cg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iQnJvd3NlTmV4dFJlc3BvbnNlIj4NCiAgICA8eHM6 c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUhlYWRlciIgdHlwZT0i dG5zOlJlc3BvbnNlSGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAg ICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzdWx0cyIgdHlwZT0idG5zOkxpc3RPZkJyb3dzZVJlc3Vs dCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5h bWU9IkRpYWdub3N0aWNJbmZvcyIgdHlwZT0idWE6TGlzdE9mRGlhZ25vc3RpY0luZm8iIG1pbk9j Y3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpj b21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iQnJvd3NlTmV4dFJlc3BvbnNlIiB0eXBl PSJ0bnM6QnJvd3NlTmV4dFJlc3BvbnNlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJS ZWxhdGl2ZVBhdGhFbGVtZW50Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVu dCBuYW1lPSJSZWZlcmVuY2VUeXBlSWQiIHR5cGU9InVhOk5vZGVJZCIgbWluT2NjdXJzPSIwIiBu aWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IklzSW52ZXJzZSIgdHlw ZT0ieHM6Ym9vbGVhbiIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i SW5jbHVkZVN1YnR5cGVzIiB0eXBlPSJ4czpib29sZWFuIiBtaW5PY2N1cnM9IjAiIC8+DQogICAg ICA8eHM6ZWxlbWVudCBuYW1lPSJUYXJnZXROYW1lIiB0eXBlPSJ1YTpRdWFsaWZpZWROYW1lIiBt aW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwv eHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlJlbGF0aXZlUGF0aEVsZW1lbnQi IHR5cGU9InRuczpSZWxhdGl2ZVBhdGhFbGVtZW50IiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBu YW1lPSJMaXN0T2ZSZWxhdGl2ZVBhdGhFbGVtZW50Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAg ICA8eHM6ZWxlbWVudCBuYW1lPSJSZWxhdGl2ZVBhdGhFbGVtZW50IiB0eXBlPSJ0bnM6UmVsYXRp dmVQYXRoRWxlbWVudCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFi bGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAg PHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mUmVsYXRpdmVQYXRoRWxlbWVudCIgdHlwZT0idG5zOkxp c3RPZlJlbGF0aXZlUGF0aEVsZW1lbnQiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoN CiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlJlbGF0aXZlUGF0aCI+DQogICAgPHhzOnNlcXVlbmNl Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRWxlbWVudHMiIHR5cGU9InRuczpMaXN0T2ZSZWxh dGl2ZVBhdGhFbGVtZW50IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwv eHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlJl bGF0aXZlUGF0aCIgdHlwZT0idG5zOlJlbGF0aXZlUGF0aCIgLz4NCg0KICA8eHM6Y29tcGxleFR5 cGUgbmFtZT0iQnJvd3NlUGF0aCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1l bnQgbmFtZT0iU3RhcnRpbmdOb2RlIiB0eXBlPSJ1YTpOb2RlSWQiIG1pbk9jY3Vycz0iMCIgbmls bGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZWxhdGl2ZVBhdGgiIHR5 cGU9InRuczpSZWxhdGl2ZVBhdGgiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQog ICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFt ZT0iQnJvd3NlUGF0aCIgdHlwZT0idG5zOkJyb3dzZVBhdGgiIC8+DQoNCiAgPHhzOmNvbXBsZXhU eXBlIG5hbWU9Ikxpc3RPZkJyb3dzZVBhdGgiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4 czplbGVtZW50IG5hbWU9IkJyb3dzZVBhdGgiIHR5cGU9InRuczpCcm93c2VQYXRoIiBtaW5PY2N1 cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hz OnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0 T2ZCcm93c2VQYXRoIiB0eXBlPSJ0bnM6TGlzdE9mQnJvd3NlUGF0aCIgbmlsbGFibGU9InRydWUi PjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iQnJvd3NlUGF0aFRhcmdl dCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVGFyZ2V0SWQi IHR5cGU9InVhOkV4cGFuZGVkTm9kZUlkIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAv Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVtYWluaW5nUGF0aEluZGV4IiB0eXBlPSJ4czp1 bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6 Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkJyb3dzZVBhdGhUYXJnZXQiIHR5cGU9 InRuczpCcm93c2VQYXRoVGFyZ2V0IiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0 T2ZCcm93c2VQYXRoVGFyZ2V0Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVu dCBuYW1lPSJCcm93c2VQYXRoVGFyZ2V0IiB0eXBlPSJ0bnM6QnJvd3NlUGF0aFRhcmdldCIgbWlu T2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAg PC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0i TGlzdE9mQnJvd3NlUGF0aFRhcmdldCIgdHlwZT0idG5zOkxpc3RPZkJyb3dzZVBhdGhUYXJnZXQi IG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9 IkJyb3dzZVBhdGhSZXN1bHQiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50 IG5hbWU9IlN0YXR1c0NvZGUiIHR5cGU9InVhOlN0YXR1c0NvZGUiIG1pbk9jY3Vycz0iMCIgLz4N CiAgICAgIDx4czplbGVtZW50IG5hbWU9IlRhcmdldHMiIHR5cGU9InRuczpMaXN0T2ZCcm93c2VQ YXRoVGFyZ2V0IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2Vx dWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkJyb3dzZVBh dGhSZXN1bHQiIHR5cGU9InRuczpCcm93c2VQYXRoUmVzdWx0IiAvPg0KDQogIDx4czpjb21wbGV4 VHlwZSBuYW1lPSJMaXN0T2ZCcm93c2VQYXRoUmVzdWx0Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQog ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJCcm93c2VQYXRoUmVzdWx0IiB0eXBlPSJ0bnM6QnJvd3Nl UGF0aFJlc3VsdCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9 InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhz OmVsZW1lbnQgbmFtZT0iTGlzdE9mQnJvd3NlUGF0aFJlc3VsdCIgdHlwZT0idG5zOkxpc3RPZkJy b3dzZVBhdGhSZXN1bHQiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNv bXBsZXhUeXBlIG5hbWU9IlRyYW5zbGF0ZUJyb3dzZVBhdGhzVG9Ob2RlSWRzUmVxdWVzdCI+DQog ICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEhlYWRlciIg dHlwZT0idG5zOlJlcXVlc3RIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+ DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJCcm93c2VQYXRocyIgdHlwZT0idG5zOkxpc3RPZkJy b3dzZVBhdGgiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1 ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iVHJhbnNsYXRl QnJvd3NlUGF0aHNUb05vZGVJZHNSZXF1ZXN0IiB0eXBlPSJ0bnM6VHJhbnNsYXRlQnJvd3NlUGF0 aHNUb05vZGVJZHNSZXF1ZXN0IiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJUcmFuc2xh dGVCcm93c2VQYXRoc1RvTm9kZUlkc1Jlc3BvbnNlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAg ICA8eHM6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUhlYWRlciIgdHlwZT0idG5zOlJlc3BvbnNlSGVh ZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQg bmFtZT0iUmVzdWx0cyIgdHlwZT0idG5zOkxpc3RPZkJyb3dzZVBhdGhSZXN1bHQiIG1pbk9jY3Vy cz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEaWFnbm9z dGljSW5mb3MiIHR5cGU9InVhOkxpc3RPZkRpYWdub3N0aWNJbmZvIiBtaW5PY2N1cnM9IjAiIG5p bGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+ DQogIDx4czplbGVtZW50IG5hbWU9IlRyYW5zbGF0ZUJyb3dzZVBhdGhzVG9Ob2RlSWRzUmVzcG9u c2UiIHR5cGU9InRuczpUcmFuc2xhdGVCcm93c2VQYXRoc1RvTm9kZUlkc1Jlc3BvbnNlIiAvPg0K DQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJSZWdpc3Rlck5vZGVzUmVxdWVzdCI+DQogICAgPHhz OnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEhlYWRlciIgdHlwZT0i dG5zOlJlcXVlc3RIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAg ICA8eHM6ZWxlbWVudCBuYW1lPSJOb2Rlc1RvUmVnaXN0ZXIiIHR5cGU9InVhOkxpc3RPZk5vZGVJ ZCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0K ICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJSZWdpc3Rlck5vZGVzUmVx dWVzdCIgdHlwZT0idG5zOlJlZ2lzdGVyTm9kZXNSZXF1ZXN0IiAvPg0KDQogIDx4czpjb21wbGV4 VHlwZSBuYW1lPSJSZWdpc3Rlck5vZGVzUmVzcG9uc2UiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAg ICAgIDx4czplbGVtZW50IG5hbWU9IlJlc3BvbnNlSGVhZGVyIiB0eXBlPSJ0bnM6UmVzcG9uc2VI ZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVu dCBuYW1lPSJSZWdpc3RlcmVkTm9kZUlkcyIgdHlwZT0idWE6TGlzdE9mTm9kZUlkIiBtaW5PY2N1 cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29t cGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlJlZ2lzdGVyTm9kZXNSZXNwb25zZSIgdHlw ZT0idG5zOlJlZ2lzdGVyTm9kZXNSZXNwb25zZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFt ZT0iVW5yZWdpc3Rlck5vZGVzUmVxdWVzdCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhz OmVsZW1lbnQgbmFtZT0iUmVxdWVzdEhlYWRlciIgdHlwZT0idG5zOlJlcXVlc3RIZWFkZXIiIG1p bk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJO b2Rlc1RvVW5yZWdpc3RlciIgdHlwZT0idWE6TGlzdE9mTm9kZUlkIiBtaW5PY2N1cnM9IjAiIG5p bGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+ DQogIDx4czplbGVtZW50IG5hbWU9IlVucmVnaXN0ZXJOb2Rlc1JlcXVlc3QiIHR5cGU9InRuczpV bnJlZ2lzdGVyTm9kZXNSZXF1ZXN0IiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJVbnJl Z2lzdGVyTm9kZXNSZXNwb25zZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1l bnQgbmFtZT0iUmVzcG9uc2VIZWFkZXIiIHR5cGU9InRuczpSZXNwb25zZUhlYWRlciIgbWluT2Nj dXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNv bXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJVbnJlZ2lzdGVyTm9kZXNSZXNwb25zZSIg dHlwZT0idG5zOlVucmVnaXN0ZXJOb2Rlc1Jlc3BvbnNlIiAvPg0KDQogIDx4czplbGVtZW50IG5h bWU9IkNvdW50ZXIiIHR5cGU9InhzOnVuc2lnbmVkSW50IiAvPg0KDQogIDx4czplbGVtZW50IG5h bWU9Ik51bWVyaWNSYW5nZSIgdHlwZT0ieHM6c3RyaW5nIiAvPg0KDQogIDx4czpjb21wbGV4VHlw ZSBuYW1lPSJFbmRwb2ludENvbmZpZ3VyYXRpb24iPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAg IDx4czplbGVtZW50IG5hbWU9Ik9wZXJhdGlvblRpbWVvdXQiIHR5cGU9InhzOmludCIgbWluT2Nj dXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVXNlQmluYXJ5RW5jb2RpbmciIHR5 cGU9InhzOmJvb2xlYW4iIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9 Ik1heFN0cmluZ0xlbmd0aCIgdHlwZT0ieHM6aW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8 eHM6ZWxlbWVudCBuYW1lPSJNYXhCeXRlU3RyaW5nTGVuZ3RoIiB0eXBlPSJ4czppbnQiIG1pbk9j Y3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik1heEFycmF5TGVuZ3RoIiB0eXBl PSJ4czppbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik1heE1l c3NhZ2VTaXplIiB0eXBlPSJ4czppbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVt ZW50IG5hbWU9Ik1heEJ1ZmZlclNpemUiIHR5cGU9InhzOmludCIgbWluT2NjdXJzPSIwIiAvPg0K ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQ2hhbm5lbExpZmV0aW1lIiB0eXBlPSJ4czppbnQiIG1p bk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNlY3VyaXR5VG9rZW5MaWZl dGltZSIgdHlwZT0ieHM6aW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgPC94czpzZXF1ZW5jZT4N CiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iRW5kcG9pbnRDb25maWd1 cmF0aW9uIiB0eXBlPSJ0bnM6RW5kcG9pbnRDb25maWd1cmF0aW9uIiAvPg0KDQogIDx4czpjb21w bGV4VHlwZSBuYW1lPSJMaXN0T2ZFbmRwb2ludENvbmZpZ3VyYXRpb24iPg0KICAgIDx4czpzZXF1 ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkVuZHBvaW50Q29uZmlndXJhdGlvbiIgdHlw ZT0idG5zOkVuZHBvaW50Q29uZmlndXJhdGlvbiIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVu Ym91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpj b21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mRW5kcG9pbnRDb25maWd1cmF0 aW9uIiB0eXBlPSJ0bnM6TGlzdE9mRW5kcG9pbnRDb25maWd1cmF0aW9uIiBuaWxsYWJsZT0idHJ1 ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJRdWVyeURhdGFEZXNj cmlwdGlvbiI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVs YXRpdmVQYXRoIiB0eXBlPSJ0bnM6UmVsYXRpdmVQYXRoIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxl PSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQXR0cmlidXRlSWQiIHR5cGU9Inhz OnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJJ bmRleFJhbmdlIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUi IC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1l bnQgbmFtZT0iUXVlcnlEYXRhRGVzY3JpcHRpb24iIHR5cGU9InRuczpRdWVyeURhdGFEZXNjcmlw dGlvbiIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mUXVlcnlEYXRhRGVzY3Jp cHRpb24iPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlF1ZXJ5 RGF0YURlc2NyaXB0aW9uIiB0eXBlPSJ0bnM6UXVlcnlEYXRhRGVzY3JpcHRpb24iIG1pbk9jY3Vy cz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6 c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RP ZlF1ZXJ5RGF0YURlc2NyaXB0aW9uIiB0eXBlPSJ0bnM6TGlzdE9mUXVlcnlEYXRhRGVzY3JpcHRp b24iIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5h bWU9Ik5vZGVUeXBlRGVzY3JpcHRpb24iPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czpl bGVtZW50IG5hbWU9IlR5cGVEZWZpbml0aW9uTm9kZSIgdHlwZT0idWE6RXhwYW5kZWROb2RlSWQi IG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1l PSJJbmNsdWRlU3ViVHlwZXMiIHR5cGU9InhzOmJvb2xlYW4iIG1pbk9jY3Vycz0iMCIgLz4NCiAg ICAgIDx4czplbGVtZW50IG5hbWU9IkRhdGFUb1JldHVybiIgdHlwZT0idG5zOkxpc3RPZlF1ZXJ5 RGF0YURlc2NyaXB0aW9uIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwv eHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ik5v ZGVUeXBlRGVzY3JpcHRpb24iIHR5cGU9InRuczpOb2RlVHlwZURlc2NyaXB0aW9uIiAvPg0KDQog IDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZOb2RlVHlwZURlc2NyaXB0aW9uIj4NCiAgICA8 eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJOb2RlVHlwZURlc2NyaXB0aW9u IiB0eXBlPSJ0bnM6Tm9kZVR5cGVEZXNjcmlwdGlvbiIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9 InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94 czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mTm9kZVR5cGVEZXNjcmlw dGlvbiIgdHlwZT0idG5zOkxpc3RPZk5vZGVUeXBlRGVzY3JpcHRpb24iIG5pbGxhYmxlPSJ0cnVl Ij48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOnNpbXBsZVR5cGUgIG5hbWU9IkZpbHRlck9wZXJhdG9y Ij4NCiAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIj4NCiAgICAgIDx4czplbnVt ZXJhdGlvbiB2YWx1ZT0iRXF1YWxzXzAiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9 IklzTnVsbF8xIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJHcmVhdGVyVGhhbl8y IiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJMZXNzVGhhbl8zIiAvPg0KICAgICAg PHhzOmVudW1lcmF0aW9uIHZhbHVlPSJHcmVhdGVyVGhhbk9yRXF1YWxfNCIgLz4NCiAgICAgIDx4 czplbnVtZXJhdGlvbiB2YWx1ZT0iTGVzc1RoYW5PckVxdWFsXzUiIC8+DQogICAgICA8eHM6ZW51 bWVyYXRpb24gdmFsdWU9Ikxpa2VfNiIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0i Tm90XzciIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkJldHdlZW5fOCIgLz4NCiAg ICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iSW5MaXN0XzkiIC8+DQogICAgICA8eHM6ZW51bWVy YXRpb24gdmFsdWU9IkFuZF8xMCIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iT3Jf MTEiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkNhc3RfMTIiIC8+DQogICAgICA8 eHM6ZW51bWVyYXRpb24gdmFsdWU9IkluVmlld18xMyIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlv biB2YWx1ZT0iT2ZUeXBlXzE0IiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJSZWxh dGVkVG9fMTUiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkJpdHdpc2VBbmRfMTYi IC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkJpdHdpc2VPcl8xNyIgLz4NCiAgICA8 L3hzOnJlc3RyaWN0aW9uPg0KICA8L3hzOnNpbXBsZVR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9 IkZpbHRlck9wZXJhdG9yIiB0eXBlPSJ0bnM6RmlsdGVyT3BlcmF0b3IiIC8+DQoNCiAgPHhzOmNv bXBsZXhUeXBlIG5hbWU9IlF1ZXJ5RGF0YVNldCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAg PHhzOmVsZW1lbnQgbmFtZT0iTm9kZUlkIiB0eXBlPSJ1YTpFeHBhbmRlZE5vZGVJZCIgbWluT2Nj dXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlR5cGVE ZWZpbml0aW9uTm9kZSIgdHlwZT0idWE6RXhwYW5kZWROb2RlSWQiIG1pbk9jY3Vycz0iMCIgbmls bGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJWYWx1ZXMiIHR5cGU9InVh Okxpc3RPZlZhcmlhbnQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94 czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iUXVl cnlEYXRhU2V0IiB0eXBlPSJ0bnM6UXVlcnlEYXRhU2V0IiAvPg0KDQogIDx4czpjb21wbGV4VHlw ZSBuYW1lPSJMaXN0T2ZRdWVyeURhdGFTZXQiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4 czplbGVtZW50IG5hbWU9IlF1ZXJ5RGF0YVNldCIgdHlwZT0idG5zOlF1ZXJ5RGF0YVNldCIgbWlu T2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAg PC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0i TGlzdE9mUXVlcnlEYXRhU2V0IiB0eXBlPSJ0bnM6TGlzdE9mUXVlcnlEYXRhU2V0IiBuaWxsYWJs ZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJOb2RlUmVm ZXJlbmNlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJOb2Rl SWQiIHR5cGU9InVhOk5vZGVJZCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAg ICAgIDx4czplbGVtZW50IG5hbWU9IlJlZmVyZW5jZVR5cGVJZCIgdHlwZT0idWE6Tm9kZUlkIiBt aW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i SXNGb3J3YXJkIiB0eXBlPSJ4czpib29sZWFuIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6 ZWxlbWVudCBuYW1lPSJSZWZlcmVuY2VkTm9kZUlkcyIgdHlwZT0idWE6TGlzdE9mTm9kZUlkIiBt aW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwv eHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ik5vZGVSZWZlcmVuY2UiIHR5cGU9 InRuczpOb2RlUmVmZXJlbmNlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZO b2RlUmVmZXJlbmNlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1l PSJOb2RlUmVmZXJlbmNlIiB0eXBlPSJ0bnM6Tm9kZVJlZmVyZW5jZSIgbWluT2NjdXJzPSIwIiBt YXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5j ZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mTm9kZVJl ZmVyZW5jZSIgdHlwZT0idG5zOkxpc3RPZk5vZGVSZWZlcmVuY2UiIG5pbGxhYmxlPSJ0cnVlIj48 L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkNvbnRlbnRGaWx0ZXJFbGVt ZW50Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJGaWx0ZXJP cGVyYXRvciIgdHlwZT0idG5zOkZpbHRlck9wZXJhdG9yIiBtaW5PY2N1cnM9IjAiIC8+DQogICAg ICA8eHM6ZWxlbWVudCBuYW1lPSJGaWx0ZXJPcGVyYW5kcyIgdHlwZT0idWE6TGlzdE9mRXh0ZW5z aW9uT2JqZWN0IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2Vx dWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkNvbnRlbnRG aWx0ZXJFbGVtZW50IiB0eXBlPSJ0bnM6Q29udGVudEZpbHRlckVsZW1lbnQiIC8+DQoNCiAgPHhz OmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkNvbnRlbnRGaWx0ZXJFbGVtZW50Ij4NCiAgICA8eHM6 c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDb250ZW50RmlsdGVyRWxlbWVudCIg dHlwZT0idG5zOkNvbnRlbnRGaWx0ZXJFbGVtZW50IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0i dW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hz OmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZDb250ZW50RmlsdGVyRWxl bWVudCIgdHlwZT0idG5zOkxpc3RPZkNvbnRlbnRGaWx0ZXJFbGVtZW50IiBuaWxsYWJsZT0idHJ1 ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJDb250ZW50RmlsdGVy Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJFbGVtZW50cyIg dHlwZT0idG5zOkxpc3RPZkNvbnRlbnRGaWx0ZXJFbGVtZW50IiBtaW5PY2N1cnM9IjAiIG5pbGxh YmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQog IDx4czplbGVtZW50IG5hbWU9IkNvbnRlbnRGaWx0ZXIiIHR5cGU9InRuczpDb250ZW50RmlsdGVy IiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZDb250ZW50RmlsdGVyIj4NCiAg ICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDb250ZW50RmlsdGVyIiB0 eXBlPSJ0bnM6Q29udGVudEZpbHRlciIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRl ZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4 VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mQ29udGVudEZpbHRlciIgdHlwZT0idG5z Okxpc3RPZkNvbnRlbnRGaWx0ZXIiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAg PHhzOmNvbXBsZXhUeXBlIG5hbWU9IkZpbHRlck9wZXJhbmQiPg0KICAgIDx4czpzZXF1ZW5jZT4N CiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBu YW1lPSJGaWx0ZXJPcGVyYW5kIiB0eXBlPSJ0bnM6RmlsdGVyT3BlcmFuZCIgLz4NCg0KICA8eHM6 Y29tcGxleFR5cGUgbmFtZT0iRWxlbWVudE9wZXJhbmQiPg0KICAgIDx4czpjb21wbGV4Q29udGVu dCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0bnM6RmlsdGVyT3Bl cmFuZCI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1l PSJJbmRleCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAg PC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENv bnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkVsZW1lbnRP cGVyYW5kIiB0eXBlPSJ0bnM6RWxlbWVudE9wZXJhbmQiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBl IG5hbWU9IkxpdGVyYWxPcGVyYW5kIj4NCiAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZh bHNlIj4NCiAgICAgIDx4czpleHRlbnNpb24gYmFzZT0idG5zOkZpbHRlck9wZXJhbmQiPg0KICAg ICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVmFsdWUiIHR5 cGU9InVhOlZhcmlhbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4N CiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6 Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkxpdGVyYWxPcGVyYW5kIiB0eXBlPSJ0 bnM6TGl0ZXJhbE9wZXJhbmQiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkF0dHJpYnV0 ZU9wZXJhbmQiPg0KICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0iZmFsc2UiPg0KICAgICAg PHhzOmV4dGVuc2lvbiBiYXNlPSJ0bnM6RmlsdGVyT3BlcmFuZCI+DQogICAgICAgIDx4czpzZXF1 ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJOb2RlSWQiIHR5cGU9InVhOk5vZGVJ ZCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVu dCBuYW1lPSJBbGlhcyIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0 cnVlIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IkJyb3dzZVBhdGgiIHR5cGU9InRu czpSZWxhdGl2ZVBhdGgiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAg ICAgPHhzOmVsZW1lbnQgbmFtZT0iQXR0cmlidXRlSWQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBt aW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iSW5kZXhSYW5nZSIg dHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAg ICA8L3hzOnNlcXVlbmNlPg0KICAgICAgPC94czpleHRlbnNpb24+DQogICAgPC94czpjb21wbGV4 Q29udGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iQXR0cmli dXRlT3BlcmFuZCIgdHlwZT0idG5zOkF0dHJpYnV0ZU9wZXJhbmQiIC8+DQoNCiAgPHhzOmNvbXBs ZXhUeXBlIG5hbWU9IlNpbXBsZUF0dHJpYnV0ZU9wZXJhbmQiPg0KICAgIDx4czpjb21wbGV4Q29u dGVudCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0bnM6RmlsdGVy T3BlcmFuZCI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBu YW1lPSJUeXBlRGVmaW5pdGlvbklkIiB0eXBlPSJ1YTpOb2RlSWQiIG1pbk9jY3Vycz0iMCIgbmls bGFibGU9InRydWUiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQnJvd3NlUGF0aCIg dHlwZT0idWE6TGlzdE9mUXVhbGlmaWVkTmFtZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1 ZSIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBdHRyaWJ1dGVJZCIgdHlwZT0ieHM6 dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1l PSJJbmRleFJhbmdlIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRy dWUiIC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVuc2lvbj4NCiAg ICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVu dCBuYW1lPSJTaW1wbGVBdHRyaWJ1dGVPcGVyYW5kIiB0eXBlPSJ0bnM6U2ltcGxlQXR0cmlidXRl T3BlcmFuZCIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mU2ltcGxlQXR0cmli dXRlT3BlcmFuZCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i U2ltcGxlQXR0cmlidXRlT3BlcmFuZCIgdHlwZT0idG5zOlNpbXBsZUF0dHJpYnV0ZU9wZXJhbmQi IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0K ICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5h bWU9Ikxpc3RPZlNpbXBsZUF0dHJpYnV0ZU9wZXJhbmQiIHR5cGU9InRuczpMaXN0T2ZTaW1wbGVB dHRyaWJ1dGVPcGVyYW5kIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpj b21wbGV4VHlwZSBuYW1lPSJDb250ZW50RmlsdGVyRWxlbWVudFJlc3VsdCI+DQogICAgPHhzOnNl cXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU3RhdHVzQ29kZSIgdHlwZT0idWE6U3Rh dHVzQ29kZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iT3BlcmFu ZFN0YXR1c0NvZGVzIiB0eXBlPSJ1YTpMaXN0T2ZTdGF0dXNDb2RlIiBtaW5PY2N1cnM9IjAiIG5p bGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iT3BlcmFuZERpYWdub3N0 aWNJbmZvcyIgdHlwZT0idWE6TGlzdE9mRGlhZ25vc3RpY0luZm8iIG1pbk9jY3Vycz0iMCIgbmls bGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4N CiAgPHhzOmVsZW1lbnQgbmFtZT0iQ29udGVudEZpbHRlckVsZW1lbnRSZXN1bHQiIHR5cGU9InRu czpDb250ZW50RmlsdGVyRWxlbWVudFJlc3VsdCIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFt ZT0iTGlzdE9mQ29udGVudEZpbHRlckVsZW1lbnRSZXN1bHQiPg0KICAgIDx4czpzZXF1ZW5jZT4N CiAgICAgIDx4czplbGVtZW50IG5hbWU9IkNvbnRlbnRGaWx0ZXJFbGVtZW50UmVzdWx0IiB0eXBl PSJ0bnM6Q29udGVudEZpbHRlckVsZW1lbnRSZXN1bHQiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJz PSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwv eHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkNvbnRlbnRGaWx0ZXJF bGVtZW50UmVzdWx0IiB0eXBlPSJ0bnM6TGlzdE9mQ29udGVudEZpbHRlckVsZW1lbnRSZXN1bHQi IG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9 IkNvbnRlbnRGaWx0ZXJSZXN1bHQiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVt ZW50IG5hbWU9IkVsZW1lbnRSZXN1bHRzIiB0eXBlPSJ0bnM6TGlzdE9mQ29udGVudEZpbHRlckVs ZW1lbnRSZXN1bHQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6 ZWxlbWVudCBuYW1lPSJFbGVtZW50RGlhZ25vc3RpY0luZm9zIiB0eXBlPSJ1YTpMaXN0T2ZEaWFn bm9zdGljSW5mbyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNl cXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJDb250ZW50 RmlsdGVyUmVzdWx0IiB0eXBlPSJ0bnM6Q29udGVudEZpbHRlclJlc3VsdCIgLz4NCg0KICA8eHM6 Y29tcGxleFR5cGUgbmFtZT0iUGFyc2luZ1Jlc3VsdCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAg ICAgPHhzOmVsZW1lbnQgbmFtZT0iU3RhdHVzQ29kZSIgdHlwZT0idWE6U3RhdHVzQ29kZSIgbWlu T2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVN0YXR1c0NvZGVzIiB0 eXBlPSJ1YTpMaXN0T2ZTdGF0dXNDb2RlIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAv Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YURpYWdub3N0aWNJbmZvcyIgdHlwZT0idWE6 TGlzdE9mRGlhZ25vc3RpY0luZm8iIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQog ICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFt ZT0iUGFyc2luZ1Jlc3VsdCIgdHlwZT0idG5zOlBhcnNpbmdSZXN1bHQiIC8+DQoNCiAgPHhzOmNv bXBsZXhUeXBlIG5hbWU9Ikxpc3RPZlBhcnNpbmdSZXN1bHQiPg0KICAgIDx4czpzZXF1ZW5jZT4N CiAgICAgIDx4czplbGVtZW50IG5hbWU9IlBhcnNpbmdSZXN1bHQiIHR5cGU9InRuczpQYXJzaW5n UmVzdWx0IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1 ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxl bWVudCBuYW1lPSJMaXN0T2ZQYXJzaW5nUmVzdWx0IiB0eXBlPSJ0bnM6TGlzdE9mUGFyc2luZ1Jl c3VsdCIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUg bmFtZT0iUXVlcnlGaXJzdFJlcXVlc3QiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czpl bGVtZW50IG5hbWU9IlJlcXVlc3RIZWFkZXIiIHR5cGU9InRuczpSZXF1ZXN0SGVhZGVyIiBtaW5P Y2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVmll dyIgdHlwZT0idG5zOlZpZXdEZXNjcmlwdGlvbiIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1 ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik5vZGVUeXBlcyIgdHlwZT0idG5zOkxpc3RP Zk5vZGVUeXBlRGVzY3JpcHRpb24iIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQog ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJGaWx0ZXIiIHR5cGU9InRuczpDb250ZW50RmlsdGVyIiBt aW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i TWF4RGF0YVNldHNUb1JldHVybiIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIg Lz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik1heFJlZmVyZW5jZXNUb1JldHVybiIgdHlwZT0i eHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8 L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJRdWVyeUZpcnN0UmVxdWVzdCIg dHlwZT0idG5zOlF1ZXJ5Rmlyc3RSZXF1ZXN0IiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1l PSJRdWVyeUZpcnN0UmVzcG9uc2UiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVt ZW50IG5hbWU9IlJlc3BvbnNlSGVhZGVyIiB0eXBlPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIG1pbk9j Y3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJRdWVy eURhdGFTZXRzIiB0eXBlPSJ0bnM6TGlzdE9mUXVlcnlEYXRhU2V0IiBtaW5PY2N1cnM9IjAiIG5p bGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQ29udGludWF0aW9uUG9p bnQiIHR5cGU9InhzOmJhc2U2NEJpbmFyeSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIg Lz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlBhcnNpbmdSZXN1bHRzIiB0eXBlPSJ0bnM6TGlz dE9mUGFyc2luZ1Jlc3VsdCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAg IDx4czplbGVtZW50IG5hbWU9IkRpYWdub3N0aWNJbmZvcyIgdHlwZT0idWE6TGlzdE9mRGlhZ25v c3RpY0luZm8iIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxl bWVudCBuYW1lPSJGaWx0ZXJSZXN1bHQiIHR5cGU9InRuczpDb250ZW50RmlsdGVyUmVzdWx0IiBt aW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwv eHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlF1ZXJ5Rmlyc3RSZXNwb25zZSIg dHlwZT0idG5zOlF1ZXJ5Rmlyc3RSZXNwb25zZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFt ZT0iUXVlcnlOZXh0UmVxdWVzdCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1l bnQgbmFtZT0iUmVxdWVzdEhlYWRlciIgdHlwZT0idG5zOlJlcXVlc3RIZWFkZXIiIG1pbk9jY3Vy cz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZWxlYXNl Q29udGludWF0aW9uUG9pbnQiIHR5cGU9InhzOmJvb2xlYW4iIG1pbk9jY3Vycz0iMCIgLz4NCiAg ICAgIDx4czplbGVtZW50IG5hbWU9IkNvbnRpbnVhdGlvblBvaW50IiB0eXBlPSJ4czpiYXNlNjRC aW5hcnkiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5j ZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iUXVlcnlOZXh0UmVx dWVzdCIgdHlwZT0idG5zOlF1ZXJ5TmV4dFJlcXVlc3QiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBl IG5hbWU9IlF1ZXJ5TmV4dFJlc3BvbnNlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6 ZWxlbWVudCBuYW1lPSJSZXNwb25zZUhlYWRlciIgdHlwZT0idG5zOlJlc3BvbnNlSGVhZGVyIiBt aW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i UXVlcnlEYXRhU2V0cyIgdHlwZT0idG5zOkxpc3RPZlF1ZXJ5RGF0YVNldCIgbWluT2NjdXJzPSIw IiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJldmlzZWRDb250 aW51YXRpb25Qb2ludCIgdHlwZT0ieHM6YmFzZTY0QmluYXJ5IiBtaW5PY2N1cnM9IjAiIG5pbGxh YmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQog IDx4czplbGVtZW50IG5hbWU9IlF1ZXJ5TmV4dFJlc3BvbnNlIiB0eXBlPSJ0bnM6UXVlcnlOZXh0 UmVzcG9uc2UiIC8+DQoNCiAgPHhzOnNpbXBsZVR5cGUgIG5hbWU9IlRpbWVzdGFtcHNUb1JldHVy biI+DQogICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnN0cmluZyI+DQogICAgICA8eHM6ZW51 bWVyYXRpb24gdmFsdWU9IlNvdXJjZV8wIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVl PSJTZXJ2ZXJfMSIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iQm90aF8yIiAvPg0K ICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJOZWl0aGVyXzMiIC8+DQogICAgICA8eHM6ZW51 bWVyYXRpb24gdmFsdWU9IkludmFsaWRfNCIgLz4NCiAgICA8L3hzOnJlc3RyaWN0aW9uPg0KICA8 L3hzOnNpbXBsZVR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlRpbWVzdGFtcHNUb1JldHVybiIg dHlwZT0idG5zOlRpbWVzdGFtcHNUb1JldHVybiIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFt ZT0iUmVhZFZhbHVlSWQiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5h bWU9Ik5vZGVJZCIgdHlwZT0idWE6Tm9kZUlkIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVl IiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQXR0cmlidXRlSWQiIHR5cGU9InhzOnVuc2ln bmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJJbmRleFJh bmdlIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQog ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEYXRhRW5jb2RpbmciIHR5cGU9InVhOlF1YWxpZmllZE5h bWUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4N CiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iUmVhZFZhbHVlSWQiIHR5 cGU9InRuczpSZWFkVmFsdWVJZCIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9m UmVhZFZhbHVlSWQiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9 IlJlYWRWYWx1ZUlkIiB0eXBlPSJ0bnM6UmVhZFZhbHVlSWQiIG1pbk9jY3Vycz0iMCIgbWF4T2Nj dXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQog IDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZlJlYWRWYWx1ZUlk IiB0eXBlPSJ0bnM6TGlzdE9mUmVhZFZhbHVlSWQiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1l bnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlJlYWRSZXF1ZXN0Ij4NCiAgICA8eHM6c2Vx dWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0SGVhZGVyIiB0eXBlPSJ0bnM6 UmVxdWVzdEhlYWRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4 czplbGVtZW50IG5hbWU9Ik1heEFnZSIgdHlwZT0ieHM6ZG91YmxlIiBtaW5PY2N1cnM9IjAiIC8+ DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJUaW1lc3RhbXBzVG9SZXR1cm4iIHR5cGU9InRuczpU aW1lc3RhbXBzVG9SZXR1cm4iIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5h bWU9Ik5vZGVzVG9SZWFkIiB0eXBlPSJ0bnM6TGlzdE9mUmVhZFZhbHVlSWQiIG1pbk9jY3Vycz0i MCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4 VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iUmVhZFJlcXVlc3QiIHR5cGU9InRuczpSZWFkUmVx dWVzdCIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iUmVhZFJlc3BvbnNlIj4NCiAgICA8 eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUhlYWRlciIgdHlw ZT0idG5zOlJlc3BvbnNlSGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0K ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzdWx0cyIgdHlwZT0idWE6TGlzdE9mRGF0YVZhbHVl IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt ZT0iRGlhZ25vc3RpY0luZm9zIiB0eXBlPSJ1YTpMaXN0T2ZEaWFnbm9zdGljSW5mbyIgbWluT2Nj dXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNv bXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJSZWFkUmVzcG9uc2UiIHR5cGU9InRuczpS ZWFkUmVzcG9uc2UiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikhpc3RvcnlSZWFkVmFs dWVJZCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTm9kZUlk IiB0eXBlPSJ1YTpOb2RlSWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAg ICA8eHM6ZWxlbWVudCBuYW1lPSJJbmRleFJhbmdlIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vy cz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEYXRhRW5j b2RpbmciIHR5cGU9InVhOlF1YWxpZmllZE5hbWUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRy dWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDb250aW51YXRpb25Qb2ludCIgdHlwZT0i eHM6YmFzZTY0QmluYXJ5IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwv eHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikhp c3RvcnlSZWFkVmFsdWVJZCIgdHlwZT0idG5zOkhpc3RvcnlSZWFkVmFsdWVJZCIgLz4NCg0KICA8 eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mSGlzdG9yeVJlYWRWYWx1ZUlkIj4NCiAgICA8eHM6 c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJIaXN0b3J5UmVhZFZhbHVlSWQiIHR5 cGU9InRuczpIaXN0b3J5UmVhZFZhbHVlSWQiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJv dW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29t cGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkhpc3RvcnlSZWFkVmFsdWVJZCIg dHlwZT0idG5zOkxpc3RPZkhpc3RvcnlSZWFkVmFsdWVJZCIgbmlsbGFibGU9InRydWUiPjwveHM6 ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iSGlzdG9yeVJlYWRSZXN1bHQiPg0K ICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlN0YXR1c0NvZGUiIHR5 cGU9InVhOlN0YXR1c0NvZGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5h bWU9IkNvbnRpbnVhdGlvblBvaW50IiB0eXBlPSJ4czpiYXNlNjRCaW5hcnkiIG1pbk9jY3Vycz0i MCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJIaXN0b3J5RGF0 YSIgdHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVl IiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVt ZW50IG5hbWU9Ikhpc3RvcnlSZWFkUmVzdWx0IiB0eXBlPSJ0bnM6SGlzdG9yeVJlYWRSZXN1bHQi IC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkhpc3RvcnlSZWFkUmVzdWx0Ij4N CiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJIaXN0b3J5UmVhZFJl c3VsdCIgdHlwZT0idG5zOkhpc3RvcnlSZWFkUmVzdWx0IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vy cz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8 L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZIaXN0b3J5UmVhZFJl c3VsdCIgdHlwZT0idG5zOkxpc3RPZkhpc3RvcnlSZWFkUmVzdWx0IiBuaWxsYWJsZT0idHJ1ZSI+ PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJIaXN0b3J5UmVhZERldGFp bHMiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBs ZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJIaXN0b3J5UmVhZERldGFpbHMiIHR5cGU9InRu czpIaXN0b3J5UmVhZERldGFpbHMiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlJlYWRF dmVudERldGFpbHMiPg0KICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0iZmFsc2UiPg0KICAg ICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0bnM6SGlzdG9yeVJlYWREZXRhaWxzIj4NCiAgICAgICAg PHhzOnNlcXVlbmNlPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9Ik51bVZhbHVlc1Blck5v ZGUiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhz OmVsZW1lbnQgbmFtZT0iU3RhcnRUaW1lIiB0eXBlPSJ4czpkYXRlVGltZSIgbWluT2NjdXJzPSIw IiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IkVuZFRpbWUiIHR5cGU9InhzOmRhdGVU aW1lIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRmlsdGVy IiB0eXBlPSJ0bnM6RXZlbnRGaWx0ZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+ DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hz OmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1l PSJSZWFkRXZlbnREZXRhaWxzIiB0eXBlPSJ0bnM6UmVhZEV2ZW50RGV0YWlscyIgLz4NCg0KICA8 eHM6Y29tcGxleFR5cGUgbmFtZT0iUmVhZFJhd01vZGlmaWVkRGV0YWlscyI+DQogICAgPHhzOmNv bXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRu czpIaXN0b3J5UmVhZERldGFpbHMiPg0KICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAg PHhzOmVsZW1lbnQgbmFtZT0iSXNSZWFkTW9kaWZpZWQiIHR5cGU9InhzOmJvb2xlYW4iIG1pbk9j Y3Vycz0iMCIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTdGFydFRpbWUiIHR5cGU9 InhzOmRhdGVUaW1lIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFt ZT0iRW5kVGltZSIgdHlwZT0ieHM6ZGF0ZVRpbWUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAg ICA8eHM6ZWxlbWVudCBuYW1lPSJOdW1WYWx1ZXNQZXJOb2RlIiB0eXBlPSJ4czp1bnNpZ25lZElu dCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IlJldHVybkJv dW5kcyIgdHlwZT0ieHM6Ym9vbGVhbiIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICA8L3hzOnNl cXVlbmNlPg0KICAgICAgPC94czpleHRlbnNpb24+DQogICAgPC94czpjb21wbGV4Q29udGVudD4N CiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iUmVhZFJhd01vZGlmaWVk RGV0YWlscyIgdHlwZT0idG5zOlJlYWRSYXdNb2RpZmllZERldGFpbHMiIC8+DQoNCiAgPHhzOmNv bXBsZXhUeXBlIG5hbWU9IlJlYWRQcm9jZXNzZWREZXRhaWxzIj4NCiAgICA8eHM6Y29tcGxleENv bnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAgICAgIDx4czpleHRlbnNpb24gYmFzZT0idG5zOkhpc3Rv cnlSZWFkRGV0YWlscyI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxl bWVudCBuYW1lPSJTdGFydFRpbWUiIHR5cGU9InhzOmRhdGVUaW1lIiBtaW5PY2N1cnM9IjAiIC8+ DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRW5kVGltZSIgdHlwZT0ieHM6ZGF0ZVRpbWUi IG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJQcm9jZXNzaW5n SW50ZXJ2YWwiIHR5cGU9InhzOmRvdWJsZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICAgIDx4 czplbGVtZW50IG5hbWU9IkFnZ3JlZ2F0ZVR5cGUiIHR5cGU9InVhOkxpc3RPZk5vZGVJZCIgbWlu T2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1l PSJBZ2dyZWdhdGVDb25maWd1cmF0aW9uIiB0eXBlPSJ0bnM6QWdncmVnYXRlQ29uZmlndXJhdGlv biIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5j ZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwv eHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlJlYWRQcm9jZXNzZWREZXRhaWxz IiB0eXBlPSJ0bnM6UmVhZFByb2Nlc3NlZERldGFpbHMiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBl IG5hbWU9IlJlYWRBdFRpbWVEZXRhaWxzIj4NCiAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9 ImZhbHNlIj4NCiAgICAgIDx4czpleHRlbnNpb24gYmFzZT0idG5zOkhpc3RvcnlSZWFkRGV0YWls cyI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJS ZXFUaW1lcyIgdHlwZT0idWE6TGlzdE9mRGF0ZVRpbWUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9 InRydWUiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVXNlU2ltcGxlQm91bmRzIiB0 eXBlPSJ4czpib29sZWFuIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+ DQogICAgICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hz OmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJSZWFkQXRUaW1lRGV0YWlscyIgdHlw ZT0idG5zOlJlYWRBdFRpbWVEZXRhaWxzIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJS ZWFkQW5ub3RhdGlvbkRhdGFEZXRhaWxzIj4NCiAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9 ImZhbHNlIj4NCiAgICAgIDx4czpleHRlbnNpb24gYmFzZT0idG5zOkhpc3RvcnlSZWFkRGV0YWls cyI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJS ZXFUaW1lcyIgdHlwZT0idWE6TGlzdE9mRGF0ZVRpbWUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9 InRydWUiIC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVuc2lvbj4N CiAgICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxl bWVudCBuYW1lPSJSZWFkQW5ub3RhdGlvbkRhdGFEZXRhaWxzIiB0eXBlPSJ0bnM6UmVhZEFubm90 YXRpb25EYXRhRGV0YWlscyIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iSGlzdG9yeURh dGEiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRhdGFWYWx1 ZXMiIHR5cGU9InVhOkxpc3RPZkRhdGFWYWx1ZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1 ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxl bWVudCBuYW1lPSJIaXN0b3J5RGF0YSIgdHlwZT0idG5zOkhpc3RvcnlEYXRhIiAvPg0KDQogIDx4 czpjb21wbGV4VHlwZSBuYW1lPSJNb2RpZmljYXRpb25JbmZvIj4NCiAgICA8eHM6c2VxdWVuY2U+ DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJNb2RpZmljYXRpb25UaW1lIiB0eXBlPSJ4czpkYXRl VGltZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVXBkYXRlVHlw ZSIgdHlwZT0idG5zOkhpc3RvcnlVcGRhdGVUeXBlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8 eHM6ZWxlbWVudCBuYW1lPSJVc2VyTmFtZSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAi IG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5 cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ik1vZGlmaWNhdGlvbkluZm8iIHR5cGU9InRuczpNb2Rp ZmljYXRpb25JbmZvIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZNb2RpZmlj YXRpb25JbmZvIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJN b2RpZmljYXRpb25JbmZvIiB0eXBlPSJ0bnM6TW9kaWZpY2F0aW9uSW5mbyIgbWluT2NjdXJzPSIw IiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1 ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mTW9k aWZpY2F0aW9uSW5mbyIgdHlwZT0idG5zOkxpc3RPZk1vZGlmaWNhdGlvbkluZm8iIG5pbGxhYmxl PSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikhpc3RvcnlN b2RpZmllZERhdGEiPg0KICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0iZmFsc2UiPg0KICAg ICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0bnM6SGlzdG9yeURhdGEiPg0KICAgICAgICA8eHM6c2Vx dWVuY2U+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTW9kaWZpY2F0aW9uSW5mb3MiIHR5 cGU9InRuczpMaXN0T2ZNb2RpZmljYXRpb25JbmZvIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0 cnVlIiAvPg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0KICAgICAgPC94czpleHRlbnNpb24+DQog ICAgPC94czpjb21wbGV4Q29udGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1l bnQgbmFtZT0iSGlzdG9yeU1vZGlmaWVkRGF0YSIgdHlwZT0idG5zOkhpc3RvcnlNb2RpZmllZERh dGEiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikhpc3RvcnlFdmVudCI+DQogICAgPHhz OnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRXZlbnRzIiB0eXBlPSJ0bnM6TGlz dE9mSGlzdG9yeUV2ZW50RmllbGRMaXN0IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAv Pg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50 IG5hbWU9Ikhpc3RvcnlFdmVudCIgdHlwZT0idG5zOkhpc3RvcnlFdmVudCIgLz4NCg0KICA8eHM6 Y29tcGxleFR5cGUgbmFtZT0iSGlzdG9yeVJlYWRSZXF1ZXN0Ij4NCiAgICA8eHM6c2VxdWVuY2U+ DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0SGVhZGVyIiB0eXBlPSJ0bnM6UmVxdWVz dEhlYWRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVt ZW50IG5hbWU9Ikhpc3RvcnlSZWFkRGV0YWlscyIgdHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0IiBt aW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i VGltZXN0YW1wc1RvUmV0dXJuIiB0eXBlPSJ0bnM6VGltZXN0YW1wc1RvUmV0dXJuIiBtaW5PY2N1 cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZWxlYXNlQ29udGludWF0aW9uUG9p bnRzIiB0eXBlPSJ4czpib29sZWFuIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVu dCBuYW1lPSJOb2Rlc1RvUmVhZCIgdHlwZT0idG5zOkxpc3RPZkhpc3RvcnlSZWFkVmFsdWVJZCIg bWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8 L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJIaXN0b3J5UmVhZFJlcXVlc3Qi IHR5cGU9InRuczpIaXN0b3J5UmVhZFJlcXVlc3QiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5h bWU9Ikhpc3RvcnlSZWFkUmVzcG9uc2UiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czpl bGVtZW50IG5hbWU9IlJlc3BvbnNlSGVhZGVyIiB0eXBlPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIG1p bk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJS ZXN1bHRzIiB0eXBlPSJ0bnM6TGlzdE9mSGlzdG9yeVJlYWRSZXN1bHQiIG1pbk9jY3Vycz0iMCIg bmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEaWFnbm9zdGljSW5m b3MiIHR5cGU9InVhOkxpc3RPZkRpYWdub3N0aWNJbmZvIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxl PSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4 czplbGVtZW50IG5hbWU9Ikhpc3RvcnlSZWFkUmVzcG9uc2UiIHR5cGU9InRuczpIaXN0b3J5UmVh ZFJlc3BvbnNlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJXcml0ZVZhbHVlIj4NCiAg ICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJOb2RlSWQiIHR5cGU9InVh Ok5vZGVJZCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVt ZW50IG5hbWU9IkF0dHJpYnV0ZUlkIiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIw IiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iSW5kZXhSYW5nZSIgdHlwZT0ieHM6c3RyaW5n IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt ZT0iVmFsdWUiIHR5cGU9InVhOkRhdGFWYWx1ZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1 ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxl bWVudCBuYW1lPSJXcml0ZVZhbHVlIiB0eXBlPSJ0bnM6V3JpdGVWYWx1ZSIgLz4NCg0KICA8eHM6 Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mV3JpdGVWYWx1ZSI+DQogICAgPHhzOnNlcXVlbmNlPg0K ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iV3JpdGVWYWx1ZSIgdHlwZT0idG5zOldyaXRlVmFsdWUi IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0K ICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5h bWU9Ikxpc3RPZldyaXRlVmFsdWUiIHR5cGU9InRuczpMaXN0T2ZXcml0ZVZhbHVlIiBuaWxsYWJs ZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJXcml0ZVJl cXVlc3QiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlcXVl c3RIZWFkZXIiIHR5cGU9InRuczpSZXF1ZXN0SGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxl PSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTm9kZXNUb1dyaXRlIiB0eXBlPSJ0 bnM6TGlzdE9mV3JpdGVWYWx1ZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAg ICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1l PSJXcml0ZVJlcXVlc3QiIHR5cGU9InRuczpXcml0ZVJlcXVlc3QiIC8+DQoNCiAgPHhzOmNvbXBs ZXhUeXBlIG5hbWU9IldyaXRlUmVzcG9uc2UiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4 czplbGVtZW50IG5hbWU9IlJlc3BvbnNlSGVhZGVyIiB0eXBlPSJ0bnM6UmVzcG9uc2VIZWFkZXIi IG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1l PSJSZXN1bHRzIiB0eXBlPSJ1YTpMaXN0T2ZTdGF0dXNDb2RlIiBtaW5PY2N1cnM9IjAiIG5pbGxh YmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGlhZ25vc3RpY0luZm9zIiB0 eXBlPSJ1YTpMaXN0T2ZEaWFnbm9zdGljSW5mbyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1 ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxl bWVudCBuYW1lPSJXcml0ZVJlc3BvbnNlIiB0eXBlPSJ0bnM6V3JpdGVSZXNwb25zZSIgLz4NCg0K ICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iSGlzdG9yeVVwZGF0ZURldGFpbHMiPg0KICAgIDx4czpz ZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik5vZGVJZCIgdHlwZT0idWE6Tm9kZUlk IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQog IDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikhpc3RvcnlVcGRhdGVEZXRh aWxzIiB0eXBlPSJ0bnM6SGlzdG9yeVVwZGF0ZURldGFpbHMiIC8+DQoNCiAgPHhzOnNpbXBsZVR5 cGUgIG5hbWU9Ikhpc3RvcnlVcGRhdGVUeXBlIj4NCiAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0i eHM6c3RyaW5nIj4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iSW5zZXJ0XzEiIC8+DQog ICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlJlcGxhY2VfMiIgLz4NCiAgICAgIDx4czplbnVt ZXJhdGlvbiB2YWx1ZT0iVXBkYXRlXzMiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9 IkRlbGV0ZV80IiAvPg0KICAgIDwveHM6cmVzdHJpY3Rpb24+DQogIDwveHM6c2ltcGxlVHlwZT4N CiAgPHhzOmVsZW1lbnQgbmFtZT0iSGlzdG9yeVVwZGF0ZVR5cGUiIHR5cGU9InRuczpIaXN0b3J5 VXBkYXRlVHlwZSIgLz4NCg0KICA8eHM6c2ltcGxlVHlwZSAgbmFtZT0iUGVyZm9ybVVwZGF0ZVR5 cGUiPg0KICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpzdHJpbmciPg0KICAgICAgPHhzOmVu dW1lcmF0aW9uIHZhbHVlPSJJbnNlcnRfMSIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1 ZT0iUmVwbGFjZV8yIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJVcGRhdGVfMyIg Lz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iUmVtb3ZlXzQiIC8+DQogICAgPC94czpy ZXN0cmljdGlvbj4NCiAgPC94czpzaW1wbGVUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJQZXJm b3JtVXBkYXRlVHlwZSIgdHlwZT0idG5zOlBlcmZvcm1VcGRhdGVUeXBlIiAvPg0KDQogIDx4czpj b21wbGV4VHlwZSBuYW1lPSJVcGRhdGVEYXRhRGV0YWlscyI+DQogICAgPHhzOmNvbXBsZXhDb250 ZW50IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpIaXN0b3J5 VXBkYXRlRGV0YWlscyI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxl bWVudCBuYW1lPSJQZXJmb3JtSW5zZXJ0UmVwbGFjZSIgdHlwZT0idG5zOlBlcmZvcm1VcGRhdGVU eXBlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVXBkYXRl VmFsdWVzIiB0eXBlPSJ1YTpMaXN0T2ZEYXRhVmFsdWUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9 InRydWUiIC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVuc2lvbj4N CiAgICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxl bWVudCBuYW1lPSJVcGRhdGVEYXRhRGV0YWlscyIgdHlwZT0idG5zOlVwZGF0ZURhdGFEZXRhaWxz IiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJVcGRhdGVTdHJ1Y3R1cmVEYXRhRGV0YWls cyI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0 ZW5zaW9uIGJhc2U9InRuczpIaXN0b3J5VXBkYXRlRGV0YWlscyI+DQogICAgICAgIDx4czpzZXF1 ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJQZXJmb3JtSW5zZXJ0UmVwbGFjZSIg dHlwZT0idG5zOlBlcmZvcm1VcGRhdGVUeXBlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAg PHhzOmVsZW1lbnQgbmFtZT0iVXBkYXRlVmFsdWVzIiB0eXBlPSJ1YTpMaXN0T2ZEYXRhVmFsdWUi IG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+ DQogICAgICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hz OmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJVcGRhdGVTdHJ1Y3R1cmVEYXRhRGV0 YWlscyIgdHlwZT0idG5zOlVwZGF0ZVN0cnVjdHVyZURhdGFEZXRhaWxzIiAvPg0KDQogIDx4czpj b21wbGV4VHlwZSBuYW1lPSJVcGRhdGVFdmVudERldGFpbHMiPg0KICAgIDx4czpjb21wbGV4Q29u dGVudCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0bnM6SGlzdG9y eVVwZGF0ZURldGFpbHMiPg0KICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAgPHhzOmVs ZW1lbnQgbmFtZT0iUGVyZm9ybUluc2VydFJlcGxhY2UiIHR5cGU9InRuczpQZXJmb3JtVXBkYXRl VHlwZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IkZpbHRl ciIgdHlwZT0idG5zOkV2ZW50RmlsdGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAv Pg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IkV2ZW50RGF0YSIgdHlwZT0idG5zOkxpc3RP Zkhpc3RvcnlFdmVudEZpZWxkTGlzdCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4N CiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6 Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9 IlVwZGF0ZUV2ZW50RGV0YWlscyIgdHlwZT0idG5zOlVwZGF0ZUV2ZW50RGV0YWlscyIgLz4NCg0K ICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iRGVsZXRlUmF3TW9kaWZpZWREZXRhaWxzIj4NCiAgICA8 eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAgICAgIDx4czpleHRlbnNpb24gYmFz ZT0idG5zOkhpc3RvcnlVcGRhdGVEZXRhaWxzIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAg ICAgICAgIDx4czplbGVtZW50IG5hbWU9IklzRGVsZXRlTW9kaWZpZWQiIHR5cGU9InhzOmJvb2xl YW4iIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTdGFydFRp bWUiIHR5cGU9InhzOmRhdGVUaW1lIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVs ZW1lbnQgbmFtZT0iRW5kVGltZSIgdHlwZT0ieHM6ZGF0ZVRpbWUiIG1pbk9jY3Vycz0iMCIgLz4N CiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6 Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9 IkRlbGV0ZVJhd01vZGlmaWVkRGV0YWlscyIgdHlwZT0idG5zOkRlbGV0ZVJhd01vZGlmaWVkRGV0 YWlscyIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iRGVsZXRlQXRUaW1lRGV0YWlscyI+ DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5z aW9uIGJhc2U9InRuczpIaXN0b3J5VXBkYXRlRGV0YWlscyI+DQogICAgICAgIDx4czpzZXF1ZW5j ZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXFUaW1lcyIgdHlwZT0idWE6TGlzdE9m RGF0ZVRpbWUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAgIDwveHM6 c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hzOmNvbXBsZXhDb250ZW50 Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJEZWxldGVBdFRpbWVE ZXRhaWxzIiB0eXBlPSJ0bnM6RGVsZXRlQXRUaW1lRGV0YWlscyIgLz4NCg0KICA8eHM6Y29tcGxl eFR5cGUgbmFtZT0iRGVsZXRlRXZlbnREZXRhaWxzIj4NCiAgICA8eHM6Y29tcGxleENvbnRlbnQg bWl4ZWQ9ImZhbHNlIj4NCiAgICAgIDx4czpleHRlbnNpb24gYmFzZT0idG5zOkhpc3RvcnlVcGRh dGVEZXRhaWxzIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAgIDx4czplbGVtZW50 IG5hbWU9IkV2ZW50SWRzIiB0eXBlPSJ1YTpMaXN0T2ZCeXRlU3RyaW5nIiBtaW5PY2N1cnM9IjAi IG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0KICAgICAgPC94czpl eHRlbnNpb24+DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4N CiAgPHhzOmVsZW1lbnQgbmFtZT0iRGVsZXRlRXZlbnREZXRhaWxzIiB0eXBlPSJ0bnM6RGVsZXRl RXZlbnREZXRhaWxzIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJIaXN0b3J5VXBkYXRl UmVzdWx0Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTdGF0 dXNDb2RlIiB0eXBlPSJ1YTpTdGF0dXNDb2RlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6 ZWxlbWVudCBuYW1lPSJPcGVyYXRpb25SZXN1bHRzIiB0eXBlPSJ1YTpMaXN0T2ZTdGF0dXNDb2Rl IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt ZT0iRGlhZ25vc3RpY0luZm9zIiB0eXBlPSJ1YTpMaXN0T2ZEaWFnbm9zdGljSW5mbyIgbWluT2Nj dXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNv bXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJIaXN0b3J5VXBkYXRlUmVzdWx0IiB0eXBl PSJ0bnM6SGlzdG9yeVVwZGF0ZVJlc3VsdCIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0i TGlzdE9mSGlzdG9yeVVwZGF0ZVJlc3VsdCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhz OmVsZW1lbnQgbmFtZT0iSGlzdG9yeVVwZGF0ZVJlc3VsdCIgdHlwZT0idG5zOkhpc3RvcnlVcGRh dGVSZXN1bHQiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0 cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czpl bGVtZW50IG5hbWU9Ikxpc3RPZkhpc3RvcnlVcGRhdGVSZXN1bHQiIHR5cGU9InRuczpMaXN0T2ZI aXN0b3J5VXBkYXRlUmVzdWx0IiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4 czpjb21wbGV4VHlwZSBuYW1lPSJIaXN0b3J5VXBkYXRlUmVxdWVzdCI+DQogICAgPHhzOnNlcXVl bmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEhlYWRlciIgdHlwZT0idG5zOlJl cXVlc3RIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6 ZWxlbWVudCBuYW1lPSJIaXN0b3J5VXBkYXRlRGV0YWlscyIgdHlwZT0idWE6TGlzdE9mRXh0ZW5z aW9uT2JqZWN0IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2Vx dWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikhpc3RvcnlV cGRhdGVSZXF1ZXN0IiB0eXBlPSJ0bnM6SGlzdG9yeVVwZGF0ZVJlcXVlc3QiIC8+DQoNCiAgPHhz OmNvbXBsZXhUeXBlIG5hbWU9Ikhpc3RvcnlVcGRhdGVSZXNwb25zZSI+DQogICAgPHhzOnNlcXVl bmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VIZWFkZXIiIHR5cGU9InRuczpS ZXNwb25zZUhlYWRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4 czplbGVtZW50IG5hbWU9IlJlc3VsdHMiIHR5cGU9InRuczpMaXN0T2ZIaXN0b3J5VXBkYXRlUmVz dWx0IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQg bmFtZT0iRGlhZ25vc3RpY0luZm9zIiB0eXBlPSJ1YTpMaXN0T2ZEaWFnbm9zdGljSW5mbyIgbWlu T2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hz OmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJIaXN0b3J5VXBkYXRlUmVzcG9uc2Ui IHR5cGU9InRuczpIaXN0b3J5VXBkYXRlUmVzcG9uc2UiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBl IG5hbWU9IkNhbGxNZXRob2RSZXF1ZXN0Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6 ZWxlbWVudCBuYW1lPSJPYmplY3RJZCIgdHlwZT0idWE6Tm9kZUlkIiBtaW5PY2N1cnM9IjAiIG5p bGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTWV0aG9kSWQiIHR5cGU9 InVhOk5vZGVJZCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czpl bGVtZW50IG5hbWU9IklucHV0QXJndW1lbnRzIiB0eXBlPSJ1YTpMaXN0T2ZWYXJpYW50IiBtaW5P Y2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6 Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkNhbGxNZXRob2RSZXF1ZXN0IiB0eXBl PSJ0bnM6Q2FsbE1ldGhvZFJlcXVlc3QiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxp c3RPZkNhbGxNZXRob2RSZXF1ZXN0Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxl bWVudCBuYW1lPSJDYWxsTWV0aG9kUmVxdWVzdCIgdHlwZT0idG5zOkNhbGxNZXRob2RSZXF1ZXN0 IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4N CiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBu YW1lPSJMaXN0T2ZDYWxsTWV0aG9kUmVxdWVzdCIgdHlwZT0idG5zOkxpc3RPZkNhbGxNZXRob2RS ZXF1ZXN0IiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlw ZSBuYW1lPSJDYWxsTWV0aG9kUmVzdWx0Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6 ZWxlbWVudCBuYW1lPSJTdGF0dXNDb2RlIiB0eXBlPSJ1YTpTdGF0dXNDb2RlIiBtaW5PY2N1cnM9 IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJJbnB1dEFyZ3VtZW50UmVzdWx0cyIgdHlw ZT0idWE6TGlzdE9mU3RhdHVzQ29kZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4N CiAgICAgIDx4czplbGVtZW50IG5hbWU9IklucHV0QXJndW1lbnREaWFnbm9zdGljSW5mb3MiIHR5 cGU9InVhOkxpc3RPZkRpYWdub3N0aWNJbmZvIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVl IiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iT3V0cHV0QXJndW1lbnRzIiB0eXBlPSJ1YTpM aXN0T2ZWYXJpYW50IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6 c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkNhbGxN ZXRob2RSZXN1bHQiIHR5cGU9InRuczpDYWxsTWV0aG9kUmVzdWx0IiAvPg0KDQogIDx4czpjb21w bGV4VHlwZSBuYW1lPSJMaXN0T2ZDYWxsTWV0aG9kUmVzdWx0Ij4NCiAgICA8eHM6c2VxdWVuY2U+ DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDYWxsTWV0aG9kUmVzdWx0IiB0eXBlPSJ0bnM6Q2Fs bE1ldGhvZFJlc3VsdCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFi bGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAg PHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mQ2FsbE1ldGhvZFJlc3VsdCIgdHlwZT0idG5zOkxpc3RP ZkNhbGxNZXRob2RSZXN1bHQiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhz OmNvbXBsZXhUeXBlIG5hbWU9IkNhbGxSZXF1ZXN0Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAg ICA8eHM6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0SGVhZGVyIiB0eXBlPSJ0bnM6UmVxdWVzdEhlYWRl ciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5h bWU9Ik1ldGhvZHNUb0NhbGwiIHR5cGU9InRuczpMaXN0T2ZDYWxsTWV0aG9kUmVxdWVzdCIgbWlu T2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hz OmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJDYWxsUmVxdWVzdCIgdHlwZT0idG5z OkNhbGxSZXF1ZXN0IiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJDYWxsUmVzcG9uc2Ui Pg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlc3BvbnNlSGVh ZGVyIiB0eXBlPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRy dWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXN1bHRzIiB0eXBlPSJ0bnM6TGlzdE9m Q2FsbE1ldGhvZFJlc3VsdCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAg IDx4czplbGVtZW50IG5hbWU9IkRpYWdub3N0aWNJbmZvcyIgdHlwZT0idWE6TGlzdE9mRGlhZ25v c3RpY0luZm8iIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1 ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iQ2FsbFJlc3Bv bnNlIiB0eXBlPSJ0bnM6Q2FsbFJlc3BvbnNlIiAvPg0KDQogIDx4czpzaW1wbGVUeXBlICBuYW1l PSJNb25pdG9yaW5nTW9kZSI+DQogICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnN0cmluZyI+ DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkRpc2FibGVkXzAiIC8+DQogICAgICA8eHM6 ZW51bWVyYXRpb24gdmFsdWU9IlNhbXBsaW5nXzEiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24g dmFsdWU9IlJlcG9ydGluZ18yIiAvPg0KICAgIDwveHM6cmVzdHJpY3Rpb24+DQogIDwveHM6c2lt cGxlVHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTW9uaXRvcmluZ01vZGUiIHR5cGU9InRuczpN b25pdG9yaW5nTW9kZSIgLz4NCg0KICA8eHM6c2ltcGxlVHlwZSAgbmFtZT0iRGF0YUNoYW5nZVRy aWdnZXIiPg0KICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpzdHJpbmciPg0KICAgICAgPHhz OmVudW1lcmF0aW9uIHZhbHVlPSJTdGF0dXNfMCIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2 YWx1ZT0iU3RhdHVzVmFsdWVfMSIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iU3Rh dHVzVmFsdWVUaW1lc3RhbXBfMiIgLz4NCiAgICA8L3hzOnJlc3RyaWN0aW9uPg0KICA8L3hzOnNp bXBsZVR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkRhdGFDaGFuZ2VUcmlnZ2VyIiB0eXBlPSJ0 bnM6RGF0YUNoYW5nZVRyaWdnZXIiIC8+DQoNCiAgPHhzOnNpbXBsZVR5cGUgIG5hbWU9IkRlYWRi YW5kVHlwZSI+DQogICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnN0cmluZyI+DQogICAgICA8 eHM6ZW51bWVyYXRpb24gdmFsdWU9Ik5vbmVfMCIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2 YWx1ZT0iQWJzb2x1dGVfMSIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iUGVyY2Vu dF8yIiAvPg0KICAgIDwveHM6cmVzdHJpY3Rpb24+DQogIDwveHM6c2ltcGxlVHlwZT4NCiAgPHhz OmVsZW1lbnQgbmFtZT0iRGVhZGJhbmRUeXBlIiB0eXBlPSJ0bnM6RGVhZGJhbmRUeXBlIiAvPg0K DQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJNb25pdG9yaW5nRmlsdGVyIj4NCiAgICA8eHM6c2Vx dWVuY2U+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVs ZW1lbnQgbmFtZT0iTW9uaXRvcmluZ0ZpbHRlciIgdHlwZT0idG5zOk1vbml0b3JpbmdGaWx0ZXIi IC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkRhdGFDaGFuZ2VGaWx0ZXIiPg0KICAgIDx4 czpjb21wbGV4Q29udGVudCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVuc2lvbiBiYXNl PSJ0bnM6TW9uaXRvcmluZ0ZpbHRlciI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAg ICA8eHM6ZWxlbWVudCBuYW1lPSJUcmlnZ2VyIiB0eXBlPSJ0bnM6RGF0YUNoYW5nZVRyaWdnZXIi IG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEZWFkYmFuZFR5 cGUiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhz OmVsZW1lbnQgbmFtZT0iRGVhZGJhbmRWYWx1ZSIgdHlwZT0ieHM6ZG91YmxlIiBtaW5PY2N1cnM9 IjAiIC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVuc2lvbj4NCiAg ICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVu dCBuYW1lPSJEYXRhQ2hhbmdlRmlsdGVyIiB0eXBlPSJ0bnM6RGF0YUNoYW5nZUZpbHRlciIgLz4N Cg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iRXZlbnRGaWx0ZXIiPg0KICAgIDx4czpjb21wbGV4 Q29udGVudCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0bnM6TW9u aXRvcmluZ0ZpbHRlciI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxl bWVudCBuYW1lPSJTZWxlY3RDbGF1c2VzIiB0eXBlPSJ0bnM6TGlzdE9mU2ltcGxlQXR0cmlidXRl T3BlcmFuZCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgICA8eHM6 ZWxlbWVudCBuYW1lPSJXaGVyZUNsYXVzZSIgdHlwZT0idG5zOkNvbnRlbnRGaWx0ZXIiIG1pbk9j Y3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAg ICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBs ZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJFdmVudEZpbHRlciIgdHlwZT0idG5zOkV2ZW50 RmlsdGVyIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJBZ2dyZWdhdGVDb25maWd1cmF0 aW9uIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJVc2VTZXJ2 ZXJDYXBhYmlsaXRpZXNEZWZhdWx0cyIgdHlwZT0ieHM6Ym9vbGVhbiIgbWluT2NjdXJzPSIwIiAv Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVHJlYXRVbmNlcnRhaW5Bc0JhZCIgdHlwZT0ieHM6 Ym9vbGVhbiIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUGVyY2Vu dERhdGFCYWQiIHR5cGU9InhzOnVuc2lnbmVkQnl0ZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAg PHhzOmVsZW1lbnQgbmFtZT0iUGVyY2VudERhdGFHb29kIiB0eXBlPSJ4czp1bnNpZ25lZEJ5dGUi IG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlVzZVNsb3BlZEV4dHJh cG9sYXRpb24iIHR5cGU9InhzOmJvb2xlYW4iIG1pbk9jY3Vycz0iMCIgLz4NCiAgICA8L3hzOnNl cXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJBZ2dyZWdh dGVDb25maWd1cmF0aW9uIiB0eXBlPSJ0bnM6QWdncmVnYXRlQ29uZmlndXJhdGlvbiIgLz4NCg0K ICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iQWdncmVnYXRlRmlsdGVyIj4NCiAgICA8eHM6Y29tcGxl eENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAgICAgIDx4czpleHRlbnNpb24gYmFzZT0idG5zOk1v bml0b3JpbmdGaWx0ZXIiPg0KICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAgPHhzOmVs ZW1lbnQgbmFtZT0iU3RhcnRUaW1lIiB0eXBlPSJ4czpkYXRlVGltZSIgbWluT2NjdXJzPSIwIiAv Pg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IkFnZ3JlZ2F0ZVR5cGUiIHR5cGU9InVhOk5v ZGVJZCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgICA8eHM6ZWxl bWVudCBuYW1lPSJQcm9jZXNzaW5nSW50ZXJ2YWwiIHR5cGU9InhzOmRvdWJsZSIgbWluT2NjdXJz PSIwIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IkFnZ3JlZ2F0ZUNvbmZpZ3VyYXRp b24iIHR5cGU9InRuczpBZ2dyZWdhdGVDb25maWd1cmF0aW9uIiBtaW5PY2N1cnM9IjAiIG5pbGxh YmxlPSJ0cnVlIiAvPg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0KICAgICAgPC94czpleHRlbnNp b24+DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhz OmVsZW1lbnQgbmFtZT0iQWdncmVnYXRlRmlsdGVyIiB0eXBlPSJ0bnM6QWdncmVnYXRlRmlsdGVy IiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJNb25pdG9yaW5nRmlsdGVyUmVzdWx0Ij4N CiAgICA8eHM6c2VxdWVuY2U+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlw ZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTW9uaXRvcmluZ0ZpbHRlclJlc3VsdCIgdHlwZT0idG5z Ok1vbml0b3JpbmdGaWx0ZXJSZXN1bHQiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkV2 ZW50RmlsdGVyUmVzdWx0Ij4NCiAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4N CiAgICAgIDx4czpleHRlbnNpb24gYmFzZT0idG5zOk1vbml0b3JpbmdGaWx0ZXJSZXN1bHQiPg0K ICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2VsZWN0 Q2xhdXNlUmVzdWx0cyIgdHlwZT0idWE6TGlzdE9mU3RhdHVzQ29kZSIgbWluT2NjdXJzPSIwIiBu aWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTZWxlY3RDbGF1 c2VEaWFnbm9zdGljSW5mb3MiIHR5cGU9InVhOkxpc3RPZkRpYWdub3N0aWNJbmZvIiBtaW5PY2N1 cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9Ildo ZXJlQ2xhdXNlUmVzdWx0IiB0eXBlPSJ0bnM6Q29udGVudEZpbHRlclJlc3VsdCIgbWluT2NjdXJz PSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwv eHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5 cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkV2ZW50RmlsdGVyUmVzdWx0IiB0eXBlPSJ0bnM6RXZl bnRGaWx0ZXJSZXN1bHQiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkFnZ3JlZ2F0ZUZp bHRlclJlc3VsdCI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+DQogICAg ICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpNb25pdG9yaW5nRmlsdGVyUmVzdWx0Ij4NCiAgICAg ICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IlJldmlzZWRTdGFy dFRpbWUiIHR5cGU9InhzOmRhdGVUaW1lIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhz OmVsZW1lbnQgbmFtZT0iUmV2aXNlZFByb2Nlc3NpbmdJbnRlcnZhbCIgdHlwZT0ieHM6ZG91Ymxl IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmV2aXNlZEFn Z3JlZ2F0ZUNvbmZpZ3VyYXRpb24iIHR5cGU9InRuczpBZ2dyZWdhdGVDb25maWd1cmF0aW9uIiBt aW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0K ICAgICAgPC94czpleHRlbnNpb24+DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAgPC94czpj b21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iQWdncmVnYXRlRmlsdGVyUmVzdWx0IiB0 eXBlPSJ0bnM6QWdncmVnYXRlRmlsdGVyUmVzdWx0IiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBu YW1lPSJNb25pdG9yaW5nUGFyYW1ldGVycyI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhz OmVsZW1lbnQgbmFtZT0iQ2xpZW50SGFuZGxlIiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2Nj dXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2FtcGxpbmdJbnRlcnZhbCIgdHlw ZT0ieHM6ZG91YmxlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJG aWx0ZXIiIHR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0i dHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlF1ZXVlU2l6ZSIgdHlwZT0ieHM6dW5z aWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRpc2Nh cmRPbGRlc3QiIHR5cGU9InhzOmJvb2xlYW4iIG1pbk9jY3Vycz0iMCIgLz4NCiAgICA8L3hzOnNl cXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJNb25pdG9y aW5nUGFyYW1ldGVycyIgdHlwZT0idG5zOk1vbml0b3JpbmdQYXJhbWV0ZXJzIiAvPg0KDQogIDx4 czpjb21wbGV4VHlwZSBuYW1lPSJNb25pdG9yZWRJdGVtQ3JlYXRlUmVxdWVzdCI+DQogICAgPHhz OnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iSXRlbVRvTW9uaXRvciIgdHlwZT0i dG5zOlJlYWRWYWx1ZUlkIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAg PHhzOmVsZW1lbnQgbmFtZT0iTW9uaXRvcmluZ01vZGUiIHR5cGU9InRuczpNb25pdG9yaW5nTW9k ZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVxdWVzdGVkUGFy YW1ldGVycyIgdHlwZT0idG5zOk1vbml0b3JpbmdQYXJhbWV0ZXJzIiBtaW5PY2N1cnM9IjAiIG5p bGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+ DQogIDx4czplbGVtZW50IG5hbWU9Ik1vbml0b3JlZEl0ZW1DcmVhdGVSZXF1ZXN0IiB0eXBlPSJ0 bnM6TW9uaXRvcmVkSXRlbUNyZWF0ZVJlcXVlc3QiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5h bWU9Ikxpc3RPZk1vbml0b3JlZEl0ZW1DcmVhdGVSZXF1ZXN0Ij4NCiAgICA8eHM6c2VxdWVuY2U+ DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJNb25pdG9yZWRJdGVtQ3JlYXRlUmVxdWVzdCIgdHlw ZT0idG5zOk1vbml0b3JlZEl0ZW1DcmVhdGVSZXF1ZXN0IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vy cz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8 L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZNb25pdG9yZWRJdGVt Q3JlYXRlUmVxdWVzdCIgdHlwZT0idG5zOkxpc3RPZk1vbml0b3JlZEl0ZW1DcmVhdGVSZXF1ZXN0 IiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1l PSJNb25pdG9yZWRJdGVtQ3JlYXRlUmVzdWx0Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8 eHM6ZWxlbWVudCBuYW1lPSJTdGF0dXNDb2RlIiB0eXBlPSJ1YTpTdGF0dXNDb2RlIiBtaW5PY2N1 cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJNb25pdG9yZWRJdGVtSWQiIHR5cGU9 InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1l PSJSZXZpc2VkU2FtcGxpbmdJbnRlcnZhbCIgdHlwZT0ieHM6ZG91YmxlIiBtaW5PY2N1cnM9IjAi IC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXZpc2VkUXVldWVTaXplIiB0eXBlPSJ4czp1 bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRmls dGVyUmVzdWx0IiB0eXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiIG1pbk9jY3Vycz0iMCIgbmlsbGFi bGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAg PHhzOmVsZW1lbnQgbmFtZT0iTW9uaXRvcmVkSXRlbUNyZWF0ZVJlc3VsdCIgdHlwZT0idG5zOk1v bml0b3JlZEl0ZW1DcmVhdGVSZXN1bHQiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxp c3RPZk1vbml0b3JlZEl0ZW1DcmVhdGVSZXN1bHQiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAg IDx4czplbGVtZW50IG5hbWU9Ik1vbml0b3JlZEl0ZW1DcmVhdGVSZXN1bHQiIHR5cGU9InRuczpN b25pdG9yZWRJdGVtQ3JlYXRlUmVzdWx0IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3Vu ZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBs ZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZNb25pdG9yZWRJdGVtQ3JlYXRlUmVz dWx0IiB0eXBlPSJ0bnM6TGlzdE9mTW9uaXRvcmVkSXRlbUNyZWF0ZVJlc3VsdCIgbmlsbGFibGU9 InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iQ3JlYXRlTW9u aXRvcmVkSXRlbXNSZXF1ZXN0Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVu dCBuYW1lPSJSZXF1ZXN0SGVhZGVyIiB0eXBlPSJ0bnM6UmVxdWVzdEhlYWRlciIgbWluT2NjdXJz PSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlN1YnNjcmlw dGlvbklkIiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhz OmVsZW1lbnQgbmFtZT0iVGltZXN0YW1wc1RvUmV0dXJuIiB0eXBlPSJ0bnM6VGltZXN0YW1wc1Rv UmV0dXJuIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJJdGVtc1Rv Q3JlYXRlIiB0eXBlPSJ0bnM6TGlzdE9mTW9uaXRvcmVkSXRlbUNyZWF0ZVJlcXVlc3QiIG1pbk9j Y3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpj b21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iQ3JlYXRlTW9uaXRvcmVkSXRlbXNSZXF1 ZXN0IiB0eXBlPSJ0bnM6Q3JlYXRlTW9uaXRvcmVkSXRlbXNSZXF1ZXN0IiAvPg0KDQogIDx4czpj b21wbGV4VHlwZSBuYW1lPSJDcmVhdGVNb25pdG9yZWRJdGVtc1Jlc3BvbnNlIj4NCiAgICA8eHM6 c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUhlYWRlciIgdHlwZT0i dG5zOlJlc3BvbnNlSGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAg ICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzdWx0cyIgdHlwZT0idG5zOkxpc3RPZk1vbml0b3JlZEl0 ZW1DcmVhdGVSZXN1bHQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8 eHM6ZWxlbWVudCBuYW1lPSJEaWFnbm9zdGljSW5mb3MiIHR5cGU9InVhOkxpc3RPZkRpYWdub3N0 aWNJbmZvIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVu Y2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkNyZWF0ZU1vbml0 b3JlZEl0ZW1zUmVzcG9uc2UiIHR5cGU9InRuczpDcmVhdGVNb25pdG9yZWRJdGVtc1Jlc3BvbnNl IiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJNb25pdG9yZWRJdGVtTW9kaWZ5UmVxdWVz dCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTW9uaXRvcmVk SXRlbUlkIiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhz OmVsZW1lbnQgbmFtZT0iUmVxdWVzdGVkUGFyYW1ldGVycyIgdHlwZT0idG5zOk1vbml0b3JpbmdQ YXJhbWV0ZXJzIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2Vx dWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ik1vbml0b3Jl ZEl0ZW1Nb2RpZnlSZXF1ZXN0IiB0eXBlPSJ0bnM6TW9uaXRvcmVkSXRlbU1vZGlmeVJlcXVlc3Qi IC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZk1vbml0b3JlZEl0ZW1Nb2RpZnlS ZXF1ZXN0Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJNb25p dG9yZWRJdGVtTW9kaWZ5UmVxdWVzdCIgdHlwZT0idG5zOk1vbml0b3JlZEl0ZW1Nb2RpZnlSZXF1 ZXN0IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIg Lz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVu dCBuYW1lPSJMaXN0T2ZNb25pdG9yZWRJdGVtTW9kaWZ5UmVxdWVzdCIgdHlwZT0idG5zOkxpc3RP Zk1vbml0b3JlZEl0ZW1Nb2RpZnlSZXF1ZXN0IiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50 Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJNb25pdG9yZWRJdGVtTW9kaWZ5UmVzdWx0Ij4N CiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTdGF0dXNDb2RlIiB0 eXBlPSJ1YTpTdGF0dXNDb2RlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBu YW1lPSJSZXZpc2VkU2FtcGxpbmdJbnRlcnZhbCIgdHlwZT0ieHM6ZG91YmxlIiBtaW5PY2N1cnM9 IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXZpc2VkUXVldWVTaXplIiB0eXBlPSJ4 czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i RmlsdGVyUmVzdWx0IiB0eXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiIG1pbk9jY3Vycz0iMCIgbmls bGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4N CiAgPHhzOmVsZW1lbnQgbmFtZT0iTW9uaXRvcmVkSXRlbU1vZGlmeVJlc3VsdCIgdHlwZT0idG5z Ok1vbml0b3JlZEl0ZW1Nb2RpZnlSZXN1bHQiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9 Ikxpc3RPZk1vbml0b3JlZEl0ZW1Nb2RpZnlSZXN1bHQiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAg ICAgIDx4czplbGVtZW50IG5hbWU9Ik1vbml0b3JlZEl0ZW1Nb2RpZnlSZXN1bHQiIHR5cGU9InRu czpNb25pdG9yZWRJdGVtTW9kaWZ5UmVzdWx0IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5i b3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNv bXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZNb25pdG9yZWRJdGVtTW9kaWZ5 UmVzdWx0IiB0eXBlPSJ0bnM6TGlzdE9mTW9uaXRvcmVkSXRlbU1vZGlmeVJlc3VsdCIgbmlsbGFi bGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTW9kaWZ5 TW9uaXRvcmVkSXRlbXNSZXF1ZXN0Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxl bWVudCBuYW1lPSJSZXF1ZXN0SGVhZGVyIiB0eXBlPSJ0bnM6UmVxdWVzdEhlYWRlciIgbWluT2Nj dXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlN1YnNj cmlwdGlvbklkIiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAg PHhzOmVsZW1lbnQgbmFtZT0iVGltZXN0YW1wc1RvUmV0dXJuIiB0eXBlPSJ0bnM6VGltZXN0YW1w c1RvUmV0dXJuIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJJdGVt c1RvTW9kaWZ5IiB0eXBlPSJ0bnM6TGlzdE9mTW9uaXRvcmVkSXRlbU1vZGlmeVJlcXVlc3QiIG1p bk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94 czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTW9kaWZ5TW9uaXRvcmVkSXRlbXNS ZXF1ZXN0IiB0eXBlPSJ0bnM6TW9kaWZ5TW9uaXRvcmVkSXRlbXNSZXF1ZXN0IiAvPg0KDQogIDx4 czpjb21wbGV4VHlwZSBuYW1lPSJNb2RpZnlNb25pdG9yZWRJdGVtc1Jlc3BvbnNlIj4NCiAgICA8 eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUhlYWRlciIgdHlw ZT0idG5zOlJlc3BvbnNlSGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0K ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzdWx0cyIgdHlwZT0idG5zOkxpc3RPZk1vbml0b3Jl ZEl0ZW1Nb2RpZnlSZXN1bHQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAg ICA8eHM6ZWxlbWVudCBuYW1lPSJEaWFnbm9zdGljSW5mb3MiIHR5cGU9InVhOkxpc3RPZkRpYWdu b3N0aWNJbmZvIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2Vx dWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ik1vZGlmeU1v bml0b3JlZEl0ZW1zUmVzcG9uc2UiIHR5cGU9InRuczpNb2RpZnlNb25pdG9yZWRJdGVtc1Jlc3Bv bnNlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJTZXRNb25pdG9yaW5nTW9kZVJlcXVl c3QiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlcXVlc3RI ZWFkZXIiIHR5cGU9InRuczpSZXF1ZXN0SGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0 cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU3Vic2NyaXB0aW9uSWQiIHR5cGU9Inhz OnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJN b25pdG9yaW5nTW9kZSIgdHlwZT0idG5zOk1vbml0b3JpbmdNb2RlIiBtaW5PY2N1cnM9IjAiIC8+ DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJNb25pdG9yZWRJdGVtSWRzIiB0eXBlPSJ1YTpMaXN0 T2ZVSW50MzIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1 ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iU2V0TW9uaXRv cmluZ01vZGVSZXF1ZXN0IiB0eXBlPSJ0bnM6U2V0TW9uaXRvcmluZ01vZGVSZXF1ZXN0IiAvPg0K DQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJTZXRNb25pdG9yaW5nTW9kZVJlc3BvbnNlIj4NCiAg ICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUhlYWRlciIg dHlwZT0idG5zOlJlc3BvbnNlSGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAv Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzdWx0cyIgdHlwZT0idWE6TGlzdE9mU3RhdHVz Q29kZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50 IG5hbWU9IkRpYWdub3N0aWNJbmZvcyIgdHlwZT0idWE6TGlzdE9mRGlhZ25vc3RpY0luZm8iIG1p bk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94 czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iU2V0TW9uaXRvcmluZ01vZGVSZXNw b25zZSIgdHlwZT0idG5zOlNldE1vbml0b3JpbmdNb2RlUmVzcG9uc2UiIC8+DQoNCiAgPHhzOmNv bXBsZXhUeXBlIG5hbWU9IlNldFRyaWdnZXJpbmdSZXF1ZXN0Ij4NCiAgICA8eHM6c2VxdWVuY2U+ DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0SGVhZGVyIiB0eXBlPSJ0bnM6UmVxdWVz dEhlYWRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVt ZW50IG5hbWU9IlN1YnNjcmlwdGlvbklkIiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJz PSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVHJpZ2dlcmluZ0l0ZW1JZCIgdHlwZT0i eHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9 IkxpbmtzVG9BZGQiIHR5cGU9InVhOkxpc3RPZlVJbnQzMiIgbWluT2NjdXJzPSIwIiBuaWxsYWJs ZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkxpbmtzVG9SZW1vdmUiIHR5cGU9 InVhOkxpc3RPZlVJbnQzMiIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8 L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJT ZXRUcmlnZ2VyaW5nUmVxdWVzdCIgdHlwZT0idG5zOlNldFRyaWdnZXJpbmdSZXF1ZXN0IiAvPg0K DQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJTZXRUcmlnZ2VyaW5nUmVzcG9uc2UiPg0KICAgIDx4 czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlc3BvbnNlSGVhZGVyIiB0eXBl PSJ0bnM6UmVzcG9uc2VIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQog ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBZGRSZXN1bHRzIiB0eXBlPSJ1YTpMaXN0T2ZTdGF0dXND b2RlIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQg bmFtZT0iQWRkRGlhZ25vc3RpY0luZm9zIiB0eXBlPSJ1YTpMaXN0T2ZEaWFnbm9zdGljSW5mbyIg bWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9 IlJlbW92ZVJlc3VsdHMiIHR5cGU9InVhOkxpc3RPZlN0YXR1c0NvZGUiIG1pbk9jY3Vycz0iMCIg bmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZW1vdmVEaWFnbm9z dGljSW5mb3MiIHR5cGU9InVhOkxpc3RPZkRpYWdub3N0aWNJbmZvIiBtaW5PY2N1cnM9IjAiIG5p bGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+ DQogIDx4czplbGVtZW50IG5hbWU9IlNldFRyaWdnZXJpbmdSZXNwb25zZSIgdHlwZT0idG5zOlNl dFRyaWdnZXJpbmdSZXNwb25zZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iRGVsZXRl TW9uaXRvcmVkSXRlbXNSZXF1ZXN0Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxl bWVudCBuYW1lPSJSZXF1ZXN0SGVhZGVyIiB0eXBlPSJ0bnM6UmVxdWVzdEhlYWRlciIgbWluT2Nj dXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlN1YnNj cmlwdGlvbklkIiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAg PHhzOmVsZW1lbnQgbmFtZT0iTW9uaXRvcmVkSXRlbUlkcyIgdHlwZT0idWE6TGlzdE9mVUludDMy IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQog IDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkRlbGV0ZU1vbml0b3JlZEl0 ZW1zUmVxdWVzdCIgdHlwZT0idG5zOkRlbGV0ZU1vbml0b3JlZEl0ZW1zUmVxdWVzdCIgLz4NCg0K ICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iRGVsZXRlTW9uaXRvcmVkSXRlbXNSZXNwb25zZSI+DQog ICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VIZWFkZXIi IHR5cGU9InRuczpSZXNwb25zZUhlYWRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIg Lz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlc3VsdHMiIHR5cGU9InVhOkxpc3RPZlN0YXR1 c0NvZGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVu dCBuYW1lPSJEaWFnbm9zdGljSW5mb3MiIHR5cGU9InVhOkxpc3RPZkRpYWdub3N0aWNJbmZvIiBt aW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwv eHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkRlbGV0ZU1vbml0b3JlZEl0ZW1z UmVzcG9uc2UiIHR5cGU9InRuczpEZWxldGVNb25pdG9yZWRJdGVtc1Jlc3BvbnNlIiAvPg0KDQog IDx4czpjb21wbGV4VHlwZSBuYW1lPSJDcmVhdGVTdWJzY3JpcHRpb25SZXF1ZXN0Ij4NCiAgICA8 eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0SGVhZGVyIiB0eXBl PSJ0bnM6UmVxdWVzdEhlYWRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAg ICAgIDx4czplbGVtZW50IG5hbWU9IlJlcXVlc3RlZFB1Ymxpc2hpbmdJbnRlcnZhbCIgdHlwZT0i eHM6ZG91YmxlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXF1 ZXN0ZWRMaWZldGltZUNvdW50IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAv Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVxdWVzdGVkTWF4S2VlcEFsaXZlQ291bnQiIHR5 cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBu YW1lPSJNYXhOb3RpZmljYXRpb25zUGVyUHVibGlzaCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1p bk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlB1Ymxpc2hpbmdFbmFibGVk IiB0eXBlPSJ4czpib29sZWFuIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBu YW1lPSJQcmlvcml0eSIgdHlwZT0ieHM6dW5zaWduZWRCeXRlIiBtaW5PY2N1cnM9IjAiIC8+DQog ICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFt ZT0iQ3JlYXRlU3Vic2NyaXB0aW9uUmVxdWVzdCIgdHlwZT0idG5zOkNyZWF0ZVN1YnNjcmlwdGlv blJlcXVlc3QiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkNyZWF0ZVN1YnNjcmlwdGlv blJlc3BvbnNlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJS ZXNwb25zZUhlYWRlciIgdHlwZT0idG5zOlJlc3BvbnNlSGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5p bGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU3Vic2NyaXB0aW9uSWQi IHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVu dCBuYW1lPSJSZXZpc2VkUHVibGlzaGluZ0ludGVydmFsIiB0eXBlPSJ4czpkb3VibGUiIG1pbk9j Y3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJldmlzZWRMaWZldGltZUNvdW50 IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1l bnQgbmFtZT0iUmV2aXNlZE1heEtlZXBBbGl2ZUNvdW50IiB0eXBlPSJ4czp1bnNpZ25lZEludCIg bWluT2NjdXJzPSIwIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+ DQogIDx4czplbGVtZW50IG5hbWU9IkNyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlIiB0eXBlPSJ0 bnM6Q3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2UiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5h bWU9Ik1vZGlmeVN1YnNjcmlwdGlvblJlcXVlc3QiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAg IDx4czplbGVtZW50IG5hbWU9IlJlcXVlc3RIZWFkZXIiIHR5cGU9InRuczpSZXF1ZXN0SGVhZGVy IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt ZT0iU3Vic2NyaXB0aW9uSWQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+ DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0ZWRQdWJsaXNoaW5nSW50ZXJ2YWwiIHR5 cGU9InhzOmRvdWJsZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i UmVxdWVzdGVkTGlmZXRpbWVDb3VudCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0i MCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlcXVlc3RlZE1heEtlZXBBbGl2ZUNvdW50 IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1l bnQgbmFtZT0iTWF4Tm90aWZpY2F0aW9uc1BlclB1Ymxpc2giIHR5cGU9InhzOnVuc2lnbmVkSW50 IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJQcmlvcml0eSIgdHlw ZT0ieHM6dW5zaWduZWRCeXRlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgPC94czpzZXF1ZW5jZT4N CiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTW9kaWZ5U3Vic2NyaXB0 aW9uUmVxdWVzdCIgdHlwZT0idG5zOk1vZGlmeVN1YnNjcmlwdGlvblJlcXVlc3QiIC8+DQoNCiAg PHhzOmNvbXBsZXhUeXBlIG5hbWU9Ik1vZGlmeVN1YnNjcmlwdGlvblJlc3BvbnNlIj4NCiAgICA8 eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUhlYWRlciIgdHlw ZT0idG5zOlJlc3BvbnNlSGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0K ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmV2aXNlZFB1Ymxpc2hpbmdJbnRlcnZhbCIgdHlwZT0i eHM6ZG91YmxlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXZp c2VkTGlmZXRpbWVDb3VudCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4N CiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJldmlzZWRNYXhLZWVwQWxpdmVDb3VudCIgdHlwZT0i eHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8 L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJNb2RpZnlTdWJzY3JpcHRpb25S ZXNwb25zZSIgdHlwZT0idG5zOk1vZGlmeVN1YnNjcmlwdGlvblJlc3BvbnNlIiAvPg0KDQogIDx4 czpjb21wbGV4VHlwZSBuYW1lPSJTZXRQdWJsaXNoaW5nTW9kZVJlcXVlc3QiPg0KICAgIDx4czpz ZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlcXVlc3RIZWFkZXIiIHR5cGU9InRu czpSZXF1ZXN0SGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAg PHhzOmVsZW1lbnQgbmFtZT0iUHVibGlzaGluZ0VuYWJsZWQiIHR5cGU9InhzOmJvb2xlYW4iIG1p bk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlN1YnNjcmlwdGlvbklkcyIg dHlwZT0idWE6TGlzdE9mVUludDMyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0K ICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5h bWU9IlNldFB1Ymxpc2hpbmdNb2RlUmVxdWVzdCIgdHlwZT0idG5zOlNldFB1Ymxpc2hpbmdNb2Rl UmVxdWVzdCIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iU2V0UHVibGlzaGluZ01vZGVS ZXNwb25zZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVz cG9uc2VIZWFkZXIiIHR5cGU9InRuczpSZXNwb25zZUhlYWRlciIgbWluT2NjdXJzPSIwIiBuaWxs YWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlc3VsdHMiIHR5cGU9InVh Okxpc3RPZlN0YXR1c0NvZGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAg ICA8eHM6ZWxlbWVudCBuYW1lPSJEaWFnbm9zdGljSW5mb3MiIHR5cGU9InVhOkxpc3RPZkRpYWdu b3N0aWNJbmZvIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2Vx dWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlNldFB1Ymxp c2hpbmdNb2RlUmVzcG9uc2UiIHR5cGU9InRuczpTZXRQdWJsaXNoaW5nTW9kZVJlc3BvbnNlIiAv Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJOb3RpZmljYXRpb25NZXNzYWdlIj4NCiAgICA8 eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTZXF1ZW5jZU51bWJlciIgdHlw ZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5h bWU9IlB1Ymxpc2hUaW1lIiB0eXBlPSJ4czpkYXRlVGltZSIgbWluT2NjdXJzPSIwIiAvPg0KICAg ICAgPHhzOmVsZW1lbnQgbmFtZT0iTm90aWZpY2F0aW9uRGF0YSIgdHlwZT0idWE6TGlzdE9mRXh0 ZW5zaW9uT2JqZWN0IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6 c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ik5vdGlm aWNhdGlvbk1lc3NhZ2UiIHR5cGU9InRuczpOb3RpZmljYXRpb25NZXNzYWdlIiAvPg0KDQogIDx4 czpjb21wbGV4VHlwZSBuYW1lPSJOb3RpZmljYXRpb25EYXRhIj4NCiAgICA8eHM6c2VxdWVuY2U+ DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQg bmFtZT0iTm90aWZpY2F0aW9uRGF0YSIgdHlwZT0idG5zOk5vdGlmaWNhdGlvbkRhdGEiIC8+DQoN CiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkRhdGFDaGFuZ2VOb3RpZmljYXRpb24iPg0KICAgIDx4 czpjb21wbGV4Q29udGVudCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVuc2lvbiBiYXNl PSJ0bnM6Tm90aWZpY2F0aW9uRGF0YSI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAg ICA8eHM6ZWxlbWVudCBuYW1lPSJNb25pdG9yZWRJdGVtcyIgdHlwZT0idG5zOkxpc3RPZk1vbml0 b3JlZEl0ZW1Ob3RpZmljYXRpb24iIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQog ICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGlhZ25vc3RpY0luZm9zIiB0eXBlPSJ1YTpMaXN0 T2ZEaWFnbm9zdGljSW5mbyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAg ICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxl eENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkRhdGFD aGFuZ2VOb3RpZmljYXRpb24iIHR5cGU9InRuczpEYXRhQ2hhbmdlTm90aWZpY2F0aW9uIiAvPg0K DQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJNb25pdG9yZWRJdGVtTm90aWZpY2F0aW9uIj4NCiAg ICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDbGllbnRIYW5kbGUiIHR5 cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBu YW1lPSJWYWx1ZSIgdHlwZT0idWE6RGF0YVZhbHVlIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0 cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czpl bGVtZW50IG5hbWU9Ik1vbml0b3JlZEl0ZW1Ob3RpZmljYXRpb24iIHR5cGU9InRuczpNb25pdG9y ZWRJdGVtTm90aWZpY2F0aW9uIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZN b25pdG9yZWRJdGVtTm90aWZpY2F0aW9uIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6 ZWxlbWVudCBuYW1lPSJNb25pdG9yZWRJdGVtTm90aWZpY2F0aW9uIiB0eXBlPSJ0bnM6TW9uaXRv cmVkSXRlbU5vdGlmaWNhdGlvbiIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIg bmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlw ZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mTW9uaXRvcmVkSXRlbU5vdGlmaWNhdGlvbiIg dHlwZT0idG5zOkxpc3RPZk1vbml0b3JlZEl0ZW1Ob3RpZmljYXRpb24iIG5pbGxhYmxlPSJ0cnVl Ij48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkV2ZW50Tm90aWZpY2F0 aW9uTGlzdCI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+DQogICAgICA8 eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpOb3RpZmljYXRpb25EYXRhIj4NCiAgICAgICAgPHhzOnNl cXVlbmNlPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IkV2ZW50cyIgdHlwZT0idG5zOkxp c3RPZkV2ZW50RmllbGRMaXN0IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAg ICAgICA8L3hzOnNlcXVlbmNlPg0KICAgICAgPC94czpleHRlbnNpb24+DQogICAgPC94czpjb21w bGV4Q29udGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iRXZl bnROb3RpZmljYXRpb25MaXN0IiB0eXBlPSJ0bnM6RXZlbnROb3RpZmljYXRpb25MaXN0IiAvPg0K DQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJFdmVudEZpZWxkTGlzdCI+DQogICAgPHhzOnNlcXVl bmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQ2xpZW50SGFuZGxlIiB0eXBlPSJ4czp1bnNp Z25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRXZlbnRG aWVsZHMiIHR5cGU9InVhOkxpc3RPZlZhcmlhbnQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRy dWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVs ZW1lbnQgbmFtZT0iRXZlbnRGaWVsZExpc3QiIHR5cGU9InRuczpFdmVudEZpZWxkTGlzdCIgLz4N Cg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mRXZlbnRGaWVsZExpc3QiPg0KICAgIDx4 czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkV2ZW50RmllbGRMaXN0IiB0eXBl PSJ0bnM6RXZlbnRGaWVsZExpc3QiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQi IG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5 cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkV2ZW50RmllbGRMaXN0IiB0eXBlPSJ0bnM6 TGlzdE9mRXZlbnRGaWVsZExpc3QiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAg PHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikhpc3RvcnlFdmVudEZpZWxkTGlzdCI+DQogICAgPHhzOnNl cXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRXZlbnRGaWVsZHMiIHR5cGU9InVhOkxp c3RPZlZhcmlhbnQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpz ZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iSGlzdG9y eUV2ZW50RmllbGRMaXN0IiB0eXBlPSJ0bnM6SGlzdG9yeUV2ZW50RmllbGRMaXN0IiAvPg0KDQog IDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZIaXN0b3J5RXZlbnRGaWVsZExpc3QiPg0KICAg IDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ikhpc3RvcnlFdmVudEZpZWxk TGlzdCIgdHlwZT0idG5zOkhpc3RvcnlFdmVudEZpZWxkTGlzdCIgbWluT2NjdXJzPSIwIiBtYXhP Y2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4N CiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mSGlzdG9yeUV2 ZW50RmllbGRMaXN0IiB0eXBlPSJ0bnM6TGlzdE9mSGlzdG9yeUV2ZW50RmllbGRMaXN0IiBuaWxs YWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJTdGF0 dXNDaGFuZ2VOb3RpZmljYXRpb24iPg0KICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0iZmFs c2UiPg0KICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0bnM6Tm90aWZpY2F0aW9uRGF0YSI+DQog ICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTdGF0dXMi IHR5cGU9InVhOlN0YXR1c0NvZGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICA8eHM6ZWxl bWVudCBuYW1lPSJEaWFnbm9zdGljSW5mbyIgdHlwZT0idWE6RGlhZ25vc3RpY0luZm8iIG1pbk9j Y3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAg ICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBs ZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJTdGF0dXNDaGFuZ2VOb3RpZmljYXRpb24iIHR5 cGU9InRuczpTdGF0dXNDaGFuZ2VOb3RpZmljYXRpb24iIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBl IG5hbWU9IlN1YnNjcmlwdGlvbkFja25vd2xlZGdlbWVudCI+DQogICAgPHhzOnNlcXVlbmNlPg0K ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU3Vic2NyaXB0aW9uSWQiIHR5cGU9InhzOnVuc2lnbmVk SW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTZXF1ZW5jZU51 bWJlciIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICA8L3hzOnNl cXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJTdWJzY3Jp cHRpb25BY2tub3dsZWRnZW1lbnQiIHR5cGU9InRuczpTdWJzY3JpcHRpb25BY2tub3dsZWRnZW1l bnQiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZlN1YnNjcmlwdGlvbkFja25v d2xlZGdlbWVudCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i U3Vic2NyaXB0aW9uQWNrbm93bGVkZ2VtZW50IiB0eXBlPSJ0bnM6U3Vic2NyaXB0aW9uQWNrbm93 bGVkZ2VtZW50IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0i dHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6 ZWxlbWVudCBuYW1lPSJMaXN0T2ZTdWJzY3JpcHRpb25BY2tub3dsZWRnZW1lbnQiIHR5cGU9InRu czpMaXN0T2ZTdWJzY3JpcHRpb25BY2tub3dsZWRnZW1lbnQiIG5pbGxhYmxlPSJ0cnVlIj48L3hz OmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlB1Ymxpc2hSZXF1ZXN0Ij4NCiAg ICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0SGVhZGVyIiB0 eXBlPSJ0bnM6UmVxdWVzdEhlYWRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4N CiAgICAgIDx4czplbGVtZW50IG5hbWU9IlN1YnNjcmlwdGlvbkFja25vd2xlZGdlbWVudHMiIHR5 cGU9InRuczpMaXN0T2ZTdWJzY3JpcHRpb25BY2tub3dsZWRnZW1lbnQiIG1pbk9jY3Vycz0iMCIg bmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlw ZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iUHVibGlzaFJlcXVlc3QiIHR5cGU9InRuczpQdWJsaXNo UmVxdWVzdCIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iUHVibGlzaFJlc3BvbnNlIj4N CiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUhlYWRl ciIgdHlwZT0idG5zOlJlc3BvbnNlSGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVl IiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU3Vic2NyaXB0aW9uSWQiIHR5cGU9InhzOnVu c2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBdmFp bGFibGVTZXF1ZW5jZU51bWJlcnMiIHR5cGU9InVhOkxpc3RPZlVJbnQzMiIgbWluT2NjdXJzPSIw IiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik1vcmVOb3RpZmlj YXRpb25zIiB0eXBlPSJ4czpib29sZWFuIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxl bWVudCBuYW1lPSJOb3RpZmljYXRpb25NZXNzYWdlIiB0eXBlPSJ0bnM6Tm90aWZpY2F0aW9uTWVz c2FnZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50 IG5hbWU9IlJlc3VsdHMiIHR5cGU9InVhOkxpc3RPZlN0YXR1c0NvZGUiIG1pbk9jY3Vycz0iMCIg bmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEaWFnbm9zdGljSW5m b3MiIHR5cGU9InVhOkxpc3RPZkRpYWdub3N0aWNJbmZvIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxl PSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4 czplbGVtZW50IG5hbWU9IlB1Ymxpc2hSZXNwb25zZSIgdHlwZT0idG5zOlB1Ymxpc2hSZXNwb25z ZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iUmVwdWJsaXNoUmVxdWVzdCI+DQogICAg PHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEhlYWRlciIgdHlw ZT0idG5zOlJlcXVlc3RIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQog ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTdWJzY3JpcHRpb25JZCIgdHlwZT0ieHM6dW5zaWduZWRJ bnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJldHJhbnNtaXRT ZXF1ZW5jZU51bWJlciIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAg ICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1l PSJSZXB1Ymxpc2hSZXF1ZXN0IiB0eXBlPSJ0bnM6UmVwdWJsaXNoUmVxdWVzdCIgLz4NCg0KICA8 eHM6Y29tcGxleFR5cGUgbmFtZT0iUmVwdWJsaXNoUmVzcG9uc2UiPg0KICAgIDx4czpzZXF1ZW5j ZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlc3BvbnNlSGVhZGVyIiB0eXBlPSJ0bnM6UmVz cG9uc2VIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6 ZWxlbWVudCBuYW1lPSJOb3RpZmljYXRpb25NZXNzYWdlIiB0eXBlPSJ0bnM6Tm90aWZpY2F0aW9u TWVzc2FnZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVl bmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJSZXB1Ymxpc2hS ZXNwb25zZSIgdHlwZT0idG5zOlJlcHVibGlzaFJlc3BvbnNlIiAvPg0KDQogIDx4czpjb21wbGV4 VHlwZSBuYW1lPSJUcmFuc2ZlclJlc3VsdCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhz OmVsZW1lbnQgbmFtZT0iU3RhdHVzQ29kZSIgdHlwZT0idWE6U3RhdHVzQ29kZSIgbWluT2NjdXJz PSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQXZhaWxhYmxlU2VxdWVuY2VOdW1iZXJz IiB0eXBlPSJ1YTpMaXN0T2ZVSW50MzIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+ DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQg bmFtZT0iVHJhbnNmZXJSZXN1bHQiIHR5cGU9InRuczpUcmFuc2ZlclJlc3VsdCIgLz4NCg0KICA8 eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mVHJhbnNmZXJSZXN1bHQiPg0KICAgIDx4czpzZXF1 ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlRyYW5zZmVyUmVzdWx0IiB0eXBlPSJ0bnM6 VHJhbnNmZXJSZXN1bHQiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxh YmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQog IDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZlRyYW5zZmVyUmVzdWx0IiB0eXBlPSJ0bnM6TGlzdE9m VHJhbnNmZXJSZXN1bHQiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNv bXBsZXhUeXBlIG5hbWU9IlRyYW5zZmVyU3Vic2NyaXB0aW9uc1JlcXVlc3QiPg0KICAgIDx4czpz ZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlcXVlc3RIZWFkZXIiIHR5cGU9InRu czpSZXF1ZXN0SGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAg PHhzOmVsZW1lbnQgbmFtZT0iU3Vic2NyaXB0aW9uSWRzIiB0eXBlPSJ1YTpMaXN0T2ZVSW50MzIi IG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1l PSJTZW5kSW5pdGlhbFZhbHVlcyIgdHlwZT0ieHM6Ym9vbGVhbiIgbWluT2NjdXJzPSIwIiAvPg0K ICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5h bWU9IlRyYW5zZmVyU3Vic2NyaXB0aW9uc1JlcXVlc3QiIHR5cGU9InRuczpUcmFuc2ZlclN1YnNj cmlwdGlvbnNSZXF1ZXN0IiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJUcmFuc2ZlclN1 YnNjcmlwdGlvbnNSZXNwb25zZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1l bnQgbmFtZT0iUmVzcG9uc2VIZWFkZXIiIHR5cGU9InRuczpSZXNwb25zZUhlYWRlciIgbWluT2Nj dXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlc3Vs dHMiIHR5cGU9InRuczpMaXN0T2ZUcmFuc2ZlclJlc3VsdCIgbWluT2NjdXJzPSIwIiBuaWxsYWJs ZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRpYWdub3N0aWNJbmZvcyIgdHlw ZT0idWE6TGlzdE9mRGlhZ25vc3RpY0luZm8iIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUi IC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1l bnQgbmFtZT0iVHJhbnNmZXJTdWJzY3JpcHRpb25zUmVzcG9uc2UiIHR5cGU9InRuczpUcmFuc2Zl clN1YnNjcmlwdGlvbnNSZXNwb25zZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iRGVs ZXRlU3Vic2NyaXB0aW9uc1JlcXVlc3QiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czpl bGVtZW50IG5hbWU9IlJlcXVlc3RIZWFkZXIiIHR5cGU9InRuczpSZXF1ZXN0SGVhZGVyIiBtaW5P Y2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU3Vi c2NyaXB0aW9uSWRzIiB0eXBlPSJ1YTpMaXN0T2ZVSW50MzIiIG1pbk9jY3Vycz0iMCIgbmlsbGFi bGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAg PHhzOmVsZW1lbnQgbmFtZT0iRGVsZXRlU3Vic2NyaXB0aW9uc1JlcXVlc3QiIHR5cGU9InRuczpE ZWxldGVTdWJzY3JpcHRpb25zUmVxdWVzdCIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0i RGVsZXRlU3Vic2NyaXB0aW9uc1Jlc3BvbnNlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8 eHM6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUhlYWRlciIgdHlwZT0idG5zOlJlc3BvbnNlSGVhZGVy IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt ZT0iUmVzdWx0cyIgdHlwZT0idWE6TGlzdE9mU3RhdHVzQ29kZSIgbWluT2NjdXJzPSIwIiBuaWxs YWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRpYWdub3N0aWNJbmZvcyIg dHlwZT0idWE6TGlzdE9mRGlhZ25vc3RpY0luZm8iIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRy dWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVs ZW1lbnQgbmFtZT0iRGVsZXRlU3Vic2NyaXB0aW9uc1Jlc3BvbnNlIiB0eXBlPSJ0bnM6RGVsZXRl U3Vic2NyaXB0aW9uc1Jlc3BvbnNlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJCdWls ZEluZm8iPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlByb2R1 Y3RVcmkiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4N CiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik1hbnVmYWN0dXJlck5hbWUiIHR5cGU9InhzOnN0cmlu ZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5h bWU9IlByb2R1Y3ROYW1lIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9 InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTb2Z0d2FyZVZlcnNpb24iIHR5cGU9 InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czpl bGVtZW50IG5hbWU9IkJ1aWxkTnVtYmVyIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIg bmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJCdWlsZERhdGUiIHR5 cGU9InhzOmRhdGVUaW1lIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAg PC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iQnVpbGRJbmZvIiB0eXBlPSJ0 bnM6QnVpbGRJbmZvIiAvPg0KDQogIDx4czpzaW1wbGVUeXBlICBuYW1lPSJSZWR1bmRhbmN5U3Vw cG9ydCI+DQogICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnN0cmluZyI+DQogICAgICA8eHM6 ZW51bWVyYXRpb24gdmFsdWU9Ik5vbmVfMCIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1 ZT0iQ29sZF8xIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJXYXJtXzIiIC8+DQog ICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkhvdF8zIiAvPg0KICAgICAgPHhzOmVudW1lcmF0 aW9uIHZhbHVlPSJUcmFuc3BhcmVudF80IiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVl PSJIb3RBbmRNaXJyb3JlZF81IiAvPg0KICAgIDwveHM6cmVzdHJpY3Rpb24+DQogIDwveHM6c2lt cGxlVHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iUmVkdW5kYW5jeVN1cHBvcnQiIHR5cGU9InRu czpSZWR1bmRhbmN5U3VwcG9ydCIgLz4NCg0KICA8eHM6c2ltcGxlVHlwZSAgbmFtZT0iU2VydmVy U3RhdGUiPg0KICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpzdHJpbmciPg0KICAgICAgPHhz OmVudW1lcmF0aW9uIHZhbHVlPSJSdW5uaW5nXzAiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24g dmFsdWU9IkZhaWxlZF8xIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJOb0NvbmZp Z3VyYXRpb25fMiIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iU3VzcGVuZGVkXzMi IC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlNodXRkb3duXzQiIC8+DQogICAgICA8 eHM6ZW51bWVyYXRpb24gdmFsdWU9IlRlc3RfNSIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2 YWx1ZT0iQ29tbXVuaWNhdGlvbkZhdWx0XzYiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFs dWU9IlVua25vd25fNyIgLz4NCiAgICA8L3hzOnJlc3RyaWN0aW9uPg0KICA8L3hzOnNpbXBsZVR5 cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlNlcnZlclN0YXRlIiB0eXBlPSJ0bnM6U2VydmVyU3Rh dGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlJlZHVuZGFudFNlcnZlckRhdGFUeXBl Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTZXJ2ZXJJZCIg dHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAg PHhzOmVsZW1lbnQgbmFtZT0iU2VydmljZUxldmVsIiB0eXBlPSJ4czp1bnNpZ25lZEJ5dGUiIG1p bk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNlcnZlclN0YXRlIiB0eXBl PSJ0bnM6U2VydmVyU3RhdGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0K ICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJSZWR1bmRhbnRTZXJ2ZXJE YXRhVHlwZSIgdHlwZT0idG5zOlJlZHVuZGFudFNlcnZlckRhdGFUeXBlIiAvPg0KDQogIDx4czpj b21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZSZWR1bmRhbnRTZXJ2ZXJEYXRhVHlwZSI+DQogICAgPHhz OnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVkdW5kYW50U2VydmVyRGF0YVR5 cGUiIHR5cGU9InRuczpSZWR1bmRhbnRTZXJ2ZXJEYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBtYXhP Y2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4N CiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mUmVkdW5kYW50 U2VydmVyRGF0YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZSZWR1bmRhbnRTZXJ2ZXJEYXRhVHlwZSIg bmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0i RW5kcG9pbnRVcmxMaXN0RGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czpl bGVtZW50IG5hbWU9IkVuZHBvaW50VXJsTGlzdCIgdHlwZT0idWE6TGlzdE9mU3RyaW5nIiBtaW5P Y2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6 Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkVuZHBvaW50VXJsTGlzdERhdGFUeXBl IiB0eXBlPSJ0bnM6RW5kcG9pbnRVcmxMaXN0RGF0YVR5cGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhU eXBlIG5hbWU9Ikxpc3RPZkVuZHBvaW50VXJsTGlzdERhdGFUeXBlIj4NCiAgICA8eHM6c2VxdWVu Y2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJFbmRwb2ludFVybExpc3REYXRhVHlwZSIgdHlw ZT0idG5zOkVuZHBvaW50VXJsTGlzdERhdGFUeXBlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0i dW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hz OmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZFbmRwb2ludFVybExpc3RE YXRhVHlwZSIgdHlwZT0idG5zOkxpc3RPZkVuZHBvaW50VXJsTGlzdERhdGFUeXBlIiBuaWxsYWJs ZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJOZXR3b3Jr R3JvdXBEYXRhVHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt ZT0iU2VydmVyVXJpIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRy dWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJOZXR3b3JrUGF0aHMiIHR5cGU9InRuczpM aXN0T2ZFbmRwb2ludFVybExpc3REYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1 ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxl bWVudCBuYW1lPSJOZXR3b3JrR3JvdXBEYXRhVHlwZSIgdHlwZT0idG5zOk5ldHdvcmtHcm91cERh dGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZOZXR3b3JrR3JvdXBE YXRhVHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTmV0 d29ya0dyb3VwRGF0YVR5cGUiIHR5cGU9InRuczpOZXR3b3JrR3JvdXBEYXRhVHlwZSIgbWluT2Nj dXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94 czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlz dE9mTmV0d29ya0dyb3VwRGF0YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZOZXR3b3JrR3JvdXBEYXRh VHlwZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUg bmFtZT0iU2FtcGxpbmdJbnRlcnZhbERpYWdub3N0aWNzRGF0YVR5cGUiPg0KICAgIDx4czpzZXF1 ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNhbXBsaW5nSW50ZXJ2YWwiIHR5cGU9Inhz OmRvdWJsZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTW9uaXRv cmVkSXRlbUNvdW50IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAg ICAgPHhzOmVsZW1lbnQgbmFtZT0iTWF4TW9uaXRvcmVkSXRlbUNvdW50IiB0eXBlPSJ4czp1bnNp Z25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGlzYWJs ZWRNb25pdG9yZWRJdGVtQ291bnQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAi IC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1l bnQgbmFtZT0iU2FtcGxpbmdJbnRlcnZhbERpYWdub3N0aWNzRGF0YVR5cGUiIHR5cGU9InRuczpT YW1wbGluZ0ludGVydmFsRGlhZ25vc3RpY3NEYXRhVHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5 cGUgbmFtZT0iTGlzdE9mU2FtcGxpbmdJbnRlcnZhbERpYWdub3N0aWNzRGF0YVR5cGUiPg0KICAg IDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNhbXBsaW5nSW50ZXJ2YWxE aWFnbm9zdGljc0RhdGFUeXBlIiB0eXBlPSJ0bnM6U2FtcGxpbmdJbnRlcnZhbERpYWdub3N0aWNz RGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0 cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czpl bGVtZW50IG5hbWU9Ikxpc3RPZlNhbXBsaW5nSW50ZXJ2YWxEaWFnbm9zdGljc0RhdGFUeXBlIiB0 eXBlPSJ0bnM6TGlzdE9mU2FtcGxpbmdJbnRlcnZhbERpYWdub3N0aWNzRGF0YVR5cGUiIG5pbGxh YmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlNlcnZl ckRpYWdub3N0aWNzU3VtbWFyeURhdGFUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8 eHM6ZWxlbWVudCBuYW1lPSJTZXJ2ZXJWaWV3Q291bnQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBt aW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDdXJyZW50U2Vzc2lvbkNv dW50IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVs ZW1lbnQgbmFtZT0iQ3VtdWxhdGVkU2Vzc2lvbkNvdW50IiB0eXBlPSJ4czp1bnNpZ25lZEludCIg bWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2VjdXJpdHlSZWplY3Rl ZFNlc3Npb25Db3VudCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAg ICAgIDx4czplbGVtZW50IG5hbWU9IlJlamVjdGVkU2Vzc2lvbkNvdW50IiB0eXBlPSJ4czp1bnNp Z25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2Vzc2lv blRpbWVvdXRDb3VudCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAg ICAgIDx4czplbGVtZW50IG5hbWU9IlNlc3Npb25BYm9ydENvdW50IiB0eXBlPSJ4czp1bnNpZ25l ZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQ3VycmVudFN1 YnNjcmlwdGlvbkNvdW50IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0K ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQ3VtdWxhdGVkU3Vic2NyaXB0aW9uQ291bnQiIHR5cGU9 InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1l PSJQdWJsaXNoaW5nSW50ZXJ2YWxDb3VudCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vy cz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNlY3VyaXR5UmVqZWN0ZWRSZXF1ZXN0 c0NvdW50IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhz OmVsZW1lbnQgbmFtZT0iUmVqZWN0ZWRSZXF1ZXN0c0NvdW50IiB0eXBlPSJ4czp1bnNpZ25lZElu dCIgbWluT2NjdXJzPSIwIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5 cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlNlcnZlckRpYWdub3N0aWNzU3VtbWFyeURhdGFUeXBl IiB0eXBlPSJ0bnM6U2VydmVyRGlhZ25vc3RpY3NTdW1tYXJ5RGF0YVR5cGUiIC8+DQoNCiAgPHhz OmNvbXBsZXhUeXBlIG5hbWU9IlNlcnZlclN0YXR1c0RhdGFUeXBlIj4NCiAgICA8eHM6c2VxdWVu Y2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTdGFydFRpbWUiIHR5cGU9InhzOmRhdGVUaW1l IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDdXJyZW50VGltZSIg dHlwZT0ieHM6ZGF0ZVRpbWUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5h bWU9IlN0YXRlIiB0eXBlPSJ0bnM6U2VydmVyU3RhdGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAg IDx4czplbGVtZW50IG5hbWU9IkJ1aWxkSW5mbyIgdHlwZT0idG5zOkJ1aWxkSW5mbyIgbWluT2Nj dXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNlY29u ZHNUaWxsU2h1dGRvd24iIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQog ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTaHV0ZG93blJlYXNvbiIgdHlwZT0idWE6TG9jYWxpemVk VGV4dCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNl Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJTZXJ2ZXJTdGF0dXNE YXRhVHlwZSIgdHlwZT0idG5zOlNlcnZlclN0YXR1c0RhdGFUeXBlIiAvPg0KDQogIDx4czpjb21w bGV4VHlwZSBuYW1lPSJTZXNzaW9uRGlhZ25vc3RpY3NEYXRhVHlwZSI+DQogICAgPHhzOnNlcXVl bmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2Vzc2lvbklkIiB0eXBlPSJ1YTpOb2RlSWQi IG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1l PSJTZXNzaW9uTmFtZSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0 cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQ2xpZW50RGVzY3JpcHRpb24iIHR5cGU9 InRuczpBcHBsaWNhdGlvbkRlc2NyaXB0aW9uIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVl IiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2VydmVyVXJpIiB0eXBlPSJ4czpzdHJpbmci IG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1l PSJFbmRwb2ludFVybCIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0 cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTG9jYWxlSWRzIiB0eXBlPSJ1YTpMaXN0 T2ZTdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxl bWVudCBuYW1lPSJBY3R1YWxTZXNzaW9uVGltZW91dCIgdHlwZT0ieHM6ZG91YmxlIiBtaW5PY2N1 cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJNYXhSZXNwb25zZU1lc3NhZ2VTaXpl IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1l bnQgbmFtZT0iQ2xpZW50Q29ubmVjdGlvblRpbWUiIHR5cGU9InhzOmRhdGVUaW1lIiBtaW5PY2N1 cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDbGllbnRMYXN0Q29udGFjdFRpbWUi IHR5cGU9InhzOmRhdGVUaW1lIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBu YW1lPSJDdXJyZW50U3Vic2NyaXB0aW9uc0NvdW50IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWlu T2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQ3VycmVudE1vbml0b3JlZEl0 ZW1zQ291bnQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8 eHM6ZWxlbWVudCBuYW1lPSJDdXJyZW50UHVibGlzaFJlcXVlc3RzSW5RdWV1ZSIgdHlwZT0ieHM6 dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlRv dGFsUmVxdWVzdENvdW50IiB0eXBlPSJ0bnM6U2VydmljZUNvdW50ZXJEYXRhVHlwZSIgbWluT2Nj dXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlVuYXV0 aG9yaXplZFJlcXVlc3RDb3VudCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIg Lz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlYWRDb3VudCIgdHlwZT0idG5zOlNlcnZpY2VD b3VudGVyRGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8 eHM6ZWxlbWVudCBuYW1lPSJIaXN0b3J5UmVhZENvdW50IiB0eXBlPSJ0bnM6U2VydmljZUNvdW50 ZXJEYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czpl bGVtZW50IG5hbWU9IldyaXRlQ291bnQiIHR5cGU9InRuczpTZXJ2aWNlQ291bnRlckRhdGFUeXBl IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt ZT0iSGlzdG9yeVVwZGF0ZUNvdW50IiB0eXBlPSJ0bnM6U2VydmljZUNvdW50ZXJEYXRhVHlwZSIg bWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9 IkNhbGxDb3VudCIgdHlwZT0idG5zOlNlcnZpY2VDb3VudGVyRGF0YVR5cGUiIG1pbk9jY3Vycz0i MCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDcmVhdGVNb25p dG9yZWRJdGVtc0NvdW50IiB0eXBlPSJ0bnM6U2VydmljZUNvdW50ZXJEYXRhVHlwZSIgbWluT2Nj dXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik1vZGlm eU1vbml0b3JlZEl0ZW1zQ291bnQiIHR5cGU9InRuczpTZXJ2aWNlQ291bnRlckRhdGFUeXBlIiBt aW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i U2V0TW9uaXRvcmluZ01vZGVDb3VudCIgdHlwZT0idG5zOlNlcnZpY2VDb3VudGVyRGF0YVR5cGUi IG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1l PSJTZXRUcmlnZ2VyaW5nQ291bnQiIHR5cGU9InRuczpTZXJ2aWNlQ291bnRlckRhdGFUeXBlIiBt aW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i RGVsZXRlTW9uaXRvcmVkSXRlbXNDb3VudCIgdHlwZT0idG5zOlNlcnZpY2VDb3VudGVyRGF0YVR5 cGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBu YW1lPSJDcmVhdGVTdWJzY3JpcHRpb25Db3VudCIgdHlwZT0idG5zOlNlcnZpY2VDb3VudGVyRGF0 YVR5cGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVu dCBuYW1lPSJNb2RpZnlTdWJzY3JpcHRpb25Db3VudCIgdHlwZT0idG5zOlNlcnZpY2VDb3VudGVy RGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxl bWVudCBuYW1lPSJTZXRQdWJsaXNoaW5nTW9kZUNvdW50IiB0eXBlPSJ0bnM6U2VydmljZUNvdW50 ZXJEYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czpl bGVtZW50IG5hbWU9IlB1Ymxpc2hDb3VudCIgdHlwZT0idG5zOlNlcnZpY2VDb3VudGVyRGF0YVR5 cGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBu YW1lPSJSZXB1Ymxpc2hDb3VudCIgdHlwZT0idG5zOlNlcnZpY2VDb3VudGVyRGF0YVR5cGUiIG1p bk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJU cmFuc2ZlclN1YnNjcmlwdGlvbnNDb3VudCIgdHlwZT0idG5zOlNlcnZpY2VDb3VudGVyRGF0YVR5 cGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBu YW1lPSJEZWxldGVTdWJzY3JpcHRpb25zQ291bnQiIHR5cGU9InRuczpTZXJ2aWNlQ291bnRlckRh dGFUeXBlIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1l bnQgbmFtZT0iQWRkTm9kZXNDb3VudCIgdHlwZT0idG5zOlNlcnZpY2VDb3VudGVyRGF0YVR5cGUi IG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1l PSJBZGRSZWZlcmVuY2VzQ291bnQiIHR5cGU9InRuczpTZXJ2aWNlQ291bnRlckRhdGFUeXBlIiBt aW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i RGVsZXRlTm9kZXNDb3VudCIgdHlwZT0idG5zOlNlcnZpY2VDb3VudGVyRGF0YVR5cGUiIG1pbk9j Y3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEZWxl dGVSZWZlcmVuY2VzQ291bnQiIHR5cGU9InRuczpTZXJ2aWNlQ291bnRlckRhdGFUeXBlIiBtaW5P Y2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQnJv d3NlQ291bnQiIHR5cGU9InRuczpTZXJ2aWNlQ291bnRlckRhdGFUeXBlIiBtaW5PY2N1cnM9IjAi IG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQnJvd3NlTmV4dENv dW50IiB0eXBlPSJ0bnM6U2VydmljZUNvdW50ZXJEYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBuaWxs YWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlRyYW5zbGF0ZUJyb3dzZVBh dGhzVG9Ob2RlSWRzQ291bnQiIHR5cGU9InRuczpTZXJ2aWNlQ291bnRlckRhdGFUeXBlIiBtaW5P Y2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUXVl cnlGaXJzdENvdW50IiB0eXBlPSJ0bnM6U2VydmljZUNvdW50ZXJEYXRhVHlwZSIgbWluT2NjdXJz PSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlF1ZXJ5TmV4 dENvdW50IiB0eXBlPSJ0bnM6U2VydmljZUNvdW50ZXJEYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBu aWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlZ2lzdGVyTm9kZXND b3VudCIgdHlwZT0idG5zOlNlcnZpY2VDb3VudGVyRGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbmls bGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJVbnJlZ2lzdGVyTm9kZXND b3VudCIgdHlwZT0idG5zOlNlcnZpY2VDb3VudGVyRGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbmls bGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4N CiAgPHhzOmVsZW1lbnQgbmFtZT0iU2Vzc2lvbkRpYWdub3N0aWNzRGF0YVR5cGUiIHR5cGU9InRu czpTZXNzaW9uRGlhZ25vc3RpY3NEYXRhVHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFt ZT0iTGlzdE9mU2Vzc2lvbkRpYWdub3N0aWNzRGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4N CiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNlc3Npb25EaWFnbm9zdGljc0RhdGFUeXBlIiB0eXBl PSJ0bnM6U2Vzc2lvbkRpYWdub3N0aWNzRGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJz PSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwv eHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZlNlc3Npb25EaWFnbm9z dGljc0RhdGFUeXBlIiB0eXBlPSJ0bnM6TGlzdE9mU2Vzc2lvbkRpYWdub3N0aWNzRGF0YVR5cGUi IG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9 IlNlc3Npb25TZWN1cml0eURpYWdub3N0aWNzRGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4N CiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNlc3Npb25JZCIgdHlwZT0idWE6Tm9kZUlkIiBtaW5P Y2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQ2xp ZW50VXNlcklkT2ZTZXNzaW9uIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFi bGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDbGllbnRVc2VySWRIaXN0b3J5 IiB0eXBlPSJ1YTpMaXN0T2ZTdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+ DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBdXRoZW50aWNhdGlvbk1lY2hhbmlzbSIgdHlwZT0i eHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVs ZW1lbnQgbmFtZT0iRW5jb2RpbmciIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxs YWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlRyYW5zcG9ydFByb3RvY29s IiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAg ICA8eHM6ZWxlbWVudCBuYW1lPSJTZWN1cml0eU1vZGUiIHR5cGU9InRuczpNZXNzYWdlU2VjdXJp dHlNb2RlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTZWN1cml0 eVBvbGljeVVyaSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVl IiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQ2xpZW50Q2VydGlmaWNhdGUiIHR5cGU9Inhz OmJhc2U2NEJpbmFyeSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hz OnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJTZXNz aW9uU2VjdXJpdHlEaWFnbm9zdGljc0RhdGFUeXBlIiB0eXBlPSJ0bnM6U2Vzc2lvblNlY3VyaXR5 RGlhZ25vc3RpY3NEYXRhVHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9m U2Vzc2lvblNlY3VyaXR5RGlhZ25vc3RpY3NEYXRhVHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0K ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2Vzc2lvblNlY3VyaXR5RGlhZ25vc3RpY3NEYXRhVHlw ZSIgdHlwZT0idG5zOlNlc3Npb25TZWN1cml0eURpYWdub3N0aWNzRGF0YVR5cGUiIG1pbk9jY3Vy cz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6 c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RP ZlNlc3Npb25TZWN1cml0eURpYWdub3N0aWNzRGF0YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZTZXNz aW9uU2VjdXJpdHlEaWFnbm9zdGljc0RhdGFUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVt ZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJTZXJ2aWNlQ291bnRlckRhdGFUeXBlIj4N CiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJUb3RhbENvdW50IiB0 eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQg bmFtZT0iRXJyb3JDb3VudCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4N CiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBu YW1lPSJTZXJ2aWNlQ291bnRlckRhdGFUeXBlIiB0eXBlPSJ0bnM6U2VydmljZUNvdW50ZXJEYXRh VHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iU3RhdHVzUmVzdWx0Ij4NCiAgICA8 eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTdGF0dXNDb2RlIiB0eXBlPSJ1 YTpTdGF0dXNDb2RlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJE aWFnbm9zdGljSW5mbyIgdHlwZT0idWE6RGlhZ25vc3RpY0luZm8iIG1pbk9jY3Vycz0iMCIgbmls bGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4N CiAgPHhzOmVsZW1lbnQgbmFtZT0iU3RhdHVzUmVzdWx0IiB0eXBlPSJ0bnM6U3RhdHVzUmVzdWx0 IiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZTdGF0dXNSZXN1bHQiPg0KICAg IDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlN0YXR1c1Jlc3VsdCIgdHlw ZT0idG5zOlN0YXR1c1Jlc3VsdCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIg bmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlw ZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mU3RhdHVzUmVzdWx0IiB0eXBlPSJ0bnM6TGlz dE9mU3RhdHVzUmVzdWx0IiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpj b21wbGV4VHlwZSBuYW1lPSJTdWJzY3JpcHRpb25EaWFnbm9zdGljc0RhdGFUeXBlIj4NCiAgICA8 eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTZXNzaW9uSWQiIHR5cGU9InVh Ok5vZGVJZCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVt ZW50IG5hbWU9IlN1YnNjcmlwdGlvbklkIiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJz PSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUHJpb3JpdHkiIHR5cGU9InhzOnVuc2ln bmVkQnl0ZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUHVibGlz aGluZ0ludGVydmFsIiB0eXBlPSJ4czpkb3VibGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4 czplbGVtZW50IG5hbWU9Ik1heEtlZXBBbGl2ZUNvdW50IiB0eXBlPSJ4czp1bnNpZ25lZEludCIg bWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTWF4TGlmZXRpbWVDb3Vu dCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVt ZW50IG5hbWU9Ik1heE5vdGlmaWNhdGlvbnNQZXJQdWJsaXNoIiB0eXBlPSJ4czp1bnNpZ25lZElu dCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUHVibGlzaGluZ0Vu YWJsZWQiIHR5cGU9InhzOmJvb2xlYW4iIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVt ZW50IG5hbWU9Ik1vZGlmeUNvdW50IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIw IiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRW5hYmxlQ291bnQiIHR5cGU9InhzOnVuc2ln bmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEaXNhYmxl Q291bnQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6 ZWxlbWVudCBuYW1lPSJSZXB1Ymxpc2hSZXF1ZXN0Q291bnQiIHR5cGU9InhzOnVuc2lnbmVkSW50 IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXB1Ymxpc2hNZXNz YWdlUmVxdWVzdENvdW50IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0K ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVwdWJsaXNoTWVzc2FnZUNvdW50IiB0eXBlPSJ4czp1 bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVHJh bnNmZXJSZXF1ZXN0Q291bnQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+ DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJUcmFuc2ZlcnJlZFRvQWx0Q2xpZW50Q291bnQiIHR5 cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBu YW1lPSJUcmFuc2ZlcnJlZFRvU2FtZUNsaWVudENvdW50IiB0eXBlPSJ4czp1bnNpZ25lZEludCIg bWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUHVibGlzaFJlcXVlc3RD b3VudCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czpl bGVtZW50IG5hbWU9IkRhdGFDaGFuZ2VOb3RpZmljYXRpb25zQ291bnQiIHR5cGU9InhzOnVuc2ln bmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJFdmVudE5v dGlmaWNhdGlvbnNDb3VudCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4N CiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik5vdGlmaWNhdGlvbnNDb3VudCIgdHlwZT0ieHM6dW5z aWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkxhdGVQ dWJsaXNoUmVxdWVzdENvdW50IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAv Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQ3VycmVudEtlZXBBbGl2ZUNvdW50IiB0eXBlPSJ4 czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i Q3VycmVudExpZmV0aW1lQ291bnQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAi IC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJVbmFja25vd2xlZGdlZE1lc3NhZ2VDb3VudCIg dHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50 IG5hbWU9IkRpc2NhcmRlZE1lc3NhZ2VDb3VudCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9j Y3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik1vbml0b3JlZEl0ZW1Db3VudCIg dHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50 IG5hbWU9IkRpc2FibGVkTW9uaXRvcmVkSXRlbUNvdW50IiB0eXBlPSJ4czp1bnNpZ25lZEludCIg bWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTW9uaXRvcmluZ1F1ZXVl T3ZlcmZsb3dDb3VudCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAg ICAgIDx4czplbGVtZW50IG5hbWU9Ik5leHRTZXF1ZW5jZU51bWJlciIgdHlwZT0ieHM6dW5zaWdu ZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkV2ZW50UXVl dWVPdmVyRmxvd0NvdW50IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0K ICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5h bWU9IlN1YnNjcmlwdGlvbkRpYWdub3N0aWNzRGF0YVR5cGUiIHR5cGU9InRuczpTdWJzY3JpcHRp b25EaWFnbm9zdGljc0RhdGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0 T2ZTdWJzY3JpcHRpb25EaWFnbm9zdGljc0RhdGFUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQog ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTdWJzY3JpcHRpb25EaWFnbm9zdGljc0RhdGFUeXBlIiB0 eXBlPSJ0bnM6U3Vic2NyaXB0aW9uRGlhZ25vc3RpY3NEYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBt YXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5j ZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mU3Vic2Ny aXB0aW9uRGlhZ25vc3RpY3NEYXRhVHlwZSIgdHlwZT0idG5zOkxpc3RPZlN1YnNjcmlwdGlvbkRp YWdub3N0aWNzRGF0YVR5cGUiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhz OnNpbXBsZVR5cGUgIG5hbWU9Ik1vZGVsQ2hhbmdlU3RydWN0dXJlVmVyYk1hc2siPg0KICAgIDx4 czpyZXN0cmljdGlvbiBiYXNlPSJ4czpzdHJpbmciPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZh bHVlPSJOb2RlQWRkZWRfMSIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iTm9kZURl bGV0ZWRfMiIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iUmVmZXJlbmNlQWRkZWRf NCIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iUmVmZXJlbmNlRGVsZXRlZF84IiAv Pg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJEYXRhVHlwZUNoYW5nZWRfMTYiIC8+DQog ICAgPC94czpyZXN0cmljdGlvbj4NCiAgPC94czpzaW1wbGVUeXBlPg0KICA8eHM6ZWxlbWVudCBu YW1lPSJNb2RlbENoYW5nZVN0cnVjdHVyZVZlcmJNYXNrIiB0eXBlPSJ0bnM6TW9kZWxDaGFuZ2VT dHJ1Y3R1cmVWZXJiTWFzayIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTW9kZWxDaGFu Z2VTdHJ1Y3R1cmVEYXRhVHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1l bnQgbmFtZT0iQWZmZWN0ZWQiIHR5cGU9InVhOk5vZGVJZCIgbWluT2NjdXJzPSIwIiBuaWxsYWJs ZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkFmZmVjdGVkVHlwZSIgdHlwZT0i dWE6Tm9kZUlkIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVs ZW1lbnQgbmFtZT0iVmVyYiIgdHlwZT0ieHM6dW5zaWduZWRCeXRlIiBtaW5PY2N1cnM9IjAiIC8+ DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQg bmFtZT0iTW9kZWxDaGFuZ2VTdHJ1Y3R1cmVEYXRhVHlwZSIgdHlwZT0idG5zOk1vZGVsQ2hhbmdl U3RydWN0dXJlRGF0YVR5cGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZk1v ZGVsQ2hhbmdlU3RydWN0dXJlRGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4 czplbGVtZW50IG5hbWU9Ik1vZGVsQ2hhbmdlU3RydWN0dXJlRGF0YVR5cGUiIHR5cGU9InRuczpN b2RlbENoYW5nZVN0cnVjdHVyZURhdGFUeXBlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5i b3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNv bXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZNb2RlbENoYW5nZVN0cnVjdHVy ZURhdGFUeXBlIiB0eXBlPSJ0bnM6TGlzdE9mTW9kZWxDaGFuZ2VTdHJ1Y3R1cmVEYXRhVHlwZSIg bmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0i U2VtYW50aWNDaGFuZ2VTdHJ1Y3R1cmVEYXRhVHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAg ICAgPHhzOmVsZW1lbnQgbmFtZT0iQWZmZWN0ZWQiIHR5cGU9InVhOk5vZGVJZCIgbWluT2NjdXJz PSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkFmZmVjdGVk VHlwZSIgdHlwZT0idWE6Tm9kZUlkIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0K ICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5h bWU9IlNlbWFudGljQ2hhbmdlU3RydWN0dXJlRGF0YVR5cGUiIHR5cGU9InRuczpTZW1hbnRpY0No YW5nZVN0cnVjdHVyZURhdGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0 T2ZTZW1hbnRpY0NoYW5nZVN0cnVjdHVyZURhdGFUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQog ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTZW1hbnRpY0NoYW5nZVN0cnVjdHVyZURhdGFUeXBlIiB0 eXBlPSJ0bnM6U2VtYW50aWNDaGFuZ2VTdHJ1Y3R1cmVEYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBt YXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5j ZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mU2VtYW50 aWNDaGFuZ2VTdHJ1Y3R1cmVEYXRhVHlwZSIgdHlwZT0idG5zOkxpc3RPZlNlbWFudGljQ2hhbmdl U3RydWN0dXJlRGF0YVR5cGUiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhz OmNvbXBsZXhUeXBlIG5hbWU9IlJhbmdlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6 ZWxlbWVudCBuYW1lPSJMb3ciIHR5cGU9InhzOmRvdWJsZSIgbWluT2NjdXJzPSIwIiAvPg0KICAg ICAgPHhzOmVsZW1lbnQgbmFtZT0iSGlnaCIgdHlwZT0ieHM6ZG91YmxlIiBtaW5PY2N1cnM9IjAi IC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1l bnQgbmFtZT0iUmFuZ2UiIHR5cGU9InRuczpSYW5nZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUg bmFtZT0iRVVJbmZvcm1hdGlvbiI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1l bnQgbmFtZT0iTmFtZXNwYWNlVXJpIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmls bGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJVbml0SWQiIHR5cGU9Inhz OmludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGlzcGxheU5h bWUiIHR5cGU9InVhOkxvY2FsaXplZFRleHQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUi IC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEZXNjcmlwdGlvbiIgdHlwZT0idWE6TG9jYWxp emVkVGV4dCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVl bmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJFVUluZm9ybWF0 aW9uIiB0eXBlPSJ0bnM6RVVJbmZvcm1hdGlvbiIgLz4NCg0KICA8eHM6c2ltcGxlVHlwZSAgbmFt ZT0iQXhpc1NjYWxlRW51bWVyYXRpb24iPg0KICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpz dHJpbmciPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJMaW5lYXJfMCIgLz4NCiAgICAg IDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iTG9nXzEiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24g dmFsdWU9IkxuXzIiIC8+DQogICAgPC94czpyZXN0cmljdGlvbj4NCiAgPC94czpzaW1wbGVUeXBl Pg0KICA8eHM6ZWxlbWVudCBuYW1lPSJBeGlzU2NhbGVFbnVtZXJhdGlvbiIgdHlwZT0idG5zOkF4 aXNTY2FsZUVudW1lcmF0aW9uIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJDb21wbGV4 TnVtYmVyVHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i UmVhbCIgdHlwZT0ieHM6ZmxvYXQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50 IG5hbWU9IkltYWdpbmFyeSIgdHlwZT0ieHM6ZmxvYXQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICA8 L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJD b21wbGV4TnVtYmVyVHlwZSIgdHlwZT0idG5zOkNvbXBsZXhOdW1iZXJUeXBlIiAvPg0KDQogIDx4 czpjb21wbGV4VHlwZSBuYW1lPSJEb3VibGVDb21wbGV4TnVtYmVyVHlwZSI+DQogICAgPHhzOnNl cXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVhbCIgdHlwZT0ieHM6ZG91YmxlIiBt aW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJJbWFnaW5hcnkiIHR5cGU9 InhzOmRvdWJsZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6 Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkRvdWJsZUNvbXBsZXhOdW1iZXJUeXBl IiB0eXBlPSJ0bnM6RG91YmxlQ29tcGxleE51bWJlclR5cGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhU eXBlIG5hbWU9IkF4aXNJbmZvcm1hdGlvbiI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhz OmVsZW1lbnQgbmFtZT0iRW5naW5lZXJpbmdVbml0cyIgdHlwZT0idG5zOkVVSW5mb3JtYXRpb24i IG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1l PSJFVVJhbmdlIiB0eXBlPSJ0bnM6UmFuZ2UiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUi IC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJUaXRsZSIgdHlwZT0idWE6TG9jYWxpemVkVGV4 dCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5h bWU9IkF4aXNTY2FsZVR5cGUiIHR5cGU9InRuczpBeGlzU2NhbGVFbnVtZXJhdGlvbiIgbWluT2Nj dXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQXhpc1N0ZXBzIiB0eXBlPSJ1YTpM aXN0T2ZEb3VibGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpz ZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iQXhpc0lu Zm9ybWF0aW9uIiB0eXBlPSJ0bnM6QXhpc0luZm9ybWF0aW9uIiAvPg0KDQogIDx4czpjb21wbGV4 VHlwZSBuYW1lPSJYVlR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50 IG5hbWU9IlgiIHR5cGU9InhzOmRvdWJsZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVs ZW1lbnQgbmFtZT0iVmFsdWUiIHR5cGU9InhzOmZsb2F0IiBtaW5PY2N1cnM9IjAiIC8+DQogICAg PC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0i WFZUeXBlIiB0eXBlPSJ0bnM6WFZUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJQ cm9ncmFtRGlhZ25vc3RpY0RhdGFUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6 ZWxlbWVudCBuYW1lPSJDcmVhdGVTZXNzaW9uSWQiIHR5cGU9InVhOk5vZGVJZCIgbWluT2NjdXJz PSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkNyZWF0ZUNs aWVudE5hbWUiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIg Lz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ikludm9jYXRpb25DcmVhdGlvblRpbWUiIHR5cGU9 InhzOmRhdGVUaW1lIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJM YXN0VHJhbnNpdGlvblRpbWUiIHR5cGU9InhzOmRhdGVUaW1lIiBtaW5PY2N1cnM9IjAiIC8+DQog ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJMYXN0TWV0aG9kQ2FsbCIgdHlwZT0ieHM6c3RyaW5nIiBt aW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i TGFzdE1ldGhvZFNlc3Npb25JZCIgdHlwZT0idWE6Tm9kZUlkIiBtaW5PY2N1cnM9IjAiIG5pbGxh YmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTGFzdE1ldGhvZElucHV0QXJn dW1lbnRzIiB0eXBlPSJ0bnM6TGlzdE9mQXJndW1lbnQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9 InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJMYXN0TWV0aG9kT3V0cHV0QXJndW1l bnRzIiB0eXBlPSJ0bnM6TGlzdE9mQXJndW1lbnQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRy dWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJMYXN0TWV0aG9kQ2FsbFRpbWUiIHR5cGU9 InhzOmRhdGVUaW1lIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJM YXN0TWV0aG9kUmV0dXJuU3RhdHVzIiB0eXBlPSJ0bnM6U3RhdHVzUmVzdWx0IiBtaW5PY2N1cnM9 IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxl eFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlByb2dyYW1EaWFnbm9zdGljRGF0YVR5cGUiIHR5 cGU9InRuczpQcm9ncmFtRGlhZ25vc3RpY0RhdGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4VHlw ZSBuYW1lPSJQcm9ncmFtRGlhZ25vc3RpYzJEYXRhVHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0K ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQ3JlYXRlU2Vzc2lvbklkIiB0eXBlPSJ1YTpOb2RlSWQi IG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1l PSJDcmVhdGVDbGllbnROYW1lIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFi bGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJJbnZvY2F0aW9uQ3JlYXRpb25U aW1lIiB0eXBlPSJ4czpkYXRlVGltZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1l bnQgbmFtZT0iTGFzdFRyYW5zaXRpb25UaW1lIiB0eXBlPSJ4czpkYXRlVGltZSIgbWluT2NjdXJz PSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTGFzdE1ldGhvZENhbGwiIHR5cGU9Inhz OnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVt ZW50IG5hbWU9Ikxhc3RNZXRob2RTZXNzaW9uSWQiIHR5cGU9InVhOk5vZGVJZCIgbWluT2NjdXJz PSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ikxhc3RNZXRo b2RJbnB1dEFyZ3VtZW50cyIgdHlwZT0idG5zOkxpc3RPZkFyZ3VtZW50IiBtaW5PY2N1cnM9IjAi IG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTGFzdE1ldGhvZE91 dHB1dEFyZ3VtZW50cyIgdHlwZT0idG5zOkxpc3RPZkFyZ3VtZW50IiBtaW5PY2N1cnM9IjAiIG5p bGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTGFzdE1ldGhvZElucHV0 VmFsdWVzIiB0eXBlPSJ1YTpMaXN0T2ZWYXJpYW50IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0 cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTGFzdE1ldGhvZE91dHB1dFZhbHVlcyIg dHlwZT0idWE6TGlzdE9mVmFyaWFudCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4N CiAgICAgIDx4czplbGVtZW50IG5hbWU9Ikxhc3RNZXRob2RDYWxsVGltZSIgdHlwZT0ieHM6ZGF0 ZVRpbWUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ikxhc3RNZXRo b2RSZXR1cm5TdGF0dXMiIHR5cGU9InVhOlN0YXR1c0NvZGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAg ICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1l PSJQcm9ncmFtRGlhZ25vc3RpYzJEYXRhVHlwZSIgdHlwZT0idG5zOlByb2dyYW1EaWFnbm9zdGlj MkRhdGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJBbm5vdGF0aW9uIj4NCiAg ICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJNZXNzYWdlIiB0eXBlPSJ4 czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxl bWVudCBuYW1lPSJVc2VyTmFtZSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxh YmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQW5ub3RhdGlvblRpbWUiIHR5 cGU9InhzOmRhdGVUaW1lIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAg PC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iQW5ub3RhdGlvbiIgdHlwZT0i dG5zOkFubm90YXRpb24iIC8+DQoNCiAgPHhzOnNpbXBsZVR5cGUgIG5hbWU9IkV4Y2VwdGlvbkRl dmlhdGlvbkZvcm1hdCI+DQogICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnN0cmluZyI+DQog ICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkFic29sdXRlVmFsdWVfMCIgLz4NCiAgICAgIDx4 czplbnVtZXJhdGlvbiB2YWx1ZT0iUGVyY2VudE9mVmFsdWVfMSIgLz4NCiAgICAgIDx4czplbnVt ZXJhdGlvbiB2YWx1ZT0iUGVyY2VudE9mUmFuZ2VfMiIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlv biB2YWx1ZT0iUGVyY2VudE9mRVVSYW5nZV8zIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZh bHVlPSJVbmtub3duXzQiIC8+DQogICAgPC94czpyZXN0cmljdGlvbj4NCiAgPC94czpzaW1wbGVU eXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJFeGNlcHRpb25EZXZpYXRpb25Gb3JtYXQiIHR5cGU9 InRuczpFeGNlcHRpb25EZXZpYXRpb25Gb3JtYXQiIC8+DQoNCjwveHM6c2NoZW1hPg== NamespaceUri i=68 i=8252 http://opcfoundation.org/UA/2008/02/Types.xsd Deprecated i=68 i=8252 true Union i=69 i=8252 //xs:element[@name='Union'] KeyValuePair i=69 i=8252 //xs:element[@name='KeyValuePair'] AdditionalParametersType i=69 i=8252 //xs:element[@name='AdditionalParametersType'] EphemeralKeyType i=69 i=8252 //xs:element[@name='EphemeralKeyType'] EndpointType i=69 i=8252 //xs:element[@name='EndpointType'] RationalNumber i=69 i=8252 //xs:element[@name='RationalNumber'] Vector i=69 i=8252 //xs:element[@name='Vector'] 3DVector i=69 i=8252 //xs:element[@name='ThreeDVector'] CartesianCoordinates i=69 i=8252 //xs:element[@name='CartesianCoordinates'] 3DCartesianCoordinates i=69 i=8252 //xs:element[@name='ThreeDCartesianCoordinates'] Orientation i=69 i=8252 //xs:element[@name='Orientation'] 3DOrientation i=69 i=8252 //xs:element[@name='ThreeDOrientation'] Frame i=69 i=8252 //xs:element[@name='Frame'] 3DFrame i=69 i=8252 //xs:element[@name='ThreeDFrame'] IdentityMappingRuleType i=69 i=8252 //xs:element[@name='IdentityMappingRuleType'] CurrencyUnitType i=69 i=8252 //xs:element[@name='CurrencyUnitType'] TrustListDataType i=69 i=8252 //xs:element[@name='TrustListDataType'] DataTypeSchemaHeader i=69 i=8252 //xs:element[@name='DataTypeSchemaHeader'] DataTypeDescription i=69 i=8252 //xs:element[@name='DataTypeDescription'] StructureDescription i=69 i=8252 //xs:element[@name='StructureDescription'] EnumDescription i=69 i=8252 //xs:element[@name='EnumDescription'] SimpleTypeDescription i=69 i=8252 //xs:element[@name='SimpleTypeDescription'] UABinaryFileDataType i=69 i=8252 //xs:element[@name='UABinaryFileDataType'] DataSetMetaDataType i=69 i=8252 //xs:element[@name='DataSetMetaDataType'] FieldMetaData i=69 i=8252 //xs:element[@name='FieldMetaData'] ConfigurationVersionDataType i=69 i=8252 //xs:element[@name='ConfigurationVersionDataType'] PublishedDataSetDataType i=69 i=8252 //xs:element[@name='PublishedDataSetDataType'] PublishedDataSetSourceDataType i=69 i=8252 //xs:element[@name='PublishedDataSetSourceDataType'] PublishedVariableDataType i=69 i=8252 //xs:element[@name='PublishedVariableDataType'] PublishedDataItemsDataType i=69 i=8252 //xs:element[@name='PublishedDataItemsDataType'] PublishedEventsDataType i=69 i=8252 //xs:element[@name='PublishedEventsDataType'] DataSetWriterDataType i=69 i=8252 //xs:element[@name='DataSetWriterDataType'] DataSetWriterTransportDataType i=69 i=8252 //xs:element[@name='DataSetWriterTransportDataType'] DataSetWriterMessageDataType i=69 i=8252 //xs:element[@name='DataSetWriterMessageDataType'] PubSubGroupDataType i=69 i=8252 //xs:element[@name='PubSubGroupDataType'] WriterGroupDataType i=69 i=8252 //xs:element[@name='WriterGroupDataType'] WriterGroupTransportDataType i=69 i=8252 //xs:element[@name='WriterGroupTransportDataType'] WriterGroupMessageDataType i=69 i=8252 //xs:element[@name='WriterGroupMessageDataType'] PubSubConnectionDataType i=69 i=8252 //xs:element[@name='PubSubConnectionDataType'] ConnectionTransportDataType i=69 i=8252 //xs:element[@name='ConnectionTransportDataType'] NetworkAddressDataType i=69 i=8252 //xs:element[@name='NetworkAddressDataType'] NetworkAddressUrlDataType i=69 i=8252 //xs:element[@name='NetworkAddressUrlDataType'] ReaderGroupDataType i=69 i=8252 //xs:element[@name='ReaderGroupDataType'] ReaderGroupTransportDataType i=69 i=8252 //xs:element[@name='ReaderGroupTransportDataType'] ReaderGroupMessageDataType i=69 i=8252 //xs:element[@name='ReaderGroupMessageDataType'] DataSetReaderDataType i=69 i=8252 //xs:element[@name='DataSetReaderDataType'] DataSetReaderTransportDataType i=69 i=8252 //xs:element[@name='DataSetReaderTransportDataType'] DataSetReaderMessageDataType i=69 i=8252 //xs:element[@name='DataSetReaderMessageDataType'] SubscribedDataSetDataType i=69 i=8252 //xs:element[@name='SubscribedDataSetDataType'] TargetVariablesDataType i=69 i=8252 //xs:element[@name='TargetVariablesDataType'] FieldTargetDataType i=69 i=8252 //xs:element[@name='FieldTargetDataType'] SubscribedDataSetMirrorDataType i=69 i=8252 //xs:element[@name='SubscribedDataSetMirrorDataType'] PubSubConfigurationDataType i=69 i=8252 //xs:element[@name='PubSubConfigurationDataType'] UadpWriterGroupMessageDataType i=69 i=8252 //xs:element[@name='UadpWriterGroupMessageDataType'] UadpDataSetWriterMessageDataType i=69 i=8252 //xs:element[@name='UadpDataSetWriterMessageDataType'] UadpDataSetReaderMessageDataType i=69 i=8252 //xs:element[@name='UadpDataSetReaderMessageDataType'] JsonWriterGroupMessageDataType i=69 i=8252 //xs:element[@name='JsonWriterGroupMessageDataType'] JsonDataSetWriterMessageDataType i=69 i=8252 //xs:element[@name='JsonDataSetWriterMessageDataType'] JsonDataSetReaderMessageDataType i=69 i=8252 //xs:element[@name='JsonDataSetReaderMessageDataType'] DatagramConnectionTransportDataType i=69 i=8252 //xs:element[@name='DatagramConnectionTransportDataType'] DatagramWriterGroupTransportDataType i=69 i=8252 //xs:element[@name='DatagramWriterGroupTransportDataType'] BrokerConnectionTransportDataType i=69 i=8252 //xs:element[@name='BrokerConnectionTransportDataType'] BrokerWriterGroupTransportDataType i=69 i=8252 //xs:element[@name='BrokerWriterGroupTransportDataType'] BrokerDataSetWriterTransportDataType i=69 i=8252 //xs:element[@name='BrokerDataSetWriterTransportDataType'] BrokerDataSetReaderTransportDataType i=69 i=8252 //xs:element[@name='BrokerDataSetReaderTransportDataType'] AliasNameDataType i=69 i=8252 //xs:element[@name='AliasNameDataType'] UnsignedRationalNumber i=69 i=8252 //xs:element[@name='UnsignedRationalNumber'] RolePermissionType i=69 i=8252 //xs:element[@name='RolePermissionType'] DataTypeDefinition i=69 i=8252 //xs:element[@name='DataTypeDefinition'] StructureField i=69 i=8252 //xs:element[@name='StructureField'] StructureDefinition i=69 i=8252 //xs:element[@name='StructureDefinition'] EnumDefinition i=69 i=8252 //xs:element[@name='EnumDefinition'] Argument i=69 i=8252 //xs:element[@name='Argument'] EnumValueType i=69 i=8252 //xs:element[@name='EnumValueType'] EnumField i=69 i=8252 //xs:element[@name='EnumField'] OptionSet i=69 i=8252 //xs:element[@name='OptionSet'] TimeZoneDataType i=69 i=8252 //xs:element[@name='TimeZoneDataType'] ApplicationDescription i=69 i=8252 //xs:element[@name='ApplicationDescription'] ServerOnNetwork i=69 i=8252 //xs:element[@name='ServerOnNetwork'] UserTokenPolicy i=69 i=8252 //xs:element[@name='UserTokenPolicy'] EndpointDescription i=69 i=8252 //xs:element[@name='EndpointDescription'] RegisteredServer i=69 i=8252 //xs:element[@name='RegisteredServer'] DiscoveryConfiguration i=69 i=8252 //xs:element[@name='DiscoveryConfiguration'] MdnsDiscoveryConfiguration i=69 i=8252 //xs:element[@name='MdnsDiscoveryConfiguration'] SignedSoftwareCertificate i=69 i=8252 //xs:element[@name='SignedSoftwareCertificate'] UserIdentityToken i=69 i=8252 //xs:element[@name='UserIdentityToken'] AnonymousIdentityToken i=69 i=8252 //xs:element[@name='AnonymousIdentityToken'] UserNameIdentityToken i=69 i=8252 //xs:element[@name='UserNameIdentityToken'] X509IdentityToken i=69 i=8252 //xs:element[@name='X509IdentityToken'] IssuedIdentityToken i=69 i=8252 //xs:element[@name='IssuedIdentityToken'] AddNodesItem i=69 i=8252 //xs:element[@name='AddNodesItem'] AddReferencesItem i=69 i=8252 //xs:element[@name='AddReferencesItem'] DeleteNodesItem i=69 i=8252 //xs:element[@name='DeleteNodesItem'] DeleteReferencesItem i=69 i=8252 //xs:element[@name='DeleteReferencesItem'] RelativePathElement i=69 i=8252 //xs:element[@name='RelativePathElement'] RelativePath i=69 i=8252 //xs:element[@name='RelativePath'] EndpointConfiguration i=69 i=8252 //xs:element[@name='EndpointConfiguration'] ContentFilterElement i=69 i=8252 //xs:element[@name='ContentFilterElement'] ContentFilter i=69 i=8252 //xs:element[@name='ContentFilter'] FilterOperand i=69 i=8252 //xs:element[@name='FilterOperand'] ElementOperand i=69 i=8252 //xs:element[@name='ElementOperand'] LiteralOperand i=69 i=8252 //xs:element[@name='LiteralOperand'] AttributeOperand i=69 i=8252 //xs:element[@name='AttributeOperand'] SimpleAttributeOperand i=69 i=8252 //xs:element[@name='SimpleAttributeOperand'] HistoryEvent i=69 i=8252 //xs:element[@name='HistoryEvent'] MonitoringFilter i=69 i=8252 //xs:element[@name='MonitoringFilter'] EventFilter i=69 i=8252 //xs:element[@name='EventFilter'] AggregateConfiguration i=69 i=8252 //xs:element[@name='AggregateConfiguration'] HistoryEventFieldList i=69 i=8252 //xs:element[@name='HistoryEventFieldList'] BuildInfo i=69 i=8252 //xs:element[@name='BuildInfo'] RedundantServerDataType i=69 i=8252 //xs:element[@name='RedundantServerDataType'] EndpointUrlListDataType i=69 i=8252 //xs:element[@name='EndpointUrlListDataType'] NetworkGroupDataType i=69 i=8252 //xs:element[@name='NetworkGroupDataType'] SamplingIntervalDiagnosticsDataType i=69 i=8252 //xs:element[@name='SamplingIntervalDiagnosticsDataType'] ServerDiagnosticsSummaryDataType i=69 i=8252 //xs:element[@name='ServerDiagnosticsSummaryDataType'] ServerStatusDataType i=69 i=8252 //xs:element[@name='ServerStatusDataType'] SessionDiagnosticsDataType i=69 i=8252 //xs:element[@name='SessionDiagnosticsDataType'] SessionSecurityDiagnosticsDataType i=69 i=8252 //xs:element[@name='SessionSecurityDiagnosticsDataType'] ServiceCounterDataType i=69 i=8252 //xs:element[@name='ServiceCounterDataType'] StatusResult i=69 i=8252 //xs:element[@name='StatusResult'] SubscriptionDiagnosticsDataType i=69 i=8252 //xs:element[@name='SubscriptionDiagnosticsDataType'] ModelChangeStructureDataType i=69 i=8252 //xs:element[@name='ModelChangeStructureDataType'] SemanticChangeStructureDataType i=69 i=8252 //xs:element[@name='SemanticChangeStructureDataType'] Range i=69 i=8252 //xs:element[@name='Range'] EUInformation i=69 i=8252 //xs:element[@name='EUInformation'] ComplexNumberType i=69 i=8252 //xs:element[@name='ComplexNumberType'] DoubleComplexNumberType i=69 i=8252 //xs:element[@name='DoubleComplexNumberType'] AxisInformation i=69 i=8252 //xs:element[@name='AxisInformation'] XVType i=69 i=8252 //xs:element[@name='XVType'] ProgramDiagnosticDataType i=69 i=8252 //xs:element[@name='ProgramDiagnosticDataType'] ProgramDiagnostic2DataType i=69 i=8252 //xs:element[@name='ProgramDiagnostic2DataType'] Annotation i=69 i=8252 //xs:element[@name='Annotation'] Default JSON i=12756 i=76 Default JSON i=14533 i=76 Default JSON i=16313 i=76 Default JSON i=17548 i=76 Default JSON i=15528 i=76 Default JSON i=18806 i=76 Default JSON i=18807 i=76 Default JSON i=18808 i=76 Default JSON i=18809 i=76 Default JSON i=18810 i=76 Default JSON i=18811 i=76 Default JSON i=18812 i=76 Default JSON i=18813 i=76 Default JSON i=18814 i=76 Default JSON i=15634 i=76 Default JSON i=23498 i=76 Default JSON i=12554 i=76 Default JSON i=15534 i=76 Default JSON i=14525 i=76 Default JSON i=15487 i=76 Default JSON i=15488 i=76 Default JSON i=15005 i=76 Default JSON i=15006 i=76 Default JSON i=14523 i=76 Default JSON i=14524 i=76 Default JSON i=14593 i=76 Default JSON i=15578 i=76 Default JSON i=15580 i=76 Default JSON i=14273 i=76 Default JSON i=15581 i=76 Default JSON i=15582 i=76 Default JSON i=15597 i=76 Default JSON i=15598 i=76 Default JSON i=15605 i=76 Default JSON i=15609 i=76 Default JSON i=15480 i=76 Default JSON i=15611 i=76 Default JSON i=15616 i=76 Default JSON i=15617 i=76 Default JSON i=15618 i=76 Default JSON i=15502 i=76 Default JSON i=15510 i=76 Default JSON i=15520 i=76 Default JSON i=15621 i=76 Default JSON i=15622 i=76 Default JSON i=15623 i=76 Default JSON i=15628 i=76 Default JSON i=15629 i=76 Default JSON i=15630 i=76 Default JSON i=15631 i=76 Default JSON i=14744 i=76 Default JSON i=15635 i=76 Default JSON i=15530 i=76 Default JSON i=15645 i=76 Default JSON i=15652 i=76 Default JSON i=15653 i=76 Default JSON i=15657 i=76 Default JSON i=15664 i=76 Default JSON i=15665 i=76 Default JSON i=17467 i=76 Default JSON i=15532 i=76 Default JSON i=15007 i=76 Default JSON i=15667 i=76 Default JSON i=15669 i=76 Default JSON i=15670 i=76 Default JSON i=23468 i=76 Default JSON i=24107 i=76 Default JSON i=96 i=76 Default JSON i=97 i=76 Default JSON i=101 i=76 Default JSON i=99 i=76 Default JSON i=100 i=76 Default JSON i=296 i=76 Default JSON i=7594 i=76 Default JSON i=102 i=76 Default JSON i=12755 i=76 Default JSON i=8912 i=76 Default JSON i=308 i=76 Default JSON i=12189 i=76 Default JSON i=304 i=76 Default JSON i=312 i=76 Default JSON i=432 i=76 Default JSON i=12890 i=76 Default JSON i=12891 i=76 Default JSON i=344 i=76 Default JSON i=316 i=76 Default JSON i=319 i=76 Default JSON i=322 i=76 Default JSON i=325 i=76 Default JSON i=938 i=76 Default JSON i=376 i=76 Default JSON i=379 i=76 Default JSON i=382 i=76 Default JSON i=385 i=76 Default JSON i=537 i=76 Default JSON i=540 i=76 Default JSON i=331 i=76 Default JSON i=583 i=76 Default JSON i=586 i=76 Default JSON i=589 i=76 Default JSON i=592 i=76 Default JSON i=595 i=76 Default JSON i=598 i=76 Default JSON i=601 i=76 Default JSON i=659 i=76 Default JSON i=719 i=76 Default JSON i=725 i=76 Default JSON i=948 i=76 Default JSON i=920 i=76 Default JSON i=338 i=76 Default JSON i=853 i=76 Default JSON i=11943 i=76 Default JSON i=11944 i=76 Default JSON i=856 i=76 Default JSON i=859 i=76 Default JSON i=862 i=76 Default JSON i=865 i=76 Default JSON i=868 i=76 Default JSON i=871 i=76 Default JSON i=299 i=76 Default JSON i=874 i=76 Default JSON i=877 i=76 Default JSON i=897 i=76 Default JSON i=884 i=76 Default JSON i=887 i=76 Default JSON i=12171 i=76 Default JSON i=12172 i=76 Default JSON i=12079 i=76 Default JSON i=12080 i=76 Default JSON i=894 i=76 Default JSON i=24033 i=76 Default JSON i=891 i=76 ================================================ FILE: SemanticData/UANodeSetValidation/XML/README.MD ================================================ # XML Files This folder contains xml and xsd files relevant for OPC UA and this project. The files published by OPC Foundation are located at: [Index of UA schemas](https://opcfoundation.org/UA/schemas/). ================================================ FILE: SemanticData/UANodeSetValidation/XML/Reference.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2022, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ using System; using UAOOI.SemanticData.AddressSpace.Abstractions; using UAOOI.SemanticData.UANodeSetValidation.DataSerialization; namespace UAOOI.SemanticData.UANodeSetValidation.XML { public partial class Reference : IEquatable, IReference { /// /// Indicates whether the current object is equal to another object of the same type. /// /// An object to compare with this object. /// true if the current object is equal to the other parameter; otherwise, false. public bool Equals(Reference other) { return this.ToString().CompareTo(other.ToString()) == 0; } /// /// Returns a that represents this instance. /// /// A that represents this instance. public override string ToString() { return $"{this.IsForward}, {this.ReferenceType}, {this.Value}"; } internal void RecalculateNodeIds(Func importNodeId) { ReferenceTypeNodeid = importNodeId(ReferenceType); ValueNodeId = importNodeId(Value); } #region IReference [System.Xml.Serialization.XmlIgnore] public NodeId ReferenceTypeNodeid { get; private set; } [System.Xml.Serialization.XmlIgnore] public NodeId ValueNodeId { get; private set; } #endregion IReference } } ================================================ FILE: SemanticData/UANodeSetValidation/XML/ReferenceChange.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2021, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System; using UAOOI.SemanticData.UANodeSetValidation.DataSerialization; namespace UAOOI.SemanticData.UANodeSetValidation.XML { public partial class ReferenceChange { internal void RecalculateNodeIds(Func importNodeId) { SourceNodeId = importNodeId(Source); ValueNodeId = importNodeId(Value); ReferenceTypeNodeId = importNodeId(Value); } internal NodeId SourceNodeId { get; private set; } internal NodeId ValueNodeId { get; private set; } internal NodeId ReferenceTypeNodeId { get; private set; } } } ================================================ FILE: SemanticData/UANodeSetValidation/XML/RolePermission.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2022, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ using System; using UAOOI.SemanticData.AddressSpace.Abstractions; using UAOOI.SemanticData.UANodeSetValidation.DataSerialization; namespace UAOOI.SemanticData.UANodeSetValidation.XML { /// /// Class RolePermission. /// public partial class RolePermission : IRolePermission { internal void RecalculateNodeIds(Func importNodeId) { ValueNodeId = importNodeId(Value); } internal NodeId ValueNodeId { get; private set; } } } ================================================ FILE: SemanticData/UANodeSetValidation/XML/UADataType.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2022, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ using System; using UAOOI.SemanticData.AddressSpace.Abstractions; using UAOOI.SemanticData.BuildingErrorsHandling; namespace UAOOI.SemanticData.UANodeSetValidation.XML { public partial class UADataType : IUADataType { #region IUADataType public override NodeClassEnum NodeClass => NodeClassEnum.UADataType; UAOOI.SemanticData.InformationModelFactory.DataTypePurpose IUADataType.Purpose { get { UAOOI.SemanticData.InformationModelFactory.DataTypePurpose _status = default(UAOOI.SemanticData.InformationModelFactory.DataTypePurpose); switch (this.Purpose) { case DataTypePurpose.Normal: _status = UAOOI.SemanticData.InformationModelFactory.DataTypePurpose.Normal; break; case DataTypePurpose.CodeGenerator: _status = UAOOI.SemanticData.InformationModelFactory.DataTypePurpose.CodeGenerator; break; case DataTypePurpose.ServicesOnly: _status = UAOOI.SemanticData.InformationModelFactory.DataTypePurpose.ServicesOnly; break; } return _status; } } IDataTypeDefinition IUADataTypeNodeClass.Definition { get { return this.Definition; } //TODO Define independent Address Space API #645 - must be implemented //set { this.Definition = new DataTypeDefinition(value); } } #endregion IUADataType /// /// Get the clone from the types derived from this one. /// /// An instance of . protected override UANode ParentClone() { UADataType _ret = new UADataType() { Definition = this.Definition, Purpose = this.Purpose }; base.CloneUAType(_ret); return _ret; } internal override void RecalculateNodeIds(IUAModelContext modelContext, Action trace) { base.RecalculateNodeIds(modelContext, trace); if (this.Definition is null) return; this.Definition.RecalculateNodeIds(x => modelContext.ImportNodeId(x, trace)); } } } ================================================ FILE: SemanticData/UANodeSetValidation/XML/UAInstance.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2022, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ using System; using UAOOI.SemanticData.AddressSpace.Abstractions; using UAOOI.SemanticData.BuildingErrorsHandling; using UAOOI.SemanticData.UANodeSetValidation.DataSerialization; namespace UAOOI.SemanticData.UANodeSetValidation.XML { public abstract partial class UAInstance { /// /// Indicates whether the inherited parent object is also equal to another object. /// /// An object to compare with this object. /// true if the current object is equal to the other; otherwise,, false otherwise. protected override bool ParentEquals(IUANode other) { UAInstance _other = other as UAInstance; if (Object.ReferenceEquals(_other, null)) return false; return true; } /// /// Clones current object to a new one./>. /// /// The ret. protected void CloneUAInstance(UAInstance ret) { ret.ParentNodeIdNodeId = this.ParentNodeIdNodeId; ret.ParentNodeId = this.ParentNodeId; base.CloneUANode(this); } internal override void RecalculateNodeIds(IUAModelContext modelContext, Action trace) { ParentNodeIdNodeId = modelContext.ImportNodeId(ParentNodeId, trace); base.RecalculateNodeIds(modelContext, trace); } /// /// The NodeId of the Node that is the parent of the Node within the information model. This field is used to indicate that a tight coupling exists between /// the Node and its parent (e.g. when the parent is deleted the child is deleted as well). /// /// /// This information does not appear in the AddressSpace and is intended for use by design tools. /// internal NodeId ParentNodeIdNodeId { get; private set; } } } ================================================ FILE: SemanticData/UANodeSetValidation/XML/UAMethod.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2022, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ using System; using System.Collections.Generic; using UAOOI.SemanticData.AddressSpace.Abstractions; using UAOOI.SemanticData.BuildingErrorsHandling; using UAOOI.SemanticData.UANodeSetValidation.DataSerialization; namespace UAOOI.SemanticData.UANodeSetValidation.XML { /// /// Class UAMethod /// Implements the /// /// public partial class UAMethod : IUAMethod { internal override void RecalculateNodeIds(IUAModelContext modelContext, Action trace) { base.RecalculateNodeIds(modelContext, trace); MethodDeclarationNodeId = modelContext.ImportNodeId(this.MethodDeclarationId, trace); } internal NodeId MethodDeclarationNodeId { get; private set; } AddressSpace.Abstractions.UAMethodArgument[] IUAMethod.ArgumentDescription { get { if (this.ArgumentDescription == null) return null; List retValu = new List(); foreach (UAMethodArgument item in this.ArgumentDescription) { AddressSpace.Abstractions.UAMethodArgument newItem = new AddressSpace.Abstractions.UAMethodArgument() { Name = item.Name }; if (item.Description == null) continue; List descriptionList = new List(); foreach (LocalizedText description in item.Description) descriptionList.Add(new DataSerialization.LocalizedText() { Text = description.Value, Locale = description.Locale }); newItem.Description = descriptionList.ToArray(); retValu.Add(newItem); } return retValu.ToArray(); } set => throw new NotImplementedException(); } public override NodeClassEnum NodeClass => NodeClassEnum.UAMethod; /// /// Indicates whether the inherited parent object is also equal to another object. /// /// An object to compare with this object. /// true if the current object is equal to the other; otherwise,, false otherwise. protected override bool ParentEquals(IUANode other) { UAMethod _other = other as UAMethod; if (Object.ReferenceEquals(_other, null)) return false; return base.ParentEquals(_other) && // TODO compare ArgumentDescription this.Executable == _other.Executable && this.UserExecutable == _other.UserExecutable; // not exposed and must be excluded from the comparison this.MethodDeclarationId == _other.MethodDeclarationId; } /// /// Get the clone from the types derived from this one. /// /// An instance of . protected override UANode ParentClone() { UAMethod _ret = new UAMethod { Executable = this.Executable, UserExecutable = this.UserExecutable }; base.CloneUAInstance(_ret); return _ret; } } } ================================================ FILE: SemanticData/UANodeSetValidation/XML/UAModelContext.cs ================================================ //__________________________________________________________________________________________ // // Copyright 2022 Mariusz Postol LODZ POLAND. // // To be in touch join the community by pressing the `Watch` button and to get started // comment using the discussion panel at // https://github.com/mpostol/TP/discussions/182 // with an introduction of yourself and tell us about what you do with this community. //__________________________________________________________________________________________ using System; using System.Collections.Generic; using UAOOI.SemanticData.AddressSpace.Abstractions; using UAOOI.SemanticData.BuildingErrorsHandling; using UAOOI.SemanticData.UANodeSetValidation.DataSerialization; namespace UAOOI.SemanticData.UANodeSetValidation.XML { internal class UAModelContext : IUAModelContext { #region API /// /// Initializes a new instance of the class. /// /// The model header of the represented as an instance of . /// The address space context represented by an instance of . /// The trace event call back delegate. /// buildErrorsHandlingLog /// or /// addressSpaceContext internal static UAModelContext ParseUANodeSetModelHeader(IUANodeSetModelHeader modelHeader, INamespaceTable namespaceTable, Action traceEvent) { UAModelContext context2Return = new UAModelContext(modelHeader, namespaceTable, traceEvent); context2Return.Parse(modelHeader, namespaceTable); return context2Return; } internal Uri DefaultUri => new Uri(_namespaceUris[0]); #endregion API #region IUAModelContext //public Uri ModelUri { get; private set; } /// /// Imports the browse name and Node identifier as . It recalculates the and against local namespace index table. /// /// The serialized as text to be imported. /// The serialized as text to be imported. /// Captures the functionality of trace. /// A value containing and with recalculated NamespaceIndex. public (QualifiedName browseName, NodeId nodeId) ImportBrowseName(string browseNameText, string nodeIdText, Action trace) { nodeIdText = LookupAlias(nodeIdText); NodeId nodeId = nodeIdText.ParseNodeId(trace); QualifiedName browseName = browseNameText.ParseBrowseName(nodeId, trace); nodeId.SetNamespaceIndex(ImportNamespaceIndex(nodeId.NamespaceIndex)); browseName.NamespaceIndex = ImportNamespaceIndex(browseName.NamespaceIndex); browseName.NamespaceIndexSpecified = true; return (browseName, nodeId); } /// /// Imports the node identifier if is not empty. /// /// The node identifier. /// Captures the functionality of trace. /// An instance of the or null is the is null or empty. public NodeId ImportNodeId(string nodeId, Action trace) { if (string.IsNullOrEmpty(nodeId)) return NodeId.Null; nodeId = LookupAlias(nodeId); NodeId _nodeId = nodeId.ParseNodeId(trace); ushort namespaceIndex = ImportNamespaceIndex(_nodeId.NamespaceIndex); return new NodeId(_nodeId.IdentifierPart, namespaceIndex); } public void RegisterUAReferenceType(QualifiedName browseName) { if (UAReferenceTypNames.Contains(browseName)) { string message = $"The {nameof(UAReferenceType)} duplicated BrowseName={browseName}. It is not allowed that two different ReferenceTypes have the same BrowseName"; _logTraceMessage(TraceMessage.BuildErrorTraceMessage(BuildError.DuplicatedReferenceType, message)); } else UAReferenceTypNames.Add(browseName); } #endregion IUAModelContext #region private //var private readonly IUANodeSetModelHeader _modelHeader; private readonly Action _logTraceMessage; private readonly Dictionary _aliasesDictionary = new Dictionary(); private IList _namespaceUris = new List(); private INamespaceTable _addressSpaceContext { get; } private readonly List UAReferenceTypNames = new List(); private static Random _randomNumber = new Random(); //methods private UAModelContext(IUANodeSetModelHeader modelHeader, INamespaceTable addressSpaceContext, Action traceEvent) { _modelHeader = modelHeader ?? throw new ArgumentNullException(nameof(modelHeader)); if (modelHeader.ServerUris != null && modelHeader.ServerUris.Length > 0) traceEvent(TraceMessage.BuildErrorTraceMessage(BuildError.NotSupportedFeature, "ServerUris is omitted during the import")); if (modelHeader.Extensions != null && modelHeader.Extensions.Length > 0) traceEvent(TraceMessage.BuildErrorTraceMessage(BuildError.NotSupportedFeature, "Extensions are omitted during the import")); _logTraceMessage = traceEvent ?? throw new ArgumentNullException(nameof(traceEvent)); _addressSpaceContext = addressSpaceContext ?? throw new ArgumentNullException(nameof(addressSpaceContext)); } private void Parse(IUANodeSetModelHeader modelHeader, INamespaceTable namespaceTable) { _namespaceUris = Parse(modelHeader.NamespaceUris); Parse(modelHeader.Models, namespaceTable); Parse(modelHeader.Aliases); } //TODO Enhance/Improve NodeIdAlias array parser #557 private void Parse(NodeIdAlias[] nodeIdAlias) { if (nodeIdAlias is null) return; foreach (NodeIdAlias alias in nodeIdAlias) _aliasesDictionary.Add(alias.Alias.Trim(), alias.Value); } private List Parse(string[] namespaceUris) { List list2Return = new List(); if (namespaceUris is null || namespaceUris.Length == 0) { namespaceUris = new string[] { RandomUri().ToString() }; _logTraceMessage(TraceMessage.BuildErrorTraceMessage(BuildError.NamespaceUrisCannotBeNull, $"Added a random URI {namespaceUris[0]} to NamespaceUris.")); } for (int i = 0; i < namespaceUris.Length; i++) list2Return.Add(namespaceUris[i]); return list2Return; } private void Parse(ModelTableEntry[] models, INamespaceTable namespaceTable) { if (models == null || models.Length == 0) { models = new ModelTableEntry[] { new ModelTableEntry() { AccessRestrictions = 0, ModelUri = _namespaceUris[0], PublicationDate = DateTime.UtcNow, PublicationDateSpecified = true, RequiredModel = new ModelTableEntry[]{ }, RolePermissions = new RolePermission[] { }, Version = new Version().ToString() } }; _logTraceMessage(TraceMessage.BuildErrorTraceMessage(BuildError.ModelsCannotBeNull, $"Added default model {models[0].ModelUri}")); } foreach (ModelTableEntry item in models) { namespaceTable.RegisterModel(item); if (item.RequiredModel != null) foreach (ModelTableEntry requiredModel in item.RequiredModel) namespaceTable.RegisterDependency(requiredModel); } } private string LookupAlias(string id) { string _newId = string.Empty; return _aliasesDictionary.TryGetValue(id.Trim(), out _newId) ? _newId : id; } private ushort ImportNamespaceIndex(ushort namespaceIndex) { // nothing special required for indexes < 0. if (namespaceIndex == 0) return namespaceIndex; string uriString; if (_namespaceUris.Count > namespaceIndex - 1) uriString = _namespaceUris[namespaceIndex - 1]; else { // return a random value if index is out of range. uriString = RandomUri().ToString(); this._logTraceMessage( TraceMessage.BuildErrorTraceMessage(BuildError.UndefinedNamespaceIndex, $"ImportNamespaceIndex failed - namespace index {namespaceIndex - 1} is out of the NamespaceUris index. New namespace {uriString} is created instead.")); _namespaceUris.Add(uriString); } return _addressSpaceContext.GetURIIndexOrAppend(new Uri(uriString)); } private static Uri RandomUri() { UriBuilder _builder = new UriBuilder() { Path = $@"github.com/mpostol/OPC-UA-OOI/NameUnknown{_randomNumber.Next(0, int.MaxValue)}", Scheme = Uri.UriSchemeHttp, }; return _builder.Uri; } #endregion private } } ================================================ FILE: SemanticData/UANodeSetValidation/XML/UANode.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2022, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ using System; using UAOOI.SemanticData.AddressSpace.Abstractions; using UAOOI.SemanticData.BuildingErrorsHandling; using UAOOI.SemanticData.InformationModelFactory.UAConstants; using UAOOI.SemanticData.UANodeSetValidation.DataSerialization; using OOIReleaseStatus = UAOOI.SemanticData.InformationModelFactory.ReleaseStatus; namespace UAOOI.SemanticData.UANodeSetValidation.XML { /// /// Class UANode. /// Implements the /// /// public abstract partial class UANode : IUANode { #region IEquatable /// /// Indicates whether the current object is equal to another object of the same type. /// /// An object to compare with this object. /// true if the current object is equal to the other parameter; otherwise, false. public virtual bool Equals(IUANode other) { if (object.ReferenceEquals(other, null)) return false; if (Object.ReferenceEquals(this, other)) return true; if (other.GetType() != this.GetType()) return false; IUANode thisNode = this; return ParentEquals(other) && thisNode.AccessRestrictions == other.AccessRestrictions && thisNode.BrowseName.Equals(other.BrowseName) && thisNode.Description.LocalizedTextArraysEqual(other.Description) && thisNode.DisplayName.LocalizedTextArraysEqual(other.DisplayName) && thisNode.Documentation.AreEqual(other.Documentation) && thisNode.ReleaseStatus == other.ReleaseStatus && thisNode.RolePermissions.RolePermissionsEquals(other.RolePermissions) && thisNode.SymbolicName.AreEqual(other.SymbolicName) && thisNode.UserWriteMask == other.UserWriteMask && thisNode.WriteMask == other.WriteMask && thisNode.References.ReferencesEquals(other.References); } #endregion IEquatable //TODO Define independent Address Space API #645 LocalizedText conversion must be implemented. //public UANode() //{ // m_NodeIdNodeId = DataSerialization.NodeId.Parse(NodeId); // m_BrowseName = BrowseName.ParseBrowseName(m_NodeIdNodeId, x => { }); //} #region IUANode NodeId IUANode.NodeId { get => m_NodeIdNodeId; } /// /// Gets the node class of a Node. /// /// The node class enum. public abstract NodeClassEnum NodeClass { get; } QualifiedName IUANode.BrowseName { get => m_BrowseName; } DataSerialization.LocalizedText[] IUANode.DisplayName { get => DisplayName.GetLocalizedTextArray(); } DataSerialization.LocalizedText[] IUANode.Description { get => Description.GetLocalizedTextArray(); } AttributeWriteMask IUANode.WriteMask { get => this.WriteMask.GetAttributeWriteMask(); set => throw new NotImplementedException(); } AttributeWriteMask IUANode.UserWriteMask { get => this.UserWriteMask.GetAttributeWriteMask(); set => throw new NotImplementedException(); } IRolePermission[] IUANode.RolePermissions { get => this.RolePermissions; set => throw new NotImplementedException(); } IRolePermission[] IUANode.UserRolePermissions { get => null; set => throw new NotImplementedException(); } AccessRestrictions IUANode.AccessRestrictions { get => this.AccessRestrictions.GetAccessRestrictions(NodeClass, Trace); set => throw new NotImplementedException(); } IReference[] IUANode.References { get => References; } public virtual void RemoveInheritedValues(IUANode baseNode) { //BrowseName if (((IUANode)this).DisplayName.LocalizedTextArraysEqual(baseNode.DisplayName)) this.DisplayName = null; if (((IUANode)this).Description.LocalizedTextArraysEqual(baseNode.Description)) this.Description = null; //Category //References if (this.RolePermissions.RolePermissionsEquals(baseNode.RolePermissions)) this.RolePermissions = null; if (this.Documentation == baseNode.Documentation) this.Documentation = string.Empty; //NodeId is not inherited //WriteMask //UserWriteMask //AccessRestrictions //SymbolicName is not inherited //ReleaseStatus } OOIReleaseStatus IUANode.ReleaseStatus { get { return this.ReleaseStatus.GetReleaseStatus(); } set { throw new NotImplementedException(); } } #endregion IUANode #region API /// /// Clones this instance. /// /// UANode. public virtual UANode Clone() { return ParentClone(); } /// /// Implements the == operator. Determines whether two instances of represent the same information. /// /// The first object to compare, or null. /// The second object to compare, or null. /// The result of the operator. The procedure is used to compare. public static bool operator ==(UANode value1, UANode value2) { if (Object.ReferenceEquals(value1, null)) return Object.ReferenceEquals(value2, null); return value1.Equals(value2); } /// /// Implements the != operator. Determines whether two instances of don't represent the same information. /// /// The first object to compare, or null. /// The second object to compare, or null. /// The result of the operator. The procedure is used to compare. public static bool operator !=(UANode value1, UANode value2) { if (Object.ReferenceEquals(value1, null)) return !Object.ReferenceEquals(value2, null); return !value1.Equals(value2); } internal virtual void RecalculateNodeIds(IUAModelContext modelContext, Action trace) { Trace = trace ?? throw new ArgumentNullException(nameof(trace)); (m_BrowseName, m_NodeIdNodeId) = modelContext.ImportBrowseName(BrowseName, this.NodeId, trace); if (!(this.References is null)) foreach (Reference _reference in this.References) _reference.RecalculateNodeIds(x => modelContext.ImportNodeId(x, trace)); ImportNodeId(this.RolePermissions, x => modelContext.ImportNodeId(x, trace)); } private Action Trace = null; #endregion API #region override Object /// /// Determines whether the specified is equal to this instance. /// /// The object to compare with the current object. /// true if the specified is equal to this instance; otherwise, false. /// Object.Equals must not be used and is intentionally not implemented public override bool Equals(object obj) { throw new NotImplementedException("Object.Equals must not be used and is intentionally not implemented"); } /// /// Returns a hash code for this instance. /// /// A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. /// Object.GetHashCode must not be used and is intentionally not implemented public override int GetHashCode() { throw new NotImplementedException("Object.GetHashCode must not be used and is intentionally not implemented"); } #endregion override Object #region private private NodeId m_NodeIdNodeId = null; private QualifiedName m_BrowseName = null; private void ImportNodeId(RolePermission[] rolePermissions, Func importNodeId) { if (this.RolePermissions is null) return; foreach (RolePermission _permission in rolePermissions) _permission.RecalculateNodeIds(importNodeId); } /// /// Clones the specified node. /// /// The node to clone. protected void CloneUANode(UANode node2Clone) { node2Clone.AccessRestrictions = this.AccessRestrictions; node2Clone.BrowseName = this.BrowseName; node2Clone.Category = this.Category; node2Clone.Description = this.Description; node2Clone.DisplayName = this.DisplayName; node2Clone.Documentation = this.Documentation; node2Clone.Extensions = this.extensionsField; node2Clone.NodeId = this.NodeId; node2Clone.References = this.References; node2Clone.ReleaseStatus = this.ReleaseStatus; node2Clone.RolePermissions = this.RolePermissions; node2Clone.SymbolicName = this.SymbolicName; node2Clone.UserWriteMask = this.UserWriteMask; node2Clone.WriteMask = this.WriteMask; } /// /// Indicates whether the inherited parent object is also equal to another object. /// /// An object to compare with this object. /// true if the current object is equal to the other; otherwise,, false otherwise. protected abstract bool ParentEquals(IUANode other); /// /// Get the clone from the types derived from this one. /// /// An instance of . protected abstract UANode ParentClone(); #endregion private #region debug [System.Diagnostics.Conditional("DEBUG")] internal virtual void Deserialize() { m_BrowseName = DataSerialization.QualifiedName.Parse(BrowseName); m_NodeIdNodeId = DataSerialization.NodeId.Parse(this.NodeId); } #endregion debug } } ================================================ FILE: SemanticData/UANodeSetValidation/XML/UANodeSet.CustomPart.cs ================================================ //__________________________________________________________________________________________ // // Copyright 2022 Mariusz Postol LODZ POLAND. // // To be in touch join the community by pressing the `Watch` button and to get started // comment using the discussion panel at // https://github.com/mpostol/TP/discussions/182 // with an introduction of yourself and tell us about what you do with this community. //__________________________________________________________________________________________ using System; using System.IO; using System.Reflection; using UAOOI.Common.Infrastructure.Serializers; using UAOOI.SemanticData.AddressSpace.Abstractions; using UAOOI.SemanticData.BuildingErrorsHandling; namespace UAOOI.SemanticData.UANodeSetValidation.XML { public partial class UANodeSet : IUANodeSet, IUANodeSetModelHeader { #region IUANodeSet public Uri ParseUAModelContext(INamespaceTable namespaceTable, Action traceEvent) { UAModelContext model = UAModelContext.ParseUANodeSetModelHeader(this, namespaceTable, traceEvent); this.RecalculateNodeIds(model, traceEvent); return model.DefaultUri; } IUANode[] IUANodeSet.Items { get => Items; } #endregion IUANodeSet #region static helpers public static UANodeSet ReadUADefinedTypes() { Assembly assembly = Assembly.GetExecutingAssembly(); UANodeSet uaDefinedTypes = null; using (Stream stream = assembly.GetManifestResourceStream(m_UADefinedTypesName)) uaDefinedTypes = XmlFile.ReadXmlFile(stream); if (uaDefinedTypes.Models is null || uaDefinedTypes.Models.Length == 0) throw new ArgumentNullException(nameof(UANodeSet.Models)); if (uaDefinedTypes.NamespaceUris is null) uaDefinedTypes.NamespaceUris = new string[] { uaDefinedTypes.Models[0].ModelUri }; return uaDefinedTypes; } public static UANodeSet ReadModelFile(FileInfo path) { if (path == null) throw new ArgumentNullException($"{nameof(path)}"); using (Stream stream = path.OpenRead()) return XmlFile.ReadXmlFile(stream); } #endregion static helpers #region private private const string m_UADefinedTypesName = @"UAOOI.SemanticData.UANodeSetValidation.XML.Opc.Ua.NodeSet2.xml"; //OPC UA standard NodeSet model resource folder. private void RecalculateNodeIds(IUAModelContext modelContext, Action trace) { if (this.Aliases != null) foreach (NodeIdAlias alias in this.Aliases) alias.RecalculateNodeIds(x => modelContext.ImportNodeId(x, trace)); if (this.Items != null) foreach (UANode item in Items) item.RecalculateNodeIds(modelContext, trace); } #endregion private } } ================================================ FILE: SemanticData/UANodeSetValidation/XML/UANodeSet.GoCS.cmd ================================================ xsd.exe UANodeSet.xsd /c /l:cs /n:UAOOI.SemanticData.UANodeSetValidation.XML ================================================ FILE: SemanticData/UANodeSetValidation/XML/UANodeSet.cs ================================================ //------------------------------------------------------------------------------ // // This code was generated by a tool. // Runtime Version:4.0.30319.42000 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. // //------------------------------------------------------------------------------ // // This source code was auto-generated by xsd, Version=4.6.1055.0. // #pragma warning disable 1591 namespace UAOOI.SemanticData.UANodeSetValidation.XML { using System.Xml.Serialization; /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true, Namespace="http://opcfoundation.org/UA/2011/03/UANodeSet.xsd")] [System.Xml.Serialization.XmlRootAttribute(Namespace="http://opcfoundation.org/UA/2011/03/UANodeSet.xsd", IsNullable=false)] public partial class UANodeSet { private string[] namespaceUrisField; private string[] serverUrisField; private ModelTableEntry[] modelsField; private NodeIdAlias[] aliasesField; private System.Xml.XmlElement[] extensionsField; private UANode[] itemsField; private System.DateTime lastModifiedField; private bool lastModifiedFieldSpecified; /// [System.Xml.Serialization.XmlArrayItemAttribute("Uri", IsNullable=false)] public string[] NamespaceUris { get { return this.namespaceUrisField; } set { this.namespaceUrisField = value; } } /// [System.Xml.Serialization.XmlArrayItemAttribute("Uri", IsNullable=false)] public string[] ServerUris { get { return this.serverUrisField; } set { this.serverUrisField = value; } } /// [System.Xml.Serialization.XmlArrayItemAttribute("Model", IsNullable=false)] public ModelTableEntry[] Models { get { return this.modelsField; } set { this.modelsField = value; } } /// [System.Xml.Serialization.XmlArrayItemAttribute("Alias", IsNullable=false)] public NodeIdAlias[] Aliases { get { return this.aliasesField; } set { this.aliasesField = value; } } /// [System.Xml.Serialization.XmlArrayItemAttribute("Extension", IsNullable=false)] public System.Xml.XmlElement[] Extensions { get { return this.extensionsField; } set { this.extensionsField = value; } } /// [System.Xml.Serialization.XmlElementAttribute("UADataType", typeof(UADataType))] [System.Xml.Serialization.XmlElementAttribute("UAMethod", typeof(UAMethod))] [System.Xml.Serialization.XmlElementAttribute("UAObject", typeof(UAObject))] [System.Xml.Serialization.XmlElementAttribute("UAObjectType", typeof(UAObjectType))] [System.Xml.Serialization.XmlElementAttribute("UAReferenceType", typeof(UAReferenceType))] [System.Xml.Serialization.XmlElementAttribute("UAVariable", typeof(UAVariable))] [System.Xml.Serialization.XmlElementAttribute("UAVariableType", typeof(UAVariableType))] [System.Xml.Serialization.XmlElementAttribute("UAView", typeof(UAView))] public UANode[] Items { get { return this.itemsField; } set { this.itemsField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] public System.DateTime LastModified { get { return this.lastModifiedField; } set { this.lastModifiedField = value; } } /// [System.Xml.Serialization.XmlIgnoreAttribute()] public bool LastModifiedSpecified { get { return this.lastModifiedFieldSpecified; } set { this.lastModifiedFieldSpecified = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://opcfoundation.org/UA/2011/03/UANodeSet.xsd")] public partial class ModelTableEntry { private RolePermission[] rolePermissionsField; private ModelTableEntry[] requiredModelField; private string modelUriField; private string versionField; private System.DateTime publicationDateField; private bool publicationDateFieldSpecified; private byte accessRestrictionsField; public ModelTableEntry() { this.accessRestrictionsField = ((byte)(0)); } /// [System.Xml.Serialization.XmlArrayItemAttribute(IsNullable=false)] public RolePermission[] RolePermissions { get { return this.rolePermissionsField; } set { this.rolePermissionsField = value; } } /// [System.Xml.Serialization.XmlElementAttribute("RequiredModel")] public ModelTableEntry[] RequiredModel { get { return this.requiredModelField; } set { this.requiredModelField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] public string ModelUri { get { return this.modelUriField; } set { this.modelUriField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] public string Version { get { return this.versionField; } set { this.versionField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] public System.DateTime PublicationDate { get { return this.publicationDateField; } set { this.publicationDateField = value; } } /// [System.Xml.Serialization.XmlIgnoreAttribute()] public bool PublicationDateSpecified { get { return this.publicationDateFieldSpecified; } set { this.publicationDateFieldSpecified = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] [System.ComponentModel.DefaultValueAttribute(typeof(byte), "0")] public byte AccessRestrictions { get { return this.accessRestrictionsField; } set { this.accessRestrictionsField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://opcfoundation.org/UA/2011/03/UANodeSet.xsd")] public partial class RolePermission { private uint permissionsField; private string valueField; public RolePermission() { this.permissionsField = ((uint)(0)); } /// [System.Xml.Serialization.XmlAttributeAttribute()] [System.ComponentModel.DefaultValueAttribute(typeof(uint), "0")] public uint Permissions { get { return this.permissionsField; } set { this.permissionsField = value; } } /// [System.Xml.Serialization.XmlTextAttribute()] public string Value { get { return this.valueField; } set { this.valueField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://opcfoundation.org/UA/2011/03/UANodeSet.xsd")] public partial class NodeSetStatus { private uint codeField; private string valueField; public NodeSetStatus() { this.codeField = ((uint)(0)); } /// [System.Xml.Serialization.XmlAttributeAttribute()] [System.ComponentModel.DefaultValueAttribute(typeof(uint), "0")] public uint Code { get { return this.codeField; } set { this.codeField = value; } } /// [System.Xml.Serialization.XmlTextAttribute()] public string Value { get { return this.valueField; } set { this.valueField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://opcfoundation.org/UA/2011/03/UANodeSet.xsd")] public partial class NodeToDelete { private bool deleteReverseReferencesField; private string valueField; public NodeToDelete() { this.deleteReverseReferencesField = true; } /// [System.Xml.Serialization.XmlAttributeAttribute()] [System.ComponentModel.DefaultValueAttribute(true)] public bool DeleteReverseReferences { get { return this.deleteReverseReferencesField; } set { this.deleteReverseReferencesField = value; } } /// [System.Xml.Serialization.XmlTextAttribute()] public string Value { get { return this.valueField; } set { this.valueField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://opcfoundation.org/UA/2011/03/UANodeSet.xsd")] public partial class ReferenceChange { private string sourceField; private string referenceTypeField; private bool isForwardField; private string valueField; public ReferenceChange() { this.isForwardField = true; } /// [System.Xml.Serialization.XmlAttributeAttribute()] public string Source { get { return this.sourceField; } set { this.sourceField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] public string ReferenceType { get { return this.referenceTypeField; } set { this.referenceTypeField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] [System.ComponentModel.DefaultValueAttribute(true)] public bool IsForward { get { return this.isForwardField; } set { this.isForwardField = value; } } /// [System.Xml.Serialization.XmlTextAttribute()] public string Value { get { return this.valueField; } set { this.valueField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://opcfoundation.org/UA/2011/03/UANodeSet.xsd")] public partial class DataTypeField { private LocalizedText[] displayNameField; private LocalizedText[] descriptionField; private string nameField; private string symbolicNameField; private string dataTypeField; private int valueRankField; private string arrayDimensionsField; private uint maxStringLengthField; private int valueField; private bool isOptionalField; public DataTypeField() { this.dataTypeField = "i=24"; this.valueRankField = -1; this.arrayDimensionsField = ""; this.maxStringLengthField = ((uint)(0)); this.valueField = -1; this.isOptionalField = false; } /// [System.Xml.Serialization.XmlElementAttribute("DisplayName")] public LocalizedText[] DisplayName { get { return this.displayNameField; } set { this.displayNameField = value; } } /// [System.Xml.Serialization.XmlElementAttribute("Description")] public LocalizedText[] Description { get { return this.descriptionField; } set { this.descriptionField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] public string Name { get { return this.nameField; } set { this.nameField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] public string SymbolicName { get { return this.symbolicNameField; } set { this.symbolicNameField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] [System.ComponentModel.DefaultValueAttribute("i=24")] public string DataType { get { return this.dataTypeField; } set { this.dataTypeField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] [System.ComponentModel.DefaultValueAttribute(-1)] public int ValueRank { get { return this.valueRankField; } set { this.valueRankField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute(DataType="token")] [System.ComponentModel.DefaultValueAttribute("")] public string ArrayDimensions { get { return this.arrayDimensionsField; } set { this.arrayDimensionsField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] [System.ComponentModel.DefaultValueAttribute(typeof(uint), "0")] public uint MaxStringLength { get { return this.maxStringLengthField; } set { this.maxStringLengthField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] [System.ComponentModel.DefaultValueAttribute(-1)] public int Value { get { return this.valueField; } set { this.valueField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] [System.ComponentModel.DefaultValueAttribute(false)] public bool IsOptional { get { return this.isOptionalField; } set { this.isOptionalField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://opcfoundation.org/UA/2011/03/UANodeSet.xsd")] public partial class LocalizedText { private string localeField; private string valueField; public LocalizedText() { this.localeField = ""; } /// [System.Xml.Serialization.XmlAttributeAttribute()] [System.ComponentModel.DefaultValueAttribute("")] public string Locale { get { return this.localeField; } set { this.localeField = value; } } /// [System.Xml.Serialization.XmlTextAttribute()] public string Value { get { return this.valueField; } set { this.valueField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://opcfoundation.org/UA/2011/03/UANodeSet.xsd")] public partial class DataTypeDefinition { private DataTypeField[] fieldField; private string nameField; private string symbolicNameField; private bool isUnionField; private bool isOptionSetField; private string baseTypeField; public DataTypeDefinition() { this.symbolicNameField = ""; this.isUnionField = false; this.isOptionSetField = false; this.baseTypeField = ""; } /// [System.Xml.Serialization.XmlElementAttribute("Field")] public DataTypeField[] Field { get { return this.fieldField; } set { this.fieldField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] public string Name { get { return this.nameField; } set { this.nameField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] [System.ComponentModel.DefaultValueAttribute("")] public string SymbolicName { get { return this.symbolicNameField; } set { this.symbolicNameField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] [System.ComponentModel.DefaultValueAttribute(false)] public bool IsUnion { get { return this.isUnionField; } set { this.isUnionField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] [System.ComponentModel.DefaultValueAttribute(false)] public bool IsOptionSet { get { return this.isOptionSetField; } set { this.isOptionSetField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] [System.ComponentModel.DefaultValueAttribute("")] public string BaseType { get { return this.baseTypeField; } set { this.baseTypeField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://opcfoundation.org/UA/2011/03/UANodeSet.xsd")] public partial class UAMethodArgument { private string nameField; private LocalizedText[] descriptionField; /// public string Name { get { return this.nameField; } set { this.nameField = value; } } /// [System.Xml.Serialization.XmlElementAttribute("Description")] public LocalizedText[] Description { get { return this.descriptionField; } set { this.descriptionField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://opcfoundation.org/UA/2011/03/UANodeSet.xsd")] public partial class StructureTranslationType { private LocalizedText[] textField; private string nameField; /// [System.Xml.Serialization.XmlElementAttribute("Text")] public LocalizedText[] Text { get { return this.textField; } set { this.textField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] public string Name { get { return this.nameField; } set { this.nameField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://opcfoundation.org/UA/2011/03/UANodeSet.xsd")] public partial class TranslationType { private object[] itemsField; /// [System.Xml.Serialization.XmlElementAttribute("Field", typeof(StructureTranslationType))] [System.Xml.Serialization.XmlElementAttribute("Text", typeof(LocalizedText))] public object[] Items { get { return this.itemsField; } set { this.itemsField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] [System.SerializableAttribute()] //[System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://opcfoundation.org/UA/2011/03/UANodeSet.xsd")] public partial class Reference { private string referenceTypeField; private bool isForwardField; private string valueField; public Reference() { this.isForwardField = true; } /// [System.Xml.Serialization.XmlAttributeAttribute()] public string ReferenceType { get { return this.referenceTypeField; } set { this.referenceTypeField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] [System.ComponentModel.DefaultValueAttribute(true)] public bool IsForward { get { return this.isForwardField; } set { this.isForwardField = value; } } /// [System.Xml.Serialization.XmlTextAttribute()] public string Value { get { return this.valueField; } set { this.valueField = value; } } } /// [System.Xml.Serialization.XmlIncludeAttribute(typeof(UAType))] [System.Xml.Serialization.XmlIncludeAttribute(typeof(UAReferenceType))] [System.Xml.Serialization.XmlIncludeAttribute(typeof(UADataType))] [System.Xml.Serialization.XmlIncludeAttribute(typeof(UAVariableType))] [System.Xml.Serialization.XmlIncludeAttribute(typeof(UAObjectType))] [System.Xml.Serialization.XmlIncludeAttribute(typeof(UAInstance))] [System.Xml.Serialization.XmlIncludeAttribute(typeof(UAView))] [System.Xml.Serialization.XmlIncludeAttribute(typeof(UAMethod))] [System.Xml.Serialization.XmlIncludeAttribute(typeof(UAVariable))] [System.Xml.Serialization.XmlIncludeAttribute(typeof(UAObject))] [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] [System.SerializableAttribute()] // [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://opcfoundation.org/UA/2011/03/UANodeSet.xsd")] public partial class UANode { private LocalizedText[] displayNameField; private LocalizedText[] descriptionField; private string[] categoryField; private string documentationField; private Reference[] referencesField; private RolePermission[] rolePermissionsField; private string[] conformanceUnitsField; private System.Xml.XmlElement[] extensionsField; private string nodeIdField; private string browseNameField; private uint writeMaskField; private uint userWriteMaskField; private byte accessRestrictionsField; private string symbolicNameField; private ReleaseStatus releaseStatusField; public UANode() { this.writeMaskField = ((uint)(0)); this.userWriteMaskField = ((uint)(0)); this.accessRestrictionsField = ((byte)(0)); this.releaseStatusField = ReleaseStatus.Released; } /// [System.Xml.Serialization.XmlElementAttribute("DisplayName")] public LocalizedText[] DisplayName { get { return this.displayNameField; } set { this.displayNameField = value; } } /// [System.Xml.Serialization.XmlElementAttribute("Description")] public LocalizedText[] Description { get { return this.descriptionField; } set { this.descriptionField = value; } } /// [System.Xml.Serialization.XmlElementAttribute("Category")] public string[] Category { get { return this.categoryField; } set { this.categoryField = value; } } /// public string Documentation { get { return this.documentationField; } set { this.documentationField = value; } } /// [System.Xml.Serialization.XmlArrayItemAttribute(IsNullable=false)] public Reference[] References { get { return this.referencesField; } set { this.referencesField = value; } } /// [System.Xml.Serialization.XmlArrayItemAttribute(IsNullable=false)] public RolePermission[] RolePermissions { get { return this.rolePermissionsField; } set { this.rolePermissionsField = value; } } /// [System.Xml.Serialization.XmlArrayItemAttribute("ConformanceUnit", IsNullable=false)] public string[] ConformanceUnits { get { return this.conformanceUnitsField; } set { this.conformanceUnitsField = value; } } /// [System.Xml.Serialization.XmlArrayItemAttribute("Extension", IsNullable=false)] public System.Xml.XmlElement[] Extensions { get { return this.extensionsField; } set { this.extensionsField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] public string NodeId { get { return this.nodeIdField; } set { this.nodeIdField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] public string BrowseName { get { return this.browseNameField; } set { this.browseNameField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] [System.ComponentModel.DefaultValueAttribute(typeof(uint), "0")] public uint WriteMask { get { return this.writeMaskField; } set { this.writeMaskField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] [System.ComponentModel.DefaultValueAttribute(typeof(uint), "0")] public uint UserWriteMask { get { return this.userWriteMaskField; } set { this.userWriteMaskField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] [System.ComponentModel.DefaultValueAttribute(typeof(byte), "0")] public byte AccessRestrictions { get { return this.accessRestrictionsField; } set { this.accessRestrictionsField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] public string SymbolicName { get { return this.symbolicNameField; } set { this.symbolicNameField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] [System.ComponentModel.DefaultValueAttribute(ReleaseStatus.Released)] public ReleaseStatus ReleaseStatus { get { return this.releaseStatusField; } set { this.releaseStatusField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] [System.SerializableAttribute()] [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://opcfoundation.org/UA/2011/03/UANodeSet.xsd")] public enum ReleaseStatus { /// Released, /// Draft, /// Deprecated, } /// [System.Xml.Serialization.XmlIncludeAttribute(typeof(UAReferenceType))] [System.Xml.Serialization.XmlIncludeAttribute(typeof(UADataType))] [System.Xml.Serialization.XmlIncludeAttribute(typeof(UAVariableType))] [System.Xml.Serialization.XmlIncludeAttribute(typeof(UAObjectType))] [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://opcfoundation.org/UA/2011/03/UANodeSet.xsd")] public partial class UAType : UANode { private bool isAbstractField; public UAType() { this.isAbstractField = false; } /// [System.Xml.Serialization.XmlAttributeAttribute()] [System.ComponentModel.DefaultValueAttribute(false)] public bool IsAbstract { get { return this.isAbstractField; } set { this.isAbstractField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://opcfoundation.org/UA/2011/03/UANodeSet.xsd")] public partial class UAReferenceType : UAType { private LocalizedText[] inverseNameField; private bool symmetricField; public UAReferenceType() { this.symmetricField = false; } /// [System.Xml.Serialization.XmlElementAttribute("InverseName")] public LocalizedText[] InverseName { get { return this.inverseNameField; } set { this.inverseNameField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] [System.ComponentModel.DefaultValueAttribute(false)] public bool Symmetric { get { return this.symmetricField; } set { this.symmetricField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://opcfoundation.org/UA/2011/03/UANodeSet.xsd")] public partial class UADataType : UAType { private DataTypeDefinition definitionField; private DataTypePurpose purposeField; public UADataType() { this.purposeField = DataTypePurpose.Normal; } /// public DataTypeDefinition Definition { get { return this.definitionField; } set { this.definitionField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] [System.ComponentModel.DefaultValueAttribute(DataTypePurpose.Normal)] public DataTypePurpose Purpose { get { return this.purposeField; } set { this.purposeField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] [System.SerializableAttribute()] [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://opcfoundation.org/UA/2011/03/UANodeSet.xsd")] public enum DataTypePurpose { /// Normal, /// ServicesOnly, /// CodeGenerator, } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://opcfoundation.org/UA/2011/03/UANodeSet.xsd")] public partial class UAVariableType : UAType { private System.Xml.XmlElement valueField; private string dataTypeField; private int valueRankField; private string arrayDimensionsField; public UAVariableType() { this.dataTypeField = "i=24"; this.valueRankField = -1; this.arrayDimensionsField = ""; } /// public System.Xml.XmlElement Value { get { return this.valueField; } set { this.valueField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] [System.ComponentModel.DefaultValueAttribute("i=24")] public string DataType { get { return this.dataTypeField; } set { this.dataTypeField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] [System.ComponentModel.DefaultValueAttribute(-1)] public int ValueRank { get { return this.valueRankField; } set { this.valueRankField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute(DataType="token")] [System.ComponentModel.DefaultValueAttribute("")] public string ArrayDimensions { get { return this.arrayDimensionsField; } set { this.arrayDimensionsField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://opcfoundation.org/UA/2011/03/UANodeSet.xsd")] public partial class UAObjectType : UAType { } /// [System.Xml.Serialization.XmlIncludeAttribute(typeof(UAView))] [System.Xml.Serialization.XmlIncludeAttribute(typeof(UAMethod))] [System.Xml.Serialization.XmlIncludeAttribute(typeof(UAVariable))] [System.Xml.Serialization.XmlIncludeAttribute(typeof(UAObject))] [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] [System.SerializableAttribute()] // [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://opcfoundation.org/UA/2011/03/UANodeSet.xsd")] public partial class UAInstance : UANode { private string parentNodeIdField; /// [System.Xml.Serialization.XmlAttributeAttribute()] public string ParentNodeId { get { return this.parentNodeIdField; } set { this.parentNodeIdField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://opcfoundation.org/UA/2011/03/UANodeSet.xsd")] public partial class UAView : UAInstance { private bool containsNoLoopsField; private byte eventNotifierField; public UAView() { this.containsNoLoopsField = false; this.eventNotifierField = ((byte)(0)); } /// [System.Xml.Serialization.XmlAttributeAttribute()] [System.ComponentModel.DefaultValueAttribute(false)] public bool ContainsNoLoops { get { return this.containsNoLoopsField; } set { this.containsNoLoopsField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] [System.ComponentModel.DefaultValueAttribute(typeof(byte), "0")] public byte EventNotifier { get { return this.eventNotifierField; } set { this.eventNotifierField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://opcfoundation.org/UA/2011/03/UANodeSet.xsd")] public partial class UAMethod : UAInstance { private UAMethodArgument[] argumentDescriptionField; private bool executableField; private bool userExecutableField; private string methodDeclarationIdField; public UAMethod() { this.executableField = true; this.userExecutableField = true; } /// [System.Xml.Serialization.XmlElementAttribute("ArgumentDescription")] public UAMethodArgument[] ArgumentDescription { get { return this.argumentDescriptionField; } set { this.argumentDescriptionField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] [System.ComponentModel.DefaultValueAttribute(true)] public bool Executable { get { return this.executableField; } set { this.executableField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] [System.ComponentModel.DefaultValueAttribute(true)] public bool UserExecutable { get { return this.userExecutableField; } set { this.userExecutableField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] public string MethodDeclarationId { get { return this.methodDeclarationIdField; } set { this.methodDeclarationIdField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] [System.SerializableAttribute()] // [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://opcfoundation.org/UA/2011/03/UANodeSet.xsd")] public partial class UAVariable : UAInstance { private System.Xml.XmlElement valueField; private TranslationType[] translationField; private string dataTypeField; private int valueRankField; private string arrayDimensionsField; private uint accessLevelField; private uint userAccessLevelField; private double minimumSamplingIntervalField; private bool historizingField; public UAVariable() { this.dataTypeField = "i=24"; this.valueRankField = -1; this.arrayDimensionsField = ""; this.accessLevelField = ((uint)(1)); this.userAccessLevelField = ((uint)(1)); this.minimumSamplingIntervalField = 0D; this.historizingField = false; } /// public System.Xml.XmlElement Value { get { return this.valueField; } set { this.valueField = value; } } /// [System.Xml.Serialization.XmlElementAttribute("Translation")] public TranslationType[] Translation { get { return this.translationField; } set { this.translationField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] [System.ComponentModel.DefaultValueAttribute("i=24")] public string DataType { get { return this.dataTypeField; } set { this.dataTypeField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] [System.ComponentModel.DefaultValueAttribute(-1)] public int ValueRank { get { return this.valueRankField; } set { this.valueRankField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute(DataType="token")] [System.ComponentModel.DefaultValueAttribute("")] public string ArrayDimensions { get { return this.arrayDimensionsField; } set { this.arrayDimensionsField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] [System.ComponentModel.DefaultValueAttribute(typeof(uint), "1")] public uint AccessLevel { get { return this.accessLevelField; } set { this.accessLevelField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] [System.ComponentModel.DefaultValueAttribute(typeof(uint), "1")] public uint UserAccessLevel { get { return this.userAccessLevelField; } set { this.userAccessLevelField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] [System.ComponentModel.DefaultValueAttribute(0D)] public double MinimumSamplingInterval { get { return this.minimumSamplingIntervalField; } set { this.minimumSamplingIntervalField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] [System.ComponentModel.DefaultValueAttribute(false)] public bool Historizing { get { return this.historizingField; } set { this.historizingField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://opcfoundation.org/UA/2011/03/UANodeSet.xsd")] public partial class UAObject : UAInstance { private byte eventNotifierField; public UAObject() { this.eventNotifierField = ((byte)(0)); } /// [System.Xml.Serialization.XmlAttributeAttribute()] [System.ComponentModel.DefaultValueAttribute(typeof(byte), "0")] public byte EventNotifier { get { return this.eventNotifierField; } set { this.eventNotifierField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://opcfoundation.org/UA/2011/03/UANodeSet.xsd")] public partial class NodeIdAlias { private string aliasField; private string valueField; /// [System.Xml.Serialization.XmlAttributeAttribute()] public string Alias { get { return this.aliasField; } set { this.aliasField = value; } } /// [System.Xml.Serialization.XmlTextAttribute()] public string Value { get { return this.valueField; } set { this.valueField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true, Namespace="http://opcfoundation.org/UA/2011/03/UANodeSet.xsd")] [System.Xml.Serialization.XmlRootAttribute(Namespace="http://opcfoundation.org/UA/2011/03/UANodeSet.xsd", IsNullable=false)] public partial class UANodeSetChanges { private string[] namespaceUrisField; private string[] serverUrisField; private NodeIdAlias[] aliasesField; private System.Xml.XmlElement[] extensionsField; private UANode[] nodesToAddField; private ReferenceChange[] referencesToAddField; private NodeToDelete[] nodesToDeleteField; private ReferenceChange[] referencesToDeleteField; private System.DateTime lastModifiedField; private bool lastModifiedFieldSpecified; private string transactionIdField; private bool acceptAllOrNothingField; public UANodeSetChanges() { this.acceptAllOrNothingField = false; } /// [System.Xml.Serialization.XmlArrayItemAttribute("Uri", IsNullable=false)] public string[] NamespaceUris { get { return this.namespaceUrisField; } set { this.namespaceUrisField = value; } } /// [System.Xml.Serialization.XmlArrayItemAttribute("Uri", IsNullable=false)] public string[] ServerUris { get { return this.serverUrisField; } set { this.serverUrisField = value; } } /// [System.Xml.Serialization.XmlArrayItemAttribute("Alias", IsNullable=false)] public NodeIdAlias[] Aliases { get { return this.aliasesField; } set { this.aliasesField = value; } } /// [System.Xml.Serialization.XmlArrayItemAttribute("Extension", IsNullable=false)] public System.Xml.XmlElement[] Extensions { get { return this.extensionsField; } set { this.extensionsField = value; } } /// [System.Xml.Serialization.XmlArrayItemAttribute(typeof(UADataType), IsNullable=false)] [System.Xml.Serialization.XmlArrayItemAttribute(typeof(UAMethod), IsNullable=false)] [System.Xml.Serialization.XmlArrayItemAttribute(typeof(UAObject), IsNullable=false)] [System.Xml.Serialization.XmlArrayItemAttribute(typeof(UAObjectType), IsNullable=false)] [System.Xml.Serialization.XmlArrayItemAttribute(typeof(UAReferenceType), IsNullable=false)] [System.Xml.Serialization.XmlArrayItemAttribute(typeof(UAVariable), IsNullable=false)] [System.Xml.Serialization.XmlArrayItemAttribute(typeof(UAVariableType), IsNullable=false)] [System.Xml.Serialization.XmlArrayItemAttribute(typeof(UAView), IsNullable=false)] public UANode[] NodesToAdd { get { return this.nodesToAddField; } set { this.nodesToAddField = value; } } /// [System.Xml.Serialization.XmlArrayItemAttribute("Reference", IsNullable=false)] public ReferenceChange[] ReferencesToAdd { get { return this.referencesToAddField; } set { this.referencesToAddField = value; } } /// [System.Xml.Serialization.XmlArrayItemAttribute("Node", IsNullable=false)] public NodeToDelete[] NodesToDelete { get { return this.nodesToDeleteField; } set { this.nodesToDeleteField = value; } } /// [System.Xml.Serialization.XmlArrayItemAttribute("Reference", IsNullable=false)] public ReferenceChange[] ReferencesToDelete { get { return this.referencesToDeleteField; } set { this.referencesToDeleteField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] public System.DateTime LastModified { get { return this.lastModifiedField; } set { this.lastModifiedField = value; } } /// [System.Xml.Serialization.XmlIgnoreAttribute()] public bool LastModifiedSpecified { get { return this.lastModifiedFieldSpecified; } set { this.lastModifiedFieldSpecified = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] public string TransactionId { get { return this.transactionIdField; } set { this.transactionIdField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] [System.ComponentModel.DefaultValueAttribute(false)] public bool AcceptAllOrNothing { get { return this.acceptAllOrNothingField; } set { this.acceptAllOrNothingField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true, Namespace="http://opcfoundation.org/UA/2011/03/UANodeSet.xsd")] [System.Xml.Serialization.XmlRootAttribute(Namespace="http://opcfoundation.org/UA/2011/03/UANodeSet.xsd", IsNullable=false)] public partial class UANodeSetChangesStatus { private NodeSetStatus[] nodesToAddField; private NodeSetStatus[] referencesToAddField; private NodeSetStatus[] nodesToDeleteField; private NodeSetStatus[] referencesToDeleteField; private System.DateTime lastModifiedField; private bool lastModifiedFieldSpecified; private string transactionIdField; /// [System.Xml.Serialization.XmlArrayItemAttribute("Status", IsNullable=false)] public NodeSetStatus[] NodesToAdd { get { return this.nodesToAddField; } set { this.nodesToAddField = value; } } /// [System.Xml.Serialization.XmlArrayItemAttribute("Status", IsNullable=false)] public NodeSetStatus[] ReferencesToAdd { get { return this.referencesToAddField; } set { this.referencesToAddField = value; } } /// [System.Xml.Serialization.XmlArrayItemAttribute("Status", IsNullable=false)] public NodeSetStatus[] NodesToDelete { get { return this.nodesToDeleteField; } set { this.nodesToDeleteField = value; } } /// [System.Xml.Serialization.XmlArrayItemAttribute("Status", IsNullable=false)] public NodeSetStatus[] ReferencesToDelete { get { return this.referencesToDeleteField; } set { this.referencesToDeleteField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] public System.DateTime LastModified { get { return this.lastModifiedField; } set { this.lastModifiedField = value; } } /// [System.Xml.Serialization.XmlIgnoreAttribute()] public bool LastModifiedSpecified { get { return this.lastModifiedFieldSpecified; } set { this.lastModifiedFieldSpecified = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] public string TransactionId { get { return this.transactionIdField; } set { this.transactionIdField = value; } } } } #pragma warning restore 1591 ================================================ FILE: SemanticData/UANodeSetValidation/XML/UANodeSet.xsd ================================================ ================================================ FILE: SemanticData/UANodeSetValidation/XML/UANodeSetChanges.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2021, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using System; using UAOOI.SemanticData.BuildingErrorsHandling; using UAOOI.SemanticData.UANodeSetValidation.DataSerialization; namespace UAOOI.SemanticData.UANodeSetValidation.XML { /// /// Class UANodeSetChanges. /// public partial class UANodeSetChanges { internal void RecalculateNodeIds(IUAModelContext modelContext, Action trace) { Func importNodeId = x => modelContext.ImportNodeId(x, trace); if (this.Aliases != null) foreach (NodeIdAlias _alias in this.Aliases) _alias.RecalculateNodeIds(importNodeId); if (this.NodesToAdd != null) foreach (UANode _node in this.NodesToAdd) _node.RecalculateNodeIds(modelContext, trace); if (this.NodesToDelete != null) foreach (NodeToDelete _node in this.NodesToDelete) _node.RecalculateNodeIds(importNodeId); if (this.ReferencesToAdd != null) foreach (ReferenceChange _reference in this.ReferencesToAdd) _reference.RecalculateNodeIds(importNodeId); if (this.ReferencesToDelete != null) foreach (ReferenceChange _reference in this.ReferencesToDelete) _reference.RecalculateNodeIds(importNodeId); } } } ================================================ FILE: SemanticData/UANodeSetValidation/XML/UAObject.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2022, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ using UAOOI.SemanticData.AddressSpace.Abstractions; namespace UAOOI.SemanticData.UANodeSetValidation.XML { public partial class UAObject : IUAObject { public override NodeClassEnum NodeClass => NodeClassEnum.UAObject; /// /// Indicates whether the inherited parent object is also equal to another object. /// /// An object to compare with this object. /// true if the current object is equal to the other; otherwise,, false otherwise. protected override bool ParentEquals(IUANode other) { UAObject _other = other as UAObject; if (_other == null) return false; return base.ParentEquals(_other) && (this.EventNotifier == _other.EventNotifier); } /// /// Get the clone from the types derived from this one. /// /// An instance of . protected override UANode ParentClone() { UAObject _ret = new UAObject() { EventNotifier = this.EventNotifier }; base.CloneUAInstance(_ret); return _ret; } } } ================================================ FILE: SemanticData/UANodeSetValidation/XML/UAObjectType.cs ================================================ //___________________________________________________________________________________ // // Copyright (C) 2019, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI //___________________________________________________________________________________ using UAOOI.SemanticData.AddressSpace.Abstractions; namespace UAOOI.SemanticData.UANodeSetValidation.XML { public partial class UAObjectType : IUAObjectType { public override NodeClassEnum NodeClass => NodeClassEnum.UAObjectType; /// /// Get the clone from the types derived from this one. /// /// An instance of . protected override UANode ParentClone() { UAObjectType _ret = new UAObjectType(); base.CloneUAType(_ret); return _ret; } } } ================================================ FILE: SemanticData/UANodeSetValidation/XML/UAReferenceType.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2022, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ using System; using UAOOI.SemanticData.AddressSpace.Abstractions; using UAOOI.SemanticData.BuildingErrorsHandling; namespace UAOOI.SemanticData.UANodeSetValidation.XML { public partial class UAReferenceType : IUAReferenceType { public override NodeClassEnum NodeClass => NodeClassEnum.UAReferenceType; DataSerialization.LocalizedText[] IUAReferenceType.InverseName { get { return this.InverseName.GetLocalizedTextArray(); } } /// /// Get the clone from the types derived from this one. /// /// An instance of . protected override UANode ParentClone() { UAReferenceType _ret = new UAReferenceType() { InverseName = this.InverseName, Symmetric = this.Symmetric }; base.CloneUAType(_ret); return _ret; } internal override void RecalculateNodeIds(IUAModelContext modelContext, Action trace) { base.RecalculateNodeIds(modelContext, trace); modelContext.RegisterUAReferenceType(BrowseName); } } } ================================================ FILE: SemanticData/UANodeSetValidation/XML/UAType.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2022, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ using System; using UAOOI.SemanticData.AddressSpace.Abstractions; namespace UAOOI.SemanticData.UANodeSetValidation.XML { /// /// Class UAType. /// Implements the /// /// public abstract partial class UAType : IUAType { /// /// Indicates whether the inherited parent object is also equal to another object. /// /// An object to compare with this object. /// true if the current object is equal to the other; otherwise,, false otherwise. /// Intentionally not implemented protected override bool ParentEquals(IUANode other) { throw new NotImplementedException("Intentionally not implemented"); } /// /// Clones the instance of the . /// /// The node to be updated. protected void CloneUAType(UAType node) { node.IsAbstract = this.IsAbstract; base.CloneUANode(node); } } } ================================================ FILE: SemanticData/UANodeSetValidation/XML/UAVariable.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2022, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ using System; using UAOOI.SemanticData.AddressSpace.Abstractions; using UAOOI.SemanticData.BuildingErrorsHandling; using UAOOI.SemanticData.UANodeSetValidation.DataSerialization; namespace UAOOI.SemanticData.UANodeSetValidation.XML { public partial class UAVariable : IUAVariable { public override NodeClassEnum NodeClass => NodeClassEnum.UAVariable; /// /// Indicates whether the inherited parent object is also equal to another object. /// /// An object to compare with this object. /// /// true if the current object is equal to the other; otherwise,, false otherwise. protected override bool ParentEquals(IUANode other) { UAVariable _other = other as UAVariable; if (_other == null) return false; return base.ParentEquals(_other) && //TODO compare Value, Translation this.DataType == _other.DataType && this.ValueRank == _other.ValueRank && this.ArrayDimensions == _other.ArrayDimensions && this.AccessLevel == _other.AccessLevel && this.UserAccessLevel == _other.UserAccessLevel && this.MinimumSamplingInterval == _other.MinimumSamplingInterval && this.Historizing == _other.Historizing; } public override void RemoveInheritedValues(IUANode baseNode) { base.RemoveInheritedValues(baseNode); UAVariable _other = baseNode as UAVariable; if (baseNode is null) throw new System.ArgumentNullException($"{nameof(baseNode)}", $"The parameter of the {nameof(RemoveInheritedValues)} must not be null"); if (this.DataType == _other.DataType) this.DataType = null; if (this.ArrayDimensions == _other.ArrayDimensions) this.ArrayDimensions = string.Empty; } internal override void RecalculateNodeIds(IUAModelContext modelContext, Action trace) { DataTypeNodeId = modelContext.ImportNodeId(DataType, trace); base.RecalculateNodeIds(modelContext, trace); } #region IUAVariable NodeId IUAVariable.DataType { get { return DataTypeNodeId; } } private NodeId DataTypeNodeId = null; uint? IUAVariable.AccessLevel { get { return this.AccessLevel; } set { this.AccessLevel = value.HasValue ? value.Value : 1; } } //bool? IUAVariable.Historizing //{ // get { return this.Historizing; } // set { this.Historizing = value.HasValue ? value.Value : false; } //} byte? IUAVariable.UserAccessLevel { get => throw new NotImplementedException(); set => throw new NotImplementedException(); } bool IUAVariable.Translation { get => this.Translation != null; } #endregion IUAVariable /// /// Get the clone from the types derived from this one. /// /// An instance of . protected override UANode ParentClone() { UAVariable _ret = new UAVariable() { Value = this.Value, Translation = this.Translation, DataType = this.DataType, ValueRank = this.ValueRank, ArrayDimensions = this.ArrayDimensions, AccessLevel = this.AccessLevel, UserAccessLevel = this.UserAccessLevel, MinimumSamplingInterval = this.MinimumSamplingInterval, Historizing = this.Historizing, }; return _ret; } } } ================================================ FILE: SemanticData/UANodeSetValidation/XML/UAVariableType.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2022, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ using System; using UAOOI.SemanticData.AddressSpace.Abstractions; using UAOOI.SemanticData.BuildingErrorsHandling; using UAOOI.SemanticData.UANodeSetValidation.DataSerialization; namespace UAOOI.SemanticData.UANodeSetValidation.XML { public partial class UAVariableType : IUAVariableType { /// /// The NodeClass identifies the NodeClass of a Node. /// public override NodeClassEnum NodeClass => NodeClassEnum.UAVariableType; /// /// Get the clone from the types derived from this one. /// /// An instance of . protected override UANode ParentClone() { UAVariableType _ret = new UAVariableType() { Value = this.Value, DataType = this.DataType, ValueRank = this.ValueRank, ArrayDimensions = this.ArrayDimensions }; base.CloneUAType(_ret); return _ret; } /// /// Recalculates the node identifiers. /// /// The model context. /// The trace. internal override void RecalculateNodeIds(IUAModelContext modelContext, Action trace) { base.RecalculateNodeIds(modelContext, trace); m_DataTypeNodeId = modelContext.ImportNodeId(this.DataType, trace); } #region IUAVariableType NodeId IUAVariableType.DataType => m_DataTypeNodeId; #endregion IUAVariableType private NodeId m_DataTypeNodeId; } } ================================================ FILE: SemanticData/UANodeSetValidation/XML/UAView.cs ================================================ //__________________________________________________________________________________________________ // // Copyright (C) 2022, Mariusz Postol LODZ POLAND. // // To be in touch join the community at GitHub: https://github.com/mpostol/OPC-UA-OOI/discussions //__________________________________________________________________________________________________ using UAOOI.SemanticData.AddressSpace.Abstractions; namespace UAOOI.SemanticData.UANodeSetValidation.XML { public partial class UAView : IUAView { public override NodeClassEnum NodeClass => NodeClassEnum.UAView; /// /// Indicates whether the inherited parent object is also equal to another object. /// /// An object to compare with this object. /// true if the current object is equal to the other; otherwise,, false otherwise. protected override bool ParentEquals(IUANode other) { UAView _other = other as UAView; if (_other == null) return false; return base.ParentEquals(_other) && (this.ContainsNoLoops == _other.ContainsNoLoops) && (this.EventNotifier == _other.EventNotifier); } /// /// Get the clone from the types derived from this one. /// /// An instance of . protected override UANode ParentClone() { UAView _ret = new UAView() { ContainsNoLoops = this.ContainsNoLoops, EventNotifier = this.EventNotifier }; base.CloneUAInstance(_ret); return _ret; } } } ================================================ FILE: SemanticData/UANodeSetValidation/docs/.vscode/settings.json ================================================ { "cSpell.enabled": true } ================================================ FILE: SemanticData/UANodeSetValidation/docs/ObjectModelSpecyficatio.md ================================================ # OPC UA Object Model Working Notes ## Table of Content - [Address Space Concept Executive Summary](#address-space-concept-executive-summary) - [Naming Conventions for Nodes](#naming-conventions-for-nodes) - [BrowseName Attribute](#browsename-attribute) - [BrowseName General Rules](#browsename-general-rules) - [BrowseName Requirements against the specification](#browsename-requirements-against-the-specification) - [NodeId Attribute](#nodeid-attribute) - [NodeId General Rules](#nodeid-general-rules) - [NodeId Requirements against the specification](#nodeid-requirements-against-the-specification) - [DisplayName Attribute](#displayname-attribute) - [DisplayName General Rules](#displayname-general-rules) - [DisplayName Requirements against the specification](#displayname-requirements-against-the-specification) - [General Rules for SymbolicName Attribute](#general-rules-for-symbolicname-attribute) - [UANodeSet validation](#uanodeset-validation) - [XML Import validation](#xml-import-validation) - [XML Semantic validation](#xml-semantic-validation) - [Model](#model) - [AS graph](#as-graph) - [Instance Declaration](#instance-declaration) - [P3 4.5 TypeDefinitionNode](#p3-45-typedefinitionnode) - [7.10 HasSubtype ReferenceType](#710-hassubtype-referencetype) ## Address Space Concept Executive Summary The primary objective of the OPC UA application is to expose information that can be used by other OPC UA applications aimed at managing an underlying process with the main challenge of integrating systems into one homogeneous foundation. It requires an exchange of information over a computer network as bitstreams. To make the information available for further processing by computer systems it must be assured that it is: - **transferable** – there must exist mechanisms to transfer the data over the network - **meaningful** – there must exist rules (unambiguous for all interoperating parties) on how to map the meaning and bitstreams (data) - **addressable** – there must exist services to selectively access the data To promote interoperability in the multi-vendor environment the services fulfilling these functionality must be standardized. The discussion related to the data transfer is outside the scope of this document. Based on the role humans take while using OPC UA applications they can be grouped as follows: - **human-centric** - information origin or ultimate information destination is an operator, - **machine-centric** - information creation, consumption, networking, and processing are achieved entirely without human interaction. A typical **human-centric** approach is a web-service supporting, for example, a web user interface (UI) to monitor conditions and manage millions of devices in a typical cloud-based IoT approach. It is essential in this case that any uncertainty and necessity to make a decision can be relaxed by human interaction. Coordination of robot behaviors in a work-cell (automation islands) is a **machine-centric** example. In this case, any human interaction must be recognized as impractical or even impossible. This interconnection scenario requires the machine to machine communication (M2M) demanding the integration of multi-vendor devices. To leverage the **meaningful** data distribution, the OPC UA engages rules derived from the object-oriented programming concept. Following this approach types are commonly used to describe the data semantics (to assign meaning to the bitstreams). For example, using Int32 we are dealing with a set of numbers that can be represented as bitstreams 32 bits long. Unfortunately, sometimes it is not enough. Let assume that we are going to use these numbers to express the age in a personal record. In the **human-centric** environment, we can use the appropriate names derived from the native language of the data holders called variables. For the **machine-centric** case, the multi-vendor environment must be considered. A typical approach to deal with this environment is the usage of names defined by a commonly acceptable standardization body. To make the name unambiguous (to avoid name collision) for all vendors it must be globally unique. Generally speaking, to select a particular target piece of complex data we have two options: **random access** or **browsing**. **Random-access** requires that the target item must have been assigned a unique address known in advance by a selection operation. The browsing approach means that the data consumer walks down available paths from an entity to an entity that builds up the structure of compound data - a data graph - using references interconnecting entities. It is necessary if we need to represent a relationship between data components. As an example, consider a family tree containing a graph of personal records. The browsing process is costly because instead of jumping to a target, we need to traverse the graph step by step using references. The main advantage of this approach is that the data consumer do not need any prior knowledge of the data structure. To minimize the cost, after having found the target as the result of browsing the graph, every operation targeting it can use direct access. Random access is possible only if the browsing path is convertible to a unique direct address or selected targets have well know addresses assigned by a standardization body. It seems that, despite the access method, we have to assign an identification to all of the accessible entities in the representation of the process data structure. In this concept, this atomic identifiable entity is called a node. Each node is a collection of attributes (value-holders) that have values accessible locally in the context of the node. To enable browsing the internal structure of the nodes graph (relationship information), nodes are interconnected by references (address-holders of coupled nodes). Taking into consideration that the browse mechanism is based on the incremental and relative passage along the path of interconnected nodes, we can easily find out that each path must have a defined entry point, so we must address the question of where to start. The collection of these nodes is called the **address space**. The OPC UA Address Space (AS) concept is all about exposing the process data in a standard way. The main goal of exposing a graph of nodes as one whole is to create a meaningful context for the underlying process data. To create the AS, we need to instantiate nodes and interconnect them by references. To instantiate the AS we need to deal with naming, addressing, and meaning of the nodes. Appropriate naming is helpful in the **human-centric** environment, especially at the design-time. Proper addressing is essential for **machine-centric** environment, especially at the run-time. Designing appropriate rules applied to make the AS meaningful is necessary for both and must be addressed by the information model design process. All mentioned above aspects are tightly coupled and contribute to the design process. The design process can be backed by: - design conventions - contributing to design best practice rules - OPC UA concepts - as a foundation of AS deployment addressing a selected process requirements - design tool - to author reusable in the multi-vendor market comprehensive information model The following section covers a detailed description of the design conventions to improve reusability, comprehensiveness and minimize the deployment costs in the production environment. OPC UA engages the following concepts supporting the mentioned above topics, namely naming, addressing, and meaning associations: - `BrowseName` attribute - to support browsing and meaning association - `DisplayName` attribute - to enable comprehensive description using native languages - `NodeId` attribute - to implement the nodes direct addressing - `Reference` - to apply nodes relationship information - `Type` concept - to provide metadata used as a meaningful context for the process data. To create the AS exposed by an OPC UA Application it must instantiate all nodes and interconnect them through references at the bootstrap process. Before the AS can be instantiated by an OPC UA application it must be designed first. To promote reusability of the AS design process a Domain Specific Language (DSL) is required. A detailed description of this process is covered by the document [Address Space Model Life-cycle](https://commsvr.gitbook.io/ooi/semantic-data-processing/informationmodelsdevelopment/informationmodellifecycle). A mandatory option - coined as `NodeSet` model - of the DSL is described in OPC UA Specification [Part 6: Mappings][Opc.UA.Part6]. By design, it minimizes the required effort spent by the OPC UA applications to instantiate the AS because it requires a detailed description of all implementation details enabling to avoid the necessity to resolve inheritance chains, type definitions, encodings, direct addressing, defaults, etc. A detailed description of this DSL is covered by the document [OPC UA Address Space Interchange XML][InterchangeXML]. As a result, it is expected that all OPC UA applications and design tools must be compliant with this language somehow. This standard additionaly introduces the term - `SymbolicName` - an identifier that uniquely identifies a specific entity (node) in a program or procedure. ## Naming Conventions for Nodes ### BrowseName Attribute #### BrowseName General Rules OPC UA defines two attributes containing naming information about an OPC UA Node, the `BrowseName` and the `DisplayName`. The `NodeSet` DSL additionally introduces `SymbolicName`. The `BrowseName` is of the `QualifiedName` type. Each complex value of this type contains `namespaceIndex` and `name` fields. The `namespaceIndex` field is an index that identifies the namespace (a set of unique names) that defines the context of the name. This index is a selector of that namespace in an array of namespace entries in concern. This array may be used to access the actual value of the namespace selected by the `namespaceIndex`. Namespace concept is used by OPC UA to create unique identifiers across different naming authorities. The attributes NodeId and BrowseName are identifiers. A Node in the UA AddressSpace is unambiguously identified using a NodeId. Unlike the NodeId identifier, the BrowseName cannot be used to unambiguously identify a Node. Different Nodes may have the same `BrowseName`. The `BrowseName` are used: - to build a browse path between Nodes - define a globally unique meaning of an entity, e.g. properties, types, etc In case the `BrowseName` is applied to build a browse path its uniqueness is resolved in the context of a parent node. Unless the `BrowseName` is assigned a globally specific meaning defined independently the `namespaceIndex` shall be the same as assigned to `NodeId` attribute of the hosting Node. It is recommended that Nodes defined in any custom model (including but not limited to Companion Specification) should use a Namespace of the model for their NodeId and BrowseName attributes. If `BrowseName` is associated with a globally unique meaning it shall be defined in the context of a dedicated namespace. For this purpose, standardization organizations (naming authorities) shall define independent globally unique identifiers (e.g. URI) that must be added to the local namespaces array and to be indexed by the `BrowseName` value. For the `name` part of the `BrowseName` attribute, the following naming conventions apply. The `name` field value should be the upper camel case (also known as PascalCase), that is, all words are written without spaces (concatenated), and the first character of each word is the upper case letter, the other characters are lower case or digits. Examples: ReferenceType, BaseObjectType, Int32. If an acronym or abbreviation is used, upper camel case should also be used. Examples: PortMacAddress (where MAC is an acronym for Media Access Control), NodeId (where ID is an abbreviation for identifier), UInt32 (where U is an abbreviation for unsigned). In general, it is recommended to only use letters, digits or the underscore (‘_’) as characters for the `BrowseName`. unless it is explicitly defined like “<” and “>” for optional placeholders. > Remark: If special chars like “&”, “<”, etc. are used, the `NodeSet` document should define the `SymbolicName` attribute for that Node as well. This can then be used for code generation. There is no recommendation on the use of prefixes. Companion Specifications may use a prefix because it suits their model. For example, if the Vision companion specification were to define types based on generic concepts (say a state machine), then using the prefix “Vision” may make sense (as in “VisionStateMachineType”). Special characters may be used for parametrization of the `BrowseName` to create several copies of the same node. In this case the `BrowseName` amy be used as a pattern of the values assigned to new instances created this way. > What is the impact on the `SymbolicName` ? #### BrowseName Requirements against the specification **P03-03030200XX Conventions for defining NodeClasses** - this standard defines Properties, but Properties can be defined by other standard organizations or vendors and Nodes can have Properties that are not standardised. Properties defined in this standard are defined by their name, which is mapped to the `BrowseName` having the NamespaceIndex 0, which represents the Namespace for OPC UA. **P03-04040200XX Properties** - to prevent recursion, Properties are not allowed to have Properties defined for them. To easily identify Properties, the `BrowseName` of a Property shall be unique in the context of the Node containing the Properties (see 5.6.3 for details). **P03-040504 Instantiation of complex TypeDefinitionNodes** - the instantiation of complex TypeDefinitionNodes depends on the ModellingRules defined in 6.4.4. However, the intention is that instances of a type definition will reflect the structure defined by the TypeDefinitionNode. Figure 7 shows an instance of the TypeDefinitionNode “AI_BLK_TYPE”, where the ModellingRule Mandatory, defined in 6.4.4.5.2, was applied for its containing Variable. Thus, an instance of “AI_BLK_TYPE”, called AI_BLK_1”, has a HasTypeDefinition Reference to “AI_BLK_TYPE”. It also contains a Variable “SP” having the same `BrowseName` as the Variable “SP” used by the TypeDefinitionNode and thereby reflects the structure defined by the TypeDefinitionNode. There are several constraints related to programming against the TypeDefinitionNode. A TypeDefinitionNode or an InstanceDeclaration shall never reference two Nodes having the same `BrowseName` using forward hierarchical References. Instances based on InstanceDeclarations shall always keep the same `BrowseName` as the InstanceDeclaration they are derived from. A special Service defined in Part 4 called TranslateBrowsePathsToNodeIds may be used to identify the instances based on the InstanceDeclarations. Using the simple Browse Service might not be sufficient since the uniqueness of the `BrowseName` is only required for TypeDefinitionNodes and InstanceDeclarations, not for other instances. Thus, “AI_BLK_1” may have another Variable with the `BrowseName` “SP”, although this one would not be derived from an InstanceDeclaration of the TypeDefinitionNode. **P03-040802 Well Known Roles** - all Servers should support the well-known Roles which are defined in Table 2. The NodeIds for the well-known Roles are defined in Part 6. >MP NOTE: The table contains `BrowseNames` instead of `NodeIds`. **P03-050204 BrowseName** - nodes have a `BrowseName` Attribute that is used as a non-localised human-readable name when browsing the AddressSpace to create paths out of `BrowseNames`. The TranslateBrowsePathsToNodeIds Service defined in Part 4 can be used to follow a path constructed of `BrowseNames`. A `BrowseName` should never be used to display the name of a Node. The DisplayName should be used instead for this purpose. Unlike NodeIds, the BrowseName cannot be used to unambiguously identify a Node. Different Nodes may have the same `BrowseName`. Subclause 8.3 defines the structure of the `BrowseName`. It contains a namespace and a string. The namespace is provided to make the `BrowseName` unique in some cases in the context of a Node (e.g. Properties of a Node) although not unique in the context of the Server. If different organizations define `BrowseNames` for Properties, the namespace of the `BrowseName` provided by the organization makes the BrowseName unique, although different organizations may use the same string having a slightly different meaning. Servers may often choose to use the same namespace for the NodeId and the `BrowseName`. However, if they want to provide a standard Property, its `BrowseName` shall have the namespace of the standards body although the namespace of the NodeId reflects something else, for example the local Server. It is recommended that standard bodies defining standard type definitions use their namespace for the NodeId of the TypeDefinitionNode as well as for the `BrowseName` of the TypeDefinitionNode. The string-part of the `BrowseName` is case sensitive. That is, Clients shall consider them case sensitive. Servers are allowed to handle `BrowseNames` passed in Service requests as case insensitive. Examples are the TranslateBrowsePathsToNodeIds Service or Event filter. **P03-050205 DisplayName** - the DisplayName Attribute contains the localised name of the Node. Clients should use this Attribute if they want to display the name of the Node to the user. They should not use the BrowseName for this purpose. The Server may maintain one or more localised representations for each `DisplayName`. Clients negotiate the locale to be returned when they open a session with the Server. Refer to Part 4 for a description of session establishment and locales. Subclause 8.5 defines the structure of the `DisplayName`. The string part of the `DisplayName` is restricted to 512 characters. **P03-050302 Attributes** The ReferenceType NodeClass inherits the base Attributes from the Base NodeClass defined in 5.2. The inherited `BrowseName` Attribute is used to specify the meaning of the ReferenceType as seen from the SourceNode. For example, the ReferenceType with the BrowseName “Contains” is used in References that specify that the SourceNode contains the TargetNode. The inherited DisplayName Attribute contains a translation of the `BrowseName`. The `BrowseName` of a ReferenceType shall be unique in a Server. It is not allowed that two different ReferenceTypes have the same `BrowseName`. Figure 9 provides examples of symmetric and non-symmetric References and the use of the `BrowseName` and the InverseName. **P03-050501 Object NodeClass** If the Object is used as an InstanceDeclaration (see 4.5) then all Nodes referenced with forward hierarchical References direction shall have unique `BrowseNames` in the context of this Object. If the Object is created based on an InstanceDeclaration then it shall have the same `BrowseName` as its InstanceDeclaration. **P03-050502 ObjectType** NodeClass All Nodes referenced with forward hierarchical References shall have unique `BrowseNames` in the context of an ObjectType (see 4.5). **P03-050504 Client-side creation of Objects of an ObjectType** - in addition to the AddNodes Service ObjectTypes may have a special Method with the `BrowseName` “Create”. This Method is used to create an Object of this ObjectType. This Method may be useful for the creation of Objects where the semantic of the creation should differ from the default behaviour expected in the context of the AddNodes Service. For example, the values should directly differ from the default values or additional 1 should be added, etc. The input and output arguments of this Method depend on the ObjectType; the only commonality is the `BrowseName` identifying that this Method will create an Object based on the ObjectType. Servers should not provide a Method on an ObjectType with the `BrowseName` “Create” for any other purpose than creating Objects of the ObjectType. **P03-050602 Variable NodeClass** - if the Variable is created based on an InstanceDeclaration (see 4.5) it shall have the same `BrowseName` as its InstanceDeclaration. **P03-050603 Properties** The HasTypeDefinition Reference points to the VariableType of the Property. Since Properties are uniquely identified by their `BrowseName`, all Properties shall point to the PropertyType defined in Part 5. The `BrowseName` of a Property is always unique in the context of a Node. It is not permitted for a Node to refer to two Variables using HasProperty References having the same `BrowseName`. **P03-050604 DataVariable** - if the DataVariable is used as InstanceDeclaration (see 4.5) all Nodes referenced with forward hierarchical References shall have unique `BrowseNames` in the context of this DataVariable. **P03-050605 VariableType NodeClass** All Nodes referenced with forward hierarchical References shall have unique `BrowseNames` in the context of the VariableType (see 4.5). **P03-0507 Method NodeClass** - if the Method is used as InstanceDeclaration (see 4.5) all Nodes referenced with forward hierarchical References shall have unique `BrowseNames` in the context of this Method. **P03-050803 DataType NodeClass** - each concrete Structured DataType shall point to at least one DataTypeEncoding Object with the `BrowseName` “Default Binary” or “Default XML” having the NamespaceIndex 0. The `BrowseName` of the DataTypeEncoding Objects shall be unique in the context of a DataType, i.e. a DataType shall not point to two DataTypeEncodings having the same `BrowseName`. **P03-0509 Summary of Attributes of the NodeClasses** - BrowseName is the mandatory attribute for all NodeClasses. **P03-060204 Similar Node of InstanceDeclaration** - a similar Node of an InstanceDeclaration is a Node that has the same BrowseName and NodeClass as the InstanceDeclaration and in cases of Variables and Objects the same TypeDefinitionNode or a subtype of it. **P03-060205 BrowsePath** - all targets of forward hierarchical References from a TypeDefinitionNode shall have a `BrowseName` that is unique within the TypeDefinitionNode. The same restriction applies to the targets of forward hierarchical References from any InstanceDeclaration. This means that any InstanceDeclaration within the InstanceDeclarationHierarchy can be uniquely identified by a sequence of `BrowseNames`. This sequence of `BrowseNames` is called a BrowsePath. **P03- 060206 Attribute Handling of InstanceDeclarations** - some restrictions exist regarding the Attributes of InstanceDeclarations when the InstanceDeclaration is overridden or instantiated. The `BrowseName` and the NodeClass shall never change and always be the same as the original InstanceDeclaration. **P03-060302 Attributes** - Subtypes inherit the parent type’s Attribute values, except for the NodeId. Inherited Attribute values may be overridden by the subtype, the `BrowseName` and DisplayName values should be overridden. Special rules apply for some Attributes of VariableTypes as defined in 6.2.7. Optional Attributes, not provided by the parent type, may be added to the subtype. **P03-06030303 - overriding InstanceDeclarations** - a subtype overrides an InstanceDeclaration by specifying an InstanceDeclaration with the same BrowsePath. An overridden InstanceDeclaration shall have the same NodeClass and `BrowseName`. The TypeDefinitionNode of the overridden InstanceDeclaration shall be the same or a subtype of the TypeDefinitionNode specified in the supertype. The overriding Node may specify new values for the Node Attributes other than the NodeClass or `BrowseName`, however, the restrictions on Attributes specified in 6.2.6 apply. Any Attribute provided by the overridden InstanceDeclaration has to be provided by the overriding InstanceDeclaration, additional optional Attributes may be added. **P03-060401 Overview** any Instance of a TypeDefinitionNode will be the root of a hierarchy which mirrors the InstanceDeclarationHierarchy for the TypeDefinitionNode. Each Node in the hierarchy of the Instance will have a BrowsePath which may be the same as the BrowsePath for one of the InstanceDeclarations in the hierarchy of the TypeDefinitionNode. The InstanceDeclaration with the same BrowsePath is called the InstanceDeclaration for the Node. If a Node has an InstanceDeclaration then it shall have the same `BrowseName` and NodeClass as the InstanceDeclaration and, in cases of Variables and Objects, the same TypeDefinitionNode or a subtype of it. **P03-060402 Creating an Instance** - when a Server creates an instance of a TypeDefinitionNode it shall create the same hierarchy of Nodes beneath the new Object or Variable depending on the ModellingRule of each InstanceDeclaration. Standard ModellingRules are defined in 6.4.4.5. The Nodes within the newly created hierarchy may be copies of the InstanceDeclarations, the InstanceDeclaration itself or another Node in the AddressSpace that has the same TypeDefinitionNode and `BrowseName`. If new copies are created, then the Attribute values of the InstanceDeclarations are used as the initial values. Figure 15 provides a simple example of a TypeDefinitionNode and an Instance. Nodes referenced by the TypeDefinitionNode without a ModellingRule do not appear in the instance. Instances may have children with duplicate `BrowseNames`; however, only one of those children will correspond to the InstanceDeclaration. A Client can use the information of TypeDefinitionNodes to access Nodes which are in the hierarchy of the instance. It shall pass the NodeId of the instance and the BrowsePath of the child Nodes based on the TypeDefinitionNode to the TranslateBrowsePathsToNodeIds service (see Part 4). This Service returns the NodeId for each of the child Nodes. If a child Node exists then the `BrowseName` and NodeClass shall match the InstanceDeclaration. In the case of Objects or Variables, also the TypeDefinitionNode shall either match or be a subtype of the original TypeDefinitionNode. **P03-0604040201 NamingRule** If an InstanceDeclaration has a ModellingRule using the NamingRule Constraint it identifies that the `BrowseName` of the InstanceDeclaration is of no significance but other semantic is defined with the ModellingRule. The TranslateBrowsePathsToNodeIds Service (see Part 4) can typically not be used to access instances based on those InstanceDeclarations. **P03-0604040503 Optional** In Figure 20 an example using the ModellingRules Optional and Mandatory is shown. The example contains an ObjectType Type_A and all valid combinations of instances named A1 to A13. Note that if the optional B is provided, the mandatory E has to be provided as well, otherwise not. F is referenced by C and D. On the instance, this can be the same Node or two different Nodes with the same `BrowseName` (similar Node to InstanceDeclaration F). Not considered in the example is if the instances have ModellingRules or not. It is assumed that each F is similar to the InstanceDeclaration F, etc. **P03-0604040504 ExposesItsArray** Figure 21 gives an example. A is an instance of Type_A having two entries in its value array. Therefore it references two instances of the same type as the InstanceDeclaration ArrayExpose. The `BrowseNames` of those instances are not defined by the ModellingRule. In general, it is not possible to get a Variable representing a specific entry in the array (e.g. the second). Clients will typically either get the array or access the Variables directly, so there is no need to provide that information. **P03-0604040505 OptionalPlaceholder** - for Object and Variable the intention of the ModellingRule OptionalPlaceholder is to expose the information that a complex TypeDefinition expects from instances of the TypeDefinition to add instances with specific References without defining `BrowseNames` for the instances. For example, a Device might have a Folder for DeviceParameters, and the DeviceParameters should be connected with a HasComponent Reference. However, the names of the DeviceParameters are specific to the instances. The example is shown in Figure 23, where an instance Device A adds two DeviceParameters in the Folder. It is recommended that the `BrowseName` and the DisplayName of InstanceDeclarations having the OptionalPlaceholder ModellingRule should be enclosed within angle brackets. When overriding the InstanceDeclaration, the ModellingRule shall remain OptionalPlaceholder. For Methods, the ModellingRule OptionalPlaceholder is used to define the `BrowseName` where subtypes and instances provide more information. The Method definition with the OptionalPlaceholder only defines the `BrowseName`. An instance or subtype defines the InputArguments and OutputArguments. A subtype shall also change the ModellingRule to Optional or Mandatory. The Method is optional for instances. For example, a Device might have a Method to perform calibration however the specific arguments for the Method depend on the instance of the Device. In this example Device A does not implement the Method, Device B implements the Method with no arguments and Device C implements the Method accepting a mode argument to select how the calibration is to be performed. The example is shown in Figure 24. **P03-0604040506 MandatoryPlaceholder** for example, when the DeviceType requires that at least one DeviceParameter shall exist without specifying the `BrowseName` for it, it uses MandatoryPlaceholder as shown in Figure 25. Device A is a valid instance as it has the required DeviceParameter. Device B is not valid as it uses the wrong ReferenceType to reference a DeviceParameter (Organizes instead of HasComponent) and Device C is not valid because it does not provide a DeviceParameter at all. The ModellingRule MandatoryPlaceholder requires that each instance provides at least one instance with the TypeDefinition of the InstanceDeclaration or a subtype, and is referenced with the same ReferenceType or a subtype as the InstanceDeclaration. It does not require a specific `BrowseName` and thus cannot be used for the TranslateBrowsePathsToNodeIds Service (see Part 4). It is recommended that the `BrowseName` and the DisplayName of InstanceDeclarations having the MandatoryPlaceholder ModellingRule should be enclosed within angle brackets. For Methods, the ModellingRule MandatoryPlaceholder is used to define the `BrowseName` where subtypes and instances provide more information. The Method definition with the MandatoryPlaceholder only defines the `BrowseName`. An instance or subtype defines the InputArguments and OutputArguments. A subtype shall also change the ModellingRule to Mandatory. The Method is mandatory for instances. **P03-0803 QualifiedName** - this Built-in DataType contains a qualified name. It is, for example, used as `BrowseName`. Its elements are defined in Table 25. The name part of the QualifiedName is restricted to 512 characters. The QualifiedName structure syntax | Name | Type | Description | | -------------- | ------ | -------------------------------------- | | namespaceIndex | UInt16 | see description below | | name | String | The text portion of the QualifiedName. | namespaceIndex description - Index that identifies the namespace that defines the name. - This index is the index of that namespace in the local Server’s NamespaceArray. - The Client may read the NamespaceArray Variable to access the string value of the namespace. The regular expression pattern to match. ```TXT \b((\d{1,}):)?(.+) ``` **P03-0851 StructureField** StructureFields can be exposed as DataVariables that are children of the Variable that contains the Structure Value. In this case the `BrowseName` of the DataVariable shall be the same as the StructureField name and the NamespaceIndex of the `BrowseName` shall be the same as the Structure DataType Node NamespaceIndex. **P03-A0402 Properties or DataVariables** - besides the semantic differences of Properties and DataVariables described in Clause 4 there are also syntactical differences. A Property is identified by its `BrowseName`, that is, if Properties having the same semantic are used several times, they should always have the same `BrowseName`. The same semantic of DataVariables is captured in the VariableType. **P03-C0203 Extended Notation** - the `BrowseName` contains the NamespaceIndex and a String. Such a structure can be exposed as \[\:\]\ where the NamespaceIndex is optional. For example, a `BrowseName` can be “1:MyName”. Instead of that, “MyName” can also be used. This rule applies whenever a `BrowseName` is shown, including the text used in the graphical representation of a Node. **P05-0303 Conventions for Node descriptions** - References are defined by providing the ReferenceType name, the `BrowseName` of the TargetNode and its NodeClass. Nodes of all other NodeClasses cannot be defined in the same table; therefore only the used ReferenceType, their NodeClass and their `BrowseName` are specified. A reference to another part of this document points to their definition. **P05-0401 NodeIds** - the symbolic name of each Node defined in this standard is its `BrowseName`, or, when it is part of another Node, the `BrowseName` of the other Node, a “.”, and the BrowseNa`me of itself. In this case “part of” means that the whole has a HasProperty or HasComponent Reference to its part. Since all Nodes not being part of another Node have a unique name in this standard, the symbolic name is unique. For example, the ServerType defined in 6.3.1 has the symbolic name “ServerType”. One of its InstanceDeclarations would be identified as “ServerType.ServerCapabilities”. Since this Object is complex, another InstanceDeclaration of the ServerType is “ServerType.ServerCapabilities.MinSupportedSampleRate”. The Server Object defined in 8.3.2 is based on the ServerType and has the symbolic name “Server”. Therefore, the instance based on the InstanceDeclaration described above has the symbolic name “Server.ServerCapabilities.MinSupportedSampleRate”. **P05-0402 BrowseNames** - the text part of the `BrowseNames` for all Nodes defined in this standard is specified in the tables defining the Nodes. The NamespaceIndex for all `BrowseNames` defined in this standard is 0. **P05-0501 General** the DisplayName is a LocalizedText. Each server shall provide the DisplayName identical to the `BrowseName` of the Node for the LocaleId “en”. Whether the server provides translated names for other LocaleIds is server-specific. The NodeId is described by `BrowseNames` as defined in 4.1 and defined in Part 6. **P05-060304 SessionsDiagnosticsSummaryType** - for each session of the Server, this Object also provides an Object representing the session, indicated by ``. The BrowseName could be derived from the sessionName defined in the CreateSession Service (Part 4) or some other server-specific mechanisms. It is of the ObjectType SessionDiagnosticsObjectType, as defined in 6.3.5. **P05-060313 NamespaceMetadataType** - the `BrowseName` of instances of this type shall be derived from the represented namespace. This can, for example, be done by using the index of the namespace in the NamespaceArray as namespaceIndex of the QualifiedName and the namespace URI as name of the QualifiedName. **P05-060314 NamespacesType** - the ObjectType contains a list of NamespaceMetadataType Objects representing the namespaces in the Server. The `BrowseName` of an Object shall be derived from the namespace represented by the Object. This can, for example, be done by using the index of the namespace in the NamespaceArray as namespaceIndex of the QualifiedName and the namespace URI as name of the QualifiedName. Clients should not assume that all namespaces provided by a Server are present in this list as a namespace may not provide the information necessary to fill all mandatory Properties of the NamespaceMetadataType. **P05-060402 BaseEventType** Server does not have a description, it shall return the string part of the `BrowseName` of the Node associated with the Event. **P05-060431 BaseModelChangeEventType** - this EventType inherits all Properties of the BaseEventType. Their semantic is defined in 6.4.2. There are no additional Properties defined for this EventType. The SourceNode Property for Events of this type shall be the Node of the View that gives the context of the changes. If the whole AddressSpace is the context, the SourceNode Property is set to the NodeId of the Server Object. The SourceName for Events of this type shall be the String part of the `BrowseName` of the View; for the whole AddressSpace it shall be “Server”. **P05-060433 SemanticChangeEventType** - this EventType inherits all Properties of the BaseEventType. Their semantic is defined in 6.4.2. There are no additional Properties defined for this EventType. The SourceNode Property for Events of this type shall be the Node of the View that gives the context of the changes. If the whole AddressSpace is the context, the SourceNode Property is set to the NodeId of the Server Object. The SourceName for Events of this type shall be the String part of the `BrowseName` of the View, for the whole AddressSpace it shall be “Server”. **P05-0703 PropertyType** - the PropertyType is a subtype of the BaseVariableType. It is used as the type definition for all Properties. Properties are defined by their `BrowseName` and therefore they do not need a specialised type definition. It is not allowed to subtype this VariableType. **P05-0709 SamplingIntervalDiagnosticsArrayType** - this complex VariableType is used for diagnostic information. For each entry of the array, instances of this type will provide a Variable of the SamplingIntervalDiagnosticsType VariableType having the sampling rate as `BrowseName`. **P05-B0405 FiniteStateMachineType** - The States of the machine are represented with instances of the StateType ObjectType. Each State shall have a `BrowseName` which is unique within the StateMachine and shall have a StateNumber which shall also be unique across all States defined in the StateMachine. Be aware that States in a SubStateMachine may have the same StateNumber or `BrowseName` as States in the parent machine. A concrete subtype of FiniteStateMachineType shall define at least one State. The Transitions that may occur are represented with instances of the TransitionType. Each Transition shall have a `BrowseName` which is unique within the StateMachine and may have a TransitionNumber which shall also be unique across all Transitions defined in the StateMachine. **P05-B0406 FiniteStateVariableType** - the Name Property is inherited from StateVariableType. Its Value shall be the `BrowseName` of one of the State Objects of the FiniteStateMachineType. **P05-C0302** FileSystem Object The support of file directory structures is declared by aggregating an instance of the FileDirectoryType with the `BrowseName` FileSystem as illustrated in Figure C.1. The Object representing the root of a file directory structure shall have the `BrowseName` FileSystem. An OPC UA Server may have different FileSystem Objects in the AddressSpace. HasComponent is used to reference a FileSystem from aggregating Objects like the Objects Folder or the Object representing a device. ### NodeId Attribute #### NodeId General Rules Nodes are unambiguously identified using an identifier called the `NodeId`. The syntax of the `NodeId` structure is defined in Part 03 8.2. Servers may often choose to use the same namespace for the `NodeId` and the BrowseName. However, if they want to provide a standard Property, its BrowseName shall have the namespace of the standards body although the namespace of the `NodeId` reflects something else, for example the local Server. A Server shall persist the `NodeId` of a Node, that is, it shall not generate new `NodeIds` when rebooting. It is recommended that standard bodies defining standard type definitions use their namespace for the `NodeId` of the TypeDefinitionNode as well as for the BrowseName of the TypeDefinitionNode. Subtypes inherit the parent type’s Attribute values, except for the `NodeId`. #### NodeId Requirements against the specification **P03-050202 NodeId** - nodes are unambiguously identified using a constructed identifier called the `NodeId`. Some Servers may accept alternative `NodeIds` in addition to the canonical `NodeId` represented in this Attribute. A Server shall persist the `NodeId` of a Node, that is, it shall not generate new `NodeIds` when rebooting. The structure of the `NodeId` is defined in 8.2. **P03-050204 BrowseName** Servers may often choose to use the same namespace for the `NodeId` and the BrowseName. However, if they want to provide a standard Property, its BrowseName shall have the namespace of the standards body although the namespace of the `NodeId` reflects something else, for example the local Server. It is recommended that standard bodies defining standard type definitions use their namespace for the `NodeId` of the TypeDefinitionNode as well as for the BrowseName of the TypeDefinitionNode. **P03-050801** DataType Model In many cases, the `NodeId` of the DataType Node – the DataTypeId – will be well-known to Clients and Servers. Clause 8 defines DataTypes and Part 6 defines their DataTypeIds. In addition, other organizations may define DataTypes that are well-known in the industry. Wellknown DataTypeIds provide for commonality across OPC UA Servers and allow Clients to interpret values without having to read the type description from the Server. Therefore, Servers may use well-known DataTypeIds without representing the corresponding DataType Nodes in their AddressSpaces. **P03-060208 NodeIds of InstanceDeclarations** InstanceDeclarations are identified by their BrowsePath. Different Servers might use different `NodeIds` for the InstanceDeclarations of common TypeDefinitionNodes, unless the definition of the TypeDefinitionNode already defines a `NodeId` for the InstanceDeclaration. All TypeDefinitionNodes defined in Part 5 already define the `NodeIds` for their InstanceDeclarations and therefore shall be used in all Servers. **P03-060302 Attributes** Subtypes inherit the parent type’s Attribute values, except for the `NodeId`. Inherited Attribute values may be overridden by the subtype, the BrowseName and DisplayName values should be overridden. Special rules apply for some Attributes of VariableTypes as defined in 6.2.7. Optional Attributes, not provided by the parent type, may be added to the subtype. **P03-060402 Creating an Instance** Instances inherit the initial values for the Attributes that they have in common with the TypeDefinitionNode from which they are instantiated, with the exceptions of the NodeClass and `NodeId`. **P03-080201 General** This Built-in DataType is composed of three elements that identify a Node within a Server. They are defined in Table 22. **P-03-080202 NamespaceIndex** The namespace is a URI that identifies the naming authority responsible for assigning the identifier element of the `NodeId`. Naming authorities include the local Server, the underlying system, standards bodies and consortia. It is expected that most Nodes will use the URI of the Server or of the underlying system. **P03-080203 IdentifierType** The IdentifierType element identifies the type of the `NodeId`, its format and its scope. Its values are defined in Table 23. Normally the scope of `NodeIds` is the Server in which they are defined. For certain types of `NodeIds`, `NodeIds` can uniquely identify a Node within a system, or across systems (e.g. GUIDs). System-wide and globally-unique identifiers allow Clients to track Nodes, such as work orders, as they move between OPC UA Servers as they progress through the system. Opaque identifiers are identifiers that are free-format byte strings that might or might not be human interpretable. String identifiers are case sensitive. That is, Clients shall consider them case sensitive. Servers are allowed to provide alternative `NodeIds` (see 5.2.2) and using this mechanism severs can handle `NodeIds` as case insensitive. **P03-080204 Identifier** value The identifier value element is used within the context of the first three elements to identify the Node. Its data type and format is defined by the IdType. ### DisplayName Attribute #### DisplayName General Rules #### DisplayName Requirements against the specification ### General Rules for SymbolicName Attribute According to the specification it can be used as a class/field name in auto generated code. It should only be specified if the `BrowseName` cannot be used for this purpose. This xml attribute does not appear in the AddressSpace and is intended for use by design tools. Only letters, digits or the underscore (‘_’) are permitted. The detailed syntax definition is as follows by the type `SymbolicName` ```XML ``` ## UANodeSet validation ### XML Import validation - text syntax against the XML rules - XML syntax against the selected schema (UANodeSet in this case) - XML syntax against the OPC UA spec (e.g. QualifiedName, NodeId, etc) if the schema is not prcise enough ### XML Semantic validation - XML semantics against the OPC UA spec ## Model The version information is also provided as part of the ModelTableEntry in the UANodeSet XML file. The UANodeSet XML schema is defined in OPC 10000-6. The NamespaceUri for all NodeIds defined in this document is defined in Annex A. The NamespaceIndex for this NamespaceUri is vendor-specific and depends on the position of the NamespaceUri in the server namespace table. ## AS graph `HasSubtype` References are used to define subtypes of `ReferenceTypes`. It is not required to provide the HasSubtype Reference for the supertype. If a `ReferenceType` specifies some constraints this is inherited and can only be refined (be more restrictive). ObjectType is the base ObjectType and all other ObjectTypes shall either directly or indirectly inherit from it. However, it might not be possible for Servers to provide all `HasSubtype` References from this `ObjectType` to its subtypes, and therefore it is not required to provide this information. ## Instance Declaration ### [P3 4.5 TypeDefinitionNode](https://reference.opcfoundation.org/v104/Core/docs/Part3/4.5.1/) ### [7.10 HasSubtype ReferenceType](https://reference.opcfoundation.org/v104/Core/docs/Part3/7.10/) The semantic of this ReferenceType is to express a subtype relationship of types. It is used to span the ReferenceType hierarchy, whose semantic is specified in 5.3.3.3; a DataType hierarchy is specified in 5.8.3, and other subtype hierarchies are specified in Clause 6. [5.3.3.3 HasSubtype References](https://reference.opcfoundation.org/v104/Core/docs/Part3/5.3.3/#5.3.3.3) HasSubtype References are used to define subtypes of ReferenceTypes. It is not required to provide the HasSubtype Reference for the supertype, but it is required that the subtype provides the inverse Reference to its supertype. The following rules for subtyping apply. 1. The semantic of a ReferenceType (e.g. “spans a hierarchy”) is inherited to its subtypes and can be refined there (e.g. “spans a special hierarchy”). The DisplayName, and also the InverseName for non-symmetric ReferenceTypes, reflect the specialization. 1. If a ReferenceType specifies some constraints (e.g. “allow no loops”) this is inherited and can only be refined (e.g. inheriting “no loops” could be refined as “shall be a tree – only one parent”) but not lowered (e.g. “allow loops”). 1. The constraints concerning which NodeClasses can be referenced are also inherited and can only be further restricted. That is, if a ReferenceType “A” is not allowed to relate an 1. 1. Object with an ObjectType, this is also true for its subtypes. 1. A ReferenceType shall have exactly one supertype, except for the References ReferenceType defined in 7.2 as the root type of the ReferenceType hierarchy. The ReferenceType hierarchy does not support multiple inheritances. [5.8.3 DataType NodeClass](https://reference.opcfoundation.org/v104/Core/docs/Part3/5.8.3/) HasSubtype References may be used to expose a data type hierarchy in the AddressSpace. The semantic of subtyping is only defined to the point, that a Server may provide instances of the subtype instead of the DataType. Clients should not make any assumptions about any other semantic with that information. For example, it might not be possible to cast a value of one data type to its base data type. Servers need not provide HasSubtype References, even if their DataTypes span a type hierarchy. Some restrictions apply for subtyping enumeration DataTypes as defined in 8.14. [6.3 Subtyping of ObjectTypes and VariableTypes](https://reference.opcfoundation.org/v104/Core/docs/Part3/6.3.1/) The HasSubtype ReferenceType defines subtypes of types. Subtyping can only occur between Nodes of the same NodeClass. Rules for subtyping ReferenceTypes are described in 5.3.3.3. There is no common definition for subtyping DataTypes, as described in 5.8.3. The remainder of 6.3 specify subtyping rules for single inheritance on ObjectTypes and VariableTypes. Subtypes inherit the parent type’s Attribute values, except for the NodeId. Inherited Attribute values may be overridden by the subtype, the BrowseName and DisplayName values should be overridden. Special rules apply for some Attributes of VariableTypes as defined in 6.2.7. Optional Attributes, not provided by the parent type, may be added to the subtype. As long as those InstanceDeclarations are not overridden they are not referenced by the subtype. InstanceDeclarations can be overridden by adding References, changing References to reference different Nodes, changing References to be subtypes of the original ReferenceType, changing values of the Attributes or adding optional Attributes. In order to get the full information about a subtype, the inherited InstanceDeclarations have to be collected from all types that can be found by recursively following the inverse HasSubtype References from the subtype. This collection of InstanceDeclarations is called the fully-inherited InstanceDeclarationHierarchy of a subtype. As long as those InstanceDeclarations are not overridden they are not referenced by the subtype. InstanceDeclarations can be overridden by adding References, changing References to reference different Nodes, changing References to be subtypes of the original ReferenceType, changing values of the Attributes or adding optional Attributes. In order to get the full information about a subtype, the inherited InstanceDeclarations have to be collected from all types that can be found by recursively following the inverse HasSubtype References from the subtype. This collection of InstanceDeclarations is called the fully-inherited InstanceDeclarationHierarchy of a subtype. - [P4 5.8.4 TranslateBrowsePathsToNodeIds](https://reference.opcfoundation.org/v104/Core/docs/Part4/5.8.4/) - [Postół M. (2016) OPC UA Address Space Interchange XML; Technical Report; DOI: 10.13140/RG.2.2.12228.37768][InterchangeXML] - [OPC Unified Architecture Specification Part 6: Mappings, OPC Foundation, Rel. 1.04, 2017-11-22][OPC.UA.Part6] [InterchangeXML]: https://www.researchgate.net/publication/334259707_OPC_UA_Address_Space_Interchange_XML [Opc.UA.Part6]:https://opcfoundation.org/developer-tools/specifications-unified-architecture/part-6-mappings/ [InterchangeXML]: https://www.researchgate.net/publication/334259707_OPC_UA_Address_Space_Interchange_XML ================================================ FILE: SemanticData.playlist ================================================ ================================================ FILE: TableOfContent.md ================================================ # Table of Content * [Executive Summary](README.MD) ## Introduction * [Introduction to Object-Oriented Internet](Preface.md) * [Introduction to Complex Data Processing](Introduction2ComplexDataProcessing.md) * [OPC Unified Architecture](OPCUnifiedArchitecture.md) * [OPC UA Main Technology Features](OPCUAMainTechnologyFeatures.md) ## Semantic-Data Processing * [Semantic-Data Processing Architecture](SemanticData/README.MD) * [Address Space and Address Space Model](SemanticData/AddressSpaceAddressSpaceModel.md) * [UA Information Model - Concept](SemanticData/InformationModelConcept.md) * [Standard Information Model](SemanticData/StandardInformationModel.md) * [Information Models Development](SemanticData/InformationModelsDevelopment.md) * [Adopting Companion Standard Models - Analyzer Devices Integration](SemanticData/AdoptingCompanionStandardADI.md) * [Companion Specification - Information Model for Analyzers](SemanticData/CompanionSpecificationInformationModelFforAnalyzers.md) * [ADI Information Model Adoption](SemanticData/ADIInformationModelAdoption.md) * [ADI Model Deployment](SemanticData/ADIModelDeployment.md) * [Address Space Model Life-cycle](SemanticData/InformationModelLifecycle.md) * [Design and Deployment Support](SemanticData/DesignDeploymentSupport.md) * [`Address Space Management` Implementation](SemanticData/UANodeSetValidation/README.MD) * [Address Space Prototyping Tool (asp.exe)](SemanticData/AddressSpaceComplianceTestTool/README.md) * [`UAModelDesignExport` Library](SemanticData/UAModelDesignExport/README.md) ## Internet of Things (IoT) Archetype * [Semantic-Data Message Centric Communication](Networking/README.MessageCentricCommunication.md) * [Internet of Things (IoT) Communication](Networking/README.MD) ## Reactive Communication * [UA Part 14: PubSub Main Technology Features](Networking/SemanticData/README.PubSubMTF.md) * [Reactive Networking of Semantic-Data Library](Networking/SemanticData/README.MD) * [Underlying Transport over UDP](Networking/UDPMessageHandler/README.md) * [Underlying Transport over MQTT](Networking/SemanticData/README_MQTTMapping.md) * [Underlying Transport over AMQP](Networking/SemanticData/README_AMQPMapping.md) * [Underlying Transport over Ethernet](Networking/SemanticData/README_EthernetMapping.md) * [DataSet and Communication Channel Association](Networking/SemanticData/READMEDataDiscoveryAndBinding.md) * [Encoding Library](Networking/Encoding/README.md) * [Getting Started Tutorial](Networking/SemanticData/READMEGettingStartedTutorial.md) * [Walk-through `ReferenceApplication`](Networking/ReferenceApplication/README.MD) * [`ReferenceApplication` Utilities](Networking/ReferenceApplication.Core/README.md) * [Azure Gateway DataRepository](Networking/DataRepository/AzureGateway/README.md) * [`ReferenceApplication` Consumer - Data Logger](Networking/DataRepository/DataLogger/README.md) * [`ReferenceApplication` Producer - Interoperability Test Data Generator](Networking/SimulatorInteroperabilityTest/README.md) * [`ReferenceApplication` Producer - Boilers Set Simulator](Networking/Simulator.Boiler/README.md) ## Configuration * [Configuration - Executive Summary](Configuration/README.md) * [Reactive Networking (RxNetworking) Configuration](Configuration/Networking/README.MD) * [DataBinding library](Configuration/DataBindings/README.MD) ## Global Data Discovery * [Concept](DataDiscovery/README.MD) * [Domain Model](DataDiscovery/DomainModel.md) ## References * [See also](REFERENCES.md) ================================================ FILE: UAObjectOrientedInternet.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 16 VisualStudioVersion = 16.0.31829.152 MinimumVisualStudioVersion = 10.0.40219.1 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "CommonResources", "CommonResources", "{78EDB72A-77B1-4A64-8E76-17E780993017}" ProjectSection(SolutionItems) = preProject CommonResources\README.MD = CommonResources\README.MD EndProjectSection EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "T4Definitions", "CommonResources\T4Definitions\T4Definitions.csproj", "{DDE02168-1EAD-41D9-B5E6-FB101F98AC24}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Configuration", "Configuration", "{2148B4AF-8B02-45C3-89E7-AEACAE448DDA}" ProjectSection(SolutionItems) = preProject Configuration\README.md = Configuration\README.md EndProjectSection EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{B58E5262-0DEA-4096-8409-7B118711D8DF}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Configuration.DataBindings", "Configuration\DataBindings\Configuration.DataBindings.csproj", "{F8DB9567-C559-440C-BBCF-E02013F9AB94}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Configuration.DataBindings.UnitTest", "Configuration\Tests\DataBindingsUnitTest\Configuration.DataBindings.UnitTest.csproj", "{71D956E4-1AE6-4EF8-BC18-A195A68AFAB5}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Common", "Common", "{6F7A6A18-FF7B-4D3B-8B1F-BD525E065174}" ProjectSection(SolutionItems) = preProject Common\README.md = Common\README.md EndProjectSection EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Common.Infrastructure.UnitTest", "Common\Tests\InfrastructureUnitTest\Common.Infrastructure.UnitTest.csproj", "{C5F00673-1BDE-45A7-826B-C7E8F517398C}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Common.Infrastructure", "Common\Infrastructure\Common.Infrastructure.csproj", "{8817A671-ABB8-463A-A8A3-DDCFE781A6B6}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Configuration.Networking.Upgrade.UnitTest", "Configuration\Tests\NetworkingUpgradeUnitTest\Configuration.Networking.Upgrade.UnitTest.csproj", "{F2ED1AC0-2F78-4506-ADFD-0BC88A6C616D}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Configuration.Networking.Upgrade", "Configuration\NetworkingUpgrade\Configuration.Networking.Upgrade.csproj", "{BEBE131A-C931-4C2C-9F9E-ED0D0B75DF26}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Networking", "Networking", "{F4178F51-3BFF-46DE-841D-C01D4ABA9B0C}" ProjectSection(SolutionItems) = preProject Networking\README.MD = Networking\README.MD Networking\README.MessageCentricCommunication.md = Networking\README.MessageCentricCommunication.md EndProjectSection EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{19A61D68-0ECA-4093-AEE5-370BC3CE777C}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SemanticData", "SemanticData", "{AF01F501-9B19-4357-B8A7-4EFC782BF1AF}" ProjectSection(SolutionItems) = preProject SemanticData\AddressSpaceAddressSpaceModel.md = SemanticData\AddressSpaceAddressSpaceModel.md SemanticData\ADIInformationModelAdoption.md = SemanticData\ADIInformationModelAdoption.md SemanticData\ADIModelDeployment.md = SemanticData\ADIModelDeployment.md SemanticData\AdoptingCompanionStandardADI.md = SemanticData\AdoptingCompanionStandardADI.md SemanticData\CompanionSpecificationInformationModelFforAnalyzers.md = SemanticData\CompanionSpecificationInformationModelFforAnalyzers.md SemanticData\DesignDeploymentSupport.md = SemanticData\DesignDeploymentSupport.md SemanticData\InformationModelConcept.md = SemanticData\InformationModelConcept.md SemanticData\InformationModelLifecycle.md = SemanticData\InformationModelLifecycle.md SemanticData\InformationModelsDevelopment.md = SemanticData\InformationModelsDevelopment.md SemanticData\InformationProcessing.md = SemanticData\InformationProcessing.md SemanticData\README.MD = SemanticData\README.MD SemanticData\StandardInformationModel.md = SemanticData\StandardInformationModel.md EndProjectSection EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Configuration.Networking", "Configuration\Networking\Configuration.Networking.csproj", "{E28E0880-03AA-4D1B-A820-41B04E766019}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Configuration.Networking.UnitTest", "Configuration\Tests\NetworkingUnitTest\Configuration.Networking.UnitTest.csproj", "{81DDD889-3223-4F24-8B65-DD5C57886994}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Networking.SemanticData", "Networking\SemanticData\Networking.SemanticData.csproj", "{7F4DED4E-5933-4229-B9CC-51DA49678904}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Networking.ReferenceApplication", "Networking\ReferenceApplication\Networking.ReferenceApplication.csproj", "{F0ACCB28-AE0D-4E19-94FA-7BE3044F1EEB}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Networking.SemanticData.UnitTest", "Networking\Tests\SemanticDatalUnitTest\Networking.SemanticData.UnitTest.csproj", "{F7C29437-0923-449C-B4E9-36653A55C3E5}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Networking.ReferenceApplication.UnitTest", "Networking\Tests\ReferenceApplicationUnitTest\Networking.ReferenceApplication.UnitTest.csproj", "{ED278519-D497-47AE-8EB1-5826904AF6B1}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "DataDiscovery", "DataDiscovery", "{069B930C-EF5B-4943-AA82-0F56C33CF3DD}" ProjectSection(SolutionItems) = preProject DataDiscovery\DomainModel.md = DataDiscovery\DomainModel.md DataDiscovery\ProjectDescription.md = DataDiscovery\ProjectDescription.md DataDiscovery\Readme.md = DataDiscovery\Readme.md EndProjectSection EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DataDiscovery.DiscoveryServices", "DataDiscovery\DiscoveryServices\DataDiscovery.DiscoveryServices.csproj", "{DD1A7EC2-FF25-4D35-9D0A-5BB626E61D17}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DataDiscovery.DiscoveryServices.UnitTest", "DataDiscovery\Tests\DiscoveryServices.UnitTest\DataDiscovery.DiscoveryServices.UnitTest.csproj", "{591B6DB0-0D22-4E58-AA29-4EB10C0EAFFE}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Networking.UDPMessageHandler", "Networking\UDPMessageHandler\Networking.UDPMessageHandler.csproj", "{D2EB89F9-321E-46E4-BA79-679138B82B23}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Networking.UDPMessageHandler.UnitTest", "Networking\Tests\UDPMessageHandler.UnitTest\Networking.UDPMessageHandler.UnitTest.csproj", "{ECF931DE-F5F3-4752-AA1B-847F7ED414D1}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SemanticData.InformationModelFactory", "SemanticData\InformationModelFactory\SemanticData.InformationModelFactory.csproj", "{6D20785D-0451-46A9-9AC2-EC66B7C0D18A}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SemanticData.UANodeSetValidation", "SemanticData\UANodeSetValidation\SemanticData.UANodeSetValidation.csproj", "{352378A0-8B2E-4679-BB44-FD0BCC8467D9}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SemanticData.AddressSpaceComplianceTestTool", "SemanticData\AddressSpaceComplianceTestTool\SemanticData.AddressSpaceComplianceTestTool.csproj", "{05DB9E60-B12B-4AA3-8A7C-514F87CFF464}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SemanticData.AddressSpaceComplianceTestTool.UnitTests", "SemanticData\Tests\AddressSpaceComplianceTestToolUnitTests\SemanticData.AddressSpaceComplianceTestTool.UnitTests.csproj", "{37D26B63-74FE-45C6-9F61-251BDF69EDF7}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SemanticData.UANodeSetValidation.UnitTest", "SemanticData\Tests\USNodeSetValidationUnitTestProject\SemanticData.UANodeSetValidation.UnitTest.csproj", "{2DC898B5-AFD9-47B2-A962-C4002C1AE8FF}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Networking.Encoding", "Networking\Encoding\Networking.Encoding.csproj", "{2492AA3B-CF67-477A-B29E-14A1E348B939}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Networking.SimulatorInteroperabilityTest", "Networking\SimulatorInteroperabilityTest\Networking.SimulatorInteroperabilityTest.csproj", "{5D2A0688-95E3-400A-B789-49052389D2B1}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Networking.ReferenceApplication.Core", "Networking\ReferenceApplication.Core\Networking.ReferenceApplication.Core.csproj", "{2238851E-4DB8-46B0-B38D-0E2315FE153E}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Networking.SimulatorInteroperabilityTest.UnitTest", "Networking\Tests\Networking.SimulatorInteroperabilityTest.UnitTest\Networking.SimulatorInteroperabilityTest.UnitTest.csproj", "{3BF22621-2E78-4F60-B7C9-7C61D1F440BA}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Configuration.Core", "Configuration\Core\Configuration.Core.csproj", "{0A2FB856-D50C-463D-8218-063A36942188}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Networking.Simulator.Boiler", "Networking\Simulator.Boiler\Networking.Simulator.Boiler.csproj", "{3CE5CCA6-0EAD-49EF-AB69-D1F17A9C6D43}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Networking.Simulator.Boiler.UnitTest", "Networking\Tests\Networking.Simulator.Boiler.Unit\Networking.Simulator.Boiler.UnitTest.csproj", "{F0B59A0A-90DA-41D3-8BAD-96B1F266DB6F}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Networking.Core", "Networking\Core\Networking.Core.csproj", "{AFCCA7C9-47FE-4FB6-935E-12D686EEC58F}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".Solution Items", ".Solution Items", "{606ADC64-90A1-4355-BEAB-6B04717F598C}" ProjectSection(SolutionItems) = preProject CONTRIBUTING.md = CONTRIBUTING.md COVERPAGE.md = COVERPAGE.md Introduction2ComplexDataProcessing.md = Introduction2ComplexDataProcessing.md OPCUAMainTechnologyFeatures.md = OPCUAMainTechnologyFeatures.md OPCUnifiedArchitecture.md = OPCUnifiedArchitecture.md Preface.md = Preface.md README.MD = README.MD REFERENCES.md = REFERENCES.md SUMMARY.md = SUMMARY.md TableOfContent.md = TableOfContent.md EndProjectSection EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SemanticData.UAModelDesignExport", "SemanticData\UAModelDesignExport\SemanticData.UAModelDesignExport.csproj", "{C970C14C-98AA-48A9-9F6F-D00C92FA6CEF}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SemanticData.UAModelDesignExport.UnitTest", "SemanticData\UAModelDesignExport.UnitTest\SemanticData.UAModelDesignExport.UnitTest.csproj", "{ABB9D4E2-568C-483E-8A77-2DE5F4FF886A}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SemanticData.BuildingErrorsHandling", "SemanticData\BuildingErrorsHandling\SemanticData.BuildingErrorsHandling.csproj", "{9CA2F05B-FB18-49AD-8520-1BCC838F748C}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ISSUE_TEMPLATE", "ISSUE_TEMPLATE", "{5C2EB20B-990C-4444-8C5F-F1D9641DE28D}" ProjectSection(SolutionItems) = preProject .github\ISSUE_TEMPLATE\bug_report.md = .github\ISSUE_TEMPLATE\bug_report.md .github\ISSUE_TEMPLATE\custom.md = .github\ISSUE_TEMPLATE\custom.md .github\ISSUE_TEMPLATE\feature_request.md = .github\ISSUE_TEMPLATE\feature_request.md ISSUE_TEMPLATE.md = ISSUE_TEMPLATE.md .github\ISSUE_TEMPLATE\PrepareReleaseTask.md = .github\ISSUE_TEMPLATE\PrepareReleaseTask.md EndProjectSection EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Networking.DataRepository.AzureGateway", "Networking\DataRepository\AzureGateway\Networking.DataRepository.AzureGateway.csproj", "{3F5CBB26-9142-4E55-8DE5-5BAF0C3EA1CE}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "DataRepository", "DataRepository", "{20139208-1830-4DF2-A158-0C505DC05DF7}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Networking.DataRepository.AzureGatewayUnitTest", "Networking\DataRepository\AzureGatewayUnitTest\Networking.DataRepository.AzureGatewayUnitTest.csproj", "{F7FDDDCC-58C7-44E0-8DE3-6A94E6222D03}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Networking.DataLogger", "Networking\DataRepository\DataLogger\Networking.DataLogger.csproj", "{3781B8CA-3128-45DC-89C9-981740357630}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Networking.DataLogger.UnitTest", "Networking\DataRepository\DataLogger.UnitTest\Networking.DataLogger.UnitTest.csproj", "{45BE72F2-3F5B-4D13-B931-0CA62F404D4C}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SemanticData..SolutionConfiguration", "SemanticData\SolutionConfiguration\SemanticData..SolutionConfiguration.csproj", "{F0A5F968-A9E6-4B81-B5BB-DC05999467BA}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {DDE02168-1EAD-41D9-B5E6-FB101F98AC24}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {DDE02168-1EAD-41D9-B5E6-FB101F98AC24}.Debug|Any CPU.Build.0 = Debug|Any CPU {DDE02168-1EAD-41D9-B5E6-FB101F98AC24}.Release|Any CPU.ActiveCfg = Release|Any CPU {F8DB9567-C559-440C-BBCF-E02013F9AB94}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F8DB9567-C559-440C-BBCF-E02013F9AB94}.Debug|Any CPU.Build.0 = Debug|Any CPU {F8DB9567-C559-440C-BBCF-E02013F9AB94}.Release|Any CPU.ActiveCfg = Release|Any CPU {F8DB9567-C559-440C-BBCF-E02013F9AB94}.Release|Any CPU.Build.0 = Release|Any CPU {71D956E4-1AE6-4EF8-BC18-A195A68AFAB5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {71D956E4-1AE6-4EF8-BC18-A195A68AFAB5}.Debug|Any CPU.Build.0 = Debug|Any CPU {71D956E4-1AE6-4EF8-BC18-A195A68AFAB5}.Release|Any CPU.ActiveCfg = Release|Any CPU {C5F00673-1BDE-45A7-826B-C7E8F517398C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C5F00673-1BDE-45A7-826B-C7E8F517398C}.Debug|Any CPU.Build.0 = Debug|Any CPU {C5F00673-1BDE-45A7-826B-C7E8F517398C}.Release|Any CPU.ActiveCfg = Release|Any CPU {8817A671-ABB8-463A-A8A3-DDCFE781A6B6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {8817A671-ABB8-463A-A8A3-DDCFE781A6B6}.Debug|Any CPU.Build.0 = Debug|Any CPU {8817A671-ABB8-463A-A8A3-DDCFE781A6B6}.Release|Any CPU.ActiveCfg = Release|Any CPU {8817A671-ABB8-463A-A8A3-DDCFE781A6B6}.Release|Any CPU.Build.0 = Release|Any CPU {F2ED1AC0-2F78-4506-ADFD-0BC88A6C616D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F2ED1AC0-2F78-4506-ADFD-0BC88A6C616D}.Debug|Any CPU.Build.0 = Debug|Any CPU {F2ED1AC0-2F78-4506-ADFD-0BC88A6C616D}.Release|Any CPU.ActiveCfg = Release|Any CPU {BEBE131A-C931-4C2C-9F9E-ED0D0B75DF26}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {BEBE131A-C931-4C2C-9F9E-ED0D0B75DF26}.Debug|Any CPU.Build.0 = Debug|Any CPU {BEBE131A-C931-4C2C-9F9E-ED0D0B75DF26}.Release|Any CPU.ActiveCfg = Release|Any CPU {BEBE131A-C931-4C2C-9F9E-ED0D0B75DF26}.Release|Any CPU.Build.0 = Release|Any CPU {E28E0880-03AA-4D1B-A820-41B04E766019}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {E28E0880-03AA-4D1B-A820-41B04E766019}.Debug|Any CPU.Build.0 = Debug|Any CPU {E28E0880-03AA-4D1B-A820-41B04E766019}.Release|Any CPU.ActiveCfg = Release|Any CPU {E28E0880-03AA-4D1B-A820-41B04E766019}.Release|Any CPU.Build.0 = Release|Any CPU {81DDD889-3223-4F24-8B65-DD5C57886994}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {81DDD889-3223-4F24-8B65-DD5C57886994}.Debug|Any CPU.Build.0 = Debug|Any CPU {81DDD889-3223-4F24-8B65-DD5C57886994}.Release|Any CPU.ActiveCfg = Release|Any CPU {7F4DED4E-5933-4229-B9CC-51DA49678904}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {7F4DED4E-5933-4229-B9CC-51DA49678904}.Debug|Any CPU.Build.0 = Debug|Any CPU {7F4DED4E-5933-4229-B9CC-51DA49678904}.Release|Any CPU.ActiveCfg = Release|Any CPU {7F4DED4E-5933-4229-B9CC-51DA49678904}.Release|Any CPU.Build.0 = Release|Any CPU {F0ACCB28-AE0D-4E19-94FA-7BE3044F1EEB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F0ACCB28-AE0D-4E19-94FA-7BE3044F1EEB}.Debug|Any CPU.Build.0 = Debug|Any CPU {F0ACCB28-AE0D-4E19-94FA-7BE3044F1EEB}.Release|Any CPU.ActiveCfg = Release|Any CPU {F0ACCB28-AE0D-4E19-94FA-7BE3044F1EEB}.Release|Any CPU.Build.0 = Release|Any CPU {F7C29437-0923-449C-B4E9-36653A55C3E5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F7C29437-0923-449C-B4E9-36653A55C3E5}.Debug|Any CPU.Build.0 = Debug|Any CPU {F7C29437-0923-449C-B4E9-36653A55C3E5}.Release|Any CPU.ActiveCfg = Release|Any CPU {ED278519-D497-47AE-8EB1-5826904AF6B1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {ED278519-D497-47AE-8EB1-5826904AF6B1}.Debug|Any CPU.Build.0 = Debug|Any CPU {ED278519-D497-47AE-8EB1-5826904AF6B1}.Release|Any CPU.ActiveCfg = Debug|Any CPU {DD1A7EC2-FF25-4D35-9D0A-5BB626E61D17}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {DD1A7EC2-FF25-4D35-9D0A-5BB626E61D17}.Debug|Any CPU.Build.0 = Debug|Any CPU {DD1A7EC2-FF25-4D35-9D0A-5BB626E61D17}.Release|Any CPU.ActiveCfg = Release|Any CPU {DD1A7EC2-FF25-4D35-9D0A-5BB626E61D17}.Release|Any CPU.Build.0 = Release|Any CPU {591B6DB0-0D22-4E58-AA29-4EB10C0EAFFE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {591B6DB0-0D22-4E58-AA29-4EB10C0EAFFE}.Debug|Any CPU.Build.0 = Debug|Any CPU {591B6DB0-0D22-4E58-AA29-4EB10C0EAFFE}.Release|Any CPU.ActiveCfg = Release|Any CPU {D2EB89F9-321E-46E4-BA79-679138B82B23}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D2EB89F9-321E-46E4-BA79-679138B82B23}.Debug|Any CPU.Build.0 = Debug|Any CPU {D2EB89F9-321E-46E4-BA79-679138B82B23}.Release|Any CPU.ActiveCfg = Release|Any CPU {D2EB89F9-321E-46E4-BA79-679138B82B23}.Release|Any CPU.Build.0 = Release|Any CPU {ECF931DE-F5F3-4752-AA1B-847F7ED414D1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {ECF931DE-F5F3-4752-AA1B-847F7ED414D1}.Debug|Any CPU.Build.0 = Debug|Any CPU {ECF931DE-F5F3-4752-AA1B-847F7ED414D1}.Release|Any CPU.ActiveCfg = Release|Any CPU {ECF931DE-F5F3-4752-AA1B-847F7ED414D1}.Release|Any CPU.Build.0 = Release|Any CPU {6D20785D-0451-46A9-9AC2-EC66B7C0D18A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6D20785D-0451-46A9-9AC2-EC66B7C0D18A}.Debug|Any CPU.Build.0 = Debug|Any CPU {6D20785D-0451-46A9-9AC2-EC66B7C0D18A}.Release|Any CPU.ActiveCfg = Release|Any CPU {6D20785D-0451-46A9-9AC2-EC66B7C0D18A}.Release|Any CPU.Build.0 = Release|Any CPU {352378A0-8B2E-4679-BB44-FD0BCC8467D9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {352378A0-8B2E-4679-BB44-FD0BCC8467D9}.Debug|Any CPU.Build.0 = Debug|Any CPU {352378A0-8B2E-4679-BB44-FD0BCC8467D9}.Release|Any CPU.ActiveCfg = Release|Any CPU {352378A0-8B2E-4679-BB44-FD0BCC8467D9}.Release|Any CPU.Build.0 = Release|Any CPU {05DB9E60-B12B-4AA3-8A7C-514F87CFF464}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {05DB9E60-B12B-4AA3-8A7C-514F87CFF464}.Debug|Any CPU.Build.0 = Debug|Any CPU {05DB9E60-B12B-4AA3-8A7C-514F87CFF464}.Release|Any CPU.ActiveCfg = Release|Any CPU {05DB9E60-B12B-4AA3-8A7C-514F87CFF464}.Release|Any CPU.Build.0 = Release|Any CPU {37D26B63-74FE-45C6-9F61-251BDF69EDF7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {37D26B63-74FE-45C6-9F61-251BDF69EDF7}.Debug|Any CPU.Build.0 = Debug|Any CPU {37D26B63-74FE-45C6-9F61-251BDF69EDF7}.Release|Any CPU.ActiveCfg = Release|Any CPU {2DC898B5-AFD9-47B2-A962-C4002C1AE8FF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {2DC898B5-AFD9-47B2-A962-C4002C1AE8FF}.Debug|Any CPU.Build.0 = Debug|Any CPU {2DC898B5-AFD9-47B2-A962-C4002C1AE8FF}.Release|Any CPU.ActiveCfg = Release|Any CPU {2492AA3B-CF67-477A-B29E-14A1E348B939}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {2492AA3B-CF67-477A-B29E-14A1E348B939}.Debug|Any CPU.Build.0 = Debug|Any CPU {2492AA3B-CF67-477A-B29E-14A1E348B939}.Release|Any CPU.ActiveCfg = Release|Any CPU {2492AA3B-CF67-477A-B29E-14A1E348B939}.Release|Any CPU.Build.0 = Release|Any CPU {5D2A0688-95E3-400A-B789-49052389D2B1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {5D2A0688-95E3-400A-B789-49052389D2B1}.Debug|Any CPU.Build.0 = Debug|Any CPU {5D2A0688-95E3-400A-B789-49052389D2B1}.Release|Any CPU.ActiveCfg = Release|Any CPU {2238851E-4DB8-46B0-B38D-0E2315FE153E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {2238851E-4DB8-46B0-B38D-0E2315FE153E}.Debug|Any CPU.Build.0 = Debug|Any CPU {2238851E-4DB8-46B0-B38D-0E2315FE153E}.Release|Any CPU.ActiveCfg = Release|Any CPU {2238851E-4DB8-46B0-B38D-0E2315FE153E}.Release|Any CPU.Build.0 = Release|Any CPU {3BF22621-2E78-4F60-B7C9-7C61D1F440BA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {3BF22621-2E78-4F60-B7C9-7C61D1F440BA}.Debug|Any CPU.Build.0 = Debug|Any CPU {3BF22621-2E78-4F60-B7C9-7C61D1F440BA}.Release|Any CPU.ActiveCfg = Release|Any CPU {0A2FB856-D50C-463D-8218-063A36942188}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {0A2FB856-D50C-463D-8218-063A36942188}.Debug|Any CPU.Build.0 = Debug|Any CPU {0A2FB856-D50C-463D-8218-063A36942188}.Release|Any CPU.ActiveCfg = Release|Any CPU {0A2FB856-D50C-463D-8218-063A36942188}.Release|Any CPU.Build.0 = Release|Any CPU {3CE5CCA6-0EAD-49EF-AB69-D1F17A9C6D43}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {3CE5CCA6-0EAD-49EF-AB69-D1F17A9C6D43}.Debug|Any CPU.Build.0 = Debug|Any CPU {3CE5CCA6-0EAD-49EF-AB69-D1F17A9C6D43}.Release|Any CPU.ActiveCfg = Release|Any CPU {3CE5CCA6-0EAD-49EF-AB69-D1F17A9C6D43}.Release|Any CPU.Build.0 = Release|Any CPU {F0B59A0A-90DA-41D3-8BAD-96B1F266DB6F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F0B59A0A-90DA-41D3-8BAD-96B1F266DB6F}.Debug|Any CPU.Build.0 = Debug|Any CPU {F0B59A0A-90DA-41D3-8BAD-96B1F266DB6F}.Release|Any CPU.ActiveCfg = Release|Any CPU {AFCCA7C9-47FE-4FB6-935E-12D686EEC58F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {AFCCA7C9-47FE-4FB6-935E-12D686EEC58F}.Debug|Any CPU.Build.0 = Debug|Any CPU {AFCCA7C9-47FE-4FB6-935E-12D686EEC58F}.Release|Any CPU.ActiveCfg = Release|Any CPU {AFCCA7C9-47FE-4FB6-935E-12D686EEC58F}.Release|Any CPU.Build.0 = Release|Any CPU {C970C14C-98AA-48A9-9F6F-D00C92FA6CEF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C970C14C-98AA-48A9-9F6F-D00C92FA6CEF}.Debug|Any CPU.Build.0 = Debug|Any CPU {C970C14C-98AA-48A9-9F6F-D00C92FA6CEF}.Release|Any CPU.ActiveCfg = Release|Any CPU {C970C14C-98AA-48A9-9F6F-D00C92FA6CEF}.Release|Any CPU.Build.0 = Release|Any CPU {ABB9D4E2-568C-483E-8A77-2DE5F4FF886A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {ABB9D4E2-568C-483E-8A77-2DE5F4FF886A}.Debug|Any CPU.Build.0 = Debug|Any CPU {ABB9D4E2-568C-483E-8A77-2DE5F4FF886A}.Release|Any CPU.ActiveCfg = Release|Any CPU {9CA2F05B-FB18-49AD-8520-1BCC838F748C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {9CA2F05B-FB18-49AD-8520-1BCC838F748C}.Debug|Any CPU.Build.0 = Debug|Any CPU {9CA2F05B-FB18-49AD-8520-1BCC838F748C}.Release|Any CPU.ActiveCfg = Release|Any CPU {9CA2F05B-FB18-49AD-8520-1BCC838F748C}.Release|Any CPU.Build.0 = Release|Any CPU {3F5CBB26-9142-4E55-8DE5-5BAF0C3EA1CE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {3F5CBB26-9142-4E55-8DE5-5BAF0C3EA1CE}.Debug|Any CPU.Build.0 = Debug|Any CPU {3F5CBB26-9142-4E55-8DE5-5BAF0C3EA1CE}.Release|Any CPU.ActiveCfg = Release|Any CPU {3F5CBB26-9142-4E55-8DE5-5BAF0C3EA1CE}.Release|Any CPU.Build.0 = Release|Any CPU {F7FDDDCC-58C7-44E0-8DE3-6A94E6222D03}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F7FDDDCC-58C7-44E0-8DE3-6A94E6222D03}.Debug|Any CPU.Build.0 = Debug|Any CPU {F7FDDDCC-58C7-44E0-8DE3-6A94E6222D03}.Release|Any CPU.ActiveCfg = Release|Any CPU {3781B8CA-3128-45DC-89C9-981740357630}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {3781B8CA-3128-45DC-89C9-981740357630}.Debug|Any CPU.Build.0 = Debug|Any CPU {3781B8CA-3128-45DC-89C9-981740357630}.Release|Any CPU.ActiveCfg = Release|Any CPU {3781B8CA-3128-45DC-89C9-981740357630}.Release|Any CPU.Build.0 = Release|Any CPU {45BE72F2-3F5B-4D13-B931-0CA62F404D4C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {45BE72F2-3F5B-4D13-B931-0CA62F404D4C}.Debug|Any CPU.Build.0 = Debug|Any CPU {45BE72F2-3F5B-4D13-B931-0CA62F404D4C}.Release|Any CPU.ActiveCfg = Release|Any CPU {45BE72F2-3F5B-4D13-B931-0CA62F404D4C}.Release|Any CPU.Build.0 = Release|Any CPU {F0A5F968-A9E6-4B81-B5BB-DC05999467BA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F0A5F968-A9E6-4B81-B5BB-DC05999467BA}.Debug|Any CPU.Build.0 = Debug|Any CPU {F0A5F968-A9E6-4B81-B5BB-DC05999467BA}.Release|Any CPU.ActiveCfg = Release|Any CPU {F0A5F968-A9E6-4B81-B5BB-DC05999467BA}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(NestedProjects) = preSolution {DDE02168-1EAD-41D9-B5E6-FB101F98AC24} = {78EDB72A-77B1-4A64-8E76-17E780993017} {B58E5262-0DEA-4096-8409-7B118711D8DF} = {2148B4AF-8B02-45C3-89E7-AEACAE448DDA} {F8DB9567-C559-440C-BBCF-E02013F9AB94} = {2148B4AF-8B02-45C3-89E7-AEACAE448DDA} {71D956E4-1AE6-4EF8-BC18-A195A68AFAB5} = {B58E5262-0DEA-4096-8409-7B118711D8DF} {C5F00673-1BDE-45A7-826B-C7E8F517398C} = {6F7A6A18-FF7B-4D3B-8B1F-BD525E065174} {8817A671-ABB8-463A-A8A3-DDCFE781A6B6} = {6F7A6A18-FF7B-4D3B-8B1F-BD525E065174} {F2ED1AC0-2F78-4506-ADFD-0BC88A6C616D} = {B58E5262-0DEA-4096-8409-7B118711D8DF} {BEBE131A-C931-4C2C-9F9E-ED0D0B75DF26} = {2148B4AF-8B02-45C3-89E7-AEACAE448DDA} {19A61D68-0ECA-4093-AEE5-370BC3CE777C} = {F4178F51-3BFF-46DE-841D-C01D4ABA9B0C} {E28E0880-03AA-4D1B-A820-41B04E766019} = {2148B4AF-8B02-45C3-89E7-AEACAE448DDA} {81DDD889-3223-4F24-8B65-DD5C57886994} = {B58E5262-0DEA-4096-8409-7B118711D8DF} {7F4DED4E-5933-4229-B9CC-51DA49678904} = {F4178F51-3BFF-46DE-841D-C01D4ABA9B0C} {F0ACCB28-AE0D-4E19-94FA-7BE3044F1EEB} = {F4178F51-3BFF-46DE-841D-C01D4ABA9B0C} {F7C29437-0923-449C-B4E9-36653A55C3E5} = {19A61D68-0ECA-4093-AEE5-370BC3CE777C} {ED278519-D497-47AE-8EB1-5826904AF6B1} = {19A61D68-0ECA-4093-AEE5-370BC3CE777C} {DD1A7EC2-FF25-4D35-9D0A-5BB626E61D17} = {069B930C-EF5B-4943-AA82-0F56C33CF3DD} {591B6DB0-0D22-4E58-AA29-4EB10C0EAFFE} = {069B930C-EF5B-4943-AA82-0F56C33CF3DD} {D2EB89F9-321E-46E4-BA79-679138B82B23} = {F4178F51-3BFF-46DE-841D-C01D4ABA9B0C} {ECF931DE-F5F3-4752-AA1B-847F7ED414D1} = {19A61D68-0ECA-4093-AEE5-370BC3CE777C} {6D20785D-0451-46A9-9AC2-EC66B7C0D18A} = {AF01F501-9B19-4357-B8A7-4EFC782BF1AF} {352378A0-8B2E-4679-BB44-FD0BCC8467D9} = {AF01F501-9B19-4357-B8A7-4EFC782BF1AF} {05DB9E60-B12B-4AA3-8A7C-514F87CFF464} = {AF01F501-9B19-4357-B8A7-4EFC782BF1AF} {37D26B63-74FE-45C6-9F61-251BDF69EDF7} = {AF01F501-9B19-4357-B8A7-4EFC782BF1AF} {2DC898B5-AFD9-47B2-A962-C4002C1AE8FF} = {AF01F501-9B19-4357-B8A7-4EFC782BF1AF} {2492AA3B-CF67-477A-B29E-14A1E348B939} = {F4178F51-3BFF-46DE-841D-C01D4ABA9B0C} {5D2A0688-95E3-400A-B789-49052389D2B1} = {F4178F51-3BFF-46DE-841D-C01D4ABA9B0C} {2238851E-4DB8-46B0-B38D-0E2315FE153E} = {F4178F51-3BFF-46DE-841D-C01D4ABA9B0C} {3BF22621-2E78-4F60-B7C9-7C61D1F440BA} = {19A61D68-0ECA-4093-AEE5-370BC3CE777C} {0A2FB856-D50C-463D-8218-063A36942188} = {2148B4AF-8B02-45C3-89E7-AEACAE448DDA} {3CE5CCA6-0EAD-49EF-AB69-D1F17A9C6D43} = {F4178F51-3BFF-46DE-841D-C01D4ABA9B0C} {F0B59A0A-90DA-41D3-8BAD-96B1F266DB6F} = {19A61D68-0ECA-4093-AEE5-370BC3CE777C} {AFCCA7C9-47FE-4FB6-935E-12D686EEC58F} = {F4178F51-3BFF-46DE-841D-C01D4ABA9B0C} {C970C14C-98AA-48A9-9F6F-D00C92FA6CEF} = {AF01F501-9B19-4357-B8A7-4EFC782BF1AF} {ABB9D4E2-568C-483E-8A77-2DE5F4FF886A} = {AF01F501-9B19-4357-B8A7-4EFC782BF1AF} {9CA2F05B-FB18-49AD-8520-1BCC838F748C} = {AF01F501-9B19-4357-B8A7-4EFC782BF1AF} {5C2EB20B-990C-4444-8C5F-F1D9641DE28D} = {606ADC64-90A1-4355-BEAB-6B04717F598C} {3F5CBB26-9142-4E55-8DE5-5BAF0C3EA1CE} = {20139208-1830-4DF2-A158-0C505DC05DF7} {20139208-1830-4DF2-A158-0C505DC05DF7} = {F4178F51-3BFF-46DE-841D-C01D4ABA9B0C} {F7FDDDCC-58C7-44E0-8DE3-6A94E6222D03} = {20139208-1830-4DF2-A158-0C505DC05DF7} {3781B8CA-3128-45DC-89C9-981740357630} = {20139208-1830-4DF2-A158-0C505DC05DF7} {45BE72F2-3F5B-4D13-B931-0CA62F404D4C} = {20139208-1830-4DF2-A158-0C505DC05DF7} {F0A5F968-A9E6-4B81-B5BB-DC05999467BA} = {AF01F501-9B19-4357-B8A7-4EFC782BF1AF} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {9388D93E-9AA9-40EE-A0C6-F096265079B2} EndGlobalSection EndGlobal ================================================ FILE: UAObjectOrientedInternet.sln.GhostDoc.user.dic ================================================ amqp Analyser autoflush Autogenerated awaitable codebase commserver commsvr Composable const deserializes ebook Fallback Historizing interoperable Json Kerberos Locator Mariusz Metadata middleware Modbus Modelling mpostol mqtts Multicast Mvvm nameof Namespaces opcfoundation performative Pico plugin Postol preconfigured Prerelease Readme requery reusability Schemas Sessionless stateful subtyped tempuri timestamp typeof typeparamref uasconfig unicast versioning wordpress ================================================ FILE: docs/AboutPartnershipProgram.md.html ================================================  Redirect to Object-Oriented Internet Partnership Program

Re-directing to Object-Oriented Internet Partnership Program

You are being re-directed, if nothing happens, please follow this link

================================================ FILE: docs/Projects/Networking.ProcessObserverProducer.md.html ================================================  Redirect to Machine to Sensors (M2S) connectivity based on Process-Observer

Re-directing...

You are being re-directed, if nothing happens, please follow this link

================================================ FILE: docs/README.md ================================================ # Object Oriented Internet [![](https://img.shields.io/badge/OOI-read_on_Gitbook-brightgreen.svg)](https://commsvr.gitbook.io/ooi) the ebook Object Oriented Internet contains description of this project - it is autogenerated content gathered from *.md files. [![Join the chat at https://gitter.im/mpostol/OPC-UA-OOI](https://badges.gitter.im/mpostol/OPC-UA-OOI.svg)](https://gitter.im/mpostol/OPC-UA-OOI?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) - join the project chat [![DOI](https://zenodo.org/badge/33917970.svg)](https://zenodo.org/badge/latestdoi/33917970) ## CHARTER ### What is Object Oriented Internet In this project, C\# deliverables supporting a new Machine To Machine \(M2M\) communication architecture is to be researched. The goal is to provide a generic solution for publishing and updating information in a context that can be used to describe and discover it by software applications. It is implemented based on the [OPC Unified Architecture](http://goo.gl/y4EHUn) - a new emerging industrial integration standard that fulfills the proposed architecture requirements. The [Object Oriented Internet](https://fedcsis.org/proceedings/2015/pliks/160.pdf) article published in **Proceedings of the Federated Conference on Computer Science and Information Systems** captures description of this idea. ## Content The `SemanticData` folder contains projects related to support the [OPC UA Data Processing Outside of the Server](./SemanticData/README.MD#opc-ua-data-processing-outside-the-server). Processing of the OPC UA Data Outside of the Server context is based on the OPC **UA Semantic Data** concept. This project is aimed to workout deliverables supporting Process Data handling over Internet including but not limiting to: • Data Edition – UI allowing display and edition of any custom data • Data serialization and deserialization - see white-paper: [Address Space Interchange XML](http://www.commsvr.com/InternetDSL/commserver/P_DowloadCenter/P_Publications/P-150101E-AddressSpaceInterchangeXML.pdf) • Data binding – to define how the process data relate to the real world • Data Validation - see project description [OPC UA NodeSet Validation](./SemanticData/UANodeSetValidation/README.MD) • Data Prototyping - methods and tools to design custom data types • [Data Discovery – methods and tools to find the data over the network](./DataDiscovery/README.MD) In scope there are also deliverables supporting: • Exposition of the Process Data in the context of Metadata [OPC UA Address Space Model Designer](http://www.commsvr.com/Products/OPCUA/UAModelDesigner.aspx) • Browsing \(using the sematics\) of the Metadata to selectively access requested Process Data • Modeling and representation of the Metadata - see white-paper: [OPC UA Information Model Deployment](http://www.commsvr.com/InternetDSL/commserver/P_DowloadCenter/P_Publications/20140301E_DeploymentInformationModel.pdf) • Validation of the semantics and consistency of the Metadata - see project [USNodeSetValidationUnitTestProject](./SemanticData/UANodeSetValidation/README.MD) The presented approach is a real proposal for new technology wave based on the existing Internet infrastructure because it allows vendors to provide generic off-the-shelf products tested independently for interoperability. ### Out of scope Out of scope is any work on exchanging the Process Data and Metadata over the network. The hope is that the interoperability can be gained as the result of usage of the OPC Unified Architecture international standard. ### Conclusion I hope it is a good place to prototype and converge the OPC UA communication technology with Semantic Data, Semantc Web, Internet Of Things, Plug and Play, Global Data Discovery, Selective Availability, etc. concepts. My goal is to bridge a gap between OPC UA technology and Industrial IT Application Domains. ## Read more - [![](https://img.shields.io/badge/Gitbook-Release-brightgreen.svg)](https://commsvr.gitbook.io/ooi) ebook Object Oriented Internet contains description of this project - it is autogenerated content gathered from *.md files. - The paper [**Object Oriented Internet**](https://fedcsis.org/proceedings/2015/pliks/160.pdf) has been presented on the conference [3rd International Conference on Innovative Network Systems and Applications](https://fedcsis.org/2015/inetsapp). - [WIKI of this project](https://github.com/mpostol/OPC-UA-OOI/wiki) - [My Blog: About enablers of future solutions](http://wwww.mpostol.wordpress.com/) - [About me on LinkedIn](https://pl.linkedin.com/in/mpostol) - [OPC Foundation](https://opcfoundation.org/) - [Sponsored by commsvr.com](http://www.commsvr.com/) ================================================ FILE: docs/Tiers.md.html ================================================  Redirect to Tiers

Re-directing to Tiers

You are being re-directed, if nothing happens, please follow this link

================================================ FILE: docs/_config.yml ================================================ theme: jekyll-theme-time-machine ================================================ FILE: docs/style.css ================================================ @font-face { font-family: KaTeX_AMS; src: url(/static/fonts/KaTeX_AMS-Regular.e78e28b.woff2) format("woff2"), url(/static/fonts/KaTeX_AMS-Regular.7f06b4e.woff) format("woff"), url(/static/fonts/KaTeX_AMS-Regular.aaf4eee.ttf) format("truetype"); font-weight: 400; font-style: normal } @font-face { font-family: KaTeX_Caligraphic; src: url(/static/fonts/KaTeX_Caligraphic-Bold.4ec58be.woff2) format("woff2"), url(/static/fonts/KaTeX_Caligraphic-Bold.1e802ca.woff) format("woff"), url(/static/fonts/KaTeX_Caligraphic-Bold.021dd4d.ttf) format("truetype"); font-weight: 700; font-style: normal } @font-face { font-family: KaTeX_Caligraphic; src: url(/static/fonts/KaTeX_Caligraphic-Regular.7edb53b.woff2) format("woff2"), url(/static/fonts/KaTeX_Caligraphic-Regular.d3b46c3.woff) format("woff"), url(/static/fonts/KaTeX_Caligraphic-Regular.d49f2d5.ttf) format("truetype"); font-weight: 400; font-style: normal } @font-face { font-family: KaTeX_Fraktur; src: url(/static/fonts/KaTeX_Fraktur-Bold.d5b59ec.woff2) format("woff2"), url(/static/fonts/KaTeX_Fraktur-Bold.c4c8cab.woff) format("woff"), url(/static/fonts/KaTeX_Fraktur-Bold.a31e7cb.ttf) format("truetype"); font-weight: 700; font-style: normal } @font-face { font-family: KaTeX_Fraktur; src: url(/static/fonts/KaTeX_Fraktur-Regular.32a5339.woff2) format("woff2"), url(/static/fonts/KaTeX_Fraktur-Regular.b7d9c46.woff) format("woff"), url(/static/fonts/KaTeX_Fraktur-Regular.a48dad4.ttf) format("truetype"); font-weight: 400; font-style: normal } @font-face { font-family: KaTeX_Main; src: url(/static/fonts/KaTeX_Main-Bold.8e1e01c.woff2) format("woff2"), url(/static/fonts/KaTeX_Main-Bold.22086eb.woff) format("woff"), url(/static/fonts/KaTeX_Main-Bold.9ceff51.ttf) format("truetype"); font-weight: 700; font-style: normal } @font-face { font-family: KaTeX_Main; src: url(/static/fonts/KaTeX_Main-BoldItalic.284a17f.woff2) format("woff2"), url(/static/fonts/KaTeX_Main-BoldItalic.4c57dbc.woff) format("woff"), url(/static/fonts/KaTeX_Main-BoldItalic.e8b44b9.ttf) format("truetype"); font-weight: 700; font-style: italic } @font-face { font-family: KaTeX_Main; src: url(/static/fonts/KaTeX_Main-Italic.e533d5a.woff2) format("woff2"), url(/static/fonts/KaTeX_Main-Italic.99be0e1.woff) format("woff"), url(/static/fonts/KaTeX_Main-Italic.29c8639.ttf) format("truetype"); font-weight: 400; font-style: italic } @font-face { font-family: KaTeX_Main; src: url(/static/fonts/KaTeX_Main-Regular.5c734d7.woff2) format("woff2"), url(/static/fonts/KaTeX_Main-Regular.b741441.woff) format("woff"), url(/static/fonts/KaTeX_Main-Regular.5c94aef.ttf) format("truetype"); font-weight: 400; font-style: normal } @font-face { font-family: KaTeX_Math; src: url(/static/fonts/KaTeX_Math-BoldItalic.d747bd1.woff2) format("woff2"), url(/static/fonts/KaTeX_Math-BoldItalic.b13731e.woff) format("woff"), url(/static/fonts/KaTeX_Math-BoldItalic.9a2834a.ttf) format("truetype"); font-weight: 700; font-style: italic } @font-face { font-family: KaTeX_Math; src: url(/static/fonts/KaTeX_Math-Italic.4ad08b8.woff2) format("woff2"), url(/static/fonts/KaTeX_Math-Italic.f030390.woff) format("woff"), url(/static/fonts/KaTeX_Math-Italic.291e76b.ttf) format("truetype"); font-weight: 400; font-style: italic } @font-face { font-family: KaTeX_SansSerif; src: url(/static/fonts/KaTeX_SansSerif-Bold.6e0830b.woff2) format("woff2"), url(/static/fonts/KaTeX_SansSerif-Bold.3fb4195.woff) format("woff"), url(/static/fonts/KaTeX_SansSerif-Bold.7dc027c.ttf) format("truetype"); font-weight: 700; font-style: normal } @font-face { font-family: KaTeX_SansSerif; src: url(/static/fonts/KaTeX_SansSerif-Italic.fba01c9.woff2) format("woff2"), url(/static/fonts/KaTeX_SansSerif-Italic.727a9b0.woff) format("woff"), url(/static/fonts/KaTeX_SansSerif-Italic.4059868.ttf) format("truetype"); font-weight: 400; font-style: italic } @font-face { font-family: KaTeX_SansSerif; src: url(/static/fonts/KaTeX_SansSerif-Regular.d929cd6.woff2) format("woff2"), url(/static/fonts/KaTeX_SansSerif-Regular.2555754.woff) format("woff"), url(/static/fonts/KaTeX_SansSerif-Regular.5c58d16.ttf) format("truetype"); font-weight: 400; font-style: normal } @font-face { font-family: KaTeX_Script; src: url(/static/fonts/KaTeX_Script-Regular.755e249.woff2) format("woff2"), url(/static/fonts/KaTeX_Script-Regular.d524c9a.woff) format("woff"), url(/static/fonts/KaTeX_Script-Regular.d12ea9e.ttf) format("truetype"); font-weight: 400; font-style: normal } @font-face { font-family: KaTeX_Size1; src: url(/static/fonts/KaTeX_Size1-Regular.048c39c.woff2) format("woff2"), url(/static/fonts/KaTeX_Size1-Regular.08b5f00.woff) format("woff"), url(/static/fonts/KaTeX_Size1-Regular.7342d45.ttf) format("truetype"); font-weight: 400; font-style: normal } @font-face { font-family: KaTeX_Size2; src: url(/static/fonts/KaTeX_Size2-Regular.81d6b8d.woff2) format("woff2"), url(/static/fonts/KaTeX_Size2-Regular.af24b0e.woff) format("woff"), url(/static/fonts/KaTeX_Size2-Regular.eb130dc.ttf) format("truetype"); font-weight: 400; font-style: normal } @font-face { font-family: KaTeX_Size3; src: url(/static/fonts/KaTeX_Size3-Regular.b311ca0.woff2) format("woff2"), url(/static/fonts/KaTeX_Size3-Regular.0d89264.woff) format("woff"), url(/static/fonts/KaTeX_Size3-Regular.7e02a40.ttf) format("truetype"); font-weight: 400; font-style: normal } @font-face { font-family: KaTeX_Size4; src: url(/static/fonts/KaTeX_Size4-Regular.6a3255d.woff2) format("woff2"), url(/static/fonts/KaTeX_Size4-Regular.68895bb.woff) format("woff"), url(/static/fonts/KaTeX_Size4-Regular.ad76725.ttf) format("truetype"); font-weight: 400; font-style: normal } @font-face { font-family: KaTeX_Typewriter; src: url(/static/fonts/KaTeX_Typewriter-Regular.6cc31ea.woff2) format("woff2"), url(/static/fonts/KaTeX_Typewriter-Regular.3fe216d.woff) format("woff"), url(/static/fonts/KaTeX_Typewriter-Regular.2570235.ttf) format("truetype"); font-weight: 400; font-style: normal } .katex { font: normal 1.21em KaTeX_Main, Times New Roman, serif; line-height: 1.2; text-indent: 0; text-rendering: auto } .katex * { -ms-high-contrast-adjust: none!important } .katex .katex-version:after { content: "0.10.2" } .katex .katex-mathml { position: absolute; clip: rect(1px, 1px, 1px, 1px); padding: 0; border: 0; height: 1px; width: 1px; overflow: hidden } .katex .katex-html>.newline { display: block } .katex .base { position: relative; white-space: nowrap; width: min-content } .katex .base, .katex .strut { display: inline-block } .katex .textbf { font-weight: 700 } .katex .textit { font-style: italic } .katex .textrm { font-family: KaTeX_Main } .katex .textsf { font-family: KaTeX_SansSerif } .katex .texttt { font-family: KaTeX_Typewriter } .katex .mathdefault { font-family: KaTeX_Math; font-style: italic } .katex .mathit { font-family: KaTeX_Main; font-style: italic } .katex .mathrm { font-style: normal } .katex .mathbf { font-family: KaTeX_Main; font-weight: 700 } .katex .boldsymbol { font-family: KaTeX_Math; font-weight: 700; font-style: italic } .katex .amsrm, .katex .mathbb, .katex .textbb { font-family: KaTeX_AMS } .katex .mathcal { font-family: KaTeX_Caligraphic } .katex .mathfrak, .katex .textfrak { font-family: KaTeX_Fraktur } .katex .mathtt { font-family: KaTeX_Typewriter } .katex .mathscr, .katex .textscr { font-family: KaTeX_Script } .katex .mathsf, .katex .textsf { font-family: KaTeX_SansSerif } .katex .mathboldsf, .katex .textboldsf { font-family: KaTeX_SansSerif; font-weight: 700 } .katex .mathitsf, .katex .textitsf { font-family: KaTeX_SansSerif; font-style: italic } .katex .mainrm { font-family: KaTeX_Main; font-style: normal } .katex .vlist-t { display: inline-table; table-layout: fixed } .katex .vlist-r { display: table-row } .katex .vlist { display: table-cell; vertical-align: bottom; position: relative } .katex .vlist>span { display: block; height: 0; position: relative } .katex .vlist>span>span { display: inline-block } .katex .vlist>span>.pstrut { overflow: hidden; width: 0 } .katex .vlist-t2 { margin-right: -2px } .katex .vlist-s { display: table-cell; vertical-align: bottom; font-size: 1px; width: 2px; min-width: 2px } .katex .msupsub { text-align: left } .katex .mfrac>span>span { text-align: center } .katex .mfrac .frac-line { display: inline-block; width: 100%; border-bottom-style: solid } .katex .hdashline, .katex .hline, .katex .mfrac .frac-line, .katex .overline .overline-line, .katex .rule, .katex .underline .underline-line { min-height: 1px } .katex .mspace { display: inline-block } .katex .clap, .katex .llap, .katex .rlap { width: 0; position: relative } .katex .clap>.inner, .katex .llap>.inner, .katex .rlap>.inner { position: absolute } .katex .clap>.fix, .katex .llap>.fix, .katex .rlap>.fix { display: inline-block } .katex .llap>.inner { right: 0 } .katex .clap>.inner, .katex .rlap>.inner { left: 0 } .katex .clap>.inner>span { margin-left: -50%; margin-right: 50% } .katex .rule { display: inline-block; border: 0 solid; position: relative } .katex .hline, .katex .overline .overline-line, .katex .underline .underline-line { display: inline-block; width: 100%; border-bottom-style: solid } .katex .hdashline { display: inline-block; width: 100%; border-bottom-style: dashed } .katex .sqrt>.root { margin-left: .27777778em; margin-right: -.55555556em } .katex .fontsize-ensurer, .katex .sizing { display: inline-block } .katex .fontsize-ensurer.reset-size1.size1, .katex .sizing.reset-size1.size1 { font-size: 1em } .katex .fontsize-ensurer.reset-size1.size2, .katex .sizing.reset-size1.size2 { font-size: 1.2em } .katex .fontsize-ensurer.reset-size1.size3, .katex .sizing.reset-size1.size3 { font-size: 1.4em } .katex .fontsize-ensurer.reset-size1.size4, .katex .sizing.reset-size1.size4 { font-size: 1.6em } .katex .fontsize-ensurer.reset-size1.size5, .katex .sizing.reset-size1.size5 { font-size: 1.8em } .katex .fontsize-ensurer.reset-size1.size6, .katex .sizing.reset-size1.size6 { font-size: 2em } .katex .fontsize-ensurer.reset-size1.size7, .katex .sizing.reset-size1.size7 { font-size: 2.4em } .katex .fontsize-ensurer.reset-size1.size8, .katex .sizing.reset-size1.size8 { font-size: 2.88em } .katex .fontsize-ensurer.reset-size1.size9, .katex .sizing.reset-size1.size9 { font-size: 3.456em } .katex .fontsize-ensurer.reset-size1.size10, .katex .sizing.reset-size1.size10 { font-size: 4.148em } .katex .fontsize-ensurer.reset-size1.size11, .katex .sizing.reset-size1.size11 { font-size: 4.976em } .katex .fontsize-ensurer.reset-size2.size1, .katex .sizing.reset-size2.size1 { font-size: .83333333em } .katex .fontsize-ensurer.reset-size2.size2, .katex .sizing.reset-size2.size2 { font-size: 1em } .katex .fontsize-ensurer.reset-size2.size3, .katex .sizing.reset-size2.size3 { font-size: 1.16666667em } .katex .fontsize-ensurer.reset-size2.size4, .katex .sizing.reset-size2.size4 { font-size: 1.33333333em } .katex .fontsize-ensurer.reset-size2.size5, .katex .sizing.reset-size2.size5 { font-size: 1.5em } .katex .fontsize-ensurer.reset-size2.size6, .katex .sizing.reset-size2.size6 { font-size: 1.66666667em } .katex .fontsize-ensurer.reset-size2.size7, .katex .sizing.reset-size2.size7 { font-size: 2em } .katex .fontsize-ensurer.reset-size2.size8, .katex .sizing.reset-size2.size8 { font-size: 2.4em } .katex .fontsize-ensurer.reset-size2.size9, .katex .sizing.reset-size2.size9 { font-size: 2.88em } .katex .fontsize-ensurer.reset-size2.size10, .katex .sizing.reset-size2.size10 { font-size: 3.45666667em } .katex .fontsize-ensurer.reset-size2.size11, .katex .sizing.reset-size2.size11 { font-size: 4.14666667em } .katex .fontsize-ensurer.reset-size3.size1, .katex .sizing.reset-size3.size1 { font-size: .71428571em } .katex .fontsize-ensurer.reset-size3.size2, .katex .sizing.reset-size3.size2 { font-size: .85714286em } .katex .fontsize-ensurer.reset-size3.size3, .katex .sizing.reset-size3.size3 { font-size: 1em } .katex .fontsize-ensurer.reset-size3.size4, .katex .sizing.reset-size3.size4 { font-size: 1.14285714em } .katex .fontsize-ensurer.reset-size3.size5, .katex .sizing.reset-size3.size5 { font-size: 1.28571429em } .katex .fontsize-ensurer.reset-size3.size6, .katex .sizing.reset-size3.size6 { font-size: 1.42857143em } .katex .fontsize-ensurer.reset-size3.size7, .katex .sizing.reset-size3.size7 { font-size: 1.71428571em } .katex .fontsize-ensurer.reset-size3.size8, .katex .sizing.reset-size3.size8 { font-size: 2.05714286em } .katex .fontsize-ensurer.reset-size3.size9, .katex .sizing.reset-size3.size9 { font-size: 2.46857143em } .katex .fontsize-ensurer.reset-size3.size10, .katex .sizing.reset-size3.size10 { font-size: 2.96285714em } .katex .fontsize-ensurer.reset-size3.size11, .katex .sizing.reset-size3.size11 { font-size: 3.55428571em } .katex .fontsize-ensurer.reset-size4.size1, .katex .sizing.reset-size4.size1 { font-size: .625em } .katex .fontsize-ensurer.reset-size4.size2, .katex .sizing.reset-size4.size2 { font-size: .75em } .katex .fontsize-ensurer.reset-size4.size3, .katex .sizing.reset-size4.size3 { font-size: .875em } .katex .fontsize-ensurer.reset-size4.size4, .katex .sizing.reset-size4.size4 { font-size: 1em } .katex .fontsize-ensurer.reset-size4.size5, .katex .sizing.reset-size4.size5 { font-size: 1.125em } .katex .fontsize-ensurer.reset-size4.size6, .katex .sizing.reset-size4.size6 { font-size: 1.25em } .katex .fontsize-ensurer.reset-size4.size7, .katex .sizing.reset-size4.size7 { font-size: 1.5em } .katex .fontsize-ensurer.reset-size4.size8, .katex .sizing.reset-size4.size8 { font-size: 1.8em } .katex .fontsize-ensurer.reset-size4.size9, .katex .sizing.reset-size4.size9 { font-size: 2.16em } .katex .fontsize-ensurer.reset-size4.size10, .katex .sizing.reset-size4.size10 { font-size: 2.5925em } .katex .fontsize-ensurer.reset-size4.size11, .katex .sizing.reset-size4.size11 { font-size: 3.11em } .katex .fontsize-ensurer.reset-size5.size1, .katex .sizing.reset-size5.size1 { font-size: .55555556em } .katex .fontsize-ensurer.reset-size5.size2, .katex .sizing.reset-size5.size2 { font-size: .66666667em } .katex .fontsize-ensurer.reset-size5.size3, .katex .sizing.reset-size5.size3 { font-size: .77777778em } .katex .fontsize-ensurer.reset-size5.size4, .katex .sizing.reset-size5.size4 { font-size: .88888889em } .katex .fontsize-ensurer.reset-size5.size5, .katex .sizing.reset-size5.size5 { font-size: 1em } .katex .fontsize-ensurer.reset-size5.size6, .katex .sizing.reset-size5.size6 { font-size: 1.11111111em } .katex .fontsize-ensurer.reset-size5.size7, .katex .sizing.reset-size5.size7 { font-size: 1.33333333em } .katex .fontsize-ensurer.reset-size5.size8, .katex .sizing.reset-size5.size8 { font-size: 1.6em } .katex .fontsize-ensurer.reset-size5.size9, .katex .sizing.reset-size5.size9 { font-size: 1.92em } .katex .fontsize-ensurer.reset-size5.size10, .katex .sizing.reset-size5.size10 { font-size: 2.30444444em } .katex .fontsize-ensurer.reset-size5.size11, .katex .sizing.reset-size5.size11 { font-size: 2.76444444em } .katex .fontsize-ensurer.reset-size6.size1, .katex .sizing.reset-size6.size1 { font-size: .5em } .katex .fontsize-ensurer.reset-size6.size2, .katex .sizing.reset-size6.size2 { font-size: .6em } .katex .fontsize-ensurer.reset-size6.size3, .katex .sizing.reset-size6.size3 { font-size: .7em } .katex .fontsize-ensurer.reset-size6.size4, .katex .sizing.reset-size6.size4 { font-size: .8em } .katex .fontsize-ensurer.reset-size6.size5, .katex .sizing.reset-size6.size5 { font-size: .9em } .katex .fontsize-ensurer.reset-size6.size6, .katex .sizing.reset-size6.size6 { font-size: 1em } .katex .fontsize-ensurer.reset-size6.size7, .katex .sizing.reset-size6.size7 { font-size: 1.2em } .katex .fontsize-ensurer.reset-size6.size8, .katex .sizing.reset-size6.size8 { font-size: 1.44em } .katex .fontsize-ensurer.reset-size6.size9, .katex .sizing.reset-size6.size9 { font-size: 1.728em } .katex .fontsize-ensurer.reset-size6.size10, .katex .sizing.reset-size6.size10 { font-size: 2.074em } .katex .fontsize-ensurer.reset-size6.size11, .katex .sizing.reset-size6.size11 { font-size: 2.488em } .katex .fontsize-ensurer.reset-size7.size1, .katex .sizing.reset-size7.size1 { font-size: .41666667em } .katex .fontsize-ensurer.reset-size7.size2, .katex .sizing.reset-size7.size2 { font-size: .5em } .katex .fontsize-ensurer.reset-size7.size3, .katex .sizing.reset-size7.size3 { font-size: .58333333em } .katex .fontsize-ensurer.reset-size7.size4, .katex .sizing.reset-size7.size4 { font-size: .66666667em } .katex .fontsize-ensurer.reset-size7.size5, .katex .sizing.reset-size7.size5 { font-size: .75em } .katex .fontsize-ensurer.reset-size7.size6, .katex .sizing.reset-size7.size6 { font-size: .83333333em } .katex .fontsize-ensurer.reset-size7.size7, .katex .sizing.reset-size7.size7 { font-size: 1em } .katex .fontsize-ensurer.reset-size7.size8, .katex .sizing.reset-size7.size8 { font-size: 1.2em } .katex .fontsize-ensurer.reset-size7.size9, .katex .sizing.reset-size7.size9 { font-size: 1.44em } .katex .fontsize-ensurer.reset-size7.size10, .katex .sizing.reset-size7.size10 { font-size: 1.72833333em } .katex .fontsize-ensurer.reset-size7.size11, .katex .sizing.reset-size7.size11 { font-size: 2.07333333em } .katex .fontsize-ensurer.reset-size8.size1, .katex .sizing.reset-size8.size1 { font-size: .34722222em } .katex .fontsize-ensurer.reset-size8.size2, .katex .sizing.reset-size8.size2 { font-size: .41666667em } .katex .fontsize-ensurer.reset-size8.size3, .katex .sizing.reset-size8.size3 { font-size: .48611111em } .katex .fontsize-ensurer.reset-size8.size4, .katex .sizing.reset-size8.size4 { font-size: .55555556em } .katex .fontsize-ensurer.reset-size8.size5, .katex .sizing.reset-size8.size5 { font-size: .625em } .katex .fontsize-ensurer.reset-size8.size6, .katex .sizing.reset-size8.size6 { font-size: .69444444em } .katex .fontsize-ensurer.reset-size8.size7, .katex .sizing.reset-size8.size7 { font-size: .83333333em } .katex .fontsize-ensurer.reset-size8.size8, .katex .sizing.reset-size8.size8 { font-size: 1em } .katex .fontsize-ensurer.reset-size8.size9, .katex .sizing.reset-size8.size9 { font-size: 1.2em } .katex .fontsize-ensurer.reset-size8.size10, .katex .sizing.reset-size8.size10 { font-size: 1.44027778em } .katex .fontsize-ensurer.reset-size8.size11, .katex .sizing.reset-size8.size11 { font-size: 1.72777778em } .katex .fontsize-ensurer.reset-size9.size1, .katex .sizing.reset-size9.size1 { font-size: .28935185em } .katex .fontsize-ensurer.reset-size9.size2, .katex .sizing.reset-size9.size2 { font-size: .34722222em } .katex .fontsize-ensurer.reset-size9.size3, .katex .sizing.reset-size9.size3 { font-size: .40509259em } .katex .fontsize-ensurer.reset-size9.size4, .katex .sizing.reset-size9.size4 { font-size: .46296296em } .katex .fontsize-ensurer.reset-size9.size5, .katex .sizing.reset-size9.size5 { font-size: .52083333em } .katex .fontsize-ensurer.reset-size9.size6, .katex .sizing.reset-size9.size6 { font-size: .5787037em } .katex .fontsize-ensurer.reset-size9.size7, .katex .sizing.reset-size9.size7 { font-size: .69444444em } .katex .fontsize-ensurer.reset-size9.size8, .katex .sizing.reset-size9.size8 { font-size: .83333333em } .katex .fontsize-ensurer.reset-size9.size9, .katex .sizing.reset-size9.size9 { font-size: 1em } .katex .fontsize-ensurer.reset-size9.size10, .katex .sizing.reset-size9.size10 { font-size: 1.20023148em } .katex .fontsize-ensurer.reset-size9.size11, .katex .sizing.reset-size9.size11 { font-size: 1.43981481em } .katex .fontsize-ensurer.reset-size10.size1, .katex .sizing.reset-size10.size1 { font-size: .24108004em } .katex .fontsize-ensurer.reset-size10.size2, .katex .sizing.reset-size10.size2 { font-size: .28929605em } .katex .fontsize-ensurer.reset-size10.size3, .katex .sizing.reset-size10.size3 { font-size: .33751205em } .katex .fontsize-ensurer.reset-size10.size4, .katex .sizing.reset-size10.size4 { font-size: .38572806em } .katex .fontsize-ensurer.reset-size10.size5, .katex .sizing.reset-size10.size5 { font-size: .43394407em } .katex .fontsize-ensurer.reset-size10.size6, .katex .sizing.reset-size10.size6 { font-size: .48216008em } .katex .fontsize-ensurer.reset-size10.size7, .katex .sizing.reset-size10.size7 { font-size: .57859209em } .katex .fontsize-ensurer.reset-size10.size8, .katex .sizing.reset-size10.size8 { font-size: .69431051em } .katex .fontsize-ensurer.reset-size10.size9, .katex .sizing.reset-size10.size9 { font-size: .83317261em } .katex .fontsize-ensurer.reset-size10.size10, .katex .sizing.reset-size10.size10 { font-size: 1em } .katex .fontsize-ensurer.reset-size10.size11, .katex .sizing.reset-size10.size11 { font-size: 1.19961427em } .katex .fontsize-ensurer.reset-size11.size1, .katex .sizing.reset-size11.size1 { font-size: .20096463em } .katex .fontsize-ensurer.reset-size11.size2, .katex .sizing.reset-size11.size2 { font-size: .24115756em } .katex .fontsize-ensurer.reset-size11.size3, .katex .sizing.reset-size11.size3 { font-size: .28135048em } .katex .fontsize-ensurer.reset-size11.size4, .katex .sizing.reset-size11.size4 { font-size: .32154341em } .katex .fontsize-ensurer.reset-size11.size5, .katex .sizing.reset-size11.size5 { font-size: .36173633em } .katex .fontsize-ensurer.reset-size11.size6, .katex .sizing.reset-size11.size6 { font-size: .40192926em } .katex .fontsize-ensurer.reset-size11.size7, .katex .sizing.reset-size11.size7 { font-size: .48231511em } .katex .fontsize-ensurer.reset-size11.size8, .katex .sizing.reset-size11.size8 { font-size: .57877814em } .katex .fontsize-ensurer.reset-size11.size9, .katex .sizing.reset-size11.size9 { font-size: .69453376em } .katex .fontsize-ensurer.reset-size11.size10, .katex .sizing.reset-size11.size10 { font-size: .83360129em } .katex .fontsize-ensurer.reset-size11.size11, .katex .sizing.reset-size11.size11 { font-size: 1em } .katex .delimsizing.size1 { font-family: KaTeX_Size1 } .katex .delimsizing.size2 { font-family: KaTeX_Size2 } .katex .delimsizing.size3 { font-family: KaTeX_Size3 } .katex .delimsizing.size4 { font-family: KaTeX_Size4 } .katex .delimsizing.mult .delim-size1>span { font-family: KaTeX_Size1 } .katex .delimsizing.mult .delim-size4>span { font-family: KaTeX_Size4 } .katex .nulldelimiter { display: inline-block; width: .12em } .katex .delimcenter, .katex .op-symbol { position: relative } .katex .op-symbol.small-op { font-family: KaTeX_Size1 } .katex .op-symbol.large-op { font-family: KaTeX_Size2 } .katex .accent>.vlist-t, .katex .op-limits>.vlist-t { text-align: center } .katex .accent .accent-body { position: relative } .katex .accent .accent-body:not(.accent-full) { width: 0 } .katex .overlay { display: block } .katex .mtable .vertical-separator { display: inline-block; margin: 0 -.025em; border-right: .05em solid; min-width: 1px } .katex .mtable .vs-dashed { border-right: .05em dashed } .katex .mtable .arraycolsep { display: inline-block } .katex .mtable .col-align-c>.vlist-t { text-align: center } .katex .mtable .col-align-l>.vlist-t { text-align: left } .katex .mtable .col-align-r>.vlist-t { text-align: right } .katex .svg-align { text-align: left } .katex svg { display: block; position: absolute; width: 100%; height: inherit; fill: currentColor; stroke: currentColor; fill-rule: nonzero; fill-opacity: 1; stroke-width: 1; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 4; stroke-dasharray: none; stroke-dashoffset: 0; stroke-opacity: 1 } .katex svg path { stroke: none } .katex img { border-style: none; min-width: 0; min-height: 0; max-width: none; max-height: none } .katex .stretchy { width: 100%; display: block; position: relative; overflow: hidden } .katex .stretchy:after, .katex .stretchy:before { content: "" } .katex .hide-tail { width: 100%; position: relative; overflow: hidden } .katex .halfarrow-left { position: absolute; left: 0; width: 50.2%; overflow: hidden } .katex .halfarrow-right { position: absolute; right: 0; width: 50.2%; overflow: hidden } .katex .brace-left { position: absolute; left: 0; width: 25.1%; overflow: hidden } .katex .brace-center { position: absolute; left: 25%; width: 50%; overflow: hidden } .katex .brace-right { position: absolute; right: 0; width: 25.1%; overflow: hidden } .katex .x-arrow-pad { padding: 0 .5em } .katex .mover, .katex .munder, .katex .x-arrow { text-align: center } .katex .boxpad { padding: 0 .3em } .katex .fbox, .katex .fcolorbox { box-sizing: border-box; border: .04em solid } .katex .cancel-pad { padding: 0 .2em } .katex .cancel-lap { margin-left: -.2em; margin-right: -.2em } .katex .sout { border-bottom-style: solid; border-bottom-width: .08em } .katex-display { display: block; margin: 1em 0; text-align: center } .katex-display>.katex { display: block; text-align: center; white-space: nowrap } .katex-display>.katex>.katex-html { display: block; position: relative } .katex-display>.katex>.katex-html>.tag { position: absolute; right: 0 } .katex-display.leqno>.katex>.katex-html>.tag { left: 0; right: auto } .katex-display.fleqn>.katex { text-align: left } @font-face { font-family: Lato; font-style: normal; font-weight: 400; src: url(/static/fonts/lato-normal.27bd77b.woff) format("woff") } @font-face { font-family: Lato; font-style: italic; font-weight: 400; src: url(/static/fonts/lato-normal-italic.f28f2d6.woff) format("woff") } @font-face { font-family: Lato; font-style: normal; font-weight: 600; src: url(/static/fonts/lato-black.f80bda6.woff) format("woff") } @font-face { font-family: Lato; font-style: italic; font-weight: 600; src: url(/static/fonts/lato-black-italic.798eafd.woff) format("woff") } @font-face { font-family: Roboto Mono; font-style: normal; font-weight: 400; src: url(/static/fonts/RobotoMono-Regular.0b6a547.woff) format("woff") } @font-face { font-family: Roboto Mono; font-style: normal; font-weight: 600; src: url(/static/fonts/RobotoMono-Bold.819f3b2.woff) format("woff") } .prism *, .token.pre.gfm * { font-weight: inherit!important } .prism .token.cdata, .prism .token.comment, .prism .token.doctype, .prism .token.prolog, .token.pre.gfm .token.cdata, .token.pre.gfm .token.comment, .token.pre.gfm .token.doctype, .token.pre.gfm .token.prolog { color: #708090 } .prism .token.punctuation, .token.pre.gfm .token.punctuation { color: #999 } .prism .namespace, .token.pre.gfm .namespace { opacity: .7 } .prism .token.boolean, .prism .token.constant, .prism .token.deleted, .prism .token.number, .prism .token.property, .prism .token.symbol, .prism .token.tag, .token.pre.gfm .token.boolean, .token.pre.gfm .token.constant, .token.pre.gfm .token.deleted, .token.pre.gfm .token.number, .token.pre.gfm .token.property, .token.pre.gfm .token.symbol, .token.pre.gfm .token.tag { color: #905 } .prism .token.attr-name, .prism .token.builtin, .prism .token.char, .prism .token.inserted, .prism .token.selector, .prism .token.string, .token.pre.gfm .token.attr-name, .token.pre.gfm .token.builtin, .token.pre.gfm .token.char, .token.pre.gfm .token.inserted, .token.pre.gfm .token.selector, .token.pre.gfm .token.string { color: #690 } .prism .language-css .token.string, .prism .style .token.string, .prism .token.entity, .prism .token.operator, .prism .token.url, .token.pre.gfm .language-css .token.string, .token.pre.gfm .style .token.string, .token.pre.gfm .token.entity, .token.pre.gfm .token.operator, .token.pre.gfm .token.url { color: #a67f59 } .prism .token.atrule, .prism .token.attr-value, .prism .token.keyword, .token.pre.gfm .token.atrule, .token.pre.gfm .token.attr-value, .token.pre.gfm .token.keyword { color: #07a } .prism .token.function, .token.pre.gfm .token.function { color: #dd4a68 } .prism .token.important, .prism .token.regex, .prism .token.variable, .token.pre.gfm .token.important, .token.pre.gfm .token.regex, .token.pre.gfm .token.variable { color: #e90 } .prism .token.bold, .prism .token.important, .token.pre.gfm .token.bold, .token.pre.gfm .token.important { font-weight: 500 } .prism .token.italic, .token.pre.gfm .token.italic { font-style: italic } .mermaid { font-size: 16px } .mermaid svg { color: rgba(0, 0, 0, .75); width: 100%; max-width: 100% } .app--dark .mermaid svg { color: hsla(0, 0%, 100%, .75) } .mermaid svg * { font-family: Lato, Helvetica Neue, Helvetica, sans-serif } .mermaid .mermaid .label { color: #333 } .mermaid .node circle, .mermaid .node ellipse, .mermaid .node polygon, .mermaid .node rect { fill: #eee; stroke: #999; stroke-width: 1px } .mermaid .node.clickable { cursor: pointer } .mermaid .arrowheadPath { fill: #333 } .mermaid .edgePath .path { stroke: #666; stroke-width: 1.5px } .mermaid .edgeLabel { background-color: #fff } .mermaid .cluster rect { fill: #eaf2fb!important; stroke: #26a!important; stroke-width: 1px!important } .mermaid .cluster text { fill: #333 } .mermaid div.mermaidTooltip { position: absolute; text-align: center; max-width: 200px; padding: 2px; font-family: trebuchet ms, verdana, arial; font-size: 12px; background: #eaf2fb; border: 1px solid #26a; border-radius: 2px; pointer-events: none; z-index: 100 } .mermaid .actor { stroke: #999; fill: #eee } .mermaid text.actor { fill: #333; stroke: none } .mermaid .actor-line { stroke: #666 } .mermaid .messageLine0 { marker-end: "url(#arrowhead)" } .mermaid .messageLine0, .mermaid .messageLine1 { stroke-width: 1.5; stroke-dasharray: "2 2"; stroke: #333 } .mermaid #arrowhead { fill: #333 } .mermaid #crosshead path { fill: #333!important; stroke: #333!important } .mermaid .messageText { fill: #333; stroke: none } .mermaid .labelBox { stroke: #999; fill: #eee } .mermaid .labelText, .mermaid .loopText { fill: #fff; stroke: none } .mermaid .loopLine { stroke-width: 2; stroke-dasharray: "2 2"; marker-end: "url(#arrowhead)"; stroke: #999 } .mermaid .note { stroke: #770; fill: #ffa } .mermaid .noteText { fill: #000; stroke: none; font-family: trebuchet ms, verdana, arial; font-size: 14px } .mermaid .section { stroke: none; opacity: .2 } .mermaid .section0, .mermaid .section2 { fill: #80b3e6 } .mermaid .section1, .mermaid .section3 { fill: #fff; opacity: .2 } .mermaid .sectionTitle0, .mermaid .sectionTitle1, .mermaid .sectionTitle2, .mermaid .sectionTitle3 { fill: #333 } .mermaid .sectionTitle { text-anchor: start; font-size: 11px } .mermaid .grid .tick { stroke: #e6e6e6; opacity: .3; shape-rendering: crispEdges } .mermaid .grid path { stroke-width: 0 } .mermaid .today { fill: none; stroke: #d42; stroke-width: 2px } .mermaid .task { stroke-width: 2 } .mermaid .taskText { text-anchor: middle; font-size: 11px } .mermaid .taskTextOutsideRight { fill: #333; text-anchor: start; font-size: 11px } .mermaid .taskTextOutsideLeft { fill: #333; text-anchor: end; font-size: 11px } .mermaid .taskText0, .mermaid .taskText1, .mermaid .taskText2, .mermaid .taskText3 { fill: #fff } .mermaid .task0, .mermaid .task1, .mermaid .task2, .mermaid .task3 { fill: #26a; stroke: #1a4d80 } .mermaid .taskTextOutside0, .mermaid .taskTextOutside1, .mermaid .taskTextOutside2, .mermaid .taskTextOutside3 { fill: #333 } .mermaid .active0, .mermaid .active1, .mermaid .active2, .mermaid .active3 { fill: #eee; stroke: #1a4d80 } .mermaid .activeText0, .mermaid .activeText1, .mermaid .activeText2, .mermaid .activeText3 { fill: #333!important } .mermaid .done0, .mermaid .done1, .mermaid .done2, .mermaid .done3 { stroke: #666; fill: #bbb; stroke-width: 2 } .mermaid .doneText0, .mermaid .doneText1, .mermaid .doneText2, .mermaid .doneText3 { fill: #333!important } .mermaid .crit0, .mermaid .crit1, .mermaid .crit2, .mermaid .crit3 { stroke: #b1361b; fill: #d42; stroke-width: 2 } .mermaid .activeCrit0, .mermaid .activeCrit1, .mermaid .activeCrit2, .mermaid .activeCrit3 { stroke: #b1361b; fill: #eee; stroke-width: 2 } .mermaid .doneCrit0, .mermaid .doneCrit1, .mermaid .doneCrit2, .mermaid .doneCrit3 { stroke: #b1361b; fill: #bbb; stroke-width: 2; cursor: pointer; shape-rendering: crispEdges } .mermaid .activeCritText0, .mermaid .activeCritText1, .mermaid .activeCritText2, .mermaid .activeCritText3, .mermaid .doneCritText0, .mermaid .doneCritText1, .mermaid .doneCritText2, .mermaid .doneCritText3 { fill: #333!important } .mermaid .titleText { text-anchor: middle; font-size: 18px; fill: #333 } .mermaid g.classGroup text { fill: #999; stroke: none; font-family: trebuchet ms, verdana, arial; font-size: 10px } .mermaid g.classGroup rect { fill: #eee; stroke: #999 } .mermaid g.classGroup line { stroke: #999; stroke-width: 1 } .mermaid .classLabel .box { stroke: none; stroke-width: 0; fill: #eee; opacity: .5 } .mermaid .classLabel .label { fill: #999; font-size: 10px } .mermaid .relation { stroke: #999; stroke-width: 1; fill: none } .mermaid #compositionEnd, .mermaid #compositionStart { fill: #999; stroke: #999; stroke-width: 1 } .mermaid #aggregationEnd, .mermaid #aggregationStart { fill: #eee; stroke: #999; stroke-width: 1 } .mermaid #dependencyEnd, .mermaid #dependencyStart, .mermaid #extensionEnd, .mermaid #extensionStart { fill: #999; stroke: #999; stroke-width: 1 } .mermaid .branch-label, .mermaid .commit-id, .mermaid .commit-msg { fill: #d3d3d3; color: #d3d3d3 } .app--dark .mermaid .label { color: #323d47 } .app--dark .mermaid .node circle, .app--dark .mermaid .node ellipse, .app--dark .mermaid .node polygon, .app--dark .mermaid .node rect { fill: #bdd5ea; stroke: purple; stroke-width: 1px } .app--dark .mermaid .node.clickable { cursor: pointer } .app--dark .mermaid .arrowheadPath { fill: #d3d3d3 } .app--dark .mermaid .edgePath .path { stroke: #d3d3d3; stroke-width: 1.5px } .app--dark .mermaid .edgeLabel { background-color: #e8e8e8 } .app--dark .mermaid .cluster rect { fill: #6d6d65!important; stroke: hsla(0, 0%, 100%, .25)!important; stroke-width: 1px!important } .app--dark .mermaid .cluster text { fill: #f9fffe } .app--dark .mermaid div.mermaidTooltip { position: absolute; text-align: center; max-width: 200px; padding: 2px; font-family: trebuchet ms, verdana, arial; font-size: 12px; background: #6d6d65; border: 1px solid hsla(0, 0%, 100%, .25); border-radius: 2px; pointer-events: none; z-index: 100 } .app--dark .mermaid .actor { stroke: #81b1db; fill: #bdd5ea } .app--dark .mermaid text.actor { fill: #000; stroke: none } .app--dark .mermaid .actor-line { stroke: #d3d3d3 } .app--dark .mermaid .messageLine0 { marker-end: "url(#arrowhead)" } .app--dark .mermaid .messageLine0, .app--dark .mermaid .messageLine1 { stroke-width: 1.5; stroke-dasharray: "2 2"; stroke: #d3d3d3 } .app--dark .mermaid #arrowhead { fill: #d3d3d3 } .app--dark .mermaid #crosshead path { fill: #d3d3d3!important; stroke: #d3d3d3!important } .app--dark .mermaid .messageText { fill: #d3d3d3; stroke: none } .app--dark .mermaid .labelBox { stroke: #81b1db; fill: #bdd5ea } .app--dark .mermaid .labelText, .app--dark .mermaid .loopText { fill: #d3d3d3; stroke: none } .app--dark .mermaid .loopLine { stroke-width: 2; stroke-dasharray: "2 2"; marker-end: "url(#arrowhead)"; stroke: #81b1db } .app--dark .mermaid .note { stroke: hsla(0, 0%, 100%, .25); fill: #fff5ad } .app--dark .mermaid .noteText { fill: #000; stroke: none; font-family: trebuchet ms, verdana, arial; font-size: 14px } .app--dark .mermaid .section { stroke: none; opacity: .2 } .app--dark .mermaid .section0 { fill: hsla(0, 0%, 100%, .3) } .app--dark .mermaid .section2 { fill: #eae8b9 } .app--dark .mermaid .section1, .app--dark .mermaid .section3 { fill: #fff; opacity: .2 } .app--dark .mermaid .sectionTitle0, .app--dark .mermaid .sectionTitle1, .app--dark .mermaid .sectionTitle2, .app--dark .mermaid .sectionTitle3 { fill: #f9fffe } .app--dark .mermaid .sectionTitle { text-anchor: start; font-size: 11px } .app--dark .mermaid .grid .tick { stroke: #d3d3d3; opacity: .3; shape-rendering: crispEdges } .app--dark .mermaid .grid path { stroke-width: 0 } .app--dark .mermaid .today { fill: none; stroke: #db5757; stroke-width: 2px } .app--dark .mermaid .task { stroke-width: 2 } .app--dark .mermaid .taskText { text-anchor: middle; font-size: 11px } .app--dark .mermaid .taskTextOutsideRight { fill: #323d47; text-anchor: start; font-size: 11px } .app--dark .mermaid .taskTextOutsideLeft { fill: #323d47; text-anchor: end; font-size: 11px } .app--dark .mermaid .taskText0, .app--dark .mermaid .taskText1, .app--dark .mermaid .taskText2, .app--dark .mermaid .taskText3 { fill: #323d47 } .app--dark .mermaid .task0, .app--dark .mermaid .task1, .app--dark .mermaid .task2, .app--dark .mermaid .task3 { fill: #bdd5ea; stroke: hsla(0, 0%, 100%, .5) } .app--dark .mermaid .taskTextOutside0, .app--dark .mermaid .taskTextOutside1, .app--dark .mermaid .taskTextOutside2, .app--dark .mermaid .taskTextOutside3 { fill: #d3d3d3 } .app--dark .mermaid .active0, .app--dark .mermaid .active1, .app--dark .mermaid .active2, .app--dark .mermaid .active3 { fill: #81b1db; stroke: hsla(0, 0%, 100%, .5) } .app--dark .mermaid .activeText0, .app--dark .mermaid .activeText1, .app--dark .mermaid .activeText2, .app--dark .mermaid .activeText3 { fill: #323d47!important } .app--dark .mermaid .done0, .app--dark .mermaid .done1, .app--dark .mermaid .done2, .app--dark .mermaid .done3 { stroke: grey; fill: #d3d3d3; stroke-width: 2 } .app--dark .mermaid .doneText0, .app--dark .mermaid .doneText1, .app--dark .mermaid .doneText2, .app--dark .mermaid .doneText3 { fill: #323d47!important } .app--dark .mermaid .crit0, .app--dark .mermaid .crit1, .app--dark .mermaid .crit2, .app--dark .mermaid .crit3 { stroke: #e83737; fill: #e83737; stroke-width: 2 } .app--dark .mermaid .activeCrit0, .app--dark .mermaid .activeCrit1, .app--dark .mermaid .activeCrit2, .app--dark .mermaid .activeCrit3 { stroke: #e83737; fill: #81b1db; stroke-width: 2 } .app--dark .mermaid .doneCrit0, .app--dark .mermaid .doneCrit1, .app--dark .mermaid .doneCrit2, .app--dark .mermaid .doneCrit3 { stroke: #e83737; fill: #d3d3d3; stroke-width: 2; cursor: pointer; shape-rendering: crispEdges } .app--dark .mermaid .activeCritText0, .app--dark .mermaid .activeCritText1, .app--dark .mermaid .activeCritText2, .app--dark .mermaid .activeCritText3, .app--dark .mermaid .doneCritText0, .app--dark .mermaid .doneCritText1, .app--dark .mermaid .doneCritText2, .app--dark .mermaid .doneCritText3 { fill: #323d47!important } .app--dark .mermaid .titleText { text-anchor: middle; font-size: 18px; fill: #323d47 } .app--dark .mermaid g.classGroup text { fill: purple; stroke: none; font-family: trebuchet ms, verdana, arial; font-size: 10px } .app--dark .mermaid g.classGroup rect { fill: #bdd5ea; stroke: purple } .app--dark .mermaid g.classGroup line { stroke: purple; stroke-width: 1 } .app--dark .mermaid .classLabel .box { stroke: none; stroke-width: 0; fill: #bdd5ea; opacity: .5 } .app--dark .mermaid .classLabel .label { fill: purple; font-size: 10px } .app--dark .mermaid .relation { stroke: purple; stroke-width: 1; fill: none } .app--dark .mermaid #compositionEnd, .app--dark .mermaid #compositionStart { fill: purple; stroke: purple; stroke-width: 1 } .app--dark .mermaid #aggregationEnd, .app--dark .mermaid #aggregationStart { fill: #bdd5ea; stroke: purple; stroke-width: 1 } .app--dark .mermaid #dependencyEnd, .app--dark .mermaid #dependencyStart, .app--dark .mermaid #extensionEnd, .app--dark .mermaid #extensionStart { fill: purple; stroke: purple; stroke-width: 1 } .app--dark .mermaid .branch-label, .app--dark .mermaid .commit-id, .app--dark .mermaid .commit-msg { fill: #d3d3d3; color: #d3d3d3 } /*! normalize-scss | MIT/GPLv2 License | bit.ly/normalize-scss */ html { line-height: 1.15; -ms-text-size-adjust: 100%; -webkit-text-size-adjust: 100% } body { margin: 0 } article, aside, footer, header, nav, section { display: block } h1 { font-size: 2em; margin: .67em 0 } figcaption, figure { display: block } figure { margin: 1em 40px } hr { box-sizing: content-box; height: 0; overflow: visible } main { display: block } pre { font-family: monospace, monospace; font-size: 1em } a { background-color: transparent; -webkit-text-decoration-skip: objects } abbr[title] { border-bottom: none; text-decoration: underline; text-decoration: underline dotted } b, strong { font-weight: inherit; font-weight: bolder } code, kbd, samp { font-family: monospace, monospace; font-size: 1em } dfn { font-style: italic } mark { background-color: #ff0; color: #000 } small { font-size: 80% } sub, sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline } sub { bottom: -.25em } sup { top: -.5em } audio, video { display: inline-block } audio:not([controls]) { display: none; height: 0 } img { border-style: none } svg:not(:root) { overflow: hidden } button, input, optgroup, select, textarea { font-family: sans-serif; font-size: 100%; line-height: 1.15; margin: 0 } button { overflow: visible } button, select { text-transform: none } [type=reset], [type=submit], button, html [type=button] { -webkit-appearance: button } [type=button]::-moz-focus-inner, [type=reset]::-moz-focus-inner, [type=submit]::-moz-focus-inner, button::-moz-focus-inner { border-style: none; padding: 0 } [type=button]:-moz-focusring, [type=reset]:-moz-focusring, [type=submit]:-moz-focusring, button:-moz-focusring { outline: 1px dotted ButtonText } input { overflow: visible } [type=checkbox], [type=radio] { box-sizing: border-box; padding: 0 } [type=number]::-webkit-inner-spin-button, [type=number]::-webkit-outer-spin-button { height: auto } [type=search] { -webkit-appearance: textfield; outline-offset: -2px } [type=search]::-webkit-search-cancel-button, [type=search]::-webkit-search-decoration { -webkit-appearance: none } ::-webkit-file-upload-button { -webkit-appearance: button; font: inherit } fieldset { padding: .35em .75em .625em } legend { box-sizing: border-box; display: table; max-width: 100%; padding: 0; color: inherit; white-space: normal } progress { display: inline-block; vertical-align: baseline } textarea { overflow: auto } details { display: block } summary { display: list-item } menu { display: block } canvas { display: inline-block } [hidden], template { display: none } body, html { color: rgba(0, 0, 0, .75); font-size: 16px; font-family: Lato, Helvetica Neue, Helvetica, sans-serif; font-variant-ligatures: common-ligatures; line-height: 1.67; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale } .app--dark .layout__panel--editor, .app--dark .layout__panel--preview { color: hsla(0, 0%, 100%, .75) } blockquote, dl, ol, p, pre, ul { margin: 1.2em 0 } h1, h2, h3, h4, h5, h6 { margin: 1.8em 0; line-height: 1.33 } h1:after, h2:after { content: ""; display: block; position: relative; top: .33em; border-bottom: 1px solid hsla(0, 0%, 50%, .33) } ol ol, ol ul, ul ol, ul ul { margin: 0 } dt { font-weight: 700 } a { color: #0c93e4; text-decoration: underline; text-decoration-skip: ink } a:focus, a:hover { text-decoration: none } code, pre, samp { font-family: Roboto Mono, Lucida Sans Typewriter, Lucida Console, monaco, Courrier, monospace; font-size: .85em } code *, pre *, samp * { font-size: inherit } blockquote { color: rgba(0, 0, 0, .5); padding-left: 1.5em; border-left: 5px solid rgba(0, 0, 0, .1) } .app--dark .layout__panel--editor blockquote, .app--dark .layout__panel--preview blockquote { color: hsla(0, 0%, 100%, .4); border-left-color: hsla(0, 0%, 100%, .1) } code { background-color: rgba(0, 0, 0, .05); border-radius: 3px; padding: 2px 4px } hr { border: 0; border-top: 1px solid hsla(0, 0%, 50%, .33); margin: 2em 0 } pre>code { background-color: rgba(0, 0, 0, .05); display: block; padding: .5em; -webkit-text-size-adjust: none; overflow-x: auto; white-space: pre } .toc ul { list-style-type: none; padding-left: 20px } table { background-color: transparent; border-collapse: collapse; border-spacing: 0 } td, th { border-right: 1px solid #dcdcdc; padding: 8px 12px } td:last-child, th:last-child { border-right: 0 } td { border-top: 1px solid #dcdcdc } mark { background-color: #f8f840 } kbd { font-family: Lato, Helvetica Neue, Helvetica, sans-serif; background-color: #fff; border: 1px solid rgba(63, 63, 63, .25); border-radius: 3px; box-shadow: 0 1px 0 rgba(63, 63, 63, .25); color: #333; display: inline-block; font-size: .8em; margin: 0 .1em; padding: .1em .6em; white-space: nowrap } abbr[title] { border-bottom: 1px dotted #777; cursor: help } img { max-width: 100% } .task-list-item { list-style-type: none } .task-list-item-checkbox { margin: 0 .2em 0 -1.3em } .footnote { font-size: .8em; position: relative; top: -.25em; vertical-align: top } .page-break-after { page-break-after: always } .abc-notation-block { overflow-x: auto!important } .stackedit__html { margin-bottom: 180px; margin-left: auto; margin-right: auto; padding-left: 30px; padding-right: 30px; max-width: 750px } .stackedit__toc ul { padding: 0 } .stackedit__toc ul a { margin: .5rem 0; padding: .5rem 1rem } .stackedit__toc ul ul { color: #888; font-size: .9em } .stackedit__toc ul ul a { margin: 0; padding: .1rem 1rem } .stackedit__toc li { display: block } .stackedit__toc a { display: block; color: inherit; text-decoration: none } .stackedit__toc a:active, .stackedit__toc a:focus, .stackedit__toc a:hover { background-color: rgba(0, 0, 0, .075); border-radius: 3px } .stackedit__left { position: fixed; display: none; width: 250px; height: 100%; top: 0; left: 0; overflow-x: hidden; overflow-y: auto; -webkit-overflow-scrolling: touch; -ms-overflow-style: none } @media (min-width:1060px) { .stackedit__left { display: block } } .stackedit__right { position: absolute; right: 0; top: 0; left: 0 } @media (min-width:1060px) { .stackedit__right { left: 250px } } .stackedit--pdf blockquote { border-left-color: #ececec } .stackedit--pdf .stackedit__html { padding-left: 0; padding-right: 0; max-width: none } ================================================ FILE: gitignoreTemplate.txt ================================================ ## Ignore Visual Studio temporary files, build results, and ## files generated by popular Visual Studio add-ons. # User-specific files *.suo *.user *.userosscache *.sln.docstates # User-specific files (MonoDevelop/Xamarin Studio) *.userprefs # Build results [Dd]ebug/ [Dd]ebugPublic/ [Rr]elease/ [Rr]eleases/ x64/ x86/ bld/ [Bb]in/ [Oo]bj/ # Visual Studio 2015 cache/options directory .vs/ # Uncomment if you have tasks that create the project's static files in wwwroot #wwwroot/ # MSTest test Results [Tt]est[Rr]esult*/ [Bb]uild[Ll]og.* # NUNIT *.VisualState.xml TestResult.xml # Build Results of an ATL Project [Dd]ebugPS/ [Rr]eleasePS/ dlldata.c # DNX project.lock.json artifacts/ *_i.c *_p.c *_i.h *.ilk *.meta *.obj *.pch *.pdb *.pgc *.pgd *.rsp *.sbr *.tlb *.tli *.tlh *.tmp *.tmp_proj *.log *.vspscc *.vssscc .builds *.pidb *.svclog *.scc # Chutzpah Test files _Chutzpah* # Visual C++ cache files ipch/ *.aps *.ncb *.opendb *.opensdf *.sdf *.cachefile # Visual Studio profiler *.psess *.vsp *.vspx *.sap # TFS 2012 Local Workspace $tf/ # Guidance Automation Toolkit *.gpState # ReSharper is a .NET coding add-in _ReSharper*/ *.[Rr]e[Ss]harper *.DotSettings.user # JustCode is a .NET coding add-in .JustCode # TeamCity is a build add-in _TeamCity* # DotCover is a Code Coverage Tool *.dotCover # NCrunch _NCrunch_* .*crunch*.local.xml nCrunchTemp_* # MightyMoose *.mm.* AutoTest.Net/ # Web workbench (sass) .sass-cache/ # Installshield output folder [Ee]xpress/ # DocProject is a documentation generator add-in DocProject/buildhelp/ DocProject/Help/*.HxT DocProject/Help/*.HxC DocProject/Help/*.hhc DocProject/Help/*.hhk DocProject/Help/*.hhp DocProject/Help/Html2 DocProject/Help/html # Click-Once directory publish/ # Publish Web Output *.[Pp]ublish.xml *.azurePubxml # TODO: Comment the next line if you want to checkin your web deploy settings # but database connection strings (with potential passwords) will be unencrypted *.pubxml *.publishproj # NuGet Packages *.nupkg # The packages folder can be ignored because of Package Restore **/packages/* # except build/, which is used as an MSBuild target. !**/packages/build/ # Uncomment if necessary however generally it will be regenerated when needed #!**/packages/repositories.config # NuGet v3's project.json files produces more ignoreable files *.nuget.props *.nuget.targets # Microsoft Azure Build Output csx/ *.build.csdef # Microsoft Azure Emulator ecf/ rcf/ # Microsoft Azure ApplicationInsights config file ApplicationInsights.config # Windows Store app package directory AppPackages/ BundleArtifacts/ # Visual Studio cache files # files ending in .cache can be ignored *.[Cc]ache # but keep track of directories ending in .cache !*.[Cc]ache/ # Others ClientBin/ ~$* *~ *.dbmdl *.dbproj.schemaview *.pfx *.publishsettings node_modules/ orleans.codegen.cs # RIA/Silverlight projects Generated_Code/ # Backup & report files from converting an old project file # to a newer Visual Studio version. Backup files are not needed, # because we have git ;-) _UpgradeReport_Files/ Backup*/ UpgradeLog*.XML UpgradeLog*.htm # SQL Server files *.mdf *.ldf # Business Intelligence projects *.rdl.data *.bim.layout *.bim_*.settings # Microsoft Fakes FakesAssemblies/ # GhostDoc plugin setting file *.GhostDoc.xml # Node.js Tools for Visual Studio .ntvs_analysis.dat # Visual Studio 6 build log *.plg # Visual Studio 6 workspace options file *.opt # Visual Studio LightSwitch build output **/*.HTMLClient/GeneratedArtifacts **/*.DesktopClient/GeneratedArtifacts **/*.DesktopClient/ModelManifest.xml **/*.Server/GeneratedArtifacts **/*.Server/ModelManifest.xml _Pvt_Extensions # Paket dependency manager .paket/paket.exe # FAKE - F# Make .fake/ ================================================ FILE: license.md ================================================ The MIT License (MIT) Copyright (c) 2015 Mariusz Postol Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.